[小ネタ] ALB のユーザー認証を Keycloak で設定してみた(OpenID Connect)
クラスメソッドオペレーションズの hato です。
ALB のユーザー認証は、Cognito と OpenID Connect(OIDC)準拠の独自 IdP がサポートされていますが、独自 IdP(Keycloak)を設定する機会がありましたので、小ネタとして紹介します。
やってみた
構成図

前提
- 上記構成図内の AWS リソースは作成済み
- ALB はユーザー認証が未設定の状態
- Keycloak はインストールのみ完了した状態
手順
- Realm を作成
- 認証用のユーザーを作成
- ALB 用のクライアントを作成
- IdP エンドポイント情報の確認
- ALB のユーザー認証を設定
Realm を作成
テナントに相当する Realm を作成します。
作成済みの場合はスキップしてください。
Keycloak 管理コンソールから「Create realm」をクリックします。

「Realm name」に任意の名前を入力し、「Create」をクリックします。

左上の「Current realm」で、作成した Realm が選択されていることを確認します。

認証用のユーザーを作成
認証用のユーザーを作成します。
対象の Realm を選択した状態で、「Create New User」をクリックします。

次の値を入力して「Create」をクリックします。
※Username以外はオプションですが、設定しないと初回ログインの際に設定することになります。
UsernameEmailFirst nameLast name

パスワードを設定するため「Credentials」タブから「Set password」をクリックします。

任意のパスワードを入力して、「Save」をクリックします。

再度「Save password」をクリックします。

ALB 用のクライアントを作成
対象の Realm を選択した状態で、「Create Client」をクリックします。

Client typeにOpenID Connectを選択。
任意のClient IDを入力して、「Next」をクリックします。

Client authenticationのトグルを有効にして「Next」をクリックします。

それぞれ次のように入力して「Save」をクリックします。
Valid redirect URIs:https://<アプリケーションドメイン>/oauth2/idpresponseWeb origins:https://<アプリケーションドメイン>/
※仕様上、Valid redirect URIsの「/oauth2/idpresponse」は固定です。

クライアントのシークレットを確認します。
「Credentials」タブの「Client Secret」のアイコンからコピーします。

IdP エンドポイント情報の確認
ALB に設定するエンドポイント情報を確認します。
「Realm settings」の「OpenID Endpoint Configuration」リンクをクリックして、JSON ファイルをダウンロードします。

ダウンロードした JSON に含まれる各種 URL を次の手順で ALB に設定します。
{
"issuer": "https://example.com/realms/hato-realm",
"authorization_endpoint": "https://example.com/realms/hato-realm/protocol/openid-connect/auth",
"token_endpoint": "http://example.com/realms/hato-realm/protocol/openid-connect/token",
"introspection_endpoint": "http://example.com/realms/hato-realm/protocol/openid-connect/token/introspect",
"userinfo_endpoint": "http://example.com/realms/hato-realm/protocol/openid-connect/userinfo",
...
ALB のユーザー認証を設定
認証を設定する ALB のリスナーを選択します。

リスナーから具体的に設定するルールを選択します。

「ユーザーを認証」を選択して、ダウンロードした JSON、発行したクライアントの情報を入力します。
アイデンティティプロバイダーOIDC (OpenID Connect)
発行者- JSON ファイルの
issuerの値
- JSON ファイルの
認証エンドポイント- JSON ファイルの
authorization_endpointの値
- JSON ファイルの
トークンエンドポイント- JSON ファイルの
token_endpointの値
- JSON ファイルの
ユーザー情報エンドポイント- JSON ファイルの
userinfo_endpointの値
- JSON ファイルの
クライアント ID- 入力したクライアントの ID
クライアントのシークレット- 確認したクライアントのシークレット

認証を設定したリスナー(ドメイン)にアクセスして、Keycloak のログイン画面が表示されたら完了です。お疲れ様でした。

最後に
この記事が誰かのお役にたてば幸いです。
参考資料
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 採用サイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました






