如果您希望使用特定标签控制资源的权限,可以通过运维编排服务(OOS)的自定义模板,批量为同一地域下需要控制权限的资源绑定特定标签。

背景信息

云服务器ECS和其他云服务的诸多资源支持绑定标签。如需了解哪些云服务支持绑定标签,请参见支持标签的云服务

本文以ECS实例为例,创建一个OOS自定义模板,该模板可以为同一地域下的ECS实例批量绑定标签owner:zhangsan

说明 需要批量绑定标签的资源必须在同一地域下。

步骤一:创建RAM角色并授权

为OOS创建RAM角色OOSServiceRole,并为RAM角色授权。

  1. 使用阿里云账号登录RAM控制台
  2. 创建自定义策略OOSAutoBindTag。

    具体操作,请参见创建自定义权限策略

    说明 自定义策略OOSAutoBindTag以ECS实例为例,权限设置为ecs:DescribeInstances,您可以根据业务需求设置您需要的权限。例如:如果您需要为安全组批量绑定标签,将ecs:DescribeInstances替换为ecs:DescribeSecurityGroups

    本步骤使用的策略如下所示:

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "ecs:DescribeInstances",
                    "ecs:TagResources"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. 创建RAM角色OOSServiceRole。
    具体操作,请参见创建普通服务角色
  4. 为RAM角色OOSServiceRole授权自定义策略OOSAutoBindTag。
    具体操作,请参见为RAM角色授权
  5. 为RAM角色OOSServiceRole授权系统策略AliyunOOSFullAccess。
    具体操作,请参见为RAM角色授权

步骤二:为资源批量绑定标签

  1. 登录OOS控制台
  2. 在左侧导航栏,单击我的模板
  3. 在顶部菜单栏左上角处,选择地域。
  4. 创建自定义模板。
    1. 单击创建模板
    2. 基本信息区域,输入模板名称(例如:OOSAutoBindTag)。
    3. 单击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:为指定的资源创建并绑定标签。
  5. 执行自定义模板。
    1. 在左侧导航栏,单击我的模板,找到自定义模板OOSAutoBindTag,在操作列,单击创建执行
    2. 保持默认设置或重新选择执行模式,然后单击下一步:设置参数
    3. 填写参数,并单击下一步:确定

      本示例中填写的参数:

      1
      • tags:选择标签owner:zhangsan
      • reginId:输入实例所在的地域ID,例如:cn-shanghai
      • oosAssumeRole:使用RAM角色OOSServiceRole。
    4. 单击创建
    5. 在基本详情页顶部,单击高级视图页签。
    6. 在高级视图页面右侧,单击执行结果
    7. 查看执行结果。
      • 如果执行成功,界面将显示如下信息:1
      • 如果执行失败,您可以通过查看执行日志来定位失败原因。