You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3调用STS扮演角色时遭遇访问拒绝错误求助

问题分析与解决方法

你遇到的问题是AWS控制台能手动扮演角色,但通过Boto3调用sts:AssumeRole时返回Access denied,且Lambda和本地环境都出现相同错误,可从以下几个方向排查:

  • 确认调用方身份的权限与信任关系
    控制台扮演角色时使用的是你的IAM用户会话,而Boto3调用依赖的是本地凭证(~/.aws/credentials)或Lambda执行角色,这两个身份需要同时满足:

    1. 自身权限策略包含sts:AssumeRole操作,且资源指定为目标角色的ARN;
    2. 被目标角色的信任策略允许(信任策略中需包含该身份的ARN)。
  • 检查目标角色的信任策略限制
    有些角色的信任策略会添加额外条件(如aws:SourceIp、aws:PrincipalTag),或者仅允许通过SAML/Web Identity等方式扮演,这类限制会阻止直接通过IAM用户/角色调用sts:AssumeRole。你需要修改目标角色的信任策略,确保包含调用方身份,示例策略如下:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::你的账号ID:user/本地用户ARN" // 替换为Lambda执行角色ARN或本地用户ARN
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 排查权限边界与SCP限制
    如果调用方是IAM用户/角色,需检查是否存在权限边界(Permission Boundary)限制了sts:AssumeRole操作;如果你的账号属于AWS组织,还要确认组织级别的服务控制策略(SCP)没有拒绝该操作。

  • 验证角色ARN的准确性
    确认代码中aws_src_role_arn的拼写、账号ID、角色名完全正确,避免因ARN错误导致权限验证失败。

  • 测试简化的会话名称
    RoleSessionName需符合2-64字符、仅含字母/数字/连字符/下划线/点号/@的要求,可尝试使用更简单的名称(如TestSession)测试是否因格式问题报错。

你的调用代码示例:

sts_client = boto3.client('sts')
assumed_role = sts_client.assume_role(
    RoleArn=aws_src_role_arn,
    RoleSessionName='AssumeRoleSession')

内容的提问来源于stack exchange,提问作者Avani Shroff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:12:15