KeyCloak

Keycloak 26.x のインストール・初期設定とベストプラクティス

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

Keycloak 26.x のインストールと初期設定

Keycloak 26 系は OpenJDK 21 以上が必須で、公式サイトからダウンロードすれば数分で管理コンソールにアクセスできます。本章では Windows と Linux の両環境 に対応した展開手順を示し、実運用で欠かせない TLS 設定・リバースプロキシ構成・外部シークレット管理ツール連携までを包括的に解説します。

必要要件

Keycloak を本番稼働させるための最低条件です。以下は OS に依存しない共通項となります(Windows の場合は「PowerShell」または「cmd.exe」を使用してください)。

  • Java ランタイム:OpenJDK 21 もしくは互換性のある JDK 21
  • OS:Linux (CentOS、Ubuntu 等) または Windows 10/11/Server 2019 以上
  • メモリ:最低 2 GB(推奨 4 GB 以上)
  • ポート:HTTP 8080, HTTPS 8443(リバースプロキシ利用時は 80/443)

重要ポイント
- JDK のバージョンが 21 未満だと「Unsupported Java version」エラーが必ず発生します。
- Windows 環境では JAVA_HOME が正しく設定されていることを必ず確認してください。

Windows 環境での展開手順

Windows でも Linux と同様に手動インストールと Docker のいずれかが選択できます。ここでは 手動インストール に焦点を当てます。

  1. JDK のインストール
    powershell
    # Chocolatey がインストールされている前提
    choco install openjdk21 -y
    $env:JAVA_HOME = "C:\Program Files\OpenJDK\openjdk-21"
  2. Keycloak の取得と展開
    powershell
    Invoke-WebRequest -Uri https://github.com/keycloak/keycloak/releases/download/26.0.1/keycloak-26.0.1.zip -OutFile keycloak.zip
    Expand-Archive .\keycloak.zip -DestinationPath C:\opt\keycloak
    Set-Location C:\opt\keycloak\keycloak-26.0.1
  3. 管理者アカウントの事前設定(PowerShell)
    powershell
    $env:KC_BOOTSTRAP_ADMIN_USERNAME = "admin"
    $env:KC_BOOTSTRAP_ADMIN_PASSWORD = "StrongPassword123!"
  4. 開発モードで起動(テスト用)

⚠️ 注意start-dev はデータベースをインメモリ H2 にし、TLS が無効になるため本番環境では使用しないでください。

powershell
.\bin\kc.bat start-dev

5. HTTPS 本番起動オプション(Windows でも同様に利用可能)
powershell
# 例: PKCS12 キーストアを作成
keytool -genkeypair -alias keycloak \
-keyalg RSA -keysize 2048 -storetype PKCS12 \
-keystore keystore.p12 -validity 3650
-dname "CN=keycloak.example.com, OU=IT, O=Example Corp, L=Tokyo, S=Tokyo, C=JP"

-storepass ChangeItNow
.\bin\kc.bat start --https-key-store-file=keystore.p12 --https-key-store-password=ChangeItNow

TLS 設定と HTTPS 本番起動

TLS を有効化することで通信路の暗号化が保証されます。Keycloak の組み込みサーバーで直接終端させる場合と、リバースプロキシ側で終端させる場合の両方を示します。

キーストア作成(OpenSSL + keytool)

Keycloak 起動オプション(Linux / Windows 共通)

ポイント
- --hostname で外部からアクセスする URL を明示すると、メールやリンクに正しいホストが自動挿入されます。
- 本番環境では必ず --http-enabled=false とし、HTTP はリバースプロキシ側でリダイレクトさせてください。

リバースプロキシ構成例(NGINX / Traefik)

Keycloak の推奨デプロイパターンは「TLS 終端はリバースプロキシに任せ、Keycloak は HTTP のみで動作」することです。以下に代表的な設定を掲載します。

NGINX(Docker Compose 例)

Traefik(Docker Compose 例)

ポイント
- --proxy=edge を付与すると、Keycloak はヘッダーから元のプロトコル(HTTPS)を正しく認識します。
- リバースプロキシ側で HSTS (Strict-Transport-Security) と HTTP/2 の有効化を推奨します。

外部シークレット管理ツールとの連携例

Keycloak に保存されるクライアントシークレットやデータベース接続情報は、Vault / AWS Secrets Manager / Google Secret Manager などの外部シークレットストアに委任すると安全性が向上します。ここでは HashiCorp Vault と AWS Secrets Manager の具体的手順を示します。

1. HashiCorp Vault からシークレット取得(Linux/PowerShell 共通)

取得したシークレットは Keycloak の管理 API で自動更新できます。

2. AWS Secrets Manager を利用する場合(CLI)

取得した CLIENT_SECRET を同様に管理 API に POST すれば、シークレットが自動的に更新されます。

重要ポイント
- シークレットは 起動時に環境変数で渡す 方法(例: KC_DB_PASSWORD)でも利用可能です。
- 定期的なローテーションをスケジュールし、Keycloak のクライアントシークレットも同時に更新するスクリプトを CI/CD に組み込むとベストプラクティスが完成します。

