使用 Amazon Organizations 的标签进行基于属性的访问控制 - Amazon Organizations
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon Organizations 的标签进行基于属性的访问控制

基于属性的访问控制允许您使用管理员管理的属性(例如附加到Amazon资源和Amazon身份的标签)来控制对这些资源的访问。例如,您可以指定当用户和资源对某个标签具有相同的值时,用户可以访问该资源。

Amazon Organizations 可标记的资源包括Amazon Web Services 账户、组织的根、组织部门(OU)或策略。当您将标签附加到 Organizations 资源时,您可以使用这些标签来控制谁可以访问这些资源。您可以将 Condition 添加元素添加到您的 Amazon Identity and Access Management(IAM)权限策略语句,在允许执行操作之前检查某些标签键和值是否存在。这可让您创建一个 IAM 策略,该策略有效地说明“仅允许用户管理那些具有键 X 和值 Y 的标签的 OU”或“仅允许用户管理那些使用与用户附加的标签键 Z 具有相同值的键 Z 标记的 OU”。

您可以根据 IAM 策略中的不同类型的标签引用进行 Condition 测试。

有关在策略中使用标签进行访问控制的更多信息,请参阅使用资源标签控制对 IAM 用户和角色的访问。有关 IAM 权限策略的完整语法,请参阅 IAM JSON 策略参考

检查附加到请求中指定资源的标签

当您使用Amazon Web Services Management Console、Amazon Command Line Interface(Amazon CLI)或其中一个 Amazon SDK 发出请求时,您可以指定要通过该请求访问的资源。无论您是试图列出给定类型的可用资源、读取资源还是写入、修改或更新资源,都可以将要访问的资源指定为请求中的参数。此类请求由您附加到用户和角色的 IAM 权限策略控制。在这些策略中,您可以比较附加到请求资源的标签,并根据这些标签的键和值选择允许或拒绝访问。

若要检查附加到资源的标签,请引用 Condition 元素中的标签,方法是在标签键名称前面加上以下字符串:aws:ResourceTag/

例如,以下示例策略允许用户或角色执行任何 Amazon Organizations 操作,除非该资源有一个带有键 department 和值 security 的标签。如果该键和值存在,则策略明确拒绝 UntagResource 操作。

{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "organizations:*", "Resource" : "*" }, { "Effect" : "Deny", "Action" : "organizations:UntagResource", "Resource" : "*", "Condition" : { "StringEquals" : { "aws:ResourceTag/department" : "security" } } } ] }

有关如何使用此元素的更多信息,请参阅《IAM 用户指南》中的控制对资源的访问aws:ResourceTag

检查附加到发出请求的 IAM 用户或角色的标签

您可以根据附加到发出请求的人员(委托人)的 IAM 用户或角色的标签,控制允许该人员执行哪些操作。若要执行此操作,请使用 aws:PrincipalTag/key-name 条件键指定必须附加到调用用户或角色的标签和值。

以下示例说明如何仅当指定的标签(cost-center)在调用操作的委托人和操作正在访问的资源上具有相同的值时才允许操作。在此示例中,调用用户只有在实例被标记为与用户相同的 cost-center 时,才能启动或停止 Amazon EC2 实例。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "ec2:startInstances", "ec2:stopInstances" ], "Resource": "*", "Condition": {"StringEquals": {"ec2:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}"}} } }

有关如何使用此元素的更多信息,请参阅《IAM 用户指南》中的控制 IAM 委托人进行的访问aws:PrincipalTag

检查请求中作为参数包含的标签

通过多个操作,您可以将标签指定为请求的一部分。例如,当您创建资源时,您可以指定附加到新资源的标签。您可以指定使用 aws:TagKeysCondition 元素,根据请求中是否包含特定标签键或一组密钥,来允许或拒绝操作。此比较运算符不关心标签包含的值。它只检查是否存在具有指定键的标签。

要检查标签键或键列表,请使用以下语法指定 Condition 元素:

"aws:TagKeys": [ "tag-key-1", "tag-key-2", ... , "tag-key-n" ]

您可以使用 ForAllValues: 作为比较运算符的开头,以确保请求中的所有键必须与策略中指定的其中一个键匹配。例如,以下示例策略仅在请求中存在的所有三个标签是此策略中的三个标签的子集时,才允许任何 Organizations 操作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "organizations:*", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "department", "costcenter", "manager" ] } } } }

或者,您可以使用 ForAnyValue: 作为比较运算符的开头,以确保请求中至少有一个键必须与策略中指定的其中一个键匹配。例如,以下策略仅当请求中存在至少一个指定标签键时,才允许 Organizations 操作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "organizations:*", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": [ "stage", "region", "domain" ] } } } }

通过多个操作,您可以在请求中指定标签。例如,当您创建资源时,您可以指定附加到新资源的标签。您可以将策略中的标签键值对与请求包含的键值对进行比较。若要执行此操作,请引用 Condition 元素中的标签,方法是在标签键名称前面加上以下字符串:aws:RequestTag/key-name,然后指定必须存在的标签值。

例如,以下示例策略拒绝用户或角色创建 Amazon Web Services 账户 的任何请求,其中请求缺少 costcenter 标签,或者为该标签提供了除 12,或者 3 以外的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "organizations:CreateAccount", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/costcenter": "true" } } }, { "Effect": "Deny", "Action": "organizations:CreateAccount", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "aws:RequestTag/costcenter": [ "1", "2", "3" ] } } } ] }

有关如何使用这些元素的更多信息,请参阅《IAM 用户指南》中的 aws:TagKeysaws:RequestTag