如何使 S3 对象只能从某些 IP 地址读取?

4 amazon-s3 amazon-web-services cloudflare

我正在尝试设置 Cloudflare 来缓存来自 S3 的图像。我希望在这样做时尽可能受到限制(最不宽容)。我认为我需要接受来自 Cloudflare 的请求才能读取我的 S3 图像。我希望所有其他请求都被拒绝。

我遵循了本指南:https://support.cloudflare.com/hc/en-us/articles/360037983412-Configuring-an-Amazon-Web-Services-static-site-to-use-Cloudflare

我没有在我的存储桶上启用静态网站托管,因为这对于我的情况来说不是必需的。

在我的存储桶权限中,我关闭了“阻止所有公共访问”,并暂时关闭了“阻止对通过新公共存储桶或访问点策略授予的存储桶和对象的公共访问”。我需要这样做才能添加存储桶策略。

然后,我从上面的链接添加了一个存储桶策略,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::www.example.com/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        <CLOUDFLARE_IP_0>,
                        <CLOUDFLARE_IP_1>,
                        <CLOUDFLARE_IP_2>,
                        ...
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

此时,AWS控制台中出现一条消息:

“此存储桶具有公共访问权限。您已提供对此存储桶的公共访问权限。我们强烈建议您永远不要授予对 S3 存储桶的任何类型的公共访问权限。”

然后,我重新打开“阻止对通过新公共存储桶或访问点策略授予的存储桶和对象的公共访问”,并关闭“阻止通过任何公共存储桶或访问点策略对存储桶和对象进行公共和跨账户访问”。

此时,S3 图像请求行为似乎按预期工作,但我不确定我是否将所有内容设置为最低限度的许可,特别是考虑到 AWS 控制台中的警告消息。

根据我的描述,我是否在此存储桶中正确设置了仅接受来自 Cloudflare 的读取请求并拒绝所有其他请求?我想确保来自 Cloudflare 之外的任何来源的请求都将被拒绝。

Joh*_*ein 5

听起来不错!如果它可以在 CloudFlare 上运行,但不能从其他地方运行,那么它就满足您的要求。

这些阻止公共访问的警告是故意吓人的,让人们在向世界打开水桶之前三思而后行。

您的策略很好地仅限于GetObject且仅适用于有限的 IP 地址范围。