本文介紹如何基于標簽控制RAM用戶權限,實現不同的用戶可以擁有不同云資源的訪問和操作權限。
背景信息
標簽可用于標識云資源,實現分類管理資源;訪問控制RAM可基于權限策略,控制云資源的訪問和操作權限。結合標簽和RAM,將標簽作為權限策略的匹配條件,可以實現云資源精細化權限管理。
基于標簽控制RAM用戶權限(即標簽鑒權)的邏輯如下:
支持綁定標簽的ECI資源包括ECI實例、鏡像緩存和虛擬節點;僅支持在創建或者更新ECI資源時為其綁定標簽。更多信息,請參見使用標簽管理ECI實例。
配置示例
示例場景說明
本文以下述場景作為示例,說明如何實現標簽鑒權。
假設您需要控制某一RAM用戶只能操作特定(假設綁定了env:test
標簽)的ECI資源,如下圖:
具體需求包括:
需求1:不允許創建不帶標簽的ECI資源,僅當創建時為ECI資源綁定
env:test
標簽才可以創建成功。需求2:只允許操作自身創建(即綁定
env:test
標簽)的ECI資源,不允許操作其他ECI資源。需求3:查詢ECI資源時,只允許查看自身創建(即綁定
env:test
標簽)的ECI資源。
步驟一:配置自定義權限策略并授權
使用阿里云賬號登錄RAM控制臺。
在左側導航欄選擇權限管理>權限策略。
在權限策略頁面,單擊創建權限策略。
完成自定義策略配置。
單擊導入策略頁簽。
在彈出的對話框的右側篩選項中選擇系統策略,然后搜索并選中AliyunECIFullAccess,單擊導入。
AliyunECIFullAccess為系統默認的管理ECI資源的權限,包括操作ECI資源、查詢相關資源(安全組、VPC等資源)、創建ECI服務關聯角色等權限。
單擊腳本編輯頁簽。
在編輯框中修改權限策略內容,然后單擊繼續編輯基本信息。
在權限策略的
Condition
中,您可以增加需要匹配標簽的條件來限制操作權限。支持的標簽條件關鍵字如下:標簽條件關鍵字
說明
acs:RequestTag
限制在請求中必須傳入特定的標簽。
如果API請求中沒有標簽參數,則不能使用
acs:RequestTag
,否則會導致鑒權失敗。acs:ResourceTag
限制指定的資源必須包含特定的標簽。
如果API請求中沒有資源ID參數,則不能使用
acs:ResourceTag
,否則會導致鑒權失敗。說明設計權限策略時,您可以根據各操作接口特性(API請求是否需要指定資源ID、是否支持傳入標簽),結合實際業務需求,來設置
acs:RequestTag
或acs:ResourceTag
。更多信息,請參見API接口鑒權說明。根據示例場景中的需求,設計權限策略如下:
需求
權限策略
不允許創建不帶標簽的ECI資源,僅當創建時為ECI資源綁定
env:test
標簽才可以創建成功{ "Effect": "Allow", "Action": "eci:Create*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }
只允許操作綁定了env:test標簽的ECI資源,不允許操作其他資源
{ "Effect": "Allow", "Action": "eci:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/env": "test" } } }
查詢ECI資源時,只允許查看綁定了env:test標簽的ECI資源。
{ "Effect": "Allow", "Action": "eci:Describe*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }
結合AliyunECIFullAccess已有的權限策略,完整權限策略示例如下:
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": "eci:Create*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }, { "Effect": "Allow", "Action": "eci:*", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/env": "test" } } }, { "Effect": "Allow", "Action": "eci:Describe*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/env": "test" } } }, { "Action": [ "ecs:DescribeSecurityGroups" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "vpc:DescribeVSwitches", "vpc:DescribeVpcs", "vpc:DescribeEipAddresses" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": [ "eci.aliyuncs.com", "vnode.eci.aliyuncs.com" ] } } } ] }
說明如果您通過OpenAPI操作ECI資源,則使用AliyunECIFullAccess的權限即可;如果您通過ECI控制臺操作ECI資源,則除了AliyunECIFullAccess的權限外,還需添加額外權限。更多信息,請參見為RAM用戶授權。
輸入權限策略名稱,單擊確定。
將自定義權限策略授予RAM用戶。
步驟二:驗證權限策略是否生效
使用RAM用戶登錄OpenAPI平臺。
測試權限策略是否生效。
以ECI實例為例進行測試:
創建ECI實例
設置了
env:test
標簽,則可以創建。沒有設置標簽或者設置了其他標簽,則無法創建,提示沒有權限。
刪除ECI實例
刪除的實例綁定了
env:test
標簽,則可以刪除。刪除的實例沒有綁定
env:test
標簽,則無法刪除,提示沒有權限。
查詢ECI實例
指定實例(該實例綁定了
env:test
標簽)但沒有設置標簽,則查詢出指定實例的信息。指定實例(該實例沒有綁定
env:test
標簽),則查詢結果為空。沒有指定實例,僅設置
env:test
標簽,則查詢出帶有env:test
標簽的所有實例信息。沒有指定實例也沒有設置標簽,則查詢結果為空。
API接口鑒權說明
為某一RAM用戶授予含有標簽鑒權的權限策略后,該RAM用戶調用各API接口時的鑒權情況如下表所示:
接口 | 鑒權說明 |
CreateContainerGroup、CreateImageCache等創建接口 | 該類接口無需指定資源ID,則匹配
|
DescribeContainerGroups、DescribeImageCaches等查詢接口 | 該類接口按需指定資源ID或傳入標簽,則匹配
說明 查詢接口在鑒權不通過時,返回結果為空,并不會報錯。 |
UpdateContainerGroup、UpdateImageCache等更新接口 | 該類接口必須指定資源ID,則匹配
說明 更新標簽時,RAM用戶需要分別具有更新前后的標簽權限。即授權時,需要授予用戶兩個自定義權限策略,分別包含更新前后的標簽條件限制。 |
RestartContainerGroup、ExecContainerCommand等其他操作接口 | 該類接口必須指定資源ID,則匹配
|