全部产品
Search
文档中心

访问控制:RAM角色和STS Token常见问题

更新时间:Sep 18, 2026

本文介绍了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用户在控制台切换身份扮演角色。

    • 通过CLI/SDK调用 AssumeRole接口扮演角色。

    说明

    创建可信实体为云账号类型的RAM角色时,默认信任该云账号本身,也即账号下的所有身份均可扮演该角色。可通过修改角色信任策略,限定该RAM角色只能被账号(当前或其他特定账号)下的指定RAM身份扮演,具体请参见修改RAM角色的信任策略。

  • 云服务:允许指定的云服务扮演该角色。这种角色称之为服务角色。

    适用场景:

    • 委托云服务代表用户完成指定操作。如用户可通过实例RAM角色,在ECS实例中访问OSS bucket中的数据。

    • 大多数云服务会自动创建服务关联角色(一种特殊的RAM角色,由云服务预定义),用于解决云服务间的授权访问问题。

  • 身份提供商:允许来自指定身份提供商(支持SAML2.0或OIDC协议)的用户扮演该角色。

    适用场景:

    • IdP用户使用角色SSO的方式登录控制台。

    • 调用AssumeRoleWithSAML或AssumeRoleWithOIDC接口,传入从IdP处获得的令牌(SAML响应或ID Token)扮演角色。

如何限制指定RAM用户扮演指定RAM角色?

  1. 修改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"
    }
  2. 为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?

  1. 登录RAM控制台。

  2. 在左侧导航栏,选择身份管理 > 角色。

  3. 单击目标RAM角色名称。

  4. 在基本信息区域,查看RAM角色ARN。在角色详情页的基本信息区域,查看 ARN 字段的值(格式为 acs:ram::<AccountID>:role/<RoleName>),单击右侧复制按钮即可复制。

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秒。

说明

STS获取的多个Token是否同时有效?

STS Token在过期之前都是有效的,无论是否创建了新的STS Token。

STS Token发生泄露时如何处理?

如果您通过扮演RAM角色获取的安全令牌(STS Token)发生泄露,您可以按以下步骤回收所有已经颁发的STS Token。

  1. RAM控制台

  2. 移除RAM角色的所有权限策略。

    具体操作,请参见为RAM角色移除权限。

  3. 删除RAM角色。

    具体操作,请参见删除RAM角色。

    删除RAM角色后,所有通过扮演该RAM角色获取的且未过期的STS Token都将立即失效。

如果您还需要使用该RAM角色,您可以重新创建同名角色并授予相同的权限策略,使用新创建的RAM角色继续完成您的任务。

STS Token的长度有最大值限制吗?

阿里云STS服务返回的安全令牌(STS Token)的长度不固定,强烈建议您不要假设安全令牌的最大长度。