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