[小ネタ] プライベート IP アドレスの IdP で ALB のユーザー認証が設定できるか確認してみた

[小ネタ] プライベート IP アドレスの IdP で ALB のユーザー認証が設定できるか確認してみた

2026.03.03

クラスメソッドオペレーションズの hato です。

ALB のユーザー認証は、OIDC 準拠の独自 IdP がサポートされています。

AWS ドキュメントによると、「IdP の DNS はパブリックに解決可能でなければなりません。」と記載されていますが、パブリックに名前解決可能であればプライベートな IdP も使用できるか検証する機会がありましたので、小ネタとして紹介します。

結論

IdP エンドポイントのドメイン名がパブリックに名前解決できれば、プライベート IP アドレスしか持たないプライベートな IdP も使用できました。

一方で、ドメイン名がパブリックに解決可能な必要があるため、Route 53 のプライベートホストゾーンを使った場合はエラーになりました。

確認してみた

ALB Private IdP User Authentication Verification 8

構成図のような ALB、IdP 環境で検証しました。

アプリケーションおよび IdP 用の ALB は内部向け(スキーム:Internal)で構築し、プライベート IP アドレスのみを持ちます。

検証環境構築

次の記事とほぼ同じ手順で構築したので、詳細は割愛します。

https://dev.classmethod.jp/articles/alb-oidc-authentication-keycloak/

違いは、ALB を構築する際に「インターネット向け」ではなく、「内部」を選択しています。

ALB Private IdP User Authentication Verification 2

また、VPC 内に閉じた環境となるため、接続用にインターネット経由でアクセス可能な Windows EC2 インスタンスを構築し RDP 接続経由で操作しています。

https://dev.classmethod.jp/articles/windows-server-2025-in-amazon-ec2-jp/

検証してみる

検証の前に、念の為、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 のログイン画面にリダイレクトされます。

ALB Private IdP User Authentication Verification 3

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

ALB Private IdP User Authentication Verification 4

パブリックに名前解決できない場合はどうなる?

上記検証ではカスタムドメインを Route 53 のパブリックホストゾーンで設定しました。

パブリックに名前解決できないプライベートホストゾーンを使用した場合、どうなるでしょうか?

構成はそのままで、新たにプライベートホストゾーンを作成し、VPC に関連付けます。
その後、パブリックホストゾーンで設定していたレコードを、プライベートホストゾーン内に改めて作成します。

ALB Private IdP User Authentication Verification 5

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 のログイン画面にリダイレクトされます。

ALB Private IdP User Authentication Verification 6

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

ALB Private IdP User Authentication Verification 7

トラブルシューティングによると、HTTP 500 は IdP のエンドポイントに接続できないときに発生するので、ドキュメントのとおり、ドメインがパブリックに解決可能でないことが原因でエラーになっているようです。

Application Load Balancer での認証設定に関する問題のトラブルシューティング | AWS re:Post

HTTP 500: 内部サーバーエラー
ロードバランサーは、IdP トークンのエンドポイント (TokenEndpoint) および IdP ユーザー情報のエンドポイント (UserInfoEndpoint) と通信できる必要があります。ロードバランサーがこれらのエンドポイントと通信するちきに、Application Load Balancer は IPv4 のみをサポートします。

HTTP 500: 内部サーバーエラーを解決するには、次のタスクを実行します。

  • IdP エンドポイントの DNS 名がパブリックで解決可能であることを確認します。認証機能ではプライベートドメイン名を解決できません。

最後に

この記事が誰かのお役にたてば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。

運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 採用サイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

FacebookHatena blogX

関連記事