无法访问跨账户S3存储桶

问题描述 投票:0回答:1

我正在尝试设置存储桶策略以允许跨帐户访问。

我的存储桶中有以下设置,但从 AWS SDK 调用时仍然出现“访问被拒绝”错误。

{
    "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);
amazon-web-services amazon-s3
1个回答
1
投票

假设您的代码在 Account-A 中运行,S3 存储桶位于 Account-B 中。

您所显示的存储桶策略应应用于账户-B中的存储桶。

代码使用来自 Account-A 的 IAM 角色,因此我们将其称为 Role-A

除了Bucket-B上的存储桶策略之外,您还需要向Role-A添加权限,以授予其访问Bucket-B的权限。也就是说,双方都需要权限 - Role-A 需要 use S3 的权限,而 Bucket-B 授予 Role-A 使用存储桶的权限。

关于 Role-A 的 IAM 策略与存储桶策略类似,但

Principal
不是必需的:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*Object",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-b/*",
                "arn:aws:s3:::bucket-b"
            ]
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.