繁体   English   中英

用于限制对 Cloudflare IP 地址访问的 S3 存储桶策略

[英]S3 Bucket Policy for Limiting Access to Cloudflare IP Addresses

我将使用 Cloudflare 作为 S3 网站存储桶的代理,以确保用户无法使用存储桶 URL 直接访问网站。

  • 我用我的自定义域为 static 网站托管设置了一个 S3 存储桶: www.mydomain.com并上传了我的index.html文件。

  • 我有一条CNAME记录,其中www.mydomain.com -> www.mydomain.com.s3-website-us-west-1.amazonaws.com Proxy

问题:我正在尝试将存储桶策略应用于Deny访问我的网站存储桶,除非该请求源自一系列Cloudflare IP 地址 我正在按照官方 AWS 文档执行此操作,但每次尝试访问我的网站时,都会收到Forbidden 403 AccessDenied错误。

这是我的存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CloudflareGetObject",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": [
                    "arn:aws:iam::ACCOUNT_ID:user/Administrator",
                    "arn:aws:iam::ACCOUNT_ID:root"
                ]
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::www.mydomain.com/*",
                "arn:aws:s3:::www.mydomain.com"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "2c0f:f248::/32",
                        "2a06:98c0::/29",
                        "2803:f800::/32",
                        "2606:4700::/32",
                        "2405:b500::/32",
                        "2405:8100::/32",
                        "2400:cb00::/32",
                        "198.41.128.0/17",
                        "197.234.240.0/22",
                        "190.93.240.0/20",
                        "188.114.96.0/20",
                        "173.245.48.0/20",
                        "172.64.0.0/13",
                        "162.158.0.0/15",
                        "141.101.64.0/18",
                        "131.0.72.0/22",
                        "108.162.192.0/18",
                        "104.16.0.0/12",
                        "103.31.4.0/22",
                        "103.22.200.0/22",
                        "103.21.244.0/22"
                    ]
                }
            }
        }
    ]
}

默认情况下,AWS 拒绝所有请求。 资源

您的策略本身不会授予管理员 [或任何其他用户] 的访问权限,它只会将他从被明确拒绝的委托人列表中省略。 为了允许他访问资源,另一个策略声明必须使用“Effect”显式允许访问:“Allow”。 资源

现在,我们必须创建两个策略声明:- 第一个是允许,第二个是拒绝。 然后,最好只对特定 IP 设置一个“允许”策略。

最好不要将简单的事情复杂化,例如将 Deny 与 Not Principal 和 NotIPAddress 一起使用。 甚至 AWS 都说:

很少有场景需要使用 NotPrincipal,我们建议您在决定使用 NotPrincipal 之前探索其他授权选项。 资源

现在,问题出现在如何将 Cloudflare IP 列入白名单??? .

让我们用一个简单的方法 go。 以下是政策。 替换您的存储桶名称和 Cloudflare Ip。 我已经测试过它并且它正在运行。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AllowCloudFlareIP",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:getObject",
        "Resource": [
            "arn:aws:s3:::my-poc-bucket",
            "arn:aws:s3:::my-poc-bucket/*"
        ],
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": [
                    "IP1/32",
                    "IP2/32"
                ]
            }
        }
    }
 ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM