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

跨账号访问S3 Bucket失败:配置Bucket Policy仍遇Access Denied错误

跨账号访问S3 Bucket时调用getBucketLocation返回Access Denied的排查与解决

我尝试配置Bucket Policy实现跨账号访问S3 Bucket,已设置如下策略,但通过AWS SDK调用getBucketLocation时仍收到Access Denied错误。

策略配置:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CrossAccountPutGet",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/my-task-role"
            },
            "Action": [
                "s3:*Object",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket/*",
                "arn:aws:s3:::my-bucket"
            ]
        }
    ]
}

调用的Java代码片段:

String region = s3Clientdefault.getBucketLocation(currentBucket);

可能的问题及修复方案

  • 无效的Action写法
    策略中的s3:*Object不是AWS S3支持的合法操作名称,AWS不识别这种通配符格式。需要替换为具体的对象操作,比如:

    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetBucketLocation",
        "s3:ListBucket"
    ]
    

    若需覆盖所有对象操作,可使用s3:*Object*(注意后缀的*),但更推荐明确列出所需操作以遵循最小权限原则。

  • 跨账号角色信任策略缺失
    确保被授权的角色my-task-role(账号123456789012下)的信任策略允许发起请求的实体(如另一账号的用户/角色)扮演它。例如,若账号987654321098的用户需要扮演该角色,信任策略应包含:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::987654321098:user/your-user"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  • IAM权限与Bucket Policy的交集限制
    S3访问权限是IAM实体权限(角色/用户的权限)与Bucket Policy的交集。需确保my-task-role本身的IAM策略也允许执行相关操作,比如:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetBucketLocation",
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::my-bucket",
                    "arn:aws:s3:::my-bucket/*"
                ]
            }
        ]
    }
    
  • 确认凭证正确性
    检查SDK调用时使用的凭证确实是my-task-role的临时凭证,避免误使用其他账号或角色的凭证。可通过打印凭证关联的账号ID验证。

  • 检查SCP或其他全局限制
    若账号启用了AWS Organizations,确认服务控制策略(SCP)未阻止该角色访问S3服务或目标Bucket。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:09:54