では、実際に集中管理方式によるアクセス制御の動作を検証してみましょう。今回は、認可サービスの動作確認に当たり、Tomcatのクライアントアダプターを使用したKeycloak環境を構築していきます。前回と同様にスムーズに構築するため、「Docker Compose」を利用します。
(※)今回構築する環境にはUMA方式の検証環境も含まれており、次回のUMA方式の動作検証でそのまま利用します。
今回構築する構成は、図3のようになります。
次に、構成するDockerコンテナは、表3の通りです。
コンテナ名 | 役割 | ポート | 利用イメージ | イメージ構成補足 |
---|---|---|---|---|
kc-example-lb | ロードバランサー(SSLアクセレーター) | 443/80 | jwilder/nginx-proxy:latest | SSLを復号し、構成されるWebアプリコンテナにプロキシするDockerイメージ |
kc-example-db | Keycloakデータベース | 3306 | mysql:5.7 | MySQL公式のDockerイメージ |
kc-example-op | Keycloak本体 | 8080 | jboss/keycloak:4.8.3.Final | JBoss公式のDockerイメージに、あらかじめ準備したKeycloak設定をインポートするように構成 |
kc-example-app1 | Tomcat クライアントアダプター 認可サンプルアプリ |
8081 | library/tomcat:8.5.37-jre8 | Tomcat公式のDockerイメージに、認可サンプルアプリをデプロイするように構成 |
kc-example-app2 | Tomcat クライアントアダプター UMAサンプルアプリ |
8082 | library/tomcat:8.5.37-jre8 | Tomcat公式のDockerイメージに、UMAサンプルアプリをデプロイするように構成(※こちらのアプリは、次回第9回の検証で利用します) |
表3 構成するDockerコンテナ一覧 |
そして、作成するユーザーは、表4の通りです。
ユーザー名 | パスワード | 電子メール | 役割 | レルム | ロール | グループ |
---|---|---|---|---|---|---|
admin | password | ― | Keycloak管理者 | master | admin | ― |
user001 | password | user001@example.com | 一般ユーザー | authz | ― | ― |
user002 | password | user002@test.example.com | 一般ユーザー | authz | ― | nri |
user003 | password | user003@example.com | 一般ユーザー | ― | ― | openstandia |
admin001 | password | admin001@example.com | 管理者 | ― | admin | ― |
admin002 | password | admin002@test.example.com | 管理者 | ― | admin | nri |
admin003 | password | admin003@example.com | 管理者 | ― | admin | openstandia |
表4 ユーザー一覧 |
集中管理方式の動作確認で利用するコンテンツは、表5の通りです。
コンテンツ | アクセス制御 | アクセス制御メカニズム | URI | 用途 |
---|---|---|---|---|
認可サービスアプリ | 認証必要 | ― | /authz-app/ | ― |
ロールベースアクセス制御 | /authz-app/role/admin/ | 特定のロール(admin)を持つユーザーにアクセスを限定 | ||
ユーザーベースアクセス制御 | /authz-app/user/user001/ | 特定のユーザー(user001)にアクセスを限定 | ||
ロールベースアクセス制御 | /authz-app/group/openstandia/ | 特定のグループ(openstandia)に所属するユーザーにアクセスを限定 | ||
属性ベースアクセス制御 | /authz-app/attr/test/ | 電子メールに特定の値(@test.example.com)を含むユーザーにアクセスを限定 | ||
時間ベースアクセス制御 | /authz-app/time/lunch/ | 特定の時間帯だけにアクセスを限定 | ||
表5 https://authz.example.comのコンテンツ一覧 |
今回も、「Docker CE」とDocker Composeがインストールされていることが、前提条件となります。導入されていない方は、本連載第7回を参考にインストールしてください。
今回は、Docker CEおよびDocker Composeを使用して構築を行いますが、このDockerホストとなるCentOSへFQDNでアクセスできるように、クライアントマシンのhostsファイルに設定を追加します。
xxx.xxx.xxx.xxx sso.example.com authz.example.com uma.example.com
「xxx.xxx.xxx.xxx」の部分はCentOSのIPアドレスです。
まずは、今回公開したDockerビルドファイルを任意の場所にダウンロードし、解凍します。
# wget https://github.com/openstandia/keycloak-dockerfiles/archive/at_sign_it-8_9th-example.zip # unzip at_sign_it-8_9th-example.zip
次に、検証用のアプリケーションをビルドします。
# cd keycloak-dockerfiles-at_sign_it-8_9th-example/client_adapter-based-arch-examples/kc-tomcat-adapter-example/ # mvn clean package -f tomcat1/authz-app/pom.xml # mvn clean package -f tomcat2/authz-uma-api/pom.xml # mvn clean package -f tomcat2/authz-uma-client/pom.xml
Dockerイメージをビルドし、Dockerコンテナを起動します。
# docker-compose up -d --build Creating network "kc-tomcat-adapter-example_default" with the default driver 〜省略〜 Creating kc-example-db ... done Creating kc-example-op ... done Creating kc-example-app1 ... done Creating kc-example-app2 ... done Creating kc-example-lb ... done
そして、Dockerコンテナのログを監視し、Keycloakが起動完了したことを確認します(起動完了が分かりやすいようにKeycloakのログ出力に限定します)。
# docker-compose logs -f op 〜省略〜 kc-example-op | 07:19:21,551 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 4.8.3.Final (WildFly Core 6.0.2.Final) started in 88798ms - Started 670 of 930 services (649 services are lazy, passive or on-demand)
続いて、クライアントアダプターが同梱されているTomcatのコンテナの起動を2つとも確認します(今回の構築環境のTomcatはKeycloakへSSL接続が可能になった後で、起動するように調整しているため、起動完了までに多少時間がかかります)。
# docker-compose logs -f app1 app2 〜省略〜 kc-example-app1 | 14-Feb-2019 02:22:29.062 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 24050 ms 〜省略〜 kc-example-app2 | 14-Feb-2019 02:22:40.765 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 36169 ms
最後に、コンテナが全て起動していることを確認します。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c6c651074a4b kc-tomcat-adapter-example_lb "/app/docker-entrypo…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp kc-example-lb 04fc26df6000 kc-tomcat-adapter-example_app1 "bash /wait-for-kc.sh" About a minute ago Up About a minute 0.0.0.0:8081->8080/tcp kc-example-app1 5dc326eaaff2 kc-tomcat-adapter-example_app2 "bash /wait-for-kc.sh" About a minute ago Up About a minute 0.0.0.0:8082->8080/tcp kc-example-app2 13f9d050de04 kc-tomcat-adapter-example_op "/opt/jboss/tools/do…" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp kc-example-op 10f36c0d0714 kc-tomcat-adapter-example_db "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp kc-example-db
これで、Keycloakの認可サービス動作環境の構築が完了です。
Copyright © ITmedia, Inc. All Rights Reserved.