调用AssumeRole获取一个扮演RAM角色的临时身份凭证(STS Token)。
前提条件
请确保已为调用者(RAM用户或RAM角色)授予STS的管理权限(AliyunSTSAssumeRoleAccess)。
否则,会报如下错误:
You are not authorized to do this action. You should be authorized by RAM.
问题原因和解决方法如下:
该调用者缺少允许STS扮演角色的权限策略:请为该调用者添加系统策略(AliyunSTSAssumeRoleAccess)或自定义策略。具体操作,请参见能否指定RAM用户具体可以扮演哪个RAM角色、为RAM用户授权。
RAM角色的信任策略不包含调用者,即RAM角色不允许该调用者扮演:请为RAM角色添加允许该调用者扮演的信任策略。具体操作,请参见修改RAM角色的信任策略。
最佳实践
STS Token自颁发后将在一段时间内有效,建议您设置合理的Token有效期,并在有效期内重复使用,以避免业务请求速率上升后,STS Token颁发的速率限制影响到业务。具体速率限制,请参见STS服务调用次数是否有上限。您可以通过请求参数DurationSeconds
设置Token有效期。
在移动端上传或下载OSS文件等场景下,其访问量较大,即使重复使用STS Token也可能无法满足限流要求。为避免STS的限流成为OSS访问量的瓶颈,您可以尝试OSS的在URL中包含签名的方案。更多信息,请参见在URL中包含签名和服务端签名后直传。
调试
您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。
授权信息
请求参数
名称 | 类型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
DurationSeconds | integer | 否 | Token有效期。单位:秒。 Token有效期最小值为900秒,最大值为要扮演角色的 您可以通过CreateRole或UpdateRole设置角色最大会话时间 | 3600 |
Policy | string | 否 | 为STS Token额外添加的一个权限策略,进一步限制STS Token的权限。具体如下:
长度为1~1024个字符。 | {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"} |
RoleArn | string | 是 | 要扮演的RAM角色ARN。 该角色是可信实体为阿里云账号类型的RAM角色。更多信息,请参见创建可信实体为阿里云账号的RAM角色或CreateRole。 格式: 您可以通过RAM控制台或API查看角色ARN。具体如下:
| acs:ram::123456789012****:role/adminrole |
RoleSessionName | string | 是 | 角色会话名称。 该参数为用户自定义参数。通常设置为调用该API的用户身份,例如:用户名。在操作审计日志中,即使是同一个RAM角色执行的操作,也可以根据不同的 长度为2~64个字符,可包含英文字母、数字、半角句号(.)、at(@)、短划线(-)和下划线(_)。 | alice |
返回参数
示例
请求示例
https://sts.aliyuncs.com/?Action=AssumeRole
&DurationSeconds=3600
&RoleArn=acs:ram::123456789012****:role/adminrole
&RoleSessionName=alice
&公共请求参数
正常返回示例
JSON
格式
{
"Credentials": {
"AccessKeyId": "STS.L4aBSCSJVMuKg5U1****",
"AccessKeySecret": "wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****",
"Expiration": "2015-04-09T11:52:19Z",
"SecurityToken": "********"
},
"AssumedRoleUser": {
"Arn": "acs:ram::123456789012****:role/adminrole/alice",
"AssumedRoleId": "34458433936495****:alice"
},
"RequestId": "6894B13B-6D71-4EF5-88FA-F32781734A7F"
}
XML
格式
<AssumeRoleResponse>
<Credentials>
<AccessKeyId>STS.L4aBSCSJVMuKg5U1****</AccessKeyId>
<AccessKeySecret>wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****</AccessKeySecret>
<Expiration>2015-04-09T11:52:19Z</Expiration>
<SecurityToken>********</SecurityToken>
</Credentials>
<AssumedRoleUser>
<Arn>acs:ram::123456789012****:role/adminrole/alice</Arn>
<AssumedRoleId>34458433936495****:alice</AssumedRoleId>
</AssumedRoleUser>
<RequestId>6894B13B-6D71-4EF5-88FA-F32781734A7F</RequestId>
</AssumeRoleResponse>
错误码
HttpCode | 错误码 | 错误信息 |
---|---|---|
400 | InvalidParameter.DurationSeconds | The Min/Max value of DurationSeconds is 15min/1hr. |
400 | InvalidParameter.ExternalId | The parameter ExternalId is wrongly formed. |
400 | InvalidParameter.RoleArn | The parameter RoleArn is wrongly formed. |
400 | InvalidParameter.RoleSessionName | The parameter RoleSessionName is wrongly formed. |
400 | InvalidParameter.SerialNumber | The parameter SerialNumber is wrongly formed. |
400 | InvalidParameter.TokenCode | The parameter TokenCode is wrongly formed. |
400 | InvalidParameter.PolicyGrammar | The parameter Policy has not passed grammar check. |
400 | InvalidParameter.PolicySize | The size of Policy must be smaller than 1024 bytes. |
400 | InvalidParameter.ContentType | The ContentType request header must be either "application/json" or "application/x-www-form-urlencoded". |
403 | NoPermission | You are not authorized to do this action. You should be authorized by RAM. |
403 | AuthenticationFail.ApiUsername | The specified api username is not legal. |
403 | AuthenticationFail.ApiPassword | The specified api password is not legal. |
403 | NoPermission | No permission perform sts:AssumeRole on this Role. Maybe you are not authorized to perform sts:AssumeRole or the specified role does not trust you |
403 | NoPermission | Roles may not be assumed by root accounts. |
404 | EntityNotExist.Role | The specified Role not exists . |
500 | InternalError | STS Server Internal Error happened, please send the RequestId to us. |
访问错误中心查看更多错误码。