3

我在 Varnish 后面有一个 PHP+Symfony Web 应用程序,其站点资产(即图像、视频)存储在 S3 存储桶中。我想通过引用者使用 s3 存储桶策略来限制对这些资产的访问。我应用于存储桶的策略是(删除了识别信息):

{
"Version": "2012-10-17",
"Id": "http referrer policy example",
"Statement": [
    {
        "Sid": "Allow get & put requests referred by test.com.",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::mybucket/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "https://www.test.com/*",
                    "https://test.com/*"
                ]
            }
        }
    },
    {
        "Sid": "Explicit deny to ensure requests are allowed only from specific referrer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::mybucket/*",
        "Condition": {
            "StringNotLike": {
                "aws:Referer": [
                    "https://www.test.com/*",
                    "https://test.com/*"
                ]
            }
        }
    }
]
}

我已经将我的政策与多个 SO 和其他论坛帖子进行了比较,这似乎是正确的。如果我将此策略应用于我的存储桶,则对我网站任何页面上的每个资产的请求都会显示为中断,响应状态为 403 Forbidden:

Request URL:http://mybucket.s3-eu-west-1.amazonaws.com/site-assets/img/film-icon.svg
Request Method:GET
Status Code:403 Forbidden
Remote Address:54.231.131.120:80
Referrer Policy:no-referrer-when-downgrade

如果我删除该政策,它会再次起作用。所以该策略正在生效,它只是不允许我自己的域(在此示例代码中为 test.com)访问资产,但它在存储桶策略中定义为“允许”。

如果相关,我的 Web 应用程序使用 KnpGaufrette 作为配置为使用 s3 的文件系统,而 LiipImagineBundle 又使用它来处理需要的任何图像处理。我的服务器还在 Web 服务器前面安装了 Varnish 4 以提供缓存(我曾尝试清除 varnish 缓存,在应用策略后重新启动 varnish 和 apache)。

如果你能帮忙,那就太好了。

4

2 回答 2

1

我遇到了同样的问题,你只需要添加

   "aws:Referer": [
    "https://www.test.com/*",
     "https://test.com/*",
 "https://s3-us-west-2.amazonaws.com/mybucket/*"
    ]

到您的存储桶策略(将 URL 替换为您的区域和存储桶名称),它将开始工作。

希望它会有所帮助。

于 2017-07-18T18:52:31.293 回答
0

作为回应,您应该能够看到 aws Referer url。如果它与您在“aws:Referer”中提到的网址列表不同,请添加。

于 2019-11-30T12:51:02.380 回答