用 Amazon S3 和 Cloudfront 做防盗链

前言,因为一个网站上面的部分静态图片当时放在了 aws 的 S3 上面,后来陆续发现有信用卡扣款,查看了 aws 的账单发现,属于S3 和 Cloudfront 的流量导致。

因为之前没有设置访问权限,也就意味着图片链接被人拿走在任意网站或者其他地方随处访问,总所周知 aws 的速度很快,所以导致流失流量也比较快。

所以就相当了采用防盗链来防止资源外链,这里顺便说一下,S3 防盗链设置不同于国内比如说阿里云的 os ,以及七牛等类似的对象存储,因为国内都是直接可以采用选项来设置的,就是说很非常简单方便,但是 S3 不同,他需要自己编写存储桶策略来编写。

还有顺便提下,全球大部分做云计算的基本都是抄袭 aws ,包括功能啊,文档啊等,这也就是为什么 aws 目前是全球云计算份额最大的企业了。

设置参考网站:https://s3browser.com/working-with-amazon-s3-bucket-policies.php

官方也给了范例:https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-4

阅读了部分 aws 的部分策略文档,真心感叹强大。

接下来开始设置:

 进入存储桶,然后先选择‘阻止公共访问权限’至右边的编辑将阻止全部公共访问权限打开勾选。

然后选择选择存储桶策略填入以下内容:

{
    "Version": "2012-10-17",
    "Id": "PreventHotLinking",
    "Statement": [
        {
            "Sid": "Allow get requests originated from www.xx.com xx.com www.cc.com and cc.com",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::buckets/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "http://www.xx.com/*",
                        "http://xx.com/*",
                        "https://www.xx.com/*",
                        "https://xx.com/*",
                        "http://www.cc.com/*",
                        "http://cc.com/*",
                        "https://www.cc.com/*",
                        "https://cc.com/*"
                    ]
                }
            }
        }
    ]
}

官方只给出了不带 https 的配额范例,我想着因为我的站点全部都带 https,于是我就多加了几个域名在里面。

然后在进行资源测试访问,访问过的因为带缓存,所以请清除缓存测试。

资源链接打开会出现以下错误:

以上是一个简单的防盗链策略设置。

发布了87 篇原创文章 · 获赞 14 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/myarche/article/details/103990437