全部产品
Search
文档中心

访问控制:AssumeRole - 获取扮演角色的临时身份凭证

更新时间:Jul 25, 2024

通过调用AssumeRole接口,获取一个扮演RAM角色的临时身份凭证(STS Token)。

接口说明

前提条件

该接口不能使用阿里云账号(主账号)调用,只能使用 RAM 用户或 RAM 角色调用,请确保已为调用者(RAM 用户或 RAM 角色)授予 STS 的管理权限(AliyunSTSAssumeRoleAccess)。

否则,会报如下错误:

You are not authorized to do this action. You should be authorized by RAM.

问题原因和解决方法如下:

最佳实践

STS Token 自颁发后将在一段时间内有效,建议您设置合理的 Token 有效期,并在有效期内重复使用,以避免业务请求速率上升后,STS Token 颁发的速率限制影响到业务。具体速率限制,请参见 STS 服务调用次数是否有上限。您可以通过请求参数DurationSeconds设置 Token 有效期。

在移动端上传或下载 OSS 文件等场景下,其访问量较大,即使重复使用 STS Token 也可能无法满足限流要求。为避免 STS 的限流成为 OSS 访问量的瓶颈,您可以尝试 OSS 的在 URL 中包含签名的方案。更多信息,请参见在 URL 中包含签名服务端签名后直传

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

授权信息

下表是API对应的授权信息,可以在RAM权限策略语句的Action元素中使用,用来给RAM用户或RAM角色授予调用此API的权限。具体说明如下:

  • 操作:是指具体的权限点。
  • 访问级别:是指每个操作的访问级别,取值为写入(Write)、读取(Read)或列出(List)。
  • 资源类型:是指操作中支持授权的资源类型。具体说明如下:
    • 对于必选的资源类型,用背景高亮的方式表示。
    • 对于不支持资源级授权的操作,用全部资源表示。
  • 条件关键字:是指云产品自身定义的条件关键字。
  • 关联操作:是指成功执行操作所需要的其他权限。操作者必须同时具备关联操作的权限,操作才能成功。
操作访问级别资源类型条件关键字关联操作
sts:AssumeRoleget
  • Role
    acs:ram::{#accountId}:role/{#RoleName}

请求参数

名称类型必填描述示例值
DurationSecondslong

Token 有效期。单位:秒。

Token 有效期最小值为 900 秒,最大值为要扮演角色的MaxSessionDuration时间。默认值为 3600 秒。

您可以通过 CreateRole 或 UpdateRole 设置角色最大会话时间MaxSessionDuration。更多信息,请参见 CreateRoleUpdateRole

3600
Policystring

为 STS Token 额外添加的一个权限策略,进一步限制 STS Token 的权限。具体如下:

  • 如果指定该权限策略,则 STS Token 最终的权限策略取 RAM 角色权限策略与该权限策略的交集。
  • 如果不指定该权限策略,则 STS Token 最终的权限策略取 RAM 角色的权限策略。

长度为 1~2048 个字符。

关于权限策略元素和示例,请参见权限策略基本元素权限策略示例库

{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
RoleArnstring

要扮演的 RAM 角色 ARN。

该角色是可信实体为阿里云账号类型的 RAM 角色。更多信息,请参见创建可信实体为阿里云账号的 RAM 角色CreateRole

格式:acs:ram::<account_id>:role/<role_name>

您可以通过 RAM 控制台或 API 查看角色 ARN。具体如下:

acs:ram::123456789012****:role/adminrole
RoleSessionNamestring

角色会话名称。

该参数为用户自定义参数。通常设置为调用该 API 的用户身份,例如:用户名。在操作审计日志中,即使是同一个 RAM 角色执行的操作,也可以根据不同的RoleSessionName来区分实际操作者,以实现用户级别的访问审计。

长度为 2~64 个字符,可包含英文字母、数字和特殊字符.@-_

alice
ExternalIdstring

角色外部 ID。

该参数为外部提供的用于表示角色的参数信息,主要功能是防止混淆代理人问题。更多信息,请参见使用 ExternalId 防止混淆代理人问题

长度为 2~1224 个字符,可包含英文字母、数字和特殊字符=,.@:/-_。正则为:[\w+=,.@:\/-]*

abcd1234

关于公共请求参数的详情,请参见公共请求参数

返回参数

名称类型描述示例值
object

返回参数。

RequestIdstring

请求 ID。

6894B13B-6D71-4EF5-88FA-F32781734A7F
AssumedRoleUserobject

角色扮演时的临时身份。

AssumedRoleIdstring

临时身份的 ID。

34458433936495****:alice
Arnstring

临时身份的 ARN。

acs:ram::123456789012****:role/adminrole/alice
Credentialsobject

访问凭证。

SecurityTokenstring

安全令牌。

说明 安全令牌的长度不固定,我们强烈建议您不要对安全令牌的最大长度做任何限制。
********
Expirationstring

Token 到期失效时间(UTC 时间)。

2015-04-09T11:52:19Z
AccessKeySecretstring

访问密钥。

wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****
AccessKeyIdstring

访问密钥 ID。

STS.L4aBSCSJVMuKg5U1****

示例

正常返回示例

JSON格式

{
  "RequestId": "6894B13B-6D71-4EF5-88FA-F32781734A7F",
  "AssumedRoleUser": {
    "AssumedRoleId": "34458433936495****:alice",
    "Arn": "acs:ram::123456789012****:role/adminrole/alice"
  },
  "Credentials": {
    "SecurityToken": "********",
    "Expiration": "2015-04-09T11:52:19Z",
    "AccessKeySecret": "wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****",
    "AccessKeyId": "STS.L4aBSCSJVMuKg5U1****"
  }
}

错误码

HTTP status code错误码错误信息
400InvalidParameter.DurationSecondsThe Min/Max value of DurationSeconds is 15min/1hr.
400InvalidParameter.ExternalIdThe parameter ExternalId is wrongly formed.
400InvalidParameter.RoleArnThe parameter RoleArn is wrongly formed.
400InvalidParameter.RoleSessionNameThe parameter RoleSessionName is wrongly formed.
400InvalidParameter.SerialNumberThe parameter SerialNumber is wrongly formed.
400InvalidParameter.TokenCodeThe parameter TokenCode is wrongly formed.
400InvalidParameter.PolicyGrammarThe parameter Policy has not passed grammar check.
400InvalidParameter.PolicySizeThe size of Policy must be smaller than 2048 bytes.
400InvalidParameter.ContentTypeThe ContentType request header must be either "application/json" or "application/x-www-form-urlencoded".
403NoPermissionYou are not authorized to do this action. You should be authorized by RAM.
403AuthenticationFail.ApiUsernameThe specified api username is not legal.
403AuthenticationFail.ApiPasswordThe specified api password is not legal.
403NoPermissionNo permission perform sts:AssumeRole on this Role. Maybe you are not authorized to perform sts:AssumeRole or the specified role does not trust you
403NoPermissionRoles may not be assumed by root accounts.
404EntityNotExist.RoleThe specified Role not exists .
500InternalErrorSTS Server Internal Error happened, please send the RequestId to us.
500InternalErrorSTS Server Internal Error happened, please send the RequestId to us.

访问错误中心查看更多错误码。

变更历史

变更时间变更内容概要操作
2022-09-27OpenAPI 错误码发生变更查看变更详情