我有一个AWS s3存储桶和一个我允许其他用户放置文件/对象的目录。该目录是公开的。使用第三方软件(即Alteryx),我试图获取对象。从这个工具,我使用我的访问密钥和秘密连接到AWS。我可以列出目录中的文件,但只能读取我创建的文件(而不是其他人放入目录的文件)。我猜测问题在于对象的所有权(我拥有的对象可以被读取,其他人拥有的文件无法使用我的Access Key读取)。有关如何以编程方式更改文件的ownerhsip的任何建议?
我当前对相关目录的存储桶策略。
我猜测问题在于对象的所有权
是的,你的猜测是正确的。
关于如何以编程方式更改苍蝇的所有权的任何建议?
您可以通过从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
。
你是对的。由于您是存储桶所有者,而不是对象所有者,因此您无法访问其他用户拥有的对象。但是,在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。