Amazon S3明确拒绝与Liip Imagine Bundle导致404

时间:2017-10-16 13:51:11

标签: php symfony amazon-s3 liipimaginebundle

背景

我试图明确拒绝向我的S3存储桶中的资产发出GET请求,除非引荐来源是托管它们的实际网站。其中许多资产都是缓存图像,这些图像是Liip Imagine捆绑过滤器(以及这些缓存项目源自的原始上传图像)的结果。

问题

当我在我的存储桶中添加显式拒绝语句对这些图像的策略请求时,返回403,这很好,许多非缓存图像将加载到正确域下的网站中,但是尝试使用正确的域来解析缓存的图像Imagine捆绑包导致404。

我的存储桶政策

(出于隐私原因,域和存储桶被遮挡)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::[MY_BUCKET]/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": "https://[MY_DOMAIN]/*"
                }
            }
        },
        {
            "Sid": "ExplicitDenyReferer",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[MY_BUCKET]/*",
            "Condition": {
                "StringNotLike": {"aws:Referer": "https://[MY_DOMAIN]/*"}
            }
        }
    ]
}

我根据以下信息构建了此政策:

http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-4

查看检查员,我可以看到有这样的媒体解析请求:

在请求标题中:

  • 权限: [MY_DOMAIN]
  • 方法:获取
  • 路径: /media/cache/resolve/logo/main-logo.png
  • 计划: https
  • referer: https://[MY_DOMAIN]/

只要删除Bucket策略中的Explicit Deny语句,这些图像就可以正常加载。我对404的原因感到非常困惑。我可能会期待403在某种程度上错误配置,但404是出乎意料的。

我已经验证了请求标头中的引荐来源与它在拒绝声明中的输入完全相同。

最终我的问题是:

  • 为什么这个Deny语句会导致404这些媒体解析 请求?

  • 如何使Imagine Bundle可以创建缓存的工作 过滤器配置中的图像,但拒绝对图像的请求 那些不包含正确的引用者?

0 个答案:

没有答案