我想检查是否可以使用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前缀?
答案 0 :(得分:0)
Amazon S3中实际上不存在文件夹。例如,您可以使用以下AWS Command-Line Interface (CLI)命令在不存在的文件夹中创建对象:
aws s3 cp foo.txt s3://my-bucket/unicorn/soup/foo.txt
这将导致unicorn
和soup
目录神奇地出现,因为它们实际上并不存在。如果该对象被删除,这些目录也将消失(因为它们不存在!)。
Amazon S3是一个平面对象存储系统。对象的路径实际上存储在对象的Key
(文件名)中。一些API调用有助于维持目录存在的虚构,但实际上它们不存在。
有时需要“创建”目录,例如通过管理控制台。这是通过创建一个具有目录名称的零长度对象来完成的。这不会“创建”目录,只会使它在某些API调用中显示为通用前缀。
此外,由于目录不存在,因此无法在目录上设置ACL 。您无法通过设置目录权限来控制是否有人可以在目录中创建对象(因为是的,目录不存在)。
如果您想授予任何人写入文件夹的权限,则可以使用 Bucket Policy (桶策略),该策略使用特定的前缀授予访问权限>。如果您希望授予对特定IAM用户的访问权限,则可以将策略附加到IAM用户。