今回は、認証/認可プロトコル対応プロキシに「mod_auth_openidc」を使用した、Keycloakのリバースプロキシ型構成を構築していきます。また、スムーズに構築するため「Docker Compose」を利用します。これらは、必要な設定も含めて自動的に構築されるので、動くモノをベースに、Keycloakのリバースプロキシ型構成の理解を深めていただければと思います。
今回構築する構成は、以下の図3のようになります。
次に、構成するDockerコンテナは、表2のようになります。
コンテナ名 | 役割 | ポート | 利用イメージ | イメージ構成補足 |
---|---|---|---|---|
kc-example-lb | ロードバランサー(SSLアクセレータ) | 443/80 | jwilder/nginx-proxy:latest | SSLを復号し、構成されるWebアプリコンテナにプロキシするDockerイメージ |
kc-example-rp | 標準プロトコル対応の認証/認可プロキシ | 81 | centos:centos7 | CentOS公式のDockerイメージから、Apache2およびmod_auth_openidcを構成 |
kc-example-db | Keycloakデータベース | 3306 | mysql:5.7 | MySQL公式のDockerイメージ |
kc-example-op | Keycloak本体 | 8080 | jboss/keycloak:4.3.0.Final | JBoss公式のDockerイメージに、あらかじめ準備したKeycloak設定をインポートするように構成 |
kc-example-app1 | 連携アプリ1 | 8081 | mendhak/http-https-echo:latest | どのURIにアクセスしても、リクエスト情報をJSON形式でレスポンスするDockerイメージ |
kc-example-app2 | 連携アプリ2 | 8082 | 同上 | 同上 |
表2 構成するDockerコンテナ一覧 |
作成するユーザーは、表3のようになります。
ユーザー名 | パスワード | 役割 | レルム | ロール |
---|---|---|---|---|
admin | password | Keycloak管理者 | master | admin |
user001 | password | 連携アプリ1の管理者/連携アプリ2の一般ユーザー | demo | app1.admin, app2.user |
user002 | password | 連携アプリ1の一般ユーザー/連携アプリ2の管理者 | demo | app1.user, app2.admin |
表3 ユーザー一覧 |
そして、構成するコンテンツは、表4のようになります。
コンテンツ | アクセス制御 | URL |
---|---|---|
Keycloak管理 | 認証必要・管理者ロール必要 | https://sso.example.com/auth/admin/ |
連携アプリ1 | 認証必要 | https://app1.example.com/ |
認証必要・管理者ロール必要 | https://app1.example.com/admin/ | |
認証不要 | https://app1.example.com/no_auth/ | |
ログアウト | https://app1.example.com/oidc-redirect/?logout=https://app1.example.com/ | |
連携アプリ2 | 認証必要 | https://app2.example.com/ |
認証必要・管理者ロール必要 | https://app2.example.com/admin/ | |
認証不要 | https://app2.example.com/no_auth/ | |
ログアウト | https://app2.example.com/oidc-redirect/?logout=https://app2.example.com/ | |
表4 コンテンツ一覧 |
実行環境(OS)は問いませんが、「Docker CE」(※1)および「Docker Compose」(※2)がインストールされていることが、前提条件となります。
【※1】「Docker CE」は、コンテナ型の仮想化環境を提供するオープンソースソフトウェアのコミュニティー版である「Docker Community Edition」の略称です。
【※2】「Docker Compose」は、複数のコンテナから成るサービスを構築、実行する手順を自動的にし、管理を容易にするツールです。
既に、Dockerの実行環境をお持ちの方は、この部分は読み飛ばして構いません。お持ちでない方は、以下のサイトを参考にインストールしてください。
Dockerは、さまざまなOSに対応しているので、任意の環境にインストールしてください。また、必要に応じて、DockerのHTTP/HTTPSプロキシの通し方について記載された「HTTP/HTTPS proxy」(https://docs.docker.com/engine/admin/systemd/#/http-proxy)を参照し、設定を行ってください。
なお、筆者はCentOS 7で確認を行ったため、これ以降CentOS 7をベースにして記載しますが、読者の実行環境に読み替えて実施することも可能です。
今回は、「Docker CE」および「Docker Compose」を使用して構築しますが、このDockerホストとなるCentOSへFQDNでアクセスできるように、クライアントマシンのhostsファイルに設定を追加します。
xxx.xxx.xxx.xxx sso.example.com app1.example.com app2.example.com
「xxx.xxx.xxx.xxx」の部分はCentOSのIPアドレスです。
まずは、今回公開したDockerビルドファイルを任意の場所にダウンロードし、解凍します。
# wget https://github.com/openstandia/keycloak-dockerfiles/archive/4.3.0.Final.zip # unzip 4.3.0.Final.zip
次に、Dockerイメージのビルド、およびDockerコンテナの起動をします。
# cd keycloak-dockerfiles-4.3.0.Final/reverse_proxy-based-arch-examples/kc-mod_auth_openidc-example/ # docker-compose up –d ––build Creating network "kc-mod_auth_openidc-example_default" with the default driver Creating kc-example-rp ... done Creating kc-example-db ... done Creating kc-example-app2 ... done Creating kc-example-app1 ... done Creating kc-example-lb ... done Creating kc-example-op ... done
そして、Dockerコンテナのログを監視し、Keycloakが起動完了したことを確認します。
# docker-compose logs –f ~省略~ kc-example-op | 13:19:04,070 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 4.3.0.Final (WildFly Core 3.0.8.Final) started in 25632ms - Started 546 of 882 services (604 services are lazy, passive or on-demand)
最後に、以下の通り、コンテナが起動していることを確認します。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e67b7d956b94 kc-mod_auth_openidc-example_op "/opt/jboss/docker-e…" 5 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp kc-example-op 6e60630570f9 kc-mod_auth_openidc-example_lb "/app/docker-entrypo…" 5 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp kc-example-lb f4dbdebd2858 kc-mod_auth_openidc-example_app2 "node ./index.js" 6 seconds ago Up 4 seconds 443/tcp, 0.0.0.0:8082->80/tcp kc-example-app2 37962818ee9c kc-mod_auth_openidc-example_app1 "node ./index.js" 6 seconds ago Up 4 seconds 443/tcp, 0.0.0.0:8081->80/tcp kc-example-app1 8ecc4ef9a7e6 kc-mod_auth_openidc-example_db "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:3306->3306/tcp kc-example-db d63b7ecaf436 kc-mod_auth_openidc-example_rp "/opt/docker-entrypo…" 6 seconds ago Up 4 seconds 0.0.0.0:81->80/tcp kc-example-rp
これで、Keycloakのリバースプロキシ型構成の構築が完了です。
補足になりますが、Dockerコンテナを停止する場合には、以下のコマンドを実行します。
# docker-compose down Stopping kc-example-op ... done Stopping kc-example-lb ... done Stopping kc-example-app2 ... done Stopping kc-example-app1 ... done Stopping kc-example-db ... done Stopping kc-example-rp ... done Removing kc-example-op ... done Removing kc-example-lb ... done Removing kc-example-app2 ... done Removing kc-example-app1 ... done Removing kc-example-db ... done Removing kc-example-rp ... done
Copyright © ITmedia, Inc. All Rights Reserved.