如何在AWS中便捷配置大量CIDR IP地址的访问权限?
批量配置AWS安全组/ACL以允许美国IP访问
核心限制说明
AWS安全组默认单组最多支持60条入站/出站规则,76000条IP/CIDR远超出该限额,因此优先推荐CIDR聚合或AWS WAF地理匹配方案,而非直接批量添加规则。
方案1:AWS WAF地理匹配(最省心)
如果你的Web应用部署在CloudFront、ALB或API Gateway后,直接用WAF的地理匹配规则即可实现仅允许美国用户访问:
- 新建WAF Web ACL,添加规则:选择「地理匹配」条件,指定国家为美国(US),动作为「允许」
- 将Web ACL关联到你的分发/负载均衡/网关
- 优势:无需手动维护IP列表,AWS自动更新地区对应IP段,完全规避规则数量问题
方案2:CIDR聚合后批量配置
先将76000条CIDR合并为更少的大网段,再添加到网络ACL(网络ACL默认每个子网支持20条规则,可申请提升限额):
- 用
cidrmerge工具聚合CIDR:# macOS安装示例 brew install cidrmerge # 聚合IP列表并输出到新文件 cidrmerge your_us_ips.txt > merged_us_ips.txt - 用AWS CLI批量导入到网络ACL:
NACL_ID="acl-xxxxxx" SUBNET_ID="subnet-xxxxxx" RULE_NUMBER=100 while read cidr; do aws ec2 create-network-acl-entry --network-acl-id $NACL_ID --ingress --rule-number $RULE_NUMBER --protocol tcp --port-range From=80,To=80 --allow --cidr-block $cidr RULE_NUMBER=$((RULE_NUMBER+10)) done < merged_us_ips.txt # 将子网关联到该网络ACL aws ec2 associate-network-acl --network-acl-id $NACL_ID --subnet-id $SUBNET_ID
方案3:Terraform批量管理(适合基础设施即代码场景)
如果用Terraform管理AWS资源,可通过变量传入CIDR列表动态生成规则:
- 准备
us_cidrs.tfvars文件:allowed_us_cidrs = [ "1.2.3.0/24", "5.6.7.0/24", # ... 填入聚合后的CIDR列表 ] - Terraform配置文件:
variable "allowed_us_cidrs" { type = list(string) } resource "aws_network_acl" "us_only" { vpc_id = "vpc-xxxxxx" dynamic "ingress" { for_each = var.allowed_us_cidrs content { rule_number = index(var.allowed_us_cidrs, ingress.value) * 10 protocol = "tcp" from_port = 80 to_port = 80 cidr_block = ingress.value action = "allow" } } egress { rule_number = 100 protocol = "-1" from_port = 0 to_port = 0 cidr_block = "0.0.0.0/0" action = "allow" } } - 执行部署:
terraform apply -var-file=us_cidrs.tfvars
内容的提问来源于stack exchange,提问作者Danli Denny Deng
相关产品推荐
相关产品推荐

