Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Bucket策略仅允许文件类型,但允许创建文件夹_Amazon Web Services_Amazon S3_Amazon Iam - Fatal编程技术网

Amazon web services 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": "*",

我正在尝试创建一个S3 bucket策略,该策略只允许.docx文件类型(易于操作),但也允许我创建文件夹

此时,每次我想要创建文件夹时,我都必须临时删除bucket策略,创建文件夹,然后恢复策略

以下是我目前的政策:

{
"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没有“文件夹”的概念,只是前缀。我想输入哪些文件并不重要……我相信有一种方法可以添加所有文件夹……欢迎回答。感谢您的详细解释。感谢您的详细解释。非常感谢。非常有用,非常感谢。非常有用。