首页 文章

通过域返回的S3存储桶策略403禁止在带有Varnish的Symfony应用程序中的对象请求

提问于
浏览
1

我在Varnish后面有一个PHP Symfony Web应用程序,其中包含存储在S3存储桶中的站点资产(即图像,视频) . 我想通过referrer使用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)访问资产,但在存储桶策略中定义为“允许” .

如果它是相关的,我的网络应用程序使用KnpGaufrette作为配置为使用s3的文件系统,而这又被LiipImagineBundle用于处理所需的任何图像处理 . 我的服务器也在Web服务器前面安装了Varnish 4以提供缓存(我已经尝试清除清漆缓存,在应用策略后重新启动清漆和apache) .

如果你能提供帮助,那就太好了 .

1 回答

  • 0

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

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

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

    希望它会有所帮助 .

相关问题