STS權(quán)限管理系統(tǒng)是比訪問控制(RAM)更為嚴(yán)格的權(quán)限管理系統(tǒng)。使用STS權(quán)限管理系統(tǒng)進(jìn)行資源訪問控制,需通過復(fù)雜的授權(quán)流程,授予RAM用戶臨時(shí)訪問資源的權(quán)限。
背景信息
RAM用戶和授予RAM用戶的權(quán)限均長期有效。刪除RAM用戶或解除RAM用戶權(quán)限,均需手動(dòng)操作。發(fā)生RAM用戶信息泄露后,如果無法及時(shí)刪除該RAM用戶或解除權(quán)限,可能給您的阿里云資源和重要信息帶來危險(xiǎn)。所以,對于關(guān)鍵性權(quán)限或RAM用戶無需長期使用的權(quán)限,您可以通過STS權(quán)限管理系統(tǒng)來進(jìn)行控制。
步驟一:創(chuàng)建角色
RAM角色是一種虛擬用戶,是承載操作權(quán)限的虛擬概念。
- 使用阿里云賬號(hào)登錄RAM控制臺(tái)。
- 在左側(cè)導(dǎo)航欄,選擇 。
- 在角色頁面,單擊創(chuàng)建角色。
- 在創(chuàng)建角色面板,選擇可信實(shí)體類型為阿里云賬號(hào),然后單擊下一步。
- 設(shè)置角色信息。
- 單擊完成。
- 單擊關(guān)閉。
步驟二:創(chuàng)建角色授權(quán)策略
角色授權(quán)策略,即定義要授予角色的資源訪問權(quán)限。
- 使用阿里云賬號(hào)登錄RAM控制臺(tái)。
- 在左側(cè)導(dǎo)航欄,選擇 。
- 在權(quán)限策略頁面,單擊創(chuàng)建權(quán)限策略。
- 在創(chuàng)建權(quán)限策略頁面,單擊腳本編輯頁簽。
- 輸入權(quán)限策略內(nèi)容,然后單擊繼續(xù)編輯基本信息。關(guān)于權(quán)限策略語法結(jié)構(gòu)的詳情,請參見權(quán)限策略語法和結(jié)構(gòu)。
IoT資源只讀權(quán)限的授權(quán)策略內(nèi)容示例如下:
{ "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":"*" }, { "Action": [ "linkwan:GetInstancePacketStat", "linkwan:CountGateways" ], "Resource": "*", "Effect": "Allow" } ] }
IoT資源讀寫權(quán)限的授權(quán)策略內(nèi)容示例如下:
{ "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":"*" } ] }
- 輸入權(quán)限策略名稱和備注。
- 單擊確定。
授權(quán)策略創(chuàng)建成功后,您就可以將該授權(quán)策略中定義的權(quán)限授予角色。
步驟三:為角色授權(quán)
角色獲得授權(quán)后,才具有資源訪問權(quán)限。您可以在角色頁面,單擊角色對應(yīng)的添加權(quán)限,為單個(gè)角色授權(quán)。具體操作,請參見為RAM角色授權(quán)。本文介紹同時(shí)為多個(gè)角色授權(quán)的操作步驟。
- 使用阿里云賬號(hào)登錄RAM控制臺(tái)。
- 在左側(cè)導(dǎo)航欄,選擇 。
- 在授權(quán)頁面,單擊新增授權(quán)。
- 在新增授權(quán)頁面,為RAM角色添加權(quán)限。
- 單擊確定。
- 單擊完成。
下一步,為RAM用戶授予可以扮演該角色的權(quán)限。
步驟四:授予RAM用戶角色扮演權(quán)限
雖然經(jīng)過授權(quán)后,該角色已擁有了授權(quán)策略定義的訪問權(quán)限,但角色本身只是虛擬用戶,需要RAM用戶扮演該角色,才能進(jìn)行權(quán)限允許的操作。若任意RAM用戶都可以扮演該角色,也會(huì)帶來風(fēng)險(xiǎn),因此只有獲得角色扮演權(quán)限的RAM用戶才能扮演角色。
授權(quán)RAM用戶扮演角色的方法:先新建一個(gè)Resource參數(shù)值為角色I(xiàn)D的自定義授權(quán)策略,然后用該授權(quán)策略為RAM用戶授權(quán)。
- 使用阿里云賬號(hào)登錄RAM控制臺(tái)。
- 在左側(cè)導(dǎo)航欄,選擇 。
- 在權(quán)限策略頁面,單擊創(chuàng)建權(quán)限策略。
- 在創(chuàng)建權(quán)限策略頁面,單擊腳本編輯頁簽。
- 輸入權(quán)限策略內(nèi)容,然后單擊繼續(xù)編輯基本信息。說明 授權(quán)策略內(nèi)容中,參數(shù)Resource 的值需為角色Arn。在RAM角色管理頁面,單擊角色名稱,進(jìn)入基本信息頁,查看角色的Arn 。
角色授權(quán)策略示例:
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":"iot:QueryProduct", "Resource":"角色Arn" } ] }
- 輸入權(quán)限策略名稱和備注。
- 單擊確定。
- 授權(quán)策略創(chuàng)建成功后,返回RAM訪問控制主頁面。
- 在左側(cè)導(dǎo)航欄,選擇 。
- 在RAM用戶列表中,選中要授權(quán)的RAM用戶前的復(fù)選框,然后單擊下方的添加權(quán)限。
- 在授權(quán)對話框中,選中剛新建的角色授權(quán)策略,再單擊確定。
授權(quán)完成后,RAM用戶便有了可以扮演該角色的權(quán)限,就可以使用STS獲取扮演角色的臨時(shí)身份憑證和進(jìn)行資源訪問。
步驟五:RAM用戶獲取臨時(shí)身份憑證
獲得角色授權(quán)的RAM用戶,可以通過直接調(diào)用API或使用SDK來獲取扮演角色的臨時(shí)身份憑證:AccessKey ID、AccessKey Secret和SecurityToken。STS API和STS SDK詳情,請參見STS API和STS SDK。
使用API和SDK獲取扮演角色的臨時(shí)身份憑證需傳入以下參數(shù):
- RoleArn:需要扮演的角色Arn。
- RoleSessionName:臨時(shí)憑證的名稱(自定義參數(shù))。
- Policy:授權(quán)策略,即為角色增加一個(gè)權(quán)限限制。通過此參數(shù)限制生成的Token的權(quán)限。不指定此參數(shù),則返回的Token將擁有指定角色的所有權(quán)限。
- DurationSeconds:臨時(shí)憑證的有效期。單位是秒,最小為900,最大為3600,默認(rèn)值是3600。
- id和secret:指需要扮演該角色的RAM用戶的AccessKey ID和AccessKey Secret。
獲取臨時(shí)身份憑證示例
API示例:RAM用戶通過調(diào)用STS的AssumeRole接口獲得扮演該角色的臨時(shí)身份憑證。
https://sts.aliyuncs.com?Action=AssumeRole
&RoleArn=acs:ram::1234567890123456:role/iotstsrole
&RoleSessionName=iotreadonlyrole
&DurationSeconds=3600
&Policy=<url_encoded_policy>
&<公共請求參數(shù)>
SDK示例:RAM用戶使用STS的Python命令行工具接口獲得扮演該角色的臨時(shí)身份憑證。
$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
請求成功后,將返回扮演該角色的臨時(shí)身份憑證:AccessKey ID、AccessKey Secret和SecurityToken。
步驟六:RAM用戶臨時(shí)訪問資源
獲得扮演角色的臨時(shí)身份憑證后,RAM用戶便可以在調(diào)用SDK的請求中傳入該臨時(shí)身份憑證信息,扮演角色。
Java SDK示例:RAM用戶在調(diào)用請求中,傳入臨時(shí)身份憑證的AccessKey ID、AccessKey Secret和SecurityToken參數(shù),創(chuàng)建IAcsClient對象。
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessKeySecret);
RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
IAcsClient client = new DefaultAcsClient(profile);
AcsResponse response = client.getAcsResponse(request);