0. はじめに
KeycloakをApplication Load Balancerの背後に配置して使おうとしたときにはまったのでメモ。
1. 前提
InternetとALBの間はHTTPS化します。
ALBとKeycloakの間はHTTPです。
ですので,適切なドメインをRoute 53のホストゾーンで管理していることが前提です。
このとき,セキュリティグループは以下の通り。
- ALBのセキュリティグループ:
- インバウンド 443
- EC2のセキュリティグループ:
- インバウンド 8080
- ソース ALBのセキュリティグループ
リスナーは,
- Protocol:Port HTTPS:443
ターゲットグループは,
- Protocol:Port HTTP:8080
としておきます。これで,外部からは443で来たリクエストが,Keycloakには8080で渡されることになります。
2. docker-compose.yml
docker-compose.yml
services:
keycloak:
image: quay.io/keycloak/keycloak:16.1.1
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD: password
KEYCLOAK_USER: test
KEYCLOAK_PASSWORD: test
KC_HOSTNAME: www.example.com
PROXY_ADDRESS_FORWARDING: "true"
ports:
- "8080:8080"
- "8443:8443"
depends_on:
- postgres
restart: always
postgres:
image: postgres:15.7
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
restart: always
KC_HOSTNAMEはALBに設定する証明書と対応したドメイン名です。PROXY_ADDRESS_FORWARDINGは"true"を設定しておきましょう。この設定がないと,Keycloakが追加のリソースを取得できなくなります。その場合,ホームページは表示されるのですが,Administrator consoleを押すと真っ白な画面になってしまいます。