You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:32:40