AWS PrivateLinkを使ったNLBへの接続方法
目次
はじめに
AWSを利用する際、異なるVPC間での通信を安全に行う方法として、AWS PrivateLinkが有効です。特に、Network Load Balancer (NLB) の背後にあるEC2インスタンスに別のVPCからアクセスする場合、PrivateLinkを使用することで、インターネットやVPC Peeringを介さずにセキュアな接続を確立できます。
本記事では、AWS PrivateLinkを活用して、別VPCにあるNLBに接続する方法を解説します。
1. ALB vs NLB: PrivateLinkでどちらを使うべきか?
AWSでロードバランサを使う場合、主にApplication Load Balancer (ALB) と Network Load Balancer (NLB) の2種類がありますが、PrivateLinkを使用する場合は NLBを選択するのが基本 です。
NLBを選択すべき理由
- PrivateLinkの対応
- PrivateLinkはNLBを使用することでVPCエンドポイントを作成できます。ALBを直接PrivateLinkに適用することはできません。
- 低レイテンシー
- NLBはTCP/UDPレベルのルーティングを行うため、ALBよりも高速です。
- クライアントのIPアドレス透過
- NLBを使用すると、元のクライアントIPアドレスがそのまま保持されます。ALBでは
X-Forwarded-For
ヘッダーを使用しないと元のIPが分からなくなります。
- NLBを使用すると、元のクライアントIPアドレスがそのまま保持されます。ALBでは
ALBを使いたい場合
ALBを利用する場合は、NLBを経由してALBに転送する構成を取ることになります。
- PrivateLink → NLB → ALB → EC2
- ただし、PrivateLink経由でHTTP(S)リクエストを処理したい場合は、ALBの前にNLBを設置する必要があります。
2. AWS PrivateLinkを使ってNLBに接続する手順
① NLBを持つVPCでVPCエンドポイントサービスを作成
NLBが存在するVPCで、PrivateLinkを利用するための VPCエンドポイントサービス を作成します。
- AWSコンソールで「VPC」を開く
- 左メニューから「エンドポイントサービス」を選択
- 「エンドポイントサービスの作成」をクリック
- NLBを選択してエンドポイントサービスを作成
- サービス名 (
com.amazonaws.vpce-svc-xxxxxxxxxxxxxxxxx
) を確認
② 接続するVPCでインターフェイスエンドポイントを作成
別のVPCからNLBにアクセスするために、インターフェイスエンドポイント を作成します。
- 「VPC」→「エンドポイント」を開く
- 「エンドポイントの作成」をクリック
- サービス名に 作成したエンドポイントサービス (
com.amazonaws.vpce-svc-xxxxxxxxxxxxxxxxx
) を入力 - サブネットとセキュリティグループを適切に設定
- エンドポイントが作成されたら、DNS名 (
vpce-xxxxxxxxxxxx-yyyyyyyy.vpce.amazonaws.com
) を確認
③ DNSを使用してNLBにアクセス
作成したVPCエンドポイントのDNS名を使用して、NLB経由でEC2インスタンスにアクセスできます。
接続コマンド(例)
curl -v http://vpce-xxxxxxxxxxxx-yyyyyyyy.vpce.amazonaws.com
また、Route 53のプライベートホストゾーンを利用して、よりわかりやすいカスタムドメイン名を設定することも可能です。
3. トラブルシューティング
❌ com.amazonaws.vpce-svc-
のサービス名が表示されない
- 原因: VPCエンドポイントサービスが正しく作成されていない
- 解決策:
- エンドポイントサービスが「承認なしで利用可能」になっているか確認
- NLBのターゲットグループが正しく設定されているかチェック
❌ elasticloadbalancing.ap-northeast-1.amazonaws.com
でアクセスできない
- 原因: これはAWS提供のELBサービス用DNS名であり、ユーザーが作成したNLB用ではない
- 解決策:
aws ec2 describe-vpc-endpoint-services
ではなく、エンドポイントサービスのページでサービス名を直接確認
❌ 接続できない(タイムアウト)
- 原因: セキュリティグループやルーティング設定の問題
- 解決策:
- NLBのセキュリティグループにエンドポイントのVPC CIDRを許可
- ターゲットグループのヘルスチェックを確認
まとめ
AWS PrivateLinkを利用して、異なるVPCからNLBを経由してEC2インスタンスにアクセスする方法 を解説しました。
要点
✅ PrivateLink経由での接続には NLBが必要
✅ VPCエンドポイントサービス を作成し、他のVPCからの接続を許可
✅ インターフェイスエンドポイントを作成し、専用のDNS名を利用
✅ セキュリティグループやルーティングの適切な設定が必要
AWS PrivateLinkを活用すれば、異なるVPC間での通信をより安全に、かつシンプルに実現できます。適切に設定を行い、安全で高速な通信環境を構築しましょう!