有没有办法构建一个允许所有 IPv4 和 IPv6 出口流量的安全组?

Is there a way to construct a security group with all IPv4 and IPv6 egress traffic allowed?

我想从已经连接到 IPv4 服务的 Fargate 服务连接到仅 IPv6 服务。

理想情况下,默认安全组将包含 ::/0 的出口规则,就像 0.0.0.0/0 一样。

我首先尝试使用 connections 添加它,但没有将规则添加到模板。

service.connections.allowTo(Peer.anyIpv6(), Port.allTraffic());

然后我尝试直接构建安全组

const securityGroup = new SecurityGroup(this, 'SecurityGroup', { vpc })
securityGroup.addEgressRule(Peer.anyIpv6(), Port.allTraffic());

这会发出警告,并且不会将规则添加到模板。

Ignoring Egress rule since 'allowAllOutbound' is set to true; To add customize rules, set allowAllOutbound=false on the SecurityGroup

最后我尝试用 allowAllOutbound=false 构建一个安全组,就像警告建议的那样。

const securityGroup = new SecurityGroup(this, 'SecurityGroup', { vpc, allowAllOutbound: false })
securityGroup.addEgressRule(Peer.anyIpv4(), Port.allTraffic());
securityGroup.addEgressRule(Peer.anyIpv6(), Port.allTraffic());

合成失败并显示错误消息:

Cannot add an "all traffic" egress rule in this way; set allowAllOutbound=true on the SecurityGroup instead.

代码中的注释表明这是一个 'for now' 解决方案,但并不理想。 https://github.com/aws/aws-cdk/blob/b2bba775282a7b031ae34de6bef838558410cb67/packages/%40aws-cdk/aws-ec2/lib/security-group.ts#L530-L535


环境:aws-cdk 2.10.0(构建 e5b301f),Typescript 4.5.5,NodeJS v14.18.1

鉴于 CDK 的当前限制,我看到的唯一选择是使用逃生舱口之一(也就是说,直到修复此错误):

  1. 对安全组使用 Cfn (L1) 构造(或者可能只是 ipv6 的安全组出口规则)并像在常规 cloudformation 中那样做(可能是最佳选择)
  2. 使用 属性 覆盖并将 "SecurityGroupEgress" : [ ipv6EgressRule, ipv4EgressRule ] key-value 对添加到基础 Cfn 资源。

有关逃生舱口的更多信息:https://docs.aws.amazon.com/cdk/v2/guide/cfn_layer.html