Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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

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 AWS S3 Bucket策略-仅允许前缀内的GetObject_Amazon Web Services_Amazon S3_Bucket - Fatal编程技术网

Amazon web services AWS S3 Bucket策略-仅允许前缀内的GetObject

Amazon web services AWS S3 Bucket策略-仅允许前缀内的GetObject,amazon-web-services,amazon-s3,bucket,Amazon Web Services,Amazon S3,Bucket,我试图在我的bucket上设置一个策略,允许对我的对象进行公共“GetObject”访问,但只允许在某个前缀内的对象。像这样: { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::mybucket/publicstuff/*" } 问题是,AWS警告我,这会使整个桶公开。果然是这样;如果

我试图在我的bucket上设置一个策略,允许对我的对象进行公共“GetObject”访问,但只允许在某个前缀内的对象。像这样:

    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::mybucket/publicstuff/*"
    }
问题是,AWS警告我,这会使整个桶公开。果然是这样;如果我试图从/mybucket/anywhere/获取一个对象,S3将免费提供它。所以“mybucket”之后的所有内容都被忽略了


是否有任何方法可以构建适用于bucket中特定前缀的bucket策略?我尝试了一个策略条件,但发现在使用s3:GetObject操作时无法使用s3:prefix。

这完全可以,尽管您看到一个指示,表明您的bucket是可公开访问的。您应该注意到,此指示器显示提供了对此存储桶(部分内容)的公共访问。
因此,为了检查是否没有问题,您可以在公共可访问文件夹外测试一个文件,并将其与根据您的策略应可公开访问的文件进行比较。
您可以在下图中看到,我制作了一个子文件夹my bucket(toignore),可供公众访问:

这是铲斗的树状图:

├── 目录
│ ├── 托伊诺尔
│ │ └── i、 txt
└── ni.txt


根据我的政策,i.txt是可以公开访问的,而ni.txt不是,并且指示器显示了公共访问。

谢谢@michael和@mok,我找到了答案:我是个白痴。我用来验证标准行为的其他对象恰好拥有允许getObject的单独权限,我不记得将它们放在那里或注意到它们在那里。当我删除这些权限时,看起来我仍然可以访问这些对象,但实际上我正在获取缓存副本。当删除这些虚假权限并使用完全不同的浏览器时,我验证了我最初发布的策略是正确的。抱歉给你添麻烦了

删除此策略后,您应该会发现,由于与此策略无关的原因,该存储桶已经并且仍然是公共的。请告知。嗨@Michael sqlbot,bucket是私人的,否则。如果我删除此策略,则存储桶是私有的。如果我把它包括在内,这个桶是完全公开的。我会尝试复制,但直觉告诉我你误解了什么,尽管我不知道到底是什么。核实一下,这是你的全部政策吗?您确实删除并重新添加了此策略,以仔细检查/验证此路径前缀之外的测试对象“x”在添加时是否变为公共,在删除时是否恢复为私有?这是在哪个地区?谢谢@mok,这不是我得到的结果。无论是否在前缀中,所有内容都将公开,并通过访问内容进行验证。你的桶在哪个地区?