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

AWS S3跨账号授权外部IAM用户Bob访问失败的解决方案咨询

问题描述

我创建了名为mytest-bucket的AWS S3存储桶,尝试向本组织外另一家公司的IAM用户Bob授予该存储桶及其对象的访问权限。Bob已提供其账号ID、IAM用户名及规范ID,我执行了以下配置操作:

  1. 为mytest-bucket设置如下存储桶策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:root",
                    "arn:aws:iam::111111111111:user/Bob"
                ]
            },
            "Action": [
                "s3:*",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::mytest-bucket",
                "arn:aws:s3:::mytest-bucket/*"
            ]
        }
    ]
}
  1. 将该存储桶的Individual Block Public Access settings配置为如下状态:
    存储桶公共访问阻止设置截图
  2. 使用提供的规范ID为外部账号授予List, Write ACL权限,同时设置Read, Write存储桶ACL权限;对象所有权配置为ACLs are enabled and can be used to grant access to this bucket and its objects.

但目前Bob仍无法在其账号下看到该存储桶,且访问存储桶或对象时提示Access Denied错误。补充说明:Bob仅需读取和下载存储桶中的对象,无需上传。

现咨询:

  1. 是否可调整上述配置以让Bob访问该存储桶及其对象?
  2. 如何协助Bob获取访问权限?

解决方案

1. 可通过调整现有配置实现Bob的访问需求

当前配置存在权限冗余、范围过度开放的问题,同时可能存在权限逻辑冲突,以下是具体调整方案:

(1)精简存储桶策略

  • 移除冗余的s3:*权限,仅保留Bob必需的只读操作:s3:ListBucket(列出桶内对象)、s3:GetObject(下载对象)、s3:GetBucketLocation(部分工具需要获取桶区域信息)
  • 移除对方账号的root用户ARN,仅保留Bob的IAM用户ARN,避免权限过度开放
  • 修改后的策略示例:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/Bob"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::mytest-bucket",
                "arn:aws:s3:::mytest-bucket/*"
            ]
        }
    ]
}

(2)修正ACL配置

  • 你当前配置的List, Write和Read, Write ACL权限超出Bob需求,且可能与桶策略冲突。只需为Bob的规范ID设置桶的List权限和对象的Read权限即可
  • 对象所有权保持ACLs are enabled的配置,无需额外修改

(3)确认Block Public Access设置

从截图状态来看,Block public access to buckets and objects granted through any access control lists (ACLs)处于关闭状态,这符合跨账号授权的需求;其余三个选项即使开启也不影响,因为我们授予的是特定用户的权限,不属于公共访问范畴。


2. 协助Bob获取访问权限的具体步骤

(1)Bob需在自身账号配置IAM权限

AWS权限遵循"信任+允许"双重校验:你的桶策略是信任规则,Bob需要在自己的IAM用户上添加允许调用对应S3操作的权限策略。示例策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::mytest-bucket",
                "arn:aws:s3:::mytest-bucket/*"
            ]
        }
    ]
}

(2)指导Bob正确访问存储桶

  • 跨账号S3桶不会自动显示在Bob的控制台列表中,这是正常现象。他需要通过直接输入桶名称/ARN访问,或使用AWS CLI/SDK调用
  • CLI访问示例:
    # 列出桶内对象
    aws s3 ls s3://mytest-bucket --profile bob-profile
    # 下载指定对象
    aws s3 cp s3://mytest-bucket/目标对象路径 ./本地保存路径 --profile bob-profile
    

(3)排查常见问题

  • 确认Bob的IAM用户ARN与你桶策略中的内容完全一致(包括账号ID和用户名)
  • 检查是否存在AWS组织级的Block Public Access策略覆盖了存储桶级设置
  • 让Bob开启CloudTrail日志,查看Access Denied事件的具体细节,定位是桶策略还是IAM策略的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:15:48