はじめに
Keycloakのリバースプロキシの設定でハマったので備忘録として記載する。
取ろうとした構成図
AWS上に上記の構成で、quay.io/keycloak/keycloak:26.1.0を使用しkeycloakコンテナを立てた。
ALBがDNSを持っており、そのDNSの特定パスにアクセスした場合、ALBの
裏のKeycloakにアクセスできる構成。この場合ALBはリバースプロキシの役割をしている。
この構成で、
変数名 | 値 | 説明 |
---|---|---|
KC_BOOTSTRAP_ADMIN_USERNAME | 任意の値 | adminのid |
KC_BOOTSTRAP_ADMIN_PASSWORD | 任意の値 | adminのパスワード |
KC_HEALTH_ENABLED | true | ヘルスチェックを許可orしない。9000番port、デフォルトでは/healthでヘルスチェックしている。 |
の環境変数を設定しECSタスクを起動したところ、mixed contentでエラーになった。
この理由としては、ECS自体が前にALBの存在を知らず、レスポンスのロケーションにhttpでのECSのipを載せてしまう。ゆえにmixed Contentsでブロックされてしまうからである....(下記図のようになる)
初めにドキュメントを見て、あまりよくわからなかったため、
ネット上で色々と検索したところ、
https://sabiz.hateblo.jp/entry/2023/03/24/071754
や
https://stackoverflow.com/questions/55044623/mixed-content-error-because-of-keycloak-default-login-redirection
に
PROXY_ADDRESS_FORWARDING=true
や
KC_PROXY=passthrough
のような設定があったため、入れてみてもうまくkeycloakがリバースプロキシを処理してくれていなかった。
最終的にドキュメントを血眼になって読み込むと、上記の環境変数は無くなっており、
Keycloakの公式ドキュメントに、
hostname=任意のurl
hostname-backchannel-dynamic=true
とすると、うまく動くと記載があった。直接
useing proxyに記載はなく、Port to be proxied項目の遷移後のページに記載があったため、一度軽く見ただけでは見つからなかった...
英語を忌避せずにしっかりドキュメントと向き合おうねというお話でした。
フロントの世界の発展は早いから2~3年前の記事は参考にならないね。
この記事も数年経てば役に立たなくなることでしょうが、それまでに誰かの参考になれば!