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

通过SSO登录后使用CLI执行aws sts assume-role遇权限拒绝问题

问题描述

UI路径操作正常:

  • 通过SSO URL登录
  • 从SSO选择账户打开AWS控制台
  • 切换至其他角色后,操作S3正常

CLI操作时sts:AssumeRole失败:

  • 通过SSO登录后,复制页面上的access_key、secret_key、session_token
  • 用export命令配置密钥后,aws s3 ls执行正常
  • 执行以下命令报错:
$ aws sts assume-role --role-arn "arn:aws:iam::123456789:role/SomeRole" --role-session-name AWSCLI-Session --region ap-southeast-2

报错信息:

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::123456789:assumed-role/AWSReservedSSO_some_role_assume_all_123abc/myid@some.domain is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789:role/SomeRole

原因分析

AWS控制台通过SSO切换角色是由SSO服务内部完成权限映射,而CLI手动调用sts:AssumeRole时,当前使用的SSO临时角色(AWSReservedSSO_some_role_assume_all_123abc)没有被目标角色SomeRole的信任策略授权执行sts:AssumeRole操作。

解决方案

方案1:修改目标角色的信任策略

编辑SomeRole的信任策略,添加允许当前SSO角色执行sts:AssumeRole的规则:

  1. 登录AWS控制台,进入IAM角色页面,找到SomeRole
  2. 切换到信任关系标签,点击编辑信任策略
  3. 添加以下语句(替换为你的SSO角色ARN):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789:role/aws-reserved/sso.amazonaws.com/ap-southeast-2/AWSReservedSSO_some_role_assume_all_123abc"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

注:使用SSO角色的IAM角色ARN而非STS临时会话ARN,避免会话过期后需要重新修改策略

方案2:使用AWS CLI原生SSO集成(推荐)

无需手动复制临时凭证,直接通过CLI的SSO配置完成角色切换:

  1. 配置SSO profile:
aws configure sso

按照提示依次输入:

  • SSO启动URL(即你平时登录的SSO URL)
  • SSO区域(如ap-southeast-2)
  • 登录SSO后选择对应的账户和目标角色
  • 设置默认区域、输出格式等
  1. 使用配置好的profile执行命令:
# 测试S3访问
aws s3 ls --profile your-sso-profile

# 若需要切换到其他角色,直接在配置时选择对应角色即可,无需手动调用assume-role

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:18:35