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

跨AWS账号S3访问:仅靠身份与信任策略可行吗?问题排查

问题解答

这种跨账号访问方式是否可行?

可行。通过IAM角色实现跨账号S3访问是AWS官方支持的方案,无需配置桶策略即可生效,与你参考的官方文档逻辑一致。

当前配置的核心问题

  1. 账号B的Root用户缺少sts:AssumeRole的显式权限
    AWS Root用户默认不会自动拥有所有操作的权限,即使账号A的角色信任策略允许Root扮演该角色,账号B的Root用户仍需要显式被允许执行sts:AssumeRole,否则会触发IAM的隐式拒绝规则。

  2. 可能存在信任策略配置错误
    若信任策略中的<account B ID>未替换为实际的12位数字账号ID,或ARN格式有误,会导致信任关系不生效。

修改步骤

1. 为账号B的Root用户添加IAM权限策略

在账号B的IAM控制台中,为Root用户附加以下策略,允许其扮演账号A中的目标角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<账号A的12位ID>:role/<你在账号A创建的角色名称>"
        }
    ]
}

2. 验证账号A中角色的信任策略

确保信任策略里的Principal是账号B Root用户的正确ARN,替换<实际账号B ID>为真实的12位数字:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<实际账号B ID>:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

3. 正确执行角色扮演操作

以AWS CLI为例,在账号B的环境中执行以下命令获取临时凭证:

aws sts assume-role --role-arn arn:aws:iam::<账号A ID>:role/<目标角色名> --role-session-name test-cross-account

使用返回的AccessKeyId、SecretAccessKey和SessionToken配置临时凭证,再访问S3:

aws s3 ls s3://connect-to-other-acct

额外建议

尽管用Root用户测试可以生效,但强烈建议遵循AWS最佳实践:在账号B中创建一个普通IAM用户或角色,为其分配sts:AssumeRole权限,再通过该实体扮演账号A的角色,避免直接使用Root账号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:40:08