STS許可權管理系統是比存取控制(RAM)更為嚴格的許可權管理系統。使用STS許可權管理系統進行資源存取控制,需通過複雜的授權流程,授予RAM使用者臨時訪問資源的許可權。
背景資訊
RAM使用者和授予RAM使用者的許可權均長期有效。刪除RAM使用者或解除RAM使用者權限,均需手動操作。發生RAM使用者資訊泄露後,如果無法及時刪除該RAM使用者或解除許可權,可能給您的阿里雲資源和重要訊息帶來危險。所以,對於關鍵性許可權或RAM使用者無需長期使用的許可權,您可以通過STS許可權管理系統來進行控制。
步驟一:建立角色
RAM角色是一種虛擬使用者,是承載操作許可權的虛擬概念。
操作步驟
使用Resource Access Management員登入RAM控制台。
在左側導覽列,選擇 。
在角色頁面,單擊建立角色。
在建立角色頁面,選擇可信實體類型為阿里雲帳號,然後單擊下一步。
設定角色資訊。
輸入角色名稱。
輸入備忘。
選擇信任的雲帳號。
當前雲帳號:當您允許當前阿里雲帳號下的所有RAM使用者扮演該RAM角色時,您可以選擇當前雲帳號。
其他雲帳號:當您允許其他阿里雲帳號下的所有RAM使用者扮演該RAM角色時,您可以選擇其他雲帳號,然後輸入其他阿里雲帳號(主帳號)ID。該項主要針對跨阿里雲帳號的資源授權訪問情境,相關教程,請參見跨阿里雲帳號的資源授權。
您可以在安全設定頁面查看阿里雲帳號(主帳號)ID。
重要如果您僅允許指定的RAM使用者扮演該RAM角色,而不是阿里雲帳號(主帳號)下的所有RAM使用者,您可以採取以下兩種方式:
修改RAM角色的信任策略。具體操作,請參見樣本一:修改RAM角色的可信實體為阿里雲帳號。
修改RAM使用者的角色扮演權限原則。具體操作,請參見能否指定RAM使用者具體可以扮演哪個RAM角色?。
單擊完成。
單擊關閉。
步驟二:建立角色授權策略
角色授權策略,即定義要授予角色的資源存取權限。
使用Resource Access Management員登入RAM控制台。
在左側導覽列,選擇 。
在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯頁簽。
- 輸入權限原則內容,然後單擊繼續編輯基本資料。
關於權限原則文法結構的詳情,請參見權限原則文法和結構。
IoT資源唯讀許可權的授權策略內容樣本如下:
{ "Version":"1", "Statement":[ { "Action":[ "rds:DescribeDBInstances", "rds:DescribeDatabases", "rds:DescribeAccounts", "rds:DescribeDBInstanceNetInfo" ], "Resource":"*", "Effect":"Allow" }, { "Action":"ram:ListRoles", "Effect":"Allow", "Resource":"*" }, { "Action":[ "mns:ListTopic" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "dhs:ListProject", "dhs:ListTopic", "dhs:GetTopic" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "ots:ListInstance", "ots:ListTable", "ots:DescribeTable" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "log:ListShards", "log:ListLogStores", "log:ListProject" ], "Resource":"*", "Effect":"Allow" }, { "Effect":"Allow", "Action":[ "iot:Query*", "iot:List*", "iot:Get*", "iot:BatchGet*" ], "Resource":"*" } ] }
IoT資源讀寫權限的授權策略內容樣本如下:
{ "Version":"1", "Statement":[ { "Action":[ "rds:DescribeDBInstances", "rds:DescribeDatabases", "rds:DescribeAccounts", "rds:DescribeDBInstanceNetInfo" ], "Resource":"*", "Effect":"Allow" }, { "Action":"ram:ListRoles", "Effect":"Allow", "Resource":"*" }, { "Action":[ "mns:ListTopic" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "dhs:ListProject", "dhs:ListTopic", "dhs:GetTopic" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "ots:ListInstance", "ots:ListTable", "ots:DescribeTable" ], "Resource":"*", "Effect":"Allow" }, { "Action":[ "log:ListShards", "log:ListLogStores", "log:ListProject" ], "Resource":"*", "Effect":"Allow" }, { "Effect":"Allow", "Action":"iot:*", "Resource":"*" } ] }
輸入權限原則名稱和備忘。
單擊確定。
授權策略建立成功後,您就可以將該授權策略中定義的許可權授予角色。
步驟三:為角色授權
角色獲得授權後,才具有資源存取權限。您可以在角色頁面,單擊角色對應的添加許可權,為單個角色授權。具體操作,請參見為RAM角色授權。本文介紹同時為多個角色授權的操作步驟。
使用Resource Access Management員登入RAM控制台。
在左側導覽列,選擇 。
在授權頁面,單擊新增授權。
在新增授權面板,為RAM角色授權。
選擇資源範圍。
帳號層級:許可權在當前阿里雲帳號內生效。
資源群組層級:許可權在指定的資源群組內生效。
說明指定資源群組授權生效的前提是該雲端服務及資源類型已支援資源群組,詳情請參見支援資源群組的雲端服務。
選擇授權主體。
授權主體即需要添加許可權的RAM角色。支援批量選中多個RAM角色。
選擇權限原則。
權限原則是一組存取權限的集合。支援批量選中多條權限原則。
系統策略:由阿里雲建立,策略的版本更新由阿里雲維護,使用者只能使用不能修改。更多資訊,請參見支援RAM的雲端服務。
說明系統會自動標識出高風險系統策略(例如:AdministratorAccess、AliyunRAMFullAccess等),授權時,盡量避免授予不必要的高風險權限原則。
自訂策略:由使用者管理,策略的版本更新由使用者維護。使用者可以自主建立、更新和刪除自訂策略。更多資訊,請參見建立自訂權限原則。
單擊確認新增授權。
單擊關閉。
下一步,為RAM使用者授予可以扮演該角色的許可權。
步驟四:授予RAM使用者角色扮演許可權
雖然經過授權後,該角色已擁有了授權策略定義的存取權限,但角色本身只是虛擬使用者,需要RAM使用者扮演該角色,才能進行許可權允許的操作。若任意RAM使用者都可以扮演該角色,也會帶來風險,因此只有獲得角色扮演許可權的RAM使用者才能扮演角色。
授權RAM使用者扮演角色的方法:先建立一個Resource參數值為角色ID的自訂授權策略,然後用該授權策略為RAM使用者授權。
使用Resource Access Management員登入RAM控制台。
在左側導覽列,選擇 。
在權限原則頁面,單擊建立權限原則。
在建立權限原則頁面,單擊指令碼編輯頁簽。
- 輸入權限原則內容,然後單擊繼續編輯基本資料。說明 授權策略內容中,參數Resource 的值需為角色Arn。在RAM角色管理頁面,單擊角色名稱,進入基本資料頁,查看角色的Arn 。
角色授權策略樣本:
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":"iot:QueryProduct", "Resource":"角色Arn" } ] }
輸入權限原則名稱和備忘。
單擊確定。
- 授權策略建立成功後,返回RAM存取控制首頁面。
- 在左側導覽列,選擇 。
- 在RAM使用者列表中,選中要授權的RAM使用者前的複選框,然後單擊下方的添加許可權。
- 在授權對話方塊中,選中剛建立的角色授權策略,再單擊確定。
授權完成後,RAM使用者便有了可以扮演該角色的許可權,就可以使用STS擷取扮演角色的臨時身份憑證和進行資源訪問。
步驟五:RAM使用者擷取臨時身份憑證
獲得角色授權的RAM使用者,可以通過直接調用API或使用SDK來擷取扮演角色的臨時身份憑證:AccessKey ID、AccessKey Secret和SecurityToken。STS API和STS SDK詳情,請參見STS API和STS SDK。
使用API和SDK擷取扮演角色的臨時身份憑證需傳入以下參數:
- RoleArn:需要扮演的角色Arn。
- RoleSessionName:臨時憑證的名稱(自訂參數)。
- Policy:授權策略,即為角色增加一個許可權限制。通過此參數限制產生的Token的許可權。不指定此參數,則返回的Token將擁有指定角色的所有許可權。
- DurationSeconds:臨時憑證的有效期間。單位是秒,最小為900,最大為3600,預設值是3600。
- id和secret:指需要扮演該角色的RAM使用者的AccessKey ID和AccessKey Secret。
擷取臨時身份憑證樣本
API樣本:RAM使用者通過調用STS的AssumeRole介面獲得扮演該角色的臨時身份憑證。
https://sts.aliyuncs.com?Action=AssumeRole
&RoleArn=acs:ram::1234567890123456:role/iotstsrole
&RoleSessionName=iotreadonlyrole
&DurationSeconds=3600
&Policy=<url_encoded_policy>
&<公用請求參數>
SDK樣本:RAM使用者使用STS的Python命令列工具介面獲得扮演該角色的臨時身份憑證。
$python ./sts.py AssumeRole RoleArn=acs:ram::1234567890123456:role/iotstsrole RoleSessionName=iotreadonlyrole Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":"iot:*","Resource":"*"}]}' DurationSeconds=3600 --id=id --secret=secret
請求成功後,將返回扮演該角色的臨時身份憑證:AccessKey ID、AccessKey Secret和SecurityToken。
步驟六:RAM使用者臨時訪問資源
獲得扮演角色的臨時身份憑證後,RAM使用者便可以在調用SDK的請求中傳入該臨時身份憑證資訊,扮演角色。
Java SDK樣本:RAM使用者在調用請求中,傳入臨時身份憑證的AccessKey ID、AccessKey Secret和SecurityToken參數,建立IAcsClient對象。
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessKeySecret);
RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
IAcsClient client = new DefaultAcsClient(profile);
AcsResponse response = client.getAcsResponse(request);