ALBに紐づいたプライベートIPアドレスを確認する方法


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

こんにちは、西海です。
今回、ALBのプライベートIP確認方法を調査したのでその結果をまとめました。

背景

WordPressをインストールしたEC2インスタンス2台をALBにターゲットグループとして指定し、Cloudwatch logsでhttpアクセスログを確認していました。
その際ALBからのヘルスチェックが届いているのを確認したのですが、送信元IPを自分で設定した覚えがなかったため、本当にALBのIPで間違いないのか確認しました。

確認方法

調べたところ、AWS re:post に確認方法がありました。
Elastic Load Balancing がウェブサーバーに送信するトラフィックのソース IP アドレスは何ですか?

まとめると、2通りの方法があります。
・AWSマネジメントコンソールから確認
1.EC2ダッシュボードを表示後、画面左のナビゲーションペインから「ネットワーク&セキュリティ」>「ネットワークインターフェース」を選択し、対象のALB名を検索する。
2.表示されたインターフェースの【プライマリプライベートIPv4アドレス】欄に表示されたIPを確認。

・AWS CLIから確認
1.load-balancer-idを検索
aws elbv2 describe-load-balancers --names load-balancer-name

2.load-balancer-nameとload-balancer-idを加えてコマンド入力
aws ec2 describe-network-interfaces --filters Name=description,Values="ELB app/load-balancer-name/load-balancer-id" --query 'NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress' --output text

 もし上記コマンド入力後に下記エラーが出た際は、各コマンドの最後に[--region 使用しているリージョン]を加えてください。

You must specify a region. You can also configure your region by running "aws configure".

方法が分かったので、実際に確認できるか検証します。

システム構成

今回のシステム構成は下記になります。
EC2にはWordpressがインストールされ、そのHTTPアクセスをロググループ化してCloudwatch logsに送信します。
なお、システム構築手順については省略します。

 

検証

ALBのIPについて

ALBに付与されるプライベートIPについては、公式ドキュメントに記載されています。
以下、公式ドキュメントからの抜粋です。

ロードバランサーが正しくスケールできるように、ロードバランサーのアベイラビリティーゾーンサブネットごとに CIDR ブロックを最低でも /27 ビットマスク (例: 10.0.0.0/27) にし、少なくとも各サブネットにつき 8 個の空き IP アドレスを用意してください。これらの 8 個の IP アドレスは、ロードバランサーが必要に応じてスケールアウトできるようにするために必要です。ロードバランサーはこれらの IP アドレスを使用して、ターゲットとの接続を確立します。それらがないと、Application Load Balancer ではノード交換の試行で問題が発生し、失敗状態になる可能性があります。

どうやら、ALB作成時に指定したサブネットから、自動的に未使用のIPを1つ割り当てるようです。

事前準備

①今回確認するIPは下記2つです
・10.0.1.60
・10.0.0.107

各IPはCloudwatch logsから確認できます。
各IPからALBのヘルスチェック通信が送られていることを確認できます。

 

②IAMポリシーの作成・追加
AWS CLIから確認する際に、下記ポリシーが必要になります。

・ElasticLoadBalancingReadOnly
→ALBからIDを取得するために必要。EC2用のIAMロールに追加する。

・ec2:DescribeNetworkInterfaces
→EC2上でCLIを使用してNetworkInterface情報を読み取るために必要。新規にポリシーを作成してIAMロールに追加する。

AWSマネジメントコンソールから確認

AWSマネジメントコンソールから確認していきます。

①作成したALBの名前を控える

 

②EC2ダッシュボードに移動し、ネットワークインターフェースを選択

 

③検索窓にALB名を入力して検索

 

④検索結果のプライマリプライベートIPv4アドレスを確認

 

2つのIPがALBのネットワークインターフェースとして割り当てられていることを確認できます。

AWS CLIで確認

AWS CLIから確認していきます。
※私の環境では各コマンドに–regionオプションが必要だったので付け加えています。

①下記コマンドでload-balancer-idを取得する。
aws elbv2 describe-load-balancers --names saikai-monitoring-1-elb --region ap-northeast-1

出力結果の「LoadBalancerArn」値から、[app/alb-name/alb-id]を控えます。

②先ほどの値を加えて下記コマンドを入力する。
aws ec2 describe-network-interfaces --filters Name=description,Values="ELB app/saikai-monitoring-1-elb/4605754a100709c7" --query 'NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress' --output text --region ap-northeast-1


※なぜか入力したコマンドが正常に表示されていませんが、上記のコマンドを入力しています。

マネジメントコンソールで確認したIPと同じIPが結果として出力されました。

まとめ

ALBにプライベートIPが2つあることから、ALBが各AZにまたがって配置されていることを改めて実感できました。
また、CLIでコマンドを入力した際にIAM権限が足りないためエラーになるなど、基本的なことを再度確認できました。

Last modified: 2023-10-24

Author