更新时间:2025-09-25 GMT+08:00
分享

使用标签控制对华为云资源的访问

您可以使用标签以控制对支持标签的华为云资源的访问。因为标签可以附加到资源,您可以创建身份策略以对附加标签的资源进行访问控制。

要实现基于标签的访问控制,您需要在身份策略的条件元素中提供标签信息。然后,您可以创建一个根据资源的标签允许或拒绝访问资源的身份策略。在该身份策略中您可以使用标签条件键以控制任何以下内容的访问:

  • 资源:请使用g:ResourceTag/key-name条件键根据附加到资源的标签确定是否允许访问该资源。
  • 请求:仅当用户在调用API时传入了标签(例如为资源添加标签的API,创建资源同时支持传入标签的API等),请使用g:RequestTag/key-name条件键指定在资源中添加、更改、删除的标签。
  • 主体:根据附加到发出请求的主体(当前支持IAM用户和信任委托)的标签,控制允许该主体执行哪些操作。请使用g:PrincipalTag/key-name条件键指定具体条件键的主体的访问控制。
  • 授权过程:使用g:TagKeys条件键来控制是否可以在请求中使用特定的标签键。用户在调用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"
				]
			}
		}
	}]
}

相关文档