AWS PHP SDK跨账号扮演角色遇AccessDenied错误求助
权限问题排查方案
核心问题定位
报错AccessDenied说明账号2的testuser没有被允许执行sts:AssumeRole操作,这和目标角色(role3)的S3权限无关——角色权限是扮演成功后生效的,当前卡在获取角色凭证的环节。
具体排查步骤
1. 给账号2的testuser添加sts:AssumeRole权限
角色信任策略只是允许testuser作为扮演主体,但用户本身需要明确被授予执行sts:AssumeRole的权限。给testuser附加以下IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::534953367916:role/role3", "Condition": { "StringEquals": { "sts:ExternalId": "1234" } } } ] }
2. 验证角色信任策略的准确性
登录账号1,检查role3的信任策略:
- 确认
Principal字段完全匹配arn:aws:iam::201255186948:user/testuser,无账号ID、用户名拼写错误 - 确认
Condition中的sts:ExternalId值为字符串"1234",大小写、引号完全一致 - 确认策略的
Effect为Allow,没有被其他拒绝规则覆盖
3. 核对代码参数一致性
检查PHP代码中的关键参数:
RoleArn是否和目标角色ARN完全一致ExternalId是否为"1234",无拼写或格式错误- STS客户端的
region设置为us-east-1是合理的(STS全局服务,该区域兼容性最好)
4. 排查权限冲突
- 检查
testuser是否被附加了IAM边界或组织SCP(服务控制策略),这些规则可能会拒绝sts:AssumeRole操作 - 确认账号2的根用户或其他权限组没有给
testuser设置拒绝策略
总结
绝大多数此类问题都是因为用户缺少sts:AssumeRole权限,而非角色信任策略或角色本身的权限配置错误。先给testuser添加对应权限,再逐一验证其他配置项即可解决。
内容的提问来源于stack exchange,提问作者stubborn
相关产品推荐
相关产品推荐

