Contents
はじめに:KeycloakとDocker Composeの導入意義
現代の開発現場では、ID管理や認証機能の構築がセキュリティの最前線で重要な役割を果たしています。その中核を担うのがKeycloakであり、オープンソースかつ柔軟性に優れた認証・認可プラットフォームとして注目されています。Docker Composeによるデプロイは、環境構築の自動化とリソース管理の簡素化に効果的です。本記事では、KeycloakのDocker Compose設定方法を中心に、実践的な手順とベストプラクティスを解説します。
docker-compose.ymlの基本構成設計
KeycloakをDocker Composeで構築する際には、サービス定義やネットワーク・ボリューム設定がカギとなります。最新バージョン(例:quay.io/keycloak/keycloak:latest)を使用し、依存関係を明確にすることが重要です。ただし、生産環境では「latest」タグの使用はセキュリティリスクにつながるため、必ず固定バージョン(例:19.0.2)を指定することを推奨します。
サービス定義の最適化ポイント
Keycloakサービスは、以下のようにイメージと環境変数を指定します。外部DBやLDAPとの連携もこのファイルで一括管理可能です。
|
1 2 3 4 5 6 7 |
keycloak: image: quay.io/keycloak/keycloak:19.0.2 environment: KEYCLOAK_USER: admin KEYCLOAK_PASSWORD: securepassword123 DB_VENDOR: POSTGRES |
- KEYCLOAK_USER:管理ユーザー名
- KEYCLOAK_PASSWORD:パスワード(複雑さを担保)
- DB_VENDOR:使用するデータベースタイプ(例:POSTGRES, MYSQL)
注意:
latestタグの使用は生産環境では避けるべきです。バージョン固定化がセキュリティ確保に不可欠です。
ネットワーク・ボリューム設定のベストプラクティス
ネットワークはkeycloak-networkとして、複数サービス間で共有できるようにします。データ永続化にはボリュームを指定し、コンテナ再起動時のデータ保持を確保します。
構成例:
|
1 2 3 4 5 6 7 |
networks: keycloak-network: driver: bridge volumes: keycloak-data: |
重要: ボリュームのマッピングは
./data:/opt/keycloak/dataなど、ホスト側のディレクトリと明示的に紐づけましょう。これにより、コンテナが削除されてもデータが失われません。
PostgreSQLとの連携設定
Keycloakを運用する際には、外部DB(例:PostgreSQL)への接続が必須です。セキュリティと信頼性を担保した構成が求められます。
外部DB接続時のセキュリティ設定
Keycloakは環境変数を通じてデータベースの接続情報を指定します。以下に重要パラメータの一覧を示します:
| 項目 | 値例 | 補足 |
|---|---|---|
| DB_URL | jdbc:postgresql://postgres:5432/keycloak |
PostgreSQLコンテナのホストとポート |
| DB_USER | keycloak_user |
DBアクセス用ユーザー |
| DB_PASSWORD | securedbpass123! |
他のサービスと共有しない専用パスワード |
重要: 接続情報は
.envファイルで管理することが推奨されます。直接docker-compose.ymlに記述するのはセキュリティリスクです。
データベース接続情報の暗号化手法
機密情報を安全に扱うには、Docker Secretsや環境変数の暗号化が有効です。以下の手順を参考にしてください:
.envファイルにDBパスワードなど機密情報を保存docker-compose.ymlで.envファイルを読み込む設定を追加(例:env_file: .env)- パスワードはSHA-256などでハッシュ化(可読性のない形式)
例:
|
1 2 3 4 |
keycloak: env_file: - .env |
LDAP認証設定の実装手順
企業内システムと連携する際には、LDAP認証が必要なケースが多々あります。最新バージョンでの対応方法を解説します。
LDAP接続パラメータの定義方法
Keycloakは以下のような環境変数でLDAPサーバーと通信設定を行います:
|
1 2 3 4 |
KEYCLOAK_LDAP_URL: ldap://ldap-server.example.com:389 KEYCLOAK_LDAP_BIND_DN: "cn=admin,dc=example,dc=com" KEYCLOAK_LDAP_BIND_CREDENTIALS: "adminpass123!" |
- BIND_DN:LDAPサーバーに接続するためのDN(Distinguished Name)
- BIND_CREDENTIALS:認証用パスワード(TLS通信時は暗号化が必要)
認証フローの検証手順
設定後は、以下を実施してLDAPとの連携が正常に動作するか確認します。
- Keycloak管理者画面で「LDAP」の設定ページを開く
- 「Test LDAP connection」ボタンで接続テストを実行
- テストユーザーでログイン試行を行い、エラーがないことを検証
トラブルシューティング: TLS証明書の問題が発生する場合は、
KEYCLOAK_LDAP_USE_STARTTLS: "true"や証明書ファイルをボリュームマッピングで指定します。
環境変数による柔軟なカスタマイズ
Keycloakの動作を環境ごとに調整できるのは、Docker Composeの最大の利点です。.envファイルを使った管理が推奨されます。
プロダクション環境向けパラメータ設定
以下は本番環境で有効な例です:
KEYCLOAK_HOSTNAME: keycloak.prod.example.comKEYCLOAK_REALM: prod_realmKEYCLOAK_FRONTEND_URL: https://app.prod.example.com/auth
ポイント: 領域(Realm)の構成は環境変数で指定可能なので、開発・本番で設定を切り替えるのが簡単です。
開発環境でのデバッグオプション
以下のパラメータを.envファイルに記述することで、ロギングや起動オプションを調整できます:
KEYCLOAK_LOG_LEVEL: DEBUGKEYCLOAK_ENABLE_DEBUG: "true"KEYCLOAK_DISABLE_SSL: "true"(開発時のみ使用)
データ永続化と運用管理のベストプラクティス
Keycloakは状態を保持するアプリケーションであるため、データの永続化が不可欠です。
ボリュームマッピングの最適な設計
コンテナ再起動や更新時のデータ保存には、以下のようなボリューム設定を推奨します:
|
1 2 3 4 |
volumes: keycloak-data: name: keycloak_data_volume |
補足: ボリューム名は
keycloak_data_volumeなど、一意かつ運用管理しやすい命名が重要です。
監視・ログ管理のアプローチ
以下のツールと組み合わせて監視を実施します:
- Prometheus + Grafana: サービスの健康状態やリソース使用率の可視化
- ELK Stack(Elasticsearch, Logstash, Kibana): ロギングデータの集約・解析
例: Keycloakコンテナからログを標準出力する設定は、
docker-compose.ymlにlogging: driver: json-fileと記述することで実現可能です。
実際にDocker Composeファイルを確認しながら手順を試してみましょう
以下に最新バージョンに対応したdocker-compose.ymlのサンプルコードを掲載します。環境変数やボリューム、ネットワーク設定が明記されています。
サンプル: docker-compose.yml(最新バージョン)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
version: '3.8' services: keycloak: image: quay.io/keycloak/keycloak:19.0.2 env_file: - .env ports: - "8080:8080" volumes: - ./data:/opt/keycloak/data networks: - keycloak-network depends_on: - postgres postgres: image: postgres:15-alpine env_file: - .env volumes: - postgres-data:/var/lib/postgresql/data networks: - keycloak-network volumes: keycloak-data: postgres-data: networks: keycloak-network: |
解説:
depends_onでPostgreSQLの起動を待ちます。- ボリュームは
./dataとpostgres-dataに分離し、データ永続化を強化しました。
まとめ
本記事では、Keycloak Docker Compose 設定 方法を、以下の観点から解説しました:
- docker-compose.ymlの基本構成と環境変数設定
- PostgreSQLとの連携方法とセキュリティ対策
- LDAP認証の実装手順とテスト法
- 環境ごとにカスタマイズ可能なパラメータ一覧
- データ永続化と監視構成のベストプラクティス
読者の皆さんは、上述の手順に従って実際にDocker Composeファイルを作成し、Keycloakを導入することで、開発・運用環境の効率化が図れるはずです。最新技術を活用して、信頼性とセキュリティを高めたシステム構築を目指してください。