为ABAC创建权限策略
概述
在您已为资源添加标签,并在IAM身份中心启用并配置访问控制属性后,您还需要在权限集的自定义身份策略中添加基于属性的访问控制规则。您可以通过PrincipalTag条件键在权限集中使用访问控制属性来创建访问控制规则,即在策略语句的Condition元素中写入"g:ResourceTag/tag-key": "${g:PrincipalTag/tag-key}"。
- g:ResourceTag/tag-key:全局级条件键,用于指定资源的标签键。您为资源添加标签后,需在此条件键中输入资源的标签键,也就是将tag-key替换为具体的资源标签键。
- g:PrincipalTag/tag-key:全局级条件键,用于指定访问控制属性的属性键。您启用并添加访问控制属性后,需在此条件键中输入访问控制属性的属性键,也就是将tag-key替换为具体的属性键。
上述访问控制规则配置完成后,权限策略会根据您指定的资源标签键和属性键,对资源标签的值和属性值进行匹配校验,只有资源标签的值和属性值匹配成功的用户才会获得此权限集定义的资源访问权限。
策略示例
创建权限集的具体操作请参见:创建权限集。此处仅举例说明如何在权限集的自定义身份策略中添加基于属性的访问控制规则,以及策略示例。
例如您创建权限集时选择“OrganizationsFullAccessPolicy”系统策略,表示与此权限集关联的用户拥有组织服务的所有权限,但是您不希望某些用户拥有删除指定组织OU的权限,您可以在权限集的自定义身份策略中写入如下策略内容,表示拒绝用户进行删除指定组织OU的操作。
此自定义身份策略对哪些用户和资源生效由条件键控制,示例中的条件键表示资源的标签键为“orgtag1”,访问控制属性的属性键为“User_A”,最终策略评估时会将标签“orgtag1”的值与属性“User_A”的属性值进行匹配,例如您将“orgtag1”标签的值设置为“test1”,访问控制属性“User_A”的属性值选择“${user:name}”,那么只有用户名为“test1”的用户才会获得此策略定义的权限。
对于较为复杂的授权场景,如多用户与多资源授权,可参考如下说明:
- 如果您需要通过此策略授予某一用户多个资源的权限,那么您只需要为多个资源绑定相同的标签即可。
- 如果您需要通过此策略控制多个用户对某一资源的访问权限,那么您可以为此资源绑定多个标签,并在权限集的自定义身份策略中写入多个条件键,分别对应多个用户的属性即可。
- 如果您需要通过此策略控制多个用户多个资源的访问权限,您可以给多个资源添加标签键相同但标签值不同的标签,以此对应多个用户的属性。
{ "Version": "5.0", "Statement": [ { "Effect": "Deny", "Action": [ "organizations:ous:delete" ], "Condition": { "StringEquals": { "g:ResourceTag/orgtag1": "${g:PrincipalTag/User_A}" } } } ] }