Keycloakのクラスタ環境を構成してみよう:Keycloak超入門(4)(1/3 ページ)
本連載では、近年注目されている認証プロトコル「OpenID Connect」をサポートするオープンソースのシングルサインオン(SSO)ソフトウェア「Keycloak」の活用方法を解説していきます。今回は、Keycloakのクラスタ環境を構成する方法を解説します。
クラスタを構築してシステムの可用性を確保する
「Keycloak」を含むシステムを構築した際、Keycloakがダウンすると認可に関する情報を取得できなくなるため、システム全体がアクセス不能となってしまいます。これを防ぐためには、Keycloakサーバをクラスタ化し、システム全体の可用性を確保する必要があります。
KeycloakではKeycloakを実行するためのアプリケーション(AP)サーバである「WildFly」が提供するクラスタ機能を利用して、ホスト間でデータを共有しています。また、セッション情報などのデータをクラスタ間で共有することで、ホストがダウンした際の処理を他のホストで引き継げるようになっています。
クラスタ間で共有される情報は「Keycloakの設定項目」「セッション情報」「アプリケーションサーバの設定項目」の3つです。
Keycloakの設定項目
Keycloak自体が持つ設定情報や、Keycloak上で行ったレルムやクライアント設定など、GUIやCLIで設定した項目が共有されます。これらの情報は、外部のデータソースを経由して共有されます。
セッション情報
Keycloakのセッション情報もホスト間で共有されます。これにより、ユーザーのログイン状態が維持されます。セッション情報は、WildFlyに搭載されている「JGroups」「Infinispan」を利用して共有されます。JGroups、Infinispanの詳細は、WildFlyのドキュメント(https://docs.jboss.org/author/display/WFLY10/Documentation)を参照してください。
アプリケーションサーバの設定項目
Keycloakが動作するWildFlyの設定項目も共有されます。共有される項目にはデータソースやログの設定、起動パラメーターといった情報が含まれます。これらの項目は、後述する「Domain Clustered」モードでクラスタ環境を構築した場合のみ共有されます。
WildFlyにおける3つの動作モード
ここからは、Keycloakが動作するAPサーバ、WildFlyについて説明します。WildFlyには「Standalone」「Standalone Cluster」「Domain Clustered」という3つの動作モードが定義されており、利用状況や構築するクラスタの規模に合わせて選択できます。
モード | Keycloak設定項目の共有 | セッション情報の共有 | APサーバ設定項目の共有 |
---|---|---|---|
Standalone | × | × | × |
Standalone Cluster | ○ | ○ | × |
Domain Clustered | ○ | ○ | ○ |
各動作モードの違いは、以下のようになります。
Standaloneモード
Standaloneは、Keycloakのアプリケーションが1インスタンスで動作するモードです。クラスタ化することはできませんが、簡単な設定で動作させることが可能です。Standaloneモードでは可用性が確保できないため、本番環境での利用は推奨されていません。
Standalone Clusterモード
Standalone Clusterは、複数のサーバでクラスタを動作させるモードです。クラスタ環境が構築されると、データソースやセッション情報がクラスタのノード間で共有されるようになります。
ただし、データソースやロギングの設定など、APサーバの設定項目は共有されないため、設定を変更するたびに、各ノードに対して同じ変更を行う必要があります。クラスタを動作させるための設定は簡単ですが、数十台の大規模なクラスタ環境を構築する場合には作業量が多くなってしまいます。
Domain Clusteredモード
Domain Clusteredは、「ドメインコントローラー」という機能でクラスタ内ホストの設定項目を管理するモードです。クラスタが構築されると、データソースやセッション情報だけでなく、WildFlyに対する設定項目がクラスタ内のノード間で自動的に共有されます。これにより、ノードの追加時にAPサーバへの設定が必要なくなり、システム負荷に応じて柔軟にクラスタノード数を変更できるようになります。
今回は、設定が簡単なStandalone Clusterモードでクラスタを構築します。
クラスタ構成に必要なコンポーネント
今回構築するKeycloakクラスタは、以下の図1のような構成になります。
Keycloakホスト
クラスタを構築するためには、2台以上のKeycloakホストが必要です。それぞれのKeycloakをStandalone Clusterモードで動作させるように設定します。
ロードバランサー
クラスタ化されたKeycloakにHTTPリクエストを振り分けるために、Keycloakサーバの前面にロードバランサーを設置します。今回は「Apache HTTPD」と「mod_cluster」モジュールを利用します。
共有データソース
クラスタ間で設定項目を共有するためには、外部の共有データソースが必要になります。共有データソース(Datasource)には、「PostgreSQL」「MySQL」「Oracle」などのRDBMS(Relational Database Management System)が利用できます。今回は、PostgreSQLを利用します。
ノード間のプライベートネットワーク
WildFlyによるクラスタ環境では、設定項目を共有するためにノード間の情報がマルチキャストで送信されます。そのため、セキュリティ上の観点から、クラスタ間通信には専用ネットワークを利用することが推奨されています。今回は、プライベートネットワークを利用できなかったのでこの設定は行っていません。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- なぜ「シングルサインオン」が必要なのか?
企業でのWebサービスの実現が具体的になるにつれ、パスワード/IDマネジメントが重視されるようになり、「シングル・サインオン」がますます注目を集めている。この連載では、シングル・サインオンの実践ステップなど具体的な考え方を紹介する。また、メタディレクトリやLDAPなど「ディレクトリ統合」をキーワードとしてシングル・サインオンを実現するための技術を分かりやすく解説する。(編集部) - 第1回 もはや企業のID管理で避けては通れない「IDaaS」とは?
これまで社内設置が当たり前だったアイデンティティ(ID)管理/認証システム。でも「クラウド」「モバイル」に代表される激烈な変化に対応できる、と本当に思っていますか? ID管理/シングルサインオンの新たな選択肢「IDaaS」について解説する連載開始! - 強力なSSOを実現するXML認証・認可サービス(SAML)
- OpenIG、OpenDJと連携したOpenAMの新機能
今回は、OpenAMの姉妹製品で既存アプリケーションを改修せずにシングルサインオンを可能にする「OpenIG」と、OpenAMのデフォルトデータストアである「OpenDJ」について解説します。