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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:24