尝试从第一次链接打开时可访问私有S3对象

时间:2015-10-16 01:20:53

标签: amazon-web-services amazon-s3

在我的S3中,我将所有项目设置为私有,但添加了一个存储桶策略以允许我的网站读取文件。这很好。

我不明白的是,当我复制链接并在浏览器中打开它时,它会在我第一次尝试时实际打开文件,这不应该发生,但随后它从那里起作用,不允许用户访问。

为什么它允许用户在第一次尝试时通过?

清除缓存后,他们也可以再次访问该文件一次。我尝试使用对象的缓存元数据,这似乎没有什么区别。但是,当我单击s3控制台中的链接时,它永远不可访问。有没有人对此有解释,我该如何解决这个问题?

编辑:

       {
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
    {
        "Sid": "Allow get requests originated from www.example.com and example.com",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::example-bucket/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "http://www.dev.example.co/*",
                    "http://dev.example.co/*"
                ]
            }
        }
    }
]
}

这就是我的水桶政策。所有对象都将固定ACL设置为私有。

我还注意到,似乎完全忽略了存储桶策略。我创建了一个新的存储桶并将策略设置为拒绝任何访问,并将对象设置为私有,但我的网站仍然能够加载这些对象?有什么想法吗?

编辑2解决方案:

对于其他任何正在努力解决此类问题的人来说,这个问题与浏览器缓存有关。发生的事情是当有人在我的网站上查看文件时,该文件将存储在缓存中,这将允许用户在缓存中打开新窗口中的链接,从而不会阻止s3存储桶策略,因为该文件是刚从缓存中打开,实际上没有请求发送到亚马逊(据我所知)。当我将对象的Cache-Control参数更改为“no-cache'”时,我不再遇到此问题,因为无法从缓存中调用文件,而我的存储桶策略阻止了对它们的访问。希望能帮助别人。

0 个答案:

没有答案