CDK部署Fargate时自动为安全组添加0.0.0.0/0入站规则如何禁用
解决方法
这个自动添加的80端口全通规则是CDK v2 ECS L2构造的默认行为:它会自动读取任务定义里容器的第一个端口映射,默认给关联安全组加0.0.0.0/0的入站允许,方便新手快速测试,不需要手动配置安全组就能访问服务。
有两种方式可以禁用这个行为:
- 如果你使用CDK v2.60.0及以上版本,直接在FargateService的配置里加
enableDefaultPortMappings: false即可,这是官方提供的开关,关闭后CDK完全不会自动修改你传入的安全组入站规则,所有规则由你自行管理。
修改后的代码如下:const service = new ecs.FargateService(this, "SBfargate", { cluster, desiredCount: 1, taskDefinition: fargateTaskDefinition, assignPublicIp: true, securityGroups: [sbsg], serviceName: 'SB-Fargate_service', // 关闭默认端口的安全组规则自动添加 enableDefaultPortMappings: false, }); - 如果你用的CDK版本低于2.60.0,没有上面的配置项,可以在服务创建完成后,把CDK自动生成的那条入站规则节点从构造树中移除,这样它就不会被合成到最终的CloudFormation模板里:
const service = new ecs.FargateService(this, "SBfargate", { cluster, desiredCount: 1, taskDefinition: fargateTaskDefinition, assignPublicIp: true, securityGroups: [sbsg], serviceName: 'SB-Fargate_service', }); // 清理自动生成的80端口全通入站规则 sbsg.node.children.forEach(child => { if (child instanceof ec2.CfnSecurityGroupIngress && child.cidrIp === '0.0.0.0/0' && child.fromPort === 80 && child.toPort === 80) { sbsg.node.tryRemoveChild(child.node.id); } });
注意:禁用默认规则后记得自行给安全组配置业务所需的最小权限入站规则,避免服务端口无法正常访问。不要通过把安全组设为不可变(mutable: false)的方式绕开这个问题,会导致你后续也无法给安全组添加自定义规则。
内容的提问来源于stack exchange,提问作者sbecker
相关产品推荐
相关产品推荐

