kakakakakku blog

Weekly Tech Blog: Keep on Learning!

AWS CDK で NLB にセキュリティグループを設定する

2023年8月にリリースされた NLB (Network Load Balancer) に対するセキュリティグループ設定のサポートは,今まで NLB のデメリットとして話題に上がることも多かったので,非常に期待されていたアップデートだと思う.アクセス制御を細かく行えるようになり,AWS ドキュメントにも セキュリティグループをロードバランサーに関連付けることをお勧めします。 と書かれている通り,今後は基本的に設定することになりそう.

1点考慮ポイントとしては,現状の仕様だと「NLB を作るときのみ」セキュリティグループを設定できるので,既存の NLB に設定することはできず,NLB を新しく作って差し替える必要がある.既存の NLB でも設定できるようになったらさらに便利なのに〜 \( 'ω')/

aws.amazon.com

docs.aws.amazon.com

AWS CDK で試す

AWS CDK では v2.112.0 から NLB にセキュリティグループを設定できるようになっていた❗️試してみたサンプルコード (TypeScript) を載せておく.

github.com

docs.aws.amazon.com

👾 sandbox-cdk-nlb-stack.ts

サンプルコードでは「デフォルト VPC」を使って NLB の securityGroups プロパティにセキュリティグループを設定している💡実際に使うためにはリスナー・ターゲットグループなどの設定も必要だけど今回は割愛している👌あとセキュリティグループのエントリーには適当な IP アドレスを設定した.

import {
  Stack,
  StackProps,
  aws_ec2,
  aws_elasticloadbalancingv2
} from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class SandboxCdkNlbStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const defaultVpc = aws_ec2.Vpc.fromLookup(this, 'Vpc', {
      isDefault: true
    });

    const nlbSecurityGroup = new aws_ec2.SecurityGroup(this, 'SandboxCdkNlbSecurityGroup', {
      securityGroupName: 'sandbox-cdk-nlb-security-group',
      vpc: defaultVpc,
      allowAllOutbound: true,
    });

    nlbSecurityGroup.addIngressRule(aws_ec2.Peer.ipv4('100.100.100.100/32'), aws_ec2.Port.tcp(80));

    new aws_elasticloadbalancingv2.NetworkLoadBalancer(this, 'SandboxCdkNlb', {
      loadBalancerName: 'sandbox-cdk-nlb',
      internetFacing: true,
      vpc: defaultVpc,
      vpcSubnets: {
        subnetType: aws_ec2.SubnetType.PUBLIC
      },
      securityGroups: [
        nlbSecurityGroup
      ],
      crossZoneEnabled: true,
    });
  }
}

結果

期待通り NLB にセキュリティグループを設定できた❗️

NLB にセキュリティグループを設定できた