天天看點

高階實踐:強制TAG——自動化打标簽運維問題場景描述簡述解決方法其他資源說明相關文檔

問題

基于通路控制 (RAM) 政策來授予子賬号(RAM User)在指定的标簽(TAG)下 管理 ECS 中 資源(支援标簽的資源)的權限, 該政策必須限制在标簽(TAG)級别權限,以便 RAM 子賬号可以管理包含特定标簽的 ECS 資源。

場景描述

使用指定标簽(TAG)為子賬号(RAM User)限定通路ECS資源的邊界,這裡指支援标簽的ECS資源:執行個體/磁盤/網卡/安全組/快照/鏡像/密鑰對。

簡述

如果保障ECS資源(支援标簽的資源)可以強制有标簽。

高階實踐:強制TAG——必須帶标簽建立ECS 資源

在前面的文章說明了,本文就如何事後自動化運維機制來保障強制TAG。

  1. 建立RAM政策:建立一個 RAM 政策,以授予對任何帶該特定标簽(TAG)​的通路權限(主要針對ECS)。
  2. 授權使用者:将該 RAM 政策附加到您希望通路具備該标簽(TAG)的使用者或組。
  3. 自動打标:為存量資源自動化打特定的标簽。

解決方法

本文已ECS執行個體為例說明如何為存量未打标簽資源自動打标簽。如果磁盤/網卡/安全組/快照/鏡像/密鑰對等其他資源更換資源清單查詢接口為對應資源的查詢接口,比如磁盤為DescribeDisks。

注:ECS查詢資源清單接口有1000的限制,如果标簽下資源超過1000,則推薦修改為ListTagResources來過濾資源。

建立RAM政策

在 通路控制台 或者 或者使用 RAM API CreatePolicy 建立政策

政策如下:

  • 授權 AliyunOOSFullAccess 權限
{
    "Version": "1",
    "Statement": [
        {
            "Action": "oos:*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "ram:PassRole",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "acs:Service": "oos.aliyuncs.com"
                }
            }
        }
    ]
}           
  • 為OOS服務建立服務OOSServiceRole角色 參考文檔

    注:文本的政策沒有為配置角色的權限,需要的話自行配置。

  • 在RAM通路控制-權限管理-權限政策管理-建立政策
{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ecs:DescribeInstances",
                "ecs:TagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}           
  • 為OOSServiceRole授權該政策
  • 如果您使用的是子賬号或者sts角色,也需要為您使用的賬号或者角色授權該政策以及操作OOS權限AliyunOOSFullAccess。

授權方式

将RAM 政策附加到您希望控制通路的使用者或組。您可以使用 RAM 管理控制台、阿裡雲 CLI、阿裡雲 API AttachPolicyToUser AttachPolicyToGroup來添加 RAM 政策。

自動打标

建立模版

OOS運維編排

控制台

,點選我的模版-點選建立模版-選擇空白模闆-選擇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: 執行個體的标簽。
    AssociationProperty: Tags
  regionId:
    Type: String
    Description:
      en: The region to select ECS instances.
      zh-cn: 執行個體的地域。
  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 }}'
           

建立執行

點選建立執行

高階實踐:強制TAG——自動化打标簽運維問題場景描述簡述解決方法其他資源說明相關文檔

點選下一步:設定參數。填寫入參,指定特定标簽(TAG)

高階實踐:強制TAG——自動化打标簽運維問題場景描述簡述解決方法其他資源說明相關文檔

點選下一步:确定,确認參數沒有問題

高階實踐:強制TAG——自動化打标簽運維問題場景描述簡述解決方法其他資源說明相關文檔

開始執行,并輸出需要新增或者修改執行個體清單。

高階實踐:強制TAG——自動化打标簽運維問題場景描述簡述解決方法其他資源說明相關文檔

其他資源說明

  • 如果您需要關注的是磁盤這裡DescribeInstances換成DescribeDisks,相關的權限政策也是修改為DescribeDisks
  • 如果您需要關注的是安全組這裡DescribeInstances換成DescribeSecurityGroups,相關的權限政策也是修改為DescribeSecurityGroups
  • 如果您需要關注的是自定義鏡像這裡DescribeInstances換成DescribeImages,相關的權限政策也是修改為DescribeImages
  • 如果您需要關注的是快照這裡DescribeInstances換成DescribeSnapshots,相關的權限政策也是修改為DescribeSnapshots
  • 如果您需要關注的是網卡這裡DescribeInstances換成DescribeNetworkInterfaces,相關的權限政策也是修改為DescribeNetworkInterfaces
  • 如果您需要關注的是密鑰對這裡DescribeInstances換成DescribeKeyPairs,相關的權限政策也是修改為DescribeKeyPairs
  • 如果您需要關注的是啟動模版這裡DescribeInstances換成DescribeLaunchTemplates,相關的權限政策也是修改為DescribeLaunchTemplates
  • 如果您需要關注的是專有主控端這裡DescribeInstances換成DescribeDedicatedHosts,相關的權限政策也是修改為DescribeDedicatedHosts

其他産品保障标簽能力

目前OOS支援的雲産品清單

以及

雲産品支援TAG清單

相關文檔

基于OOS批量修改資源标簽(TAG)值(Value) 強制TAG——必須帶标簽建立ECS 資源 ECS支援跨地域跨資源類型的标簽(TAG)操作 如何檢查您的資源是否具有您指定的标簽? 基于标簽批量管理資源 支援标簽産品及其文檔 标簽的最佳實踐 通過OOS基于标簽批量啟動ECS執行個體實踐 如何使用标簽控制對ECS 資源的通路? 使用标簽檢索資源 建立資源标簽分組設定 ECS全局标簽實踐 ECS控制台雲資源分組管理---全局标簽 标記您的MongoDB資料庫執行個體 标記您的 CDN 資源——域名(domain) 标記您的 OSS 資源 标記您的 RDS 資源 标記您的 SLB 資源 标記您的 ECS 資源 标記您的redis資料庫執行個體 标記您的彈性容器執行個體(ECI)資源 标記(TAG)您的漏洞掃描(CSS)資源