如果您希望使用特定标签控制资源的权限,可以通过运维编排服务(OOS)的自定义模板,批量为同一地域下需要控制权限的资源绑定特定标签。
背景信息
云服务器ECS和其他云服务的诸多资源支持绑定标签。如需了解哪些云服务支持绑定标签,请参见支持标签的云服务。
本文以ECS实例为例,创建一个OOS自定义模板,该模板可以为同一地域下的ECS实例批量绑定标签owner:zhangsan
。
步骤一:创建RAM角色并授权
为OOS创建RAM角色OOSServiceRole,并为RAM角色授权。
- 使用阿里云账号登录RAM控制台。
- 创建自定义策略OOSAutoBindTag。
具体操作,请参见创建自定义权限策略。
说明 自定义策略OOSAutoBindTag以ECS实例为例,权限设置为ecs:DescribeInstances
,您可以根据业务需求设置您需要的权限。例如:如果您需要为安全组批量绑定标签,将ecs:DescribeInstances
替换为ecs:DescribeSecurityGroups
。
本步骤使用的策略如下所示:
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeInstances",
"ecs:TagResources"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
- 创建RAM角色OOSServiceRole。
- 为RAM角色OOSServiceRole授权自定义策略OOSAutoBindTag。
- 为RAM角色OOSServiceRole授权系统策略AliyunOOSFullAccess。
步骤二:为资源批量绑定标签
- 登录OOS控制台。
- 在左侧导航栏,单击我的模板。
- 在顶部菜单栏左上角处,选择地域。
- 创建自定义模板。
- 单击创建模板。
- 在基本信息区域,输入模板名称(例如:OOSAutoBindTag)。
- 单击YAML页签,编写模板代码,然后单击创建模板。
模板代码示例:
FormatVersion: OOS-2019-06-01
Description: Tag Resources Without The Specified Tags
Parameters:
tags:
Type: Json
Description:
en: The tags to select ECS instances.
zh-cn: 已绑定ECS实例的标签。
AssociationProperty: Tags
regionId:
Type: String
Description:
en: The region to select ECS instances.
zh-cn: 批量绑定标签的ECS实例所在地域。
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS使用的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: OOSServiceRole
Tasks:
- Name: getInstancesByTags
Action: 'ACS::ExecuteAPI'
Description: ''
Properties:
Service: ECS
API: DescribeInstances
Parameters:
Tags: '{{ tags }}'
RegionId: '{{ regionId }}'
Outputs:
InstanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
- Name: getAllInstances
Action: 'ACS::ExecuteAPI'
Description: ''
Properties:
Service: ECS
API: DescribeInstances
Parameters:
RegionId: '{{regionId}}'
Outputs:
InstanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
- Name: TagResources_ECS_Instances
Action: 'ACS::ExecuteAPI'
Description:
zh-cn: 为未绑定指定标签的ECS实例绑定标签。
en: 'tag ecs instances, which are without the specified tags.'
Properties:
Service: ECS
API: TagResources
Parameters:
Tags: '{{ tags }}'
RegionId: '{{regionId}}'
ResourceType: Instance
ResourceIds:
- '{{ACS::TaskLoopItem}}'
Loop:
MaxErrors: 100%
Concurrency: 20
Items:
'Fn::Difference':
- '{{ getAllInstances.InstanceIds }}'
- '{{ getInstancesByTags.InstanceIds }}'
Outputs:
InstanceIds:
Type: List
Value:
'Fn::Difference':
- '{{ getAllInstances.InstanceIds }}'
- '{{ getInstancesByTags.InstanceIds }}'
参数说明:
- tags:已绑定ECS实例的标签。
- regionId:批量绑定标签的ECS实例所在地域。
- OOSAssumeRole:OOS使用的RAM角色。
权限说明:
- DescribeInstances:根据标签过滤资源。
- TagResources:为指定的资源创建并绑定标签。
- 执行自定义模板。
- 在左侧导航栏,单击我的模板,找到自定义模板OOSAutoBindTag,在操作列,单击创建执行。
- 保持默认设置或重新选择执行模式,然后单击下一步:设置参数。
- 填写参数,并单击下一步:确定。
本示例中填写的参数:

- tags:选择标签
owner:zhangsan
。 - reginId:输入实例所在的地域ID,例如:
cn-shanghai
。 - oosAssumeRole:使用RAM角色OOSServiceRole。
- 单击创建。
- 在基本详情页顶部,单击高级视图页签。
- 在高级视图页面右侧,单击执行结果。
- 查看执行结果。
- 如果执行成功,界面将显示如下信息:

- 如果执行失败,您可以通过查看执行日志来定位失败原因。