在阿里云服务网格ASM中,您可以通过配置零信任安全授权策略,实现对进入ASM的HTTP流量的授权管理。本文介绍如何为HTTP流量设置授权策略。
前提条件
- 已创建命名空间。具体操作,请参见管理命名空间。
- 已部署Bookinfo应用到ASM实例的集群中。具体操作,请参见部署应用到ASM实例。
- 已定义Istio资源。具体操作,请参见使用Istio资源实现版本流量路由。
配置授权策略
本文以配置一个基础的拒绝策略,拒绝对工作负载的所有请求为例,逐步授予对工作负载的其他访问权限。
步骤一:配置空白授权策略
- 登录ASM控制台。
- 在左侧导航栏,选择服务网格 > 网格管理。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择零信任安全 > 授权策略,然后在右侧页面单击使用YAML创建。
- 在创建页面,选择命名空间为default,选择任意场景模板,将以下YAML模版粘贴到YAML区域。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {}
- 单击创建。创建完成后,在授权策略页面,可以看到allow-nothing授权策略。
- 访问 http://{您的ASM网关地址}/productpage。如下图所示,页面返回
RBAC: access denied
,表示没有权限访问。
步骤二:配置Productpage服务的授权策略
配置可以访问Productpage自身服务的授权策略,具体操作步骤如下。
- 登录ASM控制台。
- 在左侧导航栏,选择服务网格 > 网格管理。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择零信任安全 > 授权策略。
- 任选以下方式创建授权策略。
- 方式一:使用YAML创建授权策略。
- 在授权策略页面,单击使用YAML创建。
- 在创建页面,选择命名空间为default,选择任意场景模板,将以下YAML模版粘贴到YAML区域。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: "productpage-viewer" namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - to: - operation: methods: ["GET"]
- 单击创建。
- 方式二:不使用YAML创建授权策略。
- 在授权策略页面,单击创建。
- 在创建页面,配置如下参数。
参数 说明 命名空间 选择default命名空间。 名称 设置名称为productpage-viewer。 策略 选择RULES。 动作 选择ALLOW。 工作负载标签选择 打开工作负载标签选择开关,单击新增匹配标签,设置名称为app,值为productpage。 请求操作 打开请求操作开关,单击增加请求操作到列表中,单击增加请求操作,设置请求操作域为methods,值为GET。 - 单击创建。
创建完成后,在授权策略页面,可以看到productpage-viewer授权策略。 - 方式一:使用YAML创建授权策略。
- 访问 http://{您的ASM网关地址}/productpage。如下图所示,由于上一步设置了允许GET请求访问,所以能够正常访问Productpage页面,但无法访问Detail和Reviews服务。
步骤三:配置Details服务的授权策略
通过配置Details服务的授权策略,允许接收来自Productpage的serviceAccount
发出的请求。
- 获取Productpage的
serviceAccount
。- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载 > 无状态。
- 在无状态页面,单击Productpage应用。
- 在Productpage页面右侧,单击查看YAML,获取
serviceAccount
。如下图所示,serviceAccount
参数值为bookinfo-productpage
。
- 创建授权策略。
- 登录ASM控制台。
- 在左侧导航栏,选择服务网格 > 网格管理。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择零信任安全 > 授权策略。
- 任选以下方式创建授权策略。
- 方式一:使用YAML创建授权策略。
- 在授权策略页面,单击使用YAML创建。
- 在创建页面,配置如下参数。
选择命名空间为default,选择任意场景模板,将如下YAML模版粘贴到YAML区域。
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: details-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage #bookinfo-productpage为serviceAccount的参数值,由上一步获取。 selector: matchLabels: app: details
- 单击创建。
- 方式二:不使用YAML创建授权策略。
- 在授权策略页面,单击创建。
- 在创建页面,配置如下参数。
参数 说明 命名空间 选择default命名空间。 名称 设置名称为details-viewer。 策略 选择RULES。 动作 选择ALLOW。 工作负载标签选择 打开工作负载标签选择开关,单击新增匹配标签,设置名称为app,值为details。 请求来源 打开请求来源开关,单击增加请求来源到列表中,单击增加请求来源,设置请求来源域为principals,值为cluster.local/ns/default/sa/bookinfo-productpage。 请求操作 打开请求操作开关,单击增加请求操作到列表中,单击增加请求操作,设置请求操作域为methods,值为GET。 - 单击创建。
创建完成后,在授权策略页面,可以看到details-viewer授权策略。 - 方式一:使用YAML创建授权策略。
- 访问 http://{您的ASM网关地址}/productpage。如下图所示,左侧的Details服务可以正常访问,但无法访问右侧的Review服务。
步骤四:配置Reviews服务的授权策略
- 登录ASM控制台。
- 在左侧导航栏,选择服务网格 > 网格管理。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏选择零信任安全 > 授权策略。
- 任选以下方式创建授权策略。
- 方式一:使用YAML创建授权策略。
- 在授权策略页面,单击使用YAML创建。
- 在创建页面,配置如下参数。
选择命名空间为default,选择任意场景模板,将以下YAML模版粘贴到YAML区域。
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: reviews-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage selector: matchLabels: app: reviews
- 单击创建。
- 方式二:不使用YAML创建授权策略。
- 在授权策略页面,单击创建。
- 在创建页面,配置如下参数。
参数 说明 命名空间 选择default命名空间。 名称 设置名称为reviews-viewer。 策略 选择RULES。 动作 选择ALLOW。 工作负载标签选择 打开工作负载标签选择开关,单击新增匹配标签,设置名称为app,值为reviews。 请求来源 打开请求来源开关,单击增加请求来源到列表中,单击增加请求来源,设置请求来源域为principals,值为cluster.local/ns/default/sa/bookinfo-productpage。 请求操作 打开请求操作开关,单击增加请求操作到列表中,单击增加请求操作,设置请求操作域为methods,值为GET。 - 单击创建。
创建完成后,在授权策略页面,可以看到reviews-viewer授权策略。 - 方式一:使用YAML创建授权策略。
- 访问 http://{您的ASM网关地址}/productpage。如下图所示,左侧的Detail服务以及右侧Reviews服务均可正常访问。