

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

# 使用标签进行基于属性的访问控制 Amazon Organizations
<a name="orgs_tagging_abac"></a>

*[基于属性的访问控制](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)*允许您使用管理员管理的属性（例如附加到 Amazon 资源和 Amazon 身份的[标签](https://docs.amazonaws.cn/ARG/latest/userguide/tag-editor.html)）来控制对这些资源的访问权限。例如，您可以指定当用户和资源对某个标签具有相同的值时，用户可以访问该资源。

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

您可以根据 IAM 策略中的不同类型的标签引用进行 `Condition` 测试。
+ [检查附加到请求中指定资源的标签](#abac-resource)
+ [检查附加到发出请求的 IAM 用户或角色的标签](#abac-prin)
+ [检查请求中作为参数包含的标签](#abac-request)

有关在策略中使用标签进行访问控制的更多信息，请参阅[使用资源标签控制对 IAM 用户和角色的访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_iam-tags.html)。有关 IAM 权限策略的完整语法，请参阅 [IAM JSON 策略参考](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies.html)

## 检查附加到请求中指定资源的标签
<a name="abac-resource"></a>

当您使用 Amazon Web Services 管理控制台、 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:](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) [的访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_iam-tags.html#access_iam-tags_control-resources)。

## 检查附加到发出请求的 IAM 用户或角色的标签
<a name="abac-prin"></a>

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

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

------
#### [ 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 委托人进行的访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_iam-tags.html#access_iam-tags_control-principals)和 [https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag)。

## 检查请求中作为参数包含的标签
<a name="abac-request"></a>

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

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

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

您可以使用 [https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions) 作为比较运算符的开头，以确保请求中的所有键必须与策略中指定的其中一个键匹配。例如，以下示例策略仅在请求中存在的所有三个标签是此策略中的***三个标签的子集***时，才允许任何 Organizations 操作。

------
#### [ JSON ]

****  

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

------

或者，您可以使用 [https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions) 作为比较运算符的开头，以确保请求中至少有一个键必须与策略中指定的其中一个键匹配。例如，以下策略仅当请求中存在***至少一个***指定标签键时，才允许 Organizations 操作。

------
#### [ JSON ]

****  

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

------

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

例如，以下示例策略拒绝用户或角色提出的创建 Amazon Web Services 账户 请求缺少标签或为该`costcenter`标签提供的值不是`1``2`、或的任何请求`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](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) 和 aws:。