我在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被禁止使用:
: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 Cache,在应用策略后重新启动清漆和Apache,以防万一(。
如果您可以提供帮助,那就太好了。
我遇到了同样的问题,您只需要添加
"aws:Referer": [
"https://www.test.com/*",
"https://test.com/*",
"https://s3-us-west-2.amazonaws.com/mybucket/*"
]
到您的存储策略(将URL替换为您的区域和存储桶名(,并且它将开始工作。
希望它会有所帮助。
响应时,您应该能够看到AWS参考器URL。如果它与您在" AWS:Referer"中提到的URL列表不同,则添加。