CloudFormation安全组模板如何单条配置多个CIDR IP的Ingress规则
CloudFormation批量配置安全组多CIDR入站规则的实现方案
结论
可以实现单段代码批量引入多个CidrIp,无需逐行编写规则,目前最简便的实现方式是使用CloudFormation语言扩展的Fn::ForEach内置函数。
实现步骤
- 首先在模板顶部声明启用AWS语言扩展,支持循环遍历能力
- 在
SecurityGroupIngress字段中使用Fn::ForEach遍历你定义的DbSubnetIpBlocks逗号分隔列表参数,批量生成规则结构
完整模板示例
{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": ["AWS::LanguageExtensions"], "Description": "HTTPS - Security Group", "Parameters": { "VPC": { "Type": "AWS::EC2::VPC::Id", "Description": "安全组所属的VPC ID" }, "Name": { "Type": "String", "Description": "安全组的名称标签" }, "DbSubnetIpBlocks": { "Description": "逗号分隔的CIDR地址块列表", "Type": "CommaDelimitedList" } }, "Resources": { "MySG": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "HTTPS访问安全组", "VpcId": { "Ref": "VPC" }, "SecurityGroupIngress": [{ "Fn::ForEach::AddHttpsIngress": [ "CidrBlock", { "Ref": "DbSubnetIpBlocks" }, { "IpProtocol": "tcp", "CidrIp": { "Ref": "CidrBlock" }, "FromPort": "443", "ToPort": "443" } ] }], "Tags": [ { "Key": "Name", "Value": { "Ref": "Name" } } ] } } }, "Outputs": { "SecurityGroupID": { "Description": "安全组ID", "Value": { "Ref": "MySG" } } } }
注意事项
- 你原模板中
GroupDescription引用了不存在的Description参数,示例中已修正为固定描述,你可根据需求调整 - 单安全组默认最多支持60条入站规则,你的50个CIDR场景完全符合限制,无需调整配额
- 如果无法启用语言扩展,也可以通过
AWS::EC2::SecurityGroupIngress独立资源配合循环实现,写法和上述逻辑一致
内容的提问来源于stack exchange,提问作者Gnay
相关产品推荐
相关产品推荐

