我试图让 Cloudflare 充当 S3 上托管文件的 CDN,以一种没有人可以直接访问文件的方式。例如:

S3 存储桶:cdn.mydomain.com.s3.amazonaws.com
CDN(Cloudflare):cdn.mydomain.com
我想要的是能够访问 cdn.mydomain.com/file.jpg (Cloudflare) 而不是 cdn.mydomain.com.s3.amazonaws.com/file.jpg (S3)。

现在,我在 Cloudflare 上配置了一个指向我的存储桶的 CNAME,以及以下 CORS:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

如果我尝试通过 S3 或 CDN 访问任何文件,我的权限会被拒绝。如果我将文件设为公开(又名受让人所有人),我就可以通过 S3 和 CDN 访问该文件。

我试过用 AllowedOrigin 改变 *.mydomain.com ,但没有运气。

最佳答案

我找到了解决方案。 article at CloudFlare's support center 没有提到这一点。

您必须编辑 存储桶策略 ,而不是 CORS。而不是像那篇文章所说的那样允许您的域访问存储桶,您必须允许 CloudFlare IP。作为引用,这里是 IP 列表:https://www.cloudflare.com/ips

这是用于 CloudFlare 的存储桶策略示例:

    {
        "Sid": "SOME_STRING_ID_HERE",
        "Effect": "Allow", // or deny
        "Principal": {"AWS": "*"}, // or whatever principal you want
        "Action": "s3:GetObject", // or whatever action you want
        "Resource": "arn:aws:s3:::cdn.mydomain.com/*", // or whatever resource you want
        "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",
                    "199.27.128.0/21"
                ]
            }
        }
    }

关于amazon-s3 - 带有 Cloudflare 的 S3 不允许直接访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39731914/

10-16 10:09