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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

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

Amazon Organizations 可标记的资源包括 Amazon Web Services 账户组织的根源、组织单位 (OUs) 或政策。当您将标签附加到 Organizations 资源时,您可以使用这些标签来控制谁可以访问这些资源。为此,您可以在 Amazon Identity and Access Management (IAM) 权限策略声明中添加Condition元素,以检查是否存在某些标签键和值,然后再允许执行操作。这使您能够创建一个 IAM 策略,该策略实际上是 “仅允许用户管理带有密钥X和值的标签的用户Y” 或 “仅允许用户管理 OUs 那些使用与用户附加的标签密钥Z具有相同值的密钥标记的内容” Z。 OUs

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

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

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

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

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

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

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

有关如何使用此元素的更多信息,请参阅 I A M 用户指南ResourceTag中的控制资源和 aws: 的访问权限

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

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

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

JSON
{ "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 操作。

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

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

JSON
{ "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

JSON
{ "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" ] } } } ] }

有关如何使用这些元素的更多信息,请参阅 I A M 用户指南RequestTag中的 a ws: TagKeys 和 aws:。