使用 boto3 创建 S3 对象时如何分配存储桶所有者完全控制?

Sim*_*att 8 amazon-s3 amazon-web-services python-3.x amazon-iam boto3

我正在使用 Python 中的 Amazon boto3 库将文件上传到另一个用户存储桶中。应用于其他用户存储桶的存储桶策略配置如下

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3BucketList",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::uuu"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::bbb"
        },
        {
            "Sid": "DelegateS3ObjectUpload",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::uuu"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::bbb",
                "arn:aws:s3:::bbb/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

其中uuu是我的用户 ID,bbb是属于其他用户的存储桶名称。我的用户和其他用户是属于不同组织的 IAM 帐户。(我知道这个策略可以写得更简单,但目的是在上传上添加检查以阻止没有创建适当权限的对象)。

然后,我可以使用以下代码列出存储桶中的所有对象,并将新对象上传到存储桶。这是可行的,但是由于亚马逊默认将对象设为对象创建者的私有对象,因此存储桶的所有者无法访问该对象

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3BucketList",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::uuu"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::bbb"
        },
        {
            "Sid": "DelegateS3ObjectUpload",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::uuu"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::bbb",
                "arn:aws:s3:::bbb/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

一旦我取消注释 ACL 选项,代码就会生成“拒绝访问”错误消息。如果我将其重定向到我自己组织内的存储桶,则 ACL 选项会成功,并且存储桶的所有者将获得对该对象的完全权限。

我现在不知道如何解决这个问题,尤其是亚马逊自己的建议似乎是按照我展示的方式来做。

https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-owner-access/

https://aws.amazon.com/premiumsupport/knowledge-center/s3-require-object-ownership/

Ole*_*oha 5

仅在存储桶策略中拥有权限是不够的。

检查您的用户(或角色)是否缺少IAMs3:PutObjectAcl中的权限。