提问者:小点点

覆盖不属于桶所有者的S3对象文件的权限


我是水桶主人。我的bucket中的某些文件不属于我,或者对它没有完全的控制权。我想要完全访问这些文件。不幸的是,没有文件的所有者,无法跟踪文件是如何上载到bucket的。

  • 如何覆盖存储桶中不属于我的文件的权限?
  • 接下来,如何确保上载到我的存储桶中的文件是我对它的完全控制。

我尝试将文件复制并粘贴到同一个s3存储桶中以覆盖权限,但失败了。

这是桶策略

{“版本”:“2012-10-17”,“ID”:“ABCD”,“语句”:[{“SID”:“ABCD”,“效果”:“允许”,“主体”:{“AWS”:[“arn:aws:IAM::123456789012:User/xxx”]},“操作”:[“S3:GetObject”,“S3:GetBucketLocation”,“S3:ListBucket”,“S3:PutObject”,“S3:PutObjectCl”],“资源”:[“arn:aws:s3:::XYZ/*”,“arn:aws:s3:::XYZ”]

我想从我的s3桶中访问/下载不属于我的文件


共1个答案

匿名用户

如何覆盖存储桶中不属于我的文件的权限?

来自AWS文档:

默认情况下,S3对象由上载它的AWS帐户所有。即使桶由另一个帐户拥有,也是如此。要获得对对象的访问权限,对象所有者必须显式地授予您(bucket所有者)访问权限。

对象所有者可以通过更新对象的访问控制列表(ACL)授予bucket所有者对对象的完全控制权。对象所有者可以在put或copy操作期间更新ACL,也可以在对象添加到存储桶之后更新ACL。

现在,您唯一的解决方案是通过从对象所有者的帐户或从对象所有者的S3控制台运行与下面类似的cli命令来更改现有文件的访问控制列表(ACL)。

aws s3api put-object-acl --bucket destination_awsexamplebucket --key keyname --acl bucket-owner-full-control

接下来,我如何确保我的桶中上传的文件是我完全控制它的?

您可以创建一个bucket策略,强制其他用户上载到您的bucket以授予您对这些对象的完全访问权限。这可以通过将对象的访问控制列表设置为bucket-owner-full-control来实现。

类似于下面的bucket策略将会起作用:

{
    "Id": "Policy1541018284691",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1541018283275",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::awsexamplebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            },
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/ExampleUser"
                ]
            }
        }
    ]
}

这将确保上载到存储桶的人需要将ACL设置为bucket-owner-full-control,否则上载将失败,出现AccessDenied错误。

参考资料:

  • AWS文档:更改对象访问
  • AWS文档:强制桶所有者对上载的完全控制