You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

S3存储桶策略防火墙异常:如何仅开放指定IP且兼容AWS服务?

解决S3存储桶IP防火墙策略失效问题

你的原策略失效原因在于Condition的逻辑关系:AWS桶策略的Condition默认是AND逻辑,只有当所有条件同时满足时,Deny规则才会触发。原策略里的NotIpAddress和BoolIfExists: aws:PrincipalIsAWSService两个条件同时成立才会拒绝,这就导致:

  • 对于普通用户的请求(非AWS服务发起),aws:PrincipalIsAWSService字段不存在,BoolIfExists条件不满足,因此整个Condition不成立,Deny规则不会生效,所以任意IP都能下载文件。

你需要调整Condition的逻辑,让Deny规则触发的条件是:请求既不在指定IP范围内,又不是来自允许的AWS服务。以下是两种符合需求的策略:

方案1:允许所有AWS服务+指定IP访问

如果需要开放所有AWS服务(而非仅Athena/Redshift)的访问,使用以下策略:

{
    "Version": "2012-10-17",
    "Id": "S3BucketPolicyFirewall",
    "Statement": [
        {
            "Sid": "DenyNonAllowedIPAndNonAWSService",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::cf-templates-1aulyhwnmubu5-ap-south-1",
                "arn:aws:s3:::cf-templates-1aulyhwnmubu5-ap-south-1/*"
            ],
            "Condition": {
                "And": [
                    {
                        "NotIpAddress": {
                            "aws:SourceIp": [
                                "1.241.233.31/32",
                                "1.2.5.1/32"
                            ]
                        }
                    },
                    {
                        "Not": {
                            "BoolIfExists": {
                                "aws:PrincipalIsAWSService": "true"
                            }
                        }
                    }
                ]
            }
        }
    ]
}

方案2:仅允许指定AWS服务(Athena/Redshift)+指定IP访问

如果只需要开放Athena、Redshift等特定服务的访问,使用aws:Service条件精准指定允许的服务,更安全:

{
    "Version": "2012-10-17",
    "Id": "S3BucketPolicyFirewall",
    "Statement": [
        {
            "Sid": "DenyNonAllowedIPAndNonAllowedServices",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::cf-templates-1aulyhwnmubu5-ap-south-1",
                "arn:aws:s3:::cf-templates-1aulyhwnmubu5-ap-south-1/*"
            ],
            "Condition": {
                "And": [
                    {
                        "NotIpAddress": {
                            "aws:SourceIp": [
                                "1.241.233.31/32",
                                "1.2.5.1/32"
                            ]
                        }
                    },
                    {
                        "Not": {
                            "StringEquals": {
                                "aws:Service": [
                                    "athena.amazonaws.com",
                                    "redshift.amazonaws.com"
                                ]
                            }
                        }
                    }
                ]
            }
        }
    ]
}

策略逻辑说明

  • 两种方案都遵循同一个核心逻辑:仅拒绝「不在指定IP范围内」且「不是允许的AWS服务发起」的请求。
  • 指定IP的请求:无论用户是否登录,都能正常访问存储桶。
  • 允许的AWS服务请求:不受IP限制,可正常访问存储桶。
  • 其他所有请求:都会被拒绝,符合你的防火墙需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:18:37