STS权限管理系统是比访问控制(RAM)更为严格的权限管理系统。使用STS权限管理系统进行资源访问控制,需通过复杂的授权流程,授予子账号用户临时访问资源的权限。
背景信息
子账号和授予子账号的权限均长期有效。删除子账号或解除子账号权限,均需手动操作。发生子账号信息泄露后,如果无法及时删除该子账号或解除权限,可能给您的阿里云资源和重要信息带来危险。所以,对于关键性权限或子账号无需长期使用的权限,您可以通过STS权限管理系统来进行控制。

步骤一:创建角色
RAM角色是一种虚拟用户,是承载操作权限的虚拟概念。
步骤二:创建角色授权策略
角色授权策略,即定义要授予角色的资源访问权限。
授权策略创建成功后,您就可以将该授权策略中定义的权限授予角色。
步骤三:为角色授权
角色获得授权后,才具有资源访问权限。您可以在RAM角色管理页,单击角色对应的添加权限按钮,为单个角色授权。同时为多个角色授权,请参见以下步骤。
- 在访问控制 RAM 控制台页左侧导航栏,单击 。
- 单击新增授权。
- 在授权对话框中,被授权主体下,输入RAM角色名称,选中要授权的策略,再单击确定。
下一步,为子账号授予可以扮演该角色的权限。
步骤四:授予子账号角色扮演权限
虽然经过授权后,该角色已拥有了授权策略定义的访问权限,但角色本身只是虚拟用户,需要子账号用户扮演该角色,才能进行权限允许的操作。若任意子账号都可以扮演该角色,也会带来风险,因此只有获得角色扮演权限的子账号用户才能扮演角色。
授权子账号扮演角色的方法:先新建一个Resource参数值为角色ID的自定义授权策略,然后用该授权策略为子账号授权。
授权完成后,子账号便有了可以扮演该角色的权限,就可以使用STS获取扮演角色的临时身份凭证,和进行资源访问。
步骤五:子账号获取临时身份凭证
获得角色授权的子账号用户,可以通过直接调用API或使SDK 来获取扮演角色的临时身份凭证:AccessKeyId、AccessKeySecret和SecurityToken。STS API和STS SDK详情,请参见访问控制文档中STS API和STS SDK。
使用API和SDK获取扮演角色的临时身份凭证需传入以下参数:
- RoleArn:需要扮演的角色Arn。
- RoleSessionName:临时凭证的名称(自定义参数)。
- Policy:授权策略,即为角色增加一个权限限制。通过此参数限制生成的Token的权限。不指定此参数,则返回的Token将拥有指定角色的所有权限。
- DurationSeconds:临时凭证的有效期。单位是秒,最小为900,最大为3600,默认值是3600。
- id 和secret:指需要扮演该角色的子账号的AccessKeyId和AccessKeySecret。
获取临时身份凭证示例
API示例:子账号用户通过调用STS的AssumeRole接口获得扮演该角色的临时身份凭证。
https://sts.aliyuncs.com?Action=AssumeRole
&RoleArn=acs:ram::1234567890123456:role/iotstsrole
&RoleSessionName=iotreadonlyrole
&DurationSeconds=3600
&Policy=<url_encoded_policy>
&<公共请求参数>
SDK示例:子账号用户使用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
请求成功后,将返回扮演该角色的临时身份凭证:AccessKeyId、AccessKeySecret和SecurityToken。
步骤六:子账号临时访问资源
获得扮演角色的临时身份凭证后,子账号用户便可以在调用SDK的请求中传入该临时身份凭证信息,扮演角色。
Java SDK示例:子账号用户在调用请求中,传入临时身份凭证的AccessKeyId、AccessKeySecret和SecurityToken参数,创建IAcsClient对象。
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessSecret);
RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
IAcsClient client = new DefaultAcsClient(profile);
AcsResponse response = client.getAcsResponse(request);
在文档使用中是否遇到以下问题
更多建议
匿名提交