Keycloakで実用的なリバースプロキシ型構成を構築してみようKeycloak超入門(7)(2/4 ページ)

» 2018年10月25日 05時00分 公開
[和田広之, 相田洋志, 田村広平, 上田直樹野村総合研究所/野村総合研究所/フリーランス/株式会社リック]

リバースプロキシ型構成の構築

 今回は、認証/認可プロトコル対応プロキシに「mod_auth_openidc」を使用した、Keycloakのリバースプロキシ型構成を構築していきます。また、スムーズに構築するため「Docker Compose」を利用します。これらは、必要な設定も含めて自動的に構築されるので、動くモノをベースに、Keycloakのリバースプロキシ型構成の理解を深めていただければと思います。

●構築の概要

 今回構築する構成は、以下の図3のようになります。

図3 図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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。