Keycloakで外部ユーザーストレージに連携してみよう:Keycloak超入門(6)(1/3 ページ)
本連載では、近年注目されている認証プロトコル「OpenID Connect」をサポートするオープンソースのシングルサインオン(SSO)ソフトウェア「Keycloak」の活用方法を解説していきます。Keycloakは、Active Directoryなどの外部ユーザーストレージと連携し、それらで管理されたユーザーによるシングルサインオンを実現できます。
はじめに
近年は、ユーザー情報をクラウド上で管理する「IDaaS(Identity as a Service)」のようなサービスも利用されるようになっています。しかし、企業などの組織ネットワークにおける認証サービスの中心は、今もなお「Active Directory」や「Red Hat Directory Server」といったLDAP(Lightweight Directory Access Protocol)サーバではないでしょうか。
LDAPサーバは、ユーザーだけでなく、組織内のコンピュータやその設定も一元管理でき、連携している組織内のシステムも多いため、今後も活用されていくことが予想されます。
Keycloakは、これらのLDAPサーバに保存されているユーザーを簡単に認証に利用できます。これを実現するのが「ユーザーストレージ連携」機能です。
ユーザーストレージ連携機能とは?
Keycloakのユーザーストレージ連携機能とは、LDAPなどの外部ユーザーストレージと連携するための機能です。これにより、外部ユーザーストレージに保存されているユーザーを使用して、Keycloakと連携しているアプリケーションにシングルサインオンできるようになります(図1)。
現在Keycloakでは、外部ユーザーストレージとしてActive DirectoryやRed Hat Directory ServerなどのLDAPサーバをデフォルトでサポートしています。さらに、「ユーザーストレージSPI(サービスプロバイダーインタフェース)」というインタフェースを実装して、上記以外のユーザーストレージ(RDBMSなど)と連携することもできます。Active DirectoryやRed Hat Directory Serverとの連携も、このユーザーストレージSPIを実装したもので実現しています。
●ユーザーストレージ連携の仕組み
Keycloakには内部ユーザーストレージとして、「H2」というRDBMSが組み込まれています。デフォルト設定のままであれば、H2でユーザーのデータが管理されることになります。通常は、「MySQL」などのRDBMSを使用するように設定を変更します。さらに、設定を追加することで、複数の異なる外部ユーザーストレージとも連携することもできます。
外部ユーザーストレージと連携した場合のユーザー情報を検索する優先順位は、以下の図2のようになります。
Keycloakは、まず内部ユーザーストレージを検索します(図2の1)。そこにユーザーが存在しなければ、一致するユーザーが見つかるまで、設定した全ての外部ユーザーストレージを検索します(図2の2、3)。外部ユーザーストレージには優先度を設定できるようになっており、検索の順番はそれによって決まります。
●ストレージモードと編集モード
一般的なユースケースでは、ユーザー情報をKeycloakの内部ユーザーストレージではなく、外部ユーザーストレージとして既存のLDAPサーバで管理することが多いのではないかと思います。その場合に注意しなければならないのは、Keycloakの機能を利用する上で必要なユーザー情報を、既存のLDAPサーバに保存できるとは限らないということです。
例えば、Keycloakのワンタイムパスワード(以下、OTP)機能を使用する場合を考えてみましょう。一般的なLDAPサーバには、OTPの秘密鍵や生成時刻を保存するためのユーザー属性がありません。従って、OTPの秘密鍵や生成時刻を保存するために、内部ユーザーストレージも併用する必要があります(図3)。
この場合、外部ユーザーストレージだけでなく、内部ユーザーストレージにもユーザー情報が保存されることになります。そのため、ユーザー情報は不整合が発生しないように、両者の間で同期しなければなりません。
同期の方法を決めるのは、主に以下の2つの動作モードです。
- ストレージモード
- 編集モード
「ストレージモード」は、外部ユーザーストレージから内部ユーザーストレージにユーザーをインポートするかどうかを制御します。デフォルトは「オン」で、インポートするようになっています。インポートされたユーザーは、必要に応じて管理コンソールで同期するか、または定期的なバックグラウンドタスクによって同期します。
例外の1つはパスワードです。パスワードはインポートされず、値の検証はLDAPサーバに委任されます。ストレージモードを「オフ」にすると、ユーザーはインポートされません。両者のメリットは、以下の表1のようになります。
ストレージモード | メリット |
---|---|
オン(インポートする) | ・Keycloakの動作に必要なユーザー属性を全て保存できるため、全てのKeycloakの機能が利用可能 ・パスワードの検証を除くユーザー操作に対して、外部ストレージへのアクセスが不要になるため、外部ストレージへの負荷が軽減できる |
オフ(インポートしない) | ・ユーザー情報を内部ユーザーストレージにインポートして同期するオーバーヘッドがない ・その後の同期も不要 |
表1 ストレージモードの選択肢とメリット |
「編集モード」は、外部ユーザーストレージで管理されたユーザー情報に対する更新のポリシーを決定します。ユーザー情報の更新は、エンドユーザーの場合はユーザーアカウントサービスを介して、管理者の場合は管理コンソールを介してできますが、このモードによりその際の動作が変わります(表2)。
編集モード | 動作 | 利用シチュエーション |
---|---|---|
READONLY | ユーザー属性は変更できない。これらのフィールドを更新しようとすると、Keycloakはエラーを表示する。パスワードの更新もサポートされない | 読み取り専用の外部ユーザーストレージと連携し、ユーザー属性の更新をサポートしなくてもよい場合 |
WRITABLE | ユーザー属性は全て更新でき、外部ユーザーストレージと自動的に同期される | 書き込み可能な外部ユーザーストレージと連携し、ユーザー属性の更新をサポートしたい場合 |
UNSYNCED | パスワードを含むユーザー属性の変更は、内部ユーザーストレージに保存される。外部ユーザーストレージに同期する方法は別途検討する必要がある。このオプションは、ストレージモードが「オン」の場合にのみ適用される | 読み取り専用の外部ユーザーストレージと連携するが、ユーザー属性の更新もサポートしたい場合 |
表2 編集モードの選択肢 |
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」について解説します。