本文介绍了RAM角色和临时身份凭证(STS Token)的常见问题,为您提供说明和指导。
使用STS时报错“You are not authorized to do this action. You should be authorized by RAM.”,如何处理?
调用AssumeRole接口获取STS Token时,出现如下报错信息:
Error message: You are not authorized to do this action. You should be authorized by RAM.
出现该问题的原因及解决方法如下:
使用阿里云账号(主账号)调用该接口。
AssumeRole接口不允许阿里云账号(主账号)调用,请使用RAM用户或RAM角色调用。
发起调用的RAM用户或RAM角色缺少允许STS扮演角色的权限策略。
请为发起调用的RAM用户或RAM角色添加系统权限策略(AliyunSTSAssumeRoleAccess)或自定义权限策略。自定义权限策略示例,请参见权限策略示例。
要扮演的RAM角色的信任策略中不包含正在发起调用的RAM用户或RAM角色。
请修改要扮演的RAM角色的信任策略,允许发起调用的RAM用户或RAM角色扮演该RAM角色。更多信息,请参见修改RAM角色的信任策略。
AssumeRole接口允许谁调用?
AssumeRole接口用于获取一个扮演RAM角色的STS Token,该接口仅允许RAM用户或RAM角色调用,不允许阿里云账号(主账号)调用。
RAM角色有几种?分别可以被谁扮演?
根据RAM可信实体的不同,支持以下三种类型的RAM角色:
可信实体为阿里云账号的RAM角色:允许RAM用户或RAM角色扮演的角色。扮演角色的RAM用户或RAM角色可以属于自己的阿里云账号,也可以属于其他阿里云账号。该类角色主要用于解决跨账号访问和临时授权问题。
可信实体为阿里云服务的RAM角色:允许云服务扮演的角色。分为普通服务角色和服务关联角色两种。该类角色主要用于解决跨服务访问问题。
可信实体为身份提供商的RAM角色:允许可信身份提供商下的用户所扮演的角色。该类角色主要用于实现与阿里云的单点登录(SSO)。
如何限制指定RAM用户扮演指定RAM角色?
修改RAM角色信任策略。
在RAM角色的信任策略中,通过
Principal
指定允许扮演该角色的RAM用户,其中,<account-id>
为阿里云账号ID,<user-name>
为RAM用户名称。具体操作,请参见修改RAM角色的信任策略。信任策略示例:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<account-id>:user/<user-name>" ] } } ], "Version": "1" }
为RAM用户授予角色扮演的权限。
为RAM用户授予系统权限策略(AliyunSTSAssumeRoleAccess)或自定义权限策略,自定义权限策略可以进一步缩小角色扮演的范围。
在自定义权限策略中,通过
Resource
指定允许扮演的RAM角色ARN,其中,<account-id>
为阿里云账号ID,<role-name>
为RAM角色名称。具体操作,请参见创建自定义权限策略、为RAM用户授权。权限策略示例:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Resource": "acs:ram:*:<account-id>:role/<role-name>" } ], "Version": "1" }
如何查看RAM角色的ARN?
登录RAM控制台。
在左侧导航栏,选择
。单击目标RAM角色名称。
在基本信息区域,查看RAM角色ARN。
STS服务调用次数是否有上限?
AssumeRole接口调用次数上限:100次/秒。一个阿里云账号及该账号下的RAM用户、RAM角色共用该接口调用次数上限。
当请求量超过上限时,会返回以下报错信息:
错误信息
错误码
错误信息
Throttling.Api
Request was denied due to api flow control.
Throttling.User
Request was denied due to user flow control.
Throttling
Request was denied due to flow control.
302
状态码
当出现以上报错信息时,请您减少并发调用次数。如果您的业务场景确实需要更高的并发调用次数,您可以提交工单申请配额。
STS Token的权限限制是什么?
STS Token的权限:指定RAM角色的权限与调用AssumeRole接口时所设置的Policy
的交集。
若在调用AssumeRole接口时不设置Policy参数,则返回的STS Token将拥有指定RAM角色的所有权限。
STS Token的有效期是多久?
STS Token的有效期最小值为900秒,最大值为角色最大会话时间设置的值,默认值为3600秒。
您可以通过AssumeRole接口的DurationSeconds参数来限制STS Token的有效期。
您可以通过控制台或API设置角色最大会话时间。更多信息,请参见设置RAM角色最大会话时间。
STS获取的多个Token是否同时有效?
STS Token在过期之前都是有效的,无论是否创建了新的STS Token。
STS Token发生泄露时如何处理?
如果您通过扮演RAM角色获取的安全令牌(STS Token)发生泄露,您可以按以下步骤回收所有已经颁发的STS Token。
登录RAM控制台。
移除RAM角色的所有权限策略。
具体操作,请参见为RAM角色移除权限。
删除RAM角色。
具体操作,请参见删除RAM角色。
删除RAM角色后,所有通过扮演该RAM角色获取的且未过期的STS Token都将立即失效。
如果您还需要使用该RAM角色,您可以重新创建同名角色并授予相同的权限策略,使用新创建的RAM角色继续完成您的任务。
STS Token的长度有最大值限制吗?
阿里云STS服务返回的安全令牌(STS Token)的长度不固定,强烈建议您不要假设安全令牌的最大长度。