Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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 S3存储桶仍然是公共的,尽管有CloudFront源站身份访问策略_Amazon Web Services_Amazon S3_Amazon Cloudfront - Fatal编程技术网

Amazon web services S3存储桶仍然是公共的,尽管有CloudFront源站身份访问策略

Amazon web services S3存储桶仍然是公共的,尽管有CloudFront源站身份访问策略,amazon-web-services,amazon-s3,amazon-cloudfront,Amazon Web Services,Amazon S3,Amazon Cloudfront,我遵循了有关设置CloudFront(CF)web发行版以从我的s3 bucket中提供私人内容的文档,但尽管调整了发行版中的设置,我的s3 bucket文件仍然可以通过s3.amazonaws.com/bucket name/file name.ext访问。我很好奇为什么会出现这种情况,因为当我创建一个CF源访问标识时,我选择了是,更新Bucket Policy,我认为它可以通过我的s3 Bucket url关闭读取访问,但它没有。我是否错过了应该进行的调整?我认为我在CF上所做的设置应该调整

我遵循了有关设置CloudFront(CF)web发行版以从我的s3 bucket中提供私人内容的文档,但尽管调整了发行版中的设置,我的s3 bucket文件仍然可以通过
s3.amazonaws.com/bucket name/file name.ext
访问。我很好奇为什么会出现这种情况,因为当我创建一个CF源访问标识时,我选择了
是,更新Bucket Policy
,我认为它可以通过我的s3 Bucket url关闭读取访问,但它没有。我是否错过了应该进行的调整?我认为我在CF上所做的设置应该调整我的s3存储桶,使其无法通过GET请求访问

以下是我的s3桶策略:

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *My-Key-ID*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket-name/*"
        }
    ]
}
但是,我注意到对单个文件的权限,但不确定它们与什么相关

以下是我的CF设置:

分布:

来源:(在初始身份创建时,我选择了“是,更新桶策略”)

行为(上半部分):

行为(下半部分):


存储桶策略和对象ACL协同工作

仍然允许策略或对象ACL允许的任何内容。。。除非bucket策略明确拒绝

您的策略允许通过CloudFront下载

您的对象ACL允许“所有人”打开/下载它们,因此,仍然允许匿名直接访问bucket中的对象

最正确的解决方案是修改对象ACL以删除“所有人”的“打开/下载”功能,如果不希望匿名用户从S3访问对象,这显然是不正确的。在控制台中,单击对象“Everyone”条目上的×,然后单击保存。你应该发现这解决了问题

将来的对象不应作为公共可读对象上载

这也可以通过使用自定义bucket策略覆盖对象ACL来实现,但这是一种高级配置,如果操作不正确,将破坏您在控制台中操作对象的能力,并将不必要地使事情复杂化