You need to enable JavaScript to run this app. CloudFront代理S3访问时基于IP限制的bucket policy失效怎么解决?
优惠活动
大模型
产品
解决方案
定价
更多

CloudFront代理S3访问时基于IP限制的bucket policy失效怎么解决?

问题根因

请求经由CloudFront转发到S3时,S3侧获取到的aws:SourceIp是CloudFront边缘节点的公网IP,并非发起请求的真实客户端IP,因此你原先基于客户端源IP配置的拒绝规则无法触发。

修复步骤

需要同时修改CloudFront转发配置和S3 Bucket Policy:

  • 配置CloudFront透传真实客户端IP
    进入对应CloudFront分发的管理页面,找到「源请求策略」配置项,新建或编辑现有策略,在转发头列表中添加X-Forwarded-For头,保存配置后等待CloudFront分发同步生效。
  • 调整S3 Bucket Policy的IP匹配规则
    放弃使用aws:SourceIp作为判断条件,改为基于CloudFront透传的X-Forwarded-For头校验客户端IP,修改后的参考策略如下:
{
    "Version": "2012-10-17",
    "Id": "Policy1620712955196",
    "Statement": [
        {
            "Sid": "BlockGifs",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mytestbucket/*.gif",
            "Condition": {
                "ForAllValues:StringNotEquals": {
                    "aws:RequestHeader/X-Forwarded-For": "39.111.102.19"
                }
            }
        },
        {
            "Sid": "PreventBypassCloudFront",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Condition": {
                "StringNotEquals": {
                    "aws:Referer": "你自定义的私有校验值"
                }
            }
        }
    ]
}

上面第二条策略为可选配置,你可以在CloudFront的源请求配置中添加固定的Referer头作为校验标识,避免攻击者绕过CloudFront直接访问S3资源,跳过IP校验规则。

生效验证

等所有配置同步完成后,分别用允许的IP(39.111.102.19)和其他IP访问CloudFront分发下的gif资源,确认放行、拦截逻辑符合预期,再验证直接访问S3资源的逻辑是否正常即可。

内容的提问来源于stack exchange,提问作者WTK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:15:08