AWS s3访问由于所有权被拒绝?

时间:2019-02-26 14:37:33

标签: amazon-web-services amazon-s3 acl

我有一个AWS s3存储桶和一个目录,我已允许其他用户在该目录中放置文件/对象。该目录是公共目录。我正在使用第三方软件(即Alteryx)来获取对象。通过此工具,我使用我的访问密钥和密码连接到AWS。我可以列出目录中的文件,但只能读取我创建的文件(不能读取其他人放入目录中的文件)。我猜测问题出在对象的所有权上(我拥有的对象可以读取,其他拥有的文件无法使用我的访问密钥读取)。关于如何以编程方式更改文件ownerhsip的任何建议?

我当前有关目录的存储桶策略。

enter image description here

2 个答案:

答案 0 :(得分:0)

  

我猜问题出在对象的所有权上

是的,您的猜测是正确的。

  

关于如何以编程方式更改广告主的所有建议   文件?

您可以通过从S3存储桶中获取所有对象并将acl设置为bucket-owner-full-control来实现。

请指定您使用的编程语言。我假设您可以使用python,如果可以,请参考here

import boto3
s3 = boto3.resource('s3')
object = s3.Bucket('YOUR_BUCKET').Object('YOUR_OBJECT') 
// you can improve the code to list all the objects and iterate them
object.Acl().put(ACL='bucket-owner-full-control')

但是请注意,您只能使用将对象放入S3存储桶的其他用户凭据来执行此操作。您无法使用自己的凭据更改Object Acl

答案 1 :(得分:0)

你是对的。由于您是存储区所有者,而不是对象所有者,因此您无法访问其他用户拥有的对象。但是,在您的S3存储桶策略中,您已指定授予对存储桶所有者执行PutObject操作的完整对象访问权限。应该已经完成​​了。

"Condition": {
    "StringEquals": {
        "s3:x-amz-acl": "bucket-owner-full-control"
    }
}

我最好的猜测是因为存储桶中文件的分段上传,(部分上传大对象)或将对象从一个存储桶移动到另一个存储桶。

您始终可以使用以下命令要求对象所有者更新对象的ACL。

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

我已经链接了资源here

相关问题