Amazon web services Bucket策略仅允许文件类型,但允许创建文件夹
我正在尝试创建一个S3 bucket策略,该策略只允许.docx文件类型(易于操作),但也允许我创建文件夹 此时,每次我想要创建文件夹时,我都必须临时删除bucket策略,创建文件夹,然后恢复策略 以下是我目前的政策:Amazon web services Bucket策略仅允许文件类型,但允许创建文件夹,amazon-web-services,amazon-s3,amazon-iam,Amazon Web Services,Amazon S3,Amazon Iam,我正在尝试创建一个S3 bucket策略,该策略只允许.docx文件类型(易于操作),但也允许我创建文件夹 此时,每次我想要创建文件夹时,我都必须临时删除bucket策略,创建文件夹,然后恢复策略 以下是我目前的政策: { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOnlyDocFiles", "Effect": "Deny", "Principal": "*",
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyDocFiles",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:putObject",
"NotResource": "arn:aws:s3:::input-bucket/*.docx"
}
]
}
如果您可以提供带有附加Sid的最终策略,那就太好了。Amazon S3实际上不使用文件夹。相反,每个对象的文件名(
Key
)包含对象的完整路径
例如,此命令使用以下命令将文件复制到Amazon S3:
即使发票
文件夹不存在,此命令也将成功运行。Amazon S3界面将使发票
文件夹自动“显示”。但是,它仅显示对象键中使用的“公共前缀”
假设对象随后被删除:
aws s3 rm s3://my-bucket/invoices/foo.docx
这不仅会删除对象,还会使文件夹消失。这是因为该文件夹实际上从未存在过
因此,您不应该关心创建文件夹和删除文件夹只要假装它们存在,一切都会好起来。
但是,您会问,管理控制台中的“创建文件夹”按钮如何?是谁干的?实际上,它创建了一个大小为零的对象,其名称与“文件夹”相同。这会导致文件夹“出现”在用户界面中(因为有一个具有该前缀的对象),但对创建文件夹没有影响,因为文件夹不存在
因此,“允许创建文件夹”的策略实际上需要允许创建不带前缀的对象,但我建议您甚至不用担心,因为不需要创建文件夹。Amazon S3实际上不使用文件夹。相反,每个对象的文件名(
Key
)包含对象的完整路径
例如,此命令使用以下命令将文件复制到Amazon S3:
即使发票
文件夹不存在,此命令也将成功运行。Amazon S3界面将使发票
文件夹自动“显示”。但是,它仅显示对象键中使用的“公共前缀”
假设对象随后被删除:
aws s3 rm s3://my-bucket/invoices/foo.docx
这不仅会删除对象,还会使文件夹消失。这是因为该文件夹实际上从未存在过
因此,您不应该关心创建文件夹和删除文件夹只要假装它们存在,一切都会好起来。
但是,您会问,管理控制台中的“创建文件夹”按钮如何?是谁干的?实际上,它创建了一个大小为零的对象,其名称与“文件夹”相同。这会导致文件夹“出现”在用户界面中(因为有一个具有该前缀的对象),但对创建文件夹没有影响,因为文件夹不存在
因此,“允许创建文件夹”的策略实际上需要允许创建不带前缀的对象,但我建议您甚至不用担心,因为不需要创建文件夹。正如@john rotenstein answer解释的,您不需要实际创建文件夹 但是,如果您希望能够在控制台中使用创建空文件夹的创建文件夹功能,只需将前缀添加到资源行,而不是文件夹模式“*/”
{
"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/*/"
]
}
]
}
正如@john rotenstein answer解释的那样,您不需要实际创建文件夹 但是,如果您希望能够在控制台中使用创建空文件夹的创建文件夹功能,只需将前缀添加到资源行,而不是文件夹模式“*/”
{
"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/*/"
]
}
]
}
您想将哪些文件放入“文件夹”中?事实上,s3没有“文件夹”的概念,只是前缀。我想输入哪些文件并不重要……我相信有一种方法可以添加所有文件夹……欢迎回答。你想在“文件夹”中放置哪些文件?事实上,s3没有“文件夹”的概念,只是前缀。我想输入哪些文件并不重要……我相信有一种方法可以添加所有文件夹……欢迎回答。感谢您的详细解释。感谢您的详细解释。非常感谢。非常有用,非常感谢。非常有用。