[小ネタ] プライベート IP アドレスの IdP で ALB のユーザー認証が設定できるか確認してみた
クラスメソッドオペレーションズの hato です。
ALB のユーザー認証は、OIDC 準拠の独自 IdP がサポートされています。
AWS ドキュメントによると、「IdP の DNS はパブリックに解決可能でなければなりません。」と記載されていますが、パブリックに名前解決可能であればプライベートな IdP も使用できるか検証する機会がありましたので、小ネタとして紹介します。
結論
IdP エンドポイントのドメイン名がパブリックに名前解決できれば、プライベート IP アドレスしか持たないプライベートな IdP も使用できました。
一方で、ドメイン名がパブリックに解決可能な必要があるため、Route 53 のプライベートホストゾーンを使った場合はエラーになりました。
確認してみた

構成図のような ALB、IdP 環境で検証しました。
アプリケーションおよび IdP 用の ALB は内部向け(スキーム:Internal)で構築し、プライベート IP アドレスのみを持ちます。
検証環境構築
次の記事とほぼ同じ手順で構築したので、詳細は割愛します。
違いは、ALB を構築する際に「インターネット向け」ではなく、「内部」を選択しています。

また、VPC 内に閉じた環境となるため、接続用にインターネット経由でアクセス可能な Windows EC2 インスタンスを構築し RDP 接続経由で操作しています。
検証してみる
検証の前に、念の為、ALB に関連付けたカスタムドメインをパブリックに名前解決して、プライベート IP アドレスに解決されることを確認します。
# アプリケーション用の ALB
$ nslookup elb.example.com
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: elb.example.com
Address: 10.0.21.101
Name: elb.example.com
Address: 10.0.20.200
# IdP 用の ALB
$ nslookup keycloak.example.com
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: keycloak.example.com
Address: 10.0.21.29
Name: keycloak.example.com
Address: 10.0.20.26
10.0.20.xxxの VPC のプライベート IP アドレスになっているので、プライベートな環境であることが確認できます。
Windows インスタンスのブラウザから、アプリケーションエンドポイント(elb.example.com)にアクセスすると、IdP のログイン画面にリダイレクトされます。

IdP のユーザー情報でログインすると、無事アプリケーション(nginx)画面が表示されました。
プライベート IP アドレスしかない IdP でもユーザー認証できることが確認できました。

パブリックに名前解決できない場合はどうなる?
上記検証ではカスタムドメインを Route 53 のパブリックホストゾーンで設定しました。
パブリックに名前解決できないプライベートホストゾーンを使用した場合、どうなるでしょうか?
構成はそのままで、新たにプライベートホストゾーンを作成し、VPC に関連付けます。
その後、パブリックホストゾーンで設定していたレコードを、プライベートホストゾーン内に改めて作成します。

Windows インスタンスから名前解決を行い、パブリックに名前解決できないこと、および VPC 内からは名前解決できることを確認します。
※ ALB から名前解決できるかは検証できていませんが、同じ VPC に構築しているので、内部的にはできるはずです。
# パブリックな DNS サーバー(Cloudflare)で名前解決
$ nslookup keycloak.example.com 1.1.1.1
サーバー: one.one.one.one
Address: 1.1.1.1
*** one.one.one.one が keycloak.example.com を見つけられません: Non-existent domain
# VPC の DNS サーバー(AmazonProvidedDNS)で名前解決
$ nslookup keycloak.example.com
サーバー: ip-10-0-0-2.ap-northeast-1.compute.internal
Address: 10.0.0.2
権限のない回答:
名前: keycloak.example.com
Addresses: 10.0.20.26
10.0.21.29
この状態で、同様にアプリケーションのエンドポイント(elb.example.com)にアクセスすると、IdP のログイン画面にリダイレクトされます。

IdP のユーザー情報でログインすると、先ほどとは異なり「500 Internal Server Error」が表示されました。

トラブルシューティングによると、HTTP 500 は IdP のエンドポイントに接続できないときに発生するので、ドキュメントのとおり、ドメインがパブリックに解決可能でないことが原因でエラーになっているようです。
Application Load Balancer での認証設定に関する問題のトラブルシューティング | AWS re:Post
HTTP 500: 内部サーバーエラー
ロードバランサーは、IdP トークンのエンドポイント (TokenEndpoint) および IdP ユーザー情報のエンドポイント (UserInfoEndpoint) と通信できる必要があります。ロードバランサーがこれらのエンドポイントと通信するちきに、Application Load Balancer は IPv4 のみをサポートします。HTTP 500: 内部サーバーエラーを解決するには、次のタスクを実行します。
- IdP エンドポイントの DNS 名がパブリックで解決可能であることを確認します。認証機能ではプライベートドメイン名を解決できません。
最後に
この記事が誰かのお役にたてば幸いです。
参考資料
- Application Load Balancer を使用してユーザーを認証する - エラスティックロードバランシング
- Application Load Balancer での認証設定に関する問題のトラブルシューティング | AWS re:Post
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 採用サイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました







