通过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的规则:
- 登录AWS控制台,进入IAM角色页面,找到
SomeRole - 切换到信任关系标签,点击编辑信任策略
- 添加以下语句(替换为你的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配置完成角色切换:
- 配置SSO profile:
aws configure sso
按照提示依次输入:
- SSO启动URL(即你平时登录的SSO URL)
- SSO区域(如
ap-southeast-2) - 登录SSO后选择对应的账户和目标角色
- 设置默认区域、输出格式等
- 使用配置好的profile执行命令:
# 测试S3访问 aws s3 ls --profile your-sso-profile # 若需要切换到其他角色,直接在配置时选择对应角色即可,无需手动调用assume-role
内容的提问来源于stack exchange,提问作者TrongBang
相关产品推荐
相关产品推荐

