問題
基于通路控制 (RAM) 政策來授予子賬号(RAM User)在指定的标簽(TAG)下 管理 ECS 中 資源(支援标簽的資源)的權限, 該政策必須限制在标簽(TAG)級别權限,以便 RAM 子賬号可以管理包含特定标簽的 ECS 資源。
場景描述
使用指定标簽(TAG)為子賬号(RAM User)限定通路ECS資源的邊界,這裡指支援标簽的ECS資源:執行個體/磁盤/網卡/安全組/快照/鏡像/密鑰對。
簡述
如果保障ECS資源(支援标簽的資源)可以強制有标簽。
高階實踐:強制TAG——必須帶标簽建立ECS 資源在前面的文章說明了,本文就如何事後自動化運維機制來保障強制TAG。
- 建立RAM政策:建立一個 RAM 政策,以授予對任何帶該特定标簽(TAG)的通路權限(主要針對ECS)。
- 授權使用者:将該 RAM 政策附加到您希望通路具備該标簽(TAG)的使用者或組。
- 自動打标:為存量資源自動化打特定的标簽。
解決方法
本文已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)
點選下一步:确定,确認參數沒有問題
開始執行,并輸出需要新增或者修改執行個體清單。
其他資源說明
- 如果您需要關注的是磁盤這裡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清單