
# 使用标签控制对华为云资源的访问
您可以使用标签以控制对支持标签的华为云资源的访问。因为标签可以附加到资源，您可以创建身份策略以对附加标签的资源进行访问控制。
要实现基于标签的访问控制，您需要在身份策略的条件元素中提供标签信息。然后，您可以创建一个根据资源的标签允许或拒绝访问资源的身份策略。在该身份策略中您可以使用标签条件键以控制任何以下内容的访问：
- **[资源]** ：请使用[g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html#iam_01_1287__li142673559387)条件键根据附加到资源的标签确定是否允许访问该资源。
- **[请求]** ：仅当用户在调用API时传入了标签（例如为资源添加标签的API，创建资源同时支持传入标签的API等），请使用[g:RequestTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html#iam_01_1287__li10342114416529)条件键指定在资源中添加、更改、删除的标签。
- **[主体](https://support.huaweicloud.com/usermanual-iam5/iam_01_1230.html#iam_01_1230__section854865863519)** ：根据附加到发出请求的主体（当前支持IAM用户和信任委托）的标签，控制允许该主体执行哪些操作。请使用[g:PrincipalTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html#iam_01_1287__li31791345184414)条件键指定具体条件键的主体的访问控制。
- **[授权过程]** ：使用[g:TagKeys](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html#iam_01_1287__li1622556154718)条件键来控制是否可以在请求中使用特定的标签键。用户在调用API时传入了标签（例如为资源添加标签的API，创建资源同时支持传入标签的API等），请求中会携带该属性，即所有标签的key组成的列表。
 #### 控制对华为云资源的访问
您可以根据华为云上资源附加的标签，使用IAM身份策略中的条件键控制对该资源的访问。您可以使用全局条件键g:ResourceTag/key-name执行该操作。
此示例的效果只有ecs所属的用户才有权限启动或停止该实例，例如，您有一个用户名为ecsAdministrator的IAM子用户，这个用户创建的ecs实例会附加Owner=ecsAdministrator的标签标识。
您可以将以下策略附加到IAM用户。如果名为ecsAdministrator的用户尝试启动ecs实例，则实例必须标记为Owner=ecsAdministrator或owner=ecsAdministrator。否则他将被拒绝访问。标签键Owner同时匹配owner和Owner，因为条件键名称不区分大小写。
```
{
  "Version": "5.0",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:cloudServers:start",
        "ecs:cloudServers:stop"
      ],
      "Resource": [
        "ecs:*:*:instance:*"
      ],
      "Condition": {
        "StringEquals": {
          "g:ResourceTag/Owner": [
            "${g:UserName}"
          ]
        }
      }
    }
  ]
}
```
 #### 根据标签键值对控制访问
您可以在IAM身份策略中使用条件键来控制可在请求中传递哪些标签键值对（需要该请求对应的华为云资源支持标签功能）。
此示例说明在给ecs实例附加标签时，只有在标签包含Owner键和ecsAdministrator、ecsDevelop值时才能成功附加标签。
```
{
  "Version": "5.0",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:cloudServers:batchCreateServerTags"
      ],
      "Condition": {
        "StringEquals": {
          "g:RequestTag/Owner": [
            "ecsAdministrator",
            "ecsDeveLop"
          ]
        }
      }
    }
  ]
}
```
 #### 根据标签键控制访问
您可以在IAM身份策略中使用条件键来控制是否可以在请求中使用特定的条件键。
此示例说明执行ecs实例附加标签的操作时，只有标签包含标签键Owner或Share才能附加标签到ecs服务器上。
```
{
"Version": "5.0",
"Statement": [{
"Effect": "Allow",
"Action": [
"ecs:cloudServers:batchCreateServerTags"
],
"Condition": {
"ForAnyValue:StringEquals": {
"g:TagKeys": [
"Owner",
"Share"
]
}
}
}]
}
```
