如何通过CloudFlare

时间:2017-12-25 08:12:59

标签: amazon-s3 cloudflare

让我们说用户'头像上传并存储在Amazon S3上,我们有一个名为mywebsite.com的域名,我想使用CloudFlare来缓存S3存储桶中的文件。我该怎么做?

2 个答案:

答案 0 :(得分:7)

我们可以在cloudflare网站上找到的文档是相当隐含的,我不得不google很多才能使它工作。所以,我的解决方案可能并不全面,但可能已经足够开始了。

1)创建一个名为avatars.mywebsite.com

的存储桶

2)向其添加以下政策。政策,而不是CORS。

{
    "Version": "2012-10-17",
    "Id": "http referer policy",
    "Statement": [
        {
            "Sid": "CloudFlare Requests",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::avatars.mywebsite.com/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "103.21.244.0/22",
                        "103.22.200.0/22",
                        "103.31.4.0/22",
                        "104.16.0.0/12",
                        "108.162.192.0/18",
                        "131.0.72.0/22",
                        "141.101.64.0/18",
                        "162.158.0.0/15",
                        "172.64.0.0/13",
                        "173.245.48.0/20",
                        "188.114.96.0/20",
                        "190.93.240.0/20",
                        "197.234.240.0/22",
                        "198.41.128.0/17"
                    ]
                }
            }
        }
    ]
}

我认为它的作用是限制对存储桶的访问,以便只能使用属于CloudFlare并且可能在其网站上某处找到的IP来访问它。另外,我相信IdSid可以包含您的案例中有意义的任何信息。

3)在CloudFlare DNS管理器中添加CNAME记录。名称应为avatars,值为avatars.mywebsite.com.s3.amazonaws.com

4)现在,如果您想使用您网站上的user/1/avatar.jpg路径访问存储桶中的文件,请使用以下src:

https://avatars.mywebsite.com/user/1/avatar.jpg

5)值得指出的是,如果使用HTTPS,可能需要在Full(Strict)信息中心中将SSL级别从Full更改为CloudFlare

答案 1 :(得分:0)

如果将s3存储桶用于私有和公共对象,则此解决方案更适合。除非IP属于Cloudflare,否则它将限制公共访问。因此,它将s3.amazonaws.com透明地替换为自定义域。

{
    "Version": "2012-10-17",
    "Id": "http referer policy",
    "Statement": [
        {
            "Sid": "CloudFlare Requests",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::avatars.mywebsite.com/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "173.245.48.0/20",
                        "103.21.244.0/22",
                        "103.22.200.0/22",
                        "103.31.4.0/22",
                        "141.101.64.0/18",
                        "108.162.192.0/18",
                        "190.93.240.0/20",
                        "188.114.96.0/20",
                        "197.234.240.0/22",
                        "198.41.128.0/17",
                        "162.158.0.0/15",
                        "104.16.0.0/12",
                        "172.64.0.0/13",
                        "131.0.72.0/22",
                        "2400:cb00::/32",
                        "2606:4700::/32",
                        "2803:f800::/32",
                        "2405:b500::/32",
                        "2405:8100::/32",
                        "2a06:98c0::/29",
                        "2c0f:f248::/32"
                    ]
                }
            }
        }
    ]
}

P.S:不要忘记更新CloudFlare服务器列表https://www.cloudflare.com/ips/