今回は、2023/8/10にサポートされた、NLBへのセキュリティグループアタッチをTerraformで実行してみました。
2023/8/18にリリースされたAWSプロバイダ5.13.0以降から、NLBへのセキュリティグループアタッチがTerraformでできるようになったようです。
構成図
Terraformのバージョン情報
筆者が使用したTerraformのバージョンは以下です。
Terraform Core :1.5.5
AWSプロバイダ :15.13.1
tfファイルの内容
今回の構築に使用したtfファイルは以下です。
※バックエンドやプロバイダ指定の動作設定は省略しています(AWSリソースのコードのみ記述しています)。
infra.tf
NLB用セキュリティグループのインバウンドは便宜上、0.0.0.0/0 としています。
EC2に設定しているセキュリティグループのインバウンドルールは、NLBにアタッチするセキュリティグループIDのみを許可しています。
メタ引数である「for_each」の使い方については、以下の記事でご紹介しています。

ec2.tf
AMIは、Data sourceでAmazon Linux 2 x86の最新バージョンを取得して指定しています。
user_dataで、apacheをインストールしてindex.htmlを作成します。
elb.tf
AWSプロバイダ5.13.0以降は、リソースブロック「aws_lb」でパラメータ「load_balancer_type」の値が「network」でも(NLBでも)、パラメータ「security_groups」を記述できるようになっています。
※今までは「load_balancer_type」が「application」の場合のみ(ALBのみ)対応だった。
NLBにセキュリティグループがアタッチされていた
terraform applyの実行後、NLBが作成されてセキュリティグループがアタッチされていることを確認しました。
NLBにアクセスしてみる
コピーしたDNS名をブラウザに入力して、無事アクセスできました。
NLBのセキュリティグループでアクセスを拒否してみる
NLBにアタッチしているセキュリティグループのインバウンドルールを削除すると、アクセスできなくなりました。
NLBにアタッチしているセキュリティグループが機能していることが分かりますね。
まとめ
今回は、TerraformでNLBへセキュリティグループをアタッチする方法をご紹介しました。
NLBのターゲットとなるEC2のセキュリティグループでは、NLBにアタッチされたセキュリティグループIDをインバウンドルールで許可するだけで、NLB以外からのアクセスを遮断できるのが便利ですね。
NLB自体はPrivateLink(VPCエンドポイント)を用いた各サービスとの通信要素としても使うので、利便性はまだまだありそう。
この記事をとおして、少しでも誰かのお役に立てれば幸いです。
参考情報
・AWS公式ドキュメント(Network Load Balancer now supports security groups)
https://aws.amazon.com/jp/about-aws/whats-new/2023/08/network-load-balancer-supports-security-groups/
・Terraform公式ドキュメント(Resource: aws_lb)
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb.html