AWS S3 存储桶跨账户策略与内部账户混合

AWS S3 存储桶跨账户策略与内部账户混合

我们使用 S3 存储桶在两家公司之间共享文件。我们创建了私有 S3 存储桶,并且我们为使用此存储桶的应用程序指定了专用用户(使用它的 aws_key 和 aws_secret)。我们发现我们没有权限访问 getObject,但我们成功地将 Object 放入了存储桶。

我还创建了对此存储桶具有权限的角色并将其分配给application_user,但这并不能解决问题。

因此,主要目标是让外部帐户和内部 IAM 用户对同一 S3 存储桶具有读取、列出、放置访问权限。我将指出,现在外部公司可以访问它,并且具有此策略。我没有访问外部 aws 帐户的权限。

下面是 s3 的资源策略。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SharedS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::199999999999:root",    <--- external account 
                    "arn:aws:iam::111111111111:user/application_user" <-- our application user
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::shared-bucket",
                "arn:aws:s3:::shared-bucket/*"
            ]
        }
    ]
}

答案1

S3 权限有点复杂,因为你不仅拥有存储桶权限担心,但也要担心目的您上传的内容有其自己的权限。

你的桶策略上述操作允许两家公司上传对象,正如您所见,它运行正常。但是,当外部公司上传对象时,其默认权限仅允许创建者阅读即由外部公司。即使是在你的默认存储桶如果是其他人上传的,则无法读取。这有点违反直觉。

解决方案是确保上传的对象具有允许两个帐户读取的 ACL。

S3 上传对话框

您还需要将其添加s3:PutObjectAcl到存储桶策略权限列表中才能使其正常工作。

类似地,如果您从命令行上传,则可以在上传后使用 修改对象 acl aws s3api put-object-acl

希望有帮助:)

相关内容