我正在尝试创建一个S3存储桶策略,该策略仅允许.docx文件类型(易于执行),但也允许我创建文件夹。
每次创建文件夹时,我都必须临时删除存储桶策略,创建文件夹,然后恢复该策略。
这是我目前的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyDocFiles",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:putObject",
"NotResource": "arn:aws:s3:::input-bucket/*.docx"
}
]
}
如果您可以为最终政策提供附加的Sid,那就太好了。
答案 0 :(得分:1)
Amazon S3实际上不使用文件夹。而是,每个对象的文件名(Key
)包含对象的完整路径。
例如,此命令使用AWS Command-Line Interface (CLI)将文件复制到Amazon S3:
aws s3 cp foo.docx s3://my-bucket/invoices/foo.docx
即使invoices
文件夹不存在,此命令也将成功运行。 Amazon S3界面将自动使invoices
文件夹“出现”。但是,它只是显示对象键中使用的“公用前缀”。
假设该对象随后被删除:
aws s3 rm s3://my-bucket/invoices/foo.docx
这不仅会删除对象,还会使文件夹消失!。这是因为该文件夹实际上从未存在过。
因此,您不必担心制作文件夹和删除文件夹。 简单地假装它们存在并且一切都会正常运行。
但是,您问,管理控制台中的创建文件夹按钮如何?它是谁工作的?好吧,它实际上创建了一个大小为零的对象,其名称与“文件夹” 相同。这会导致该文件夹“出现”在用户界面中(因为存在带有该前缀的对象),但是对创建该文件夹没有影响,因为该文件夹不存在。
因此,“允许创建文件夹”的策略实际上需要允许创建不带前缀的对象,但是我建议您甚至不用担心,因为创建文件夹没必要。
答案 1 :(得分:1)
正如@ john-rotenstein回答所说明的那样,您实际上不需要创建文件夹。
但是,如果您希望能够在创建空前缀的控制台中使用创建文件夹功能,只需将文件夹模式“ * /”添加到非资源行中即可
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyDocFiles",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:putObject",
"NotResource": [
"arn:aws:s3:::input-bucket/*.docx",
"arn:aws:s3:::input-bucket/*/"
]
}
]
}