新規レルムの作成と基本設定

実運用では「マスターレルム」から独立したレルムを作成し、プロジェクトや部門ごとの認証ポリシーを分離します。本節では GUI 操作だけでなく、REST API を使った自動化例も示します。

1. 管理コンソールでの手順(GUI)

  • Realm Settings → Add Realm をクリック
  • 「Realm 名」corp-realm と「表示名」社内ポータル を入力し Create

※ GUI 操作は初回だけに留め、以降は API で自動化するとミスが減ります。

2. REST API によるレルム作成(cURL 例)

3. 推奨パスワードポリシー(表)

設定項目 推奨値 補足
パスワード長 12文字以上 NIST SP800‑63B に準拠
大文字 / 小文字 必須 UppercaseLowercase を有効化
数字・特殊文字 必須 DigitsSpecial characters
パスワード履歴保持 5 回分 同一パスワードの再利用防止
SMTP サーバ 社内メールサーバ (smtp.mail.example.com) Realm Settings → Email に設定し、テスト送信で確認

ポイント:パスワードポリシーは「安全性」と「ユーザー体験」のバランスが重要です。最低でも 12 文字・大文字・数字を必須にすれば、一般的なブルートフォース攻撃から十分保護できます。

クライアント登録とプロトコル選択(OIDC / SAML)

Keycloak の Clients 機能は OIDC と SAML の両方に対応しています。以下ではそれぞれの必須項目と、実運用で推奨する設定例を示します。

1. OIDC クライアント(GUI 手順+表)

  • Clients → Create
  • Client IDmy-app-client
  • Root URLhttps://app.example.com

OIDC の場合は必ず PKCE を有効化し、アクセストークンの有効期限を短く設定してください。

項目 推奨設定
Access Type confidential(サーバ間) または public(SPA)
Authorization Flow standard flow(認可コードフロー)
PKCE (Code Challenge Method) S256(必須)
Valid Redirect URIs https://app.example.com/oauth/callback など
アクセストークン有効期限 300 秒(5 分)
Refresh Token 有効期限 30 日

2. SAML クライアント(メタデータインポート例)

  • Clients → Create → プロトコル saml、Client ID remotepc-saml
  • Fine Grain SAML Endpoint Configuration → Import from URL に以下を入力

インポート後は自動的に Entity IDSingleSignOnService URL が設定されます。

3. REST API を使ったクライアント登録(cURL)

本番運用のベストプラクティス

実サービスで安定稼働させるために、HTTPS 強制・シークレット外部管理・署名アルゴリズム選択 を中心にまとめます。

1. HTTPS の徹底

  • リバースプロキシ側で TLS 終端し、Keycloak は --http-enabled=true--proxy=edge を付与
  • HSTS (Strict-Transport-Security: max-age=31536000; includeSubDomains) を必ず有効化

2. クライアントシークレットの外部管理

ツール 保存形式 更新方法 メリット
HashiCorp Vault KV シークレット CLI / API による自動ローテーション 高度なアクセス制御、監査ログ
AWS Secrets Manager JSON Lambda で定期ローテーション マネージドサービス、IAM 統合
Google Secret Manager JSON Cloud Scheduler + Cloud Function GCP ネイティブ、暗号化自動

ポイント:シークレットは 起動時に環境変数(例: KC_DB_PASSWORD)で渡すか、管理 API で定期的に上書きするスクリプトを CI/CD に組み込みます。

3. トークン署名アルゴリズムの選択

  • デフォルトは RS256(RSA‑SHA256)
  • 高機密データを扱う場合は ES384 または PS512 に切り替え、Realm Settings → Keys で新しいキーを生成し、旧キーは段階的に廃止

4. ログとエラーの体系的な把握

エラーコード 主な原因 推奨対策
400 Bad Request 未登録の redirect_uri 正しい URI を Clients → Settings に追加
401 Unauthorized トークン期限切れ・シークレット不一致 有効期限を延長、またはシークレットを再確認
403 Forbidden 必要ロールが付与されていない Authorization ポリシーでロールを割当
500 Internal Server Error DB 接続失敗・設定ファイル不正 kc.logserver.log を確認し、スタックトレースから原因特定

5. 定期的なヘルスチェックとバックアップ

  • Health endpointhttp://localhost:8080/realms/master/protocol/openid-connect/token/introspect(Bearer トークン付与)
  • データベースは 毎日夜間にスナップショット取得、Keycloak の export コマンドで設定バックアップも併用

まとめ:TLS 終端はリバースプロキシ側、シークレットは外部管理ツールに委任し、署名アルゴリズムは要件に応じて強化する。これらを実装すれば、本番環境でも安全かつ安定した SSO 基盤が構築できます。


本稿では Windows と Linux の両方でのインストール手順、TLS/リバースプロキシ設定例、外部シークレット連携方法を網羅的に掲載しました。実際の運用では各組織のポリシーやネットワーク構成に合わせてパラメータを調整し、定期的な監査とバックアップを忘れずに行ってください。

スポンサードリンク

-KeyCloak