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

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

基于属性的访问控制,包含标签和Amazon Organizations

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

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

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

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

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

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

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

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

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

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

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

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

以下示例说明如何仅在指定标签 (cost-center)在调用操作的委托人和操作正在访问的资源上具有相同的值。在此示例中,调用用户只有在实例被标记为cost-center值作为用户。

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

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

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

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

要检查标签键或键列表,请指定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": "*", "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" ] } } } ] }

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