使用标签控制对IAM用户的资源访问权限
基于属性的访问控制(ABAC)是一种授权策略,该策略基于属性来定义权限。标签即是一种属性,您可以将标签绑定到IAM资源(IAM主体中的IAM用户与信任委托作为客体被其他主体访问时也是一种IAM资源)或者其他的华为云资源上。您可以定义以标签作为条件键的身份策略,这样在对华为云资源访问时可以通过对身份策略进行较少的改动来实现业务的增长。ABAC策略比传统的RBAC策略更加灵活,因为后者需要您列出每个单独的资源。有关ABAC的更多信息及其相对于传统RBAC策略的优势,请参阅基于属性的ABAC权限管理。
本教程将向您说明如何创建一个具有主体标签(Principal Tag)的IAM用户,并创建一个身份策略绑定给该IAM用户,这条身份策略的作用是限制该IAM用户只能访问具有与该主体标签相匹配的资源标签(Resource Tag)的资源。
操作说明
您是一名经验丰富的IAM管理员,您对IAM用户、信任委托和身份策略的创建、管理都非常熟悉。您希望确保您公司工程师团队和运维团队成员能够只访问其所需要的资源,并且后续会有更多类型的成员加入,您需要一个随着公司发展而扩展的身份策略。您选择使用主体标签和资源标签来编写该身份策略。支持资源标签的云服务列表见支持身份策略与信任委托的云服务列表中的“ABAC(基于标签的鉴权)”列。
您可以为您的工程师团队成员和运维团队成员分别绑定以下标签:
- employee-type=engineer (工程师团队成员)
- employee-type=operations(运维团队成员)
在本章节中,您将标记每个IAM用户、每个信任委托,并编写身份策略,将身份策略绑定到IAM用户上以达到前面所述的目的。编写的身份策略允许IAM用户对其可访问的资源进行创建、删除、更新、读取操作。
步骤一:给IAM用户添加标签
- 管理员进入统一身份认证服务新版控制台,在左侧导航栏选择“用户”页签。
- 单击工程师团队IAM用户employee-user的名称,进入用户详情页,选择“标签”页签。
- 单击左上角的“添加标签”。
- 在弹窗中设置标签的键为employee-type和值为engineer。
步骤二:为资源添加标签
以信任委托为例(当以信任委托会话发起访问时,信任委托是IAM主体,此时它的标签是主体标签;当以IAM主体访问信任委托时,信任委托是IAM资源,此时它的标签是资源标签。)
- 管理员进入统一身份认证服务新版控制台,在左侧导航栏选择“委托”页签。
- 单击工程师团队IAM用户employee-user可访问的信任委托的名称,进入信任委托engineer-access详情页,选择“标签”页签。
- 单击左上角的“添加标签”。
- 在弹窗中设置标签的键为employee-type和值为engineer。 单击“确定”。
- 返回信任委托列表,单击运维团队operations可访问的信任委托的名称,进入信任委托operations-access详情页,选择“标签”页签。
- 在弹窗中设置标签的键为employee-type和值为operations。 单击“确定”。
步骤三:创建自定义身份策略
- 管理员进入统一身份认证服务新版控制台,在左侧导航栏选择“身份策略”页签。
- 单击右上角“创建自定义身份策略”。
- 输入身份策略名称为“engineer-access-policy”。
- 策略配置方式选择“JSON视图”。配置以下身份策略,表示当主体标签和所访问的资源标签相等时允许访问。
{ "Version": "5.0", "Statement": [{ "Effect": "Allow", "Action": [ "iam:agencies:getV5" ], "Condition": { "StringEquals": { "g:ResourceTag/employee-type": [ "${g:PrincipalTag/employee-type}" ] } } }] }
- 单击“确定”。完成身份策略创建。
步骤四:将身份策略附加至授权主体
- 管理员进入统一身份认证服务新版控制台,在左侧导航栏选择“身份策略”页签。
- 勾选步骤三中创建的身份策略,单击身份策略列表上方的“附加”。
- 勾选步骤一添加标签的工程师团队IAM用户employee-user,单击“确定”。
步骤五:验证结果
- 除了为工程师团队IAM用户employee-user附加步骤三中创建的身份策略,还需要为其附加一个能够列举所有委托的身份策略(用于IAM控制台查看委托和信任委托的列表,如果仅进行API访问则不需要附加该身份策略)。
- 工程师团队IAM用户employee-user分别查看信任委托engineer-access和信任委托operations-access。
后续操作
如果该公司后续新增成员,则不需要修改已经编写好的身份策略,只需要给新增的成员和这些成员可访问的资源添加相应的标签即可。