AWS s3访问因所有权而被拒绝?

问题描述 投票:1回答:2

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

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

enter image description here

amazon-web-services amazon-s3 acl
2个回答
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


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

© www.soinside.com 2019 - 2024. All rights reserved.