首页 > 解决方案 > AWS 防止盗链的政策

问题描述

我正在尝试在 S3 上进行设置以防止盗链。

我从这里得到了建议:如何在不使用签名 URL 的情况下防止 Amazon S3 上的热链接?

还有这个:https ://kinsta.com/blog/hotlinking/

但是,我无法让它工作。

首先,我阻止对存储桶的所有公共访问,因此“权限”选项卡上的设置如下所示:

在此处输入图像描述

我已经设置了这样的政策:

{
    "Version": "2008-10-17",
    "Id": "HTTP referer policy example",
    "Statement": [
        {
            "Sid": "prevent hotlinking",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "http://example.co.uk/*",
                        "http://www.example.co.uk/*",
                        "https://example.co.uk/*",
                        "https://www.example.co.uk/*",
                        "http://localhost/01-example/*"
                    ]
                }
            }
        }
    ]
}

但是,当我尝试从引用站点访问存储桶中的内容时,我看不到 S3 内容。

我究竟做错了什么?

标签: amazon-web-servicesamazon-s3

解决方案


阻止公共访问选项将覆盖您正在使用的任何其他配置,因此您的存储桶策略将不会生效。

要使您的策略起作用,您需要禁用此功能,您可以选择启用几个选项以防止对存储桶策略进行进一步更改。

在与您的政策相关的说明中,Referer可以伪造标题以仍然访问这些资产,因此不应将其视为灵丹妙药。

另一种使用的解决方案是使用 S3 签名 URL 或查看在 S3 存储桶前使用CloudFront 分配,然后使用签名 cookie


推荐阅读