繁体   English   中英

使用 CannedACL 进行跨账户 S3 访问

[英]Cross account S3 access with CannedACL

我们有一个用例,我们将对象放入与我们不同帐户的 S3 存储桶中。 我们使用 IAM 用户来做到这一点。 这工作正常。

我们现在已将基于 IAM 用户的访问替换为基于 IAM 角色的访问。 因此,我创建了一个 IAM 角色,而不是 IAM 用户,并且我在所有地方(在 IAM 角色上,在 S3 存储桶上)为 IAM 角色设置了相同的权限(与 IAM 用户相同)。

但是当我尝试将 object 放入该存储桶时,它会出现 403 错误。 可能是什么原因(我应该将存储桶上的 sts arn 列入白名单吗?我们是否需要更改存储桶 ACL?)

S3 存储桶附加了以下策略

账户 A 中的 IAM 角色是:arn:aws:iam::AAAAAA:role/my-role

帐户 B 中的存储桶是:arn:aws:s3:::bucket

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow Development Write Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AAAAAA:role/my-role"
                ]
            },
            "Action": "s3:Put*",
            "Resource": [
                "arn:aws:s3:::bucket/*",
                "arn:aws:s3:::bucket"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "Allow Development Read Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AAAAAA:role/my-role"
                ]
            },
            "Action": [
                "s3:List*",
                "s3:Get*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket/*",
                "arn:aws:s3:::bucket"
            ]
        }
    ]
}

我正在使用以下代码访问它:

s3Client.putObject(new PutObjectRequest(bucketName, key, file)
                            .withCannedAcl(CannedAccessControlList.BucketOwnerFullControl));

我能在这里错过什么?

现在已修复。 为该 S3 存储桶启用了服务器端加密,而我的 IAM 角色无权访问用于加密的 KMS 密钥。 一旦此角色获得 KMS 密钥的权限,它就会起作用。

我在发出 putObject 请求时不必使用该 KMS 密钥,不确定为什么它需要 KMS 密钥的权限。

我也可以列出桶(在给予 KMS 密钥许可之前)但不能把 object(奇怪!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM