如何通过AWS CDK为Network Load Balancer关联安全组?
为Network Load Balancer(NLB)通过AWS CDK关联安全组的解决方案
前提条件
- 确保你的
aws-cdk-lib版本至少为2.90.0(该版本正式加入NLB安全组的原生支持),可执行npm list aws-cdk-lib查看当前版本,版本过低时运行npm upgrade aws-cdk-lib完成升级。
方法一:L2构造直接配置(推荐)
创建NLB时,直接在NetworkLoadBalancerProps中指定securityGroups属性即可关联安全组,示例代码如下:
import { Stack, StackProps } from 'aws-cdk-lib'; import { Vpc, SecurityGroup } from 'aws-cdk-lib/aws-ec2'; import { NetworkLoadBalancer } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; import { Construct } from 'constructs'; export class NlbSecurityGroupStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // 引用现有VPC或创建新VPC const vpc = Vpc.fromLookup(this, 'TargetVpc', { vpcId: 'vpc-xxxxxx' }); // 创建NLB专用安全组 const nlbSg = new SecurityGroup(this, 'NlbSecurityGroup', { vpc, description: 'Restrict traffic to NLB', allowAllOutbound: true, }); // 按需添加入站规则,例如允许80端口访问 nlbSg.addIngressRule(Peer.anyIpv4(), Port.tcp(80)); // 创建NLB并关联安全组 const nlb = new NetworkLoadBalancer(this, 'MyNLB', { vpc, internetFacing: true, securityGroups: [nlbSg], }); } }
若NLB已创建完成,也可通过addSecurityGroup方法追加安全组:
nlb.addSecurityGroup(anotherSecurityGroup);
方法二:L1构造兼容旧版CDK
如果你的CDK版本低于2.90.0,无法使用L2构造的原生属性,可以直接调用CloudFormation的L1构造CfnLoadBalancer配置,示例代码:
import { CfnLoadBalancer } from 'aws-cdk-lib/aws-elasticloadbalancingv2'; // ... 省略VPC、安全组创建代码 ... const cfnNlb = new CfnLoadBalancer(this, 'MyCfnNLB', { scheme: 'internet-facing', subnets: vpc.publicSubnets.map(sub => sub.subnetId), securityGroups: [nlbSg.securityGroupId], // 传入安全组ID type: 'network', });
验证方式
部署完成后,进入AWS EC2控制台的负载均衡器页面,查看目标NLB的「安全组」标签,确认已成功关联指定的安全组。
内容的提问来源于stack exchange,提问作者Jhansi
相关产品推荐
相关产品推荐

