2023年8月にリリースされた NLB (Network Load Balancer) に対するセキュリティグループ設定のサポートは,今まで NLB のデメリットとして話題に上がることも多かったので,非常に期待されていたアップデートだと思う.アクセス制御を細かく行えるようになり,AWS ドキュメントにも セキュリティグループをロードバランサーに関連付けることをお勧めします。
と書かれている通り,今後は基本的に設定することになりそう.
1点考慮ポイントとしては,現状の仕様だと「NLB を作るときのみ」セキュリティグループを設定できるので,既存の NLB に設定することはできず,NLB を新しく作って差し替える必要がある.既存の NLB でも設定できるようになったらさらに便利なのに〜 \( 'ω')/
AWS CDK で試す
AWS CDK では v2.112.0 から NLB にセキュリティグループを設定できるようになっていた❗️試してみたサンプルコード (TypeScript) を載せておく.
👾 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 にセキュリティグループを設定できた❗️