无法结合GWLB终端节点(Palo Alto云NGFW)使用AWS安全组
解决方案:ECS安全组引用ALB安全组失效问题处理
问题根源
流量经过Palo Alto Cloud NGFW后,最终到达ECS容器的数据包源IP已发生变化:要么是NGFW的IP(开启SNAT时),要么是ALB的节点IP(未开启SNAT时)。而AWS安全组中引用其他安全组作为源的规则,仅对可直接绑定安全组的EC2/ECS类资源生效,ALB作为托管服务,其节点IP并不属于“关联ALB安全组的资源”范畴,因此ECS安全组引用ALB安全组无法匹配实际流量。
可行解决方案
方案1:将NGFW的安全组作为ECS安全组的入站源
这是最直接且可靠的方案——因为流量最终由NGFW转发至ECS,只需允许NGFW安全组的入站流量即可,无需依赖ALB的IP或安全组。
CloudFormation配置示例:
# ECS容器安全组,允许来自NGFW安全组的流量 ECSSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ECS Container Security Group VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupId: !Ref PaloAltoNGFWSecurityGroup # 按需添加其他端口规则 # ALB安全组,允许出站到NGFW安全组 ALBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ALB Security Group VpcId: !Ref VPC SecurityGroupEgress: - IpProtocol: tcp FromPort: 80 ToPort: 80 DestinationSecurityGroupId: !Ref PaloAltoNGFWSecurityGroup # NGFW安全组,允许入站来自ALB安全组的流量 PaloAltoNGFWSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Palo Alto NGFW Security Group VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupId: !Ref ALBSecurityGroup
方案2:使用前缀列表关联ALB所在子网(仅适用于内部ALB)
若使用的是内部ALB,其IP来自VPC私有子网,可在CloudFormation中创建前缀列表关联子网CIDR,将其作为ECS安全组的入站源。此方案避免硬编码IP,且子网CIDR固定不变。
CloudFormation配置示例:
# 创建前缀列表,包含ALB所在子网的CIDR ALBPrefixList: Type: AWS::EC2::PrefixList Properties: PrefixListName: ALB-Subnet-Range AddressFamily: IPv4 MaxEntries: 10 Entries: - Cidr: !Select [0, !Ref ALBSubnets] - Cidr: !Select [1, !Ref ALBSubnets] # ECS安全组允许前缀列表的流量 ECSSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ECS Container Security Group VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourcePrefixListId: !Ref ALBPrefixList
方案3:开启NGFW源IP保留(复杂度较高)
若Palo Alto NGFW支持保留ALB节点IP,可开启该功能,此时到达ECS的源IP为ALB节点IP。再通过CloudFormation的Fn::GetAtt获取ALB的ENI IP并添加至安全组,但需注意ALB的ENI数量可能随流量动态变化,需额外处理多ENI场景,推荐仅在特殊需求下使用。
内容的提问来源于stack exchange,提问作者Skinkpajen
相关产品推荐
相关产品推荐

