如何获取AWS S3文件夹的ACL权限以检查其是否具有写入新文件的权限

时间:2019-05-06 12:58:50

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

我想检查是否可以使用S3::ObjectACL将新文件写入S3文件夹

vs3 = AWS::S3.new
obj = s3.buckets["my_bucket"].object["folder1/sub-folder/"]
puts obj.acl.grants

但是上面的代码返回

Aws::S3::Errors::NoSuchKey (The specified key does not exist.)

但是上面的代码对特定文件有效,但对文件夹无效。如何使其适用于S3前缀?

1 个答案:

答案 0 :(得分:0)

Amazon S3中实际上不存在文件夹。例如,您可以使用以下AWS Command-Line Interface (CLI)命令在不存在的文件夹中创建对象:

aws s3 cp foo.txt s3://my-bucket/unicorn/soup/foo.txt

这将导致unicornsoup目录神奇地出现,因为它们实际上并不存在。如果该对象被删除,这些目录也将消失(因为它们不存在!)。

Amazon S3是一个平面对象存储系统。对象的路径实际上存储在对象的Key(文件名)中。一些API调用有助于维持目录存在的虚构,但实际上它们不存在。

有时需要“创建”目录,例如通过管理控制台。这是通过创建一个具有目录名称的零长度对象来完成的。这不会“创建”目录,只会使它在某些API调用中显示为通用前缀

此外,由于目录不存在,因此无法在目录上设置ACL 。您无法通过设置目录权限来控制是否有人可以在目录中创建对象(因为是的,目录不存在)。

如果您想授予任何人写入文件夹的权限,则可以使用 Bucket Policy (桶策略),该策略使用特定的前缀授予访问权限>。如果您希望授予对特定IAM用户的访问权限,则可以将策略附加到IAM用户。