

# 使用标签控制对 IAM 用户和角色的访问以及他们进行的访问
<a name="access_iam-tags"></a>

可以使用以下部分中的信息控制谁可以访问您的 IAM 用户和角色以及您的用户和角色可以访问哪些资源。有关控制对其他 AWS 资源（包括其他 IAM 资源）的访问的更多一般信息和示例，请参阅 [AWS Identity and Access Management 资源的标签](id_tags.md)。

**注意**  
有关标签键和标签键值区分大小写的详细信息，请参阅 [Case sensitivity](id_tags.md#case-sensitivity)。

可以将标签附加到 IAM *资源*，在*请求*中传递标签，或者将标签附加到发出请求的*主体*。IAM 用户或角色可以同时是资源和主体。例如，您可以编写一个策略以允许用户列出用户的组。只有在发出请求的用户（主体）具有与他们尝试查看的用户相同的 `project=blue` 标签时，才允许执行该操作。在该示例中，用户可以查看任何用户（包括他们自己）的组成员资格，只要他们处理的是同一个项目。

要基于标签控制访问，您需要在策略的[条件元素](reference_policies_elements_condition.md)中提供标签信息。在创建 IAM policy 时，您可以使用 IAM 标签和关联的标签条件键控制对任何以下内容的访问：
+ **[Resource](access_tags.md#access_tags_control-resources)**（资源）- 根据标签控制对用户或角色资源的访问。为此，请使用 **aws:ResourceTag/{{key-name}}** 条件键指定必须将哪个标签键值对附加到资源。有关更多信息，请参阅 [控制对 AWS 资源的访问](access_tags.md#access_tags_control-resources)。
+ **[请求](access_tags.md#access_tags_control-requests)** – 控制可以在 IAM 请求中传递什么标签。为此，请使用 **aws:RequestTag/{{key-name}}** 条件键来指定可在 IAM 用户或角色中添加、更改或删除的标签。对于 IAM 资源和其他 AWS 资源，将按相同的方式使用该键。有关更多信息，请参阅 [在 AWS 请求期间控制访问](access_tags.md#access_tags_control-requests)。
+ **[主体](#access_iam-tags_control-principals)** - 根据附加到发出请求的人员（主体）的 IAM 用户或角色的标签，控制允许该人员执行哪些操作。为此，请使用 **aws:PrincipalTag/{{key-name}}** 条件键指定在允许请求之前必须将哪些标签附加到 IAM 用户或角色。
+ **[授权过程的任何部分](#access_iam-tags_control-tag-keys)** – 使用 **aws:TagKeys** 条件键来控制是否可以在请求中或通过主体使用特定的标签键。在这种情况下，键值无关紧要。对于 IAM 和其他 AWS 服务，该键的行为是类似的。不过，在 IAM 中标记用户时，这还会控制主体是否可以向任何服务发出请求。有关更多信息，请参阅 [根据标签键控制访问](access_tags.md#access_tags_control-tag-keys)。

您可以使用可视化编辑器或 JSON 创建 IAM policy，也可以导入现有的托管策略以创建该策略。有关更多信息，请参阅 [使用客户管理型策略定义自定义 IAM 权限](access_policies_create.md)。

**注意**  
您也可以在代入 IAM 角色或联合用户身份时传递[会话标签](id_session-tags.md)。这仅对会话的长度有效。

## 控制 IAM 主体进行的访问
<a name="access_iam-tags_control-principals"></a>

您可以根据附加到主体身份的标签来控制允许该人员执行哪些操作。

此示例显示了您可以如何创建基于身份的策略，以允许此账户中的任何用户查看任何用户（包括他们自己）的组成员资格，只要他们处理的是同一个项目。只有在用户的资源标签和主体的标签具有相同的标签键 `project` 值时，才允许执行该操作。要使用此策略，请将示例策略中的{{斜体占位符文本}}替换为您自己的信息。然后，按照[创建策略](access_policies_create.md)或[编辑策略](access_policies_manage-edit.md)中的说明操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:ListGroupsForUser",
            "Resource": "arn:aws:iam::111222333444:user/*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/{{project}}": "${aws:PrincipalTag/{{project}}}"}
            }
        }]
}
```

------

## 根据标签键控制访问
<a name="access_iam-tags_control-tag-keys"></a>

您可以在 IAM policy 中使用标签来控制是否可以在请求中或通过主体使用特定的标签键。

此示例说明如何创建基于身份的策略，以允许仅从用户删除带有 `temporary` 密钥的标签。要使用此策略，请将示例策略中的{{斜体占位符文本}}替换为您自己的信息。然后，按照[创建策略](access_policies_create.md)或[编辑策略](access_policies_manage-edit.md)中的说明操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": "iam:UntagUser",
        "Resource": "*",
        "Condition": {"ForAllValues:StringEquals": {"aws:TagKeys": ["{{temporary}}"]}}
    }]
}
```

------