連載
» 2018年06月18日 05時00分 公開

Keycloak超入門(6):Keycloakで外部ユーザーストレージに連携してみよう (1/3)

本連載では、近年注目されている認証プロトコル「OpenID Connect」をサポートするオープンソースのシングルサインオン(SSO)ソフトウェア「Keycloak」の活用方法を解説していきます。Keycloakは、Active Directoryなどの外部ユーザーストレージと連携し、それらで管理されたユーザーによるシングルサインオンを実現できます。

[和田広之, 相田洋志, 田村広平, 上田直樹,野村総合研究所/野村総合研究所/フリーランス/株式会社リック]
「Keycloak超入門」のインデックス

連載目次

はじめに

 近年は、ユーザー情報をクラウド上で管理する「IDaaS(Identity as a Service)」のようなサービスも利用されるようになっています。しかし、企業などの組織ネットワークにおける認証サービスの中心は、今もなお「Active Directory」や「Red Hat Directory Server」といったLDAP(Lightweight Directory Access Protocol)サーバではないでしょうか。

 LDAPサーバは、ユーザーだけでなく、組織内のコンピュータやその設定も一元管理でき、連携している組織内のシステムも多いため、今後も活用されていくことが予想されます。

 Keycloakは、これらのLDAPサーバに保存されているユーザーを簡単に認証に利用できます。これを実現するのが「ユーザーストレージ連携」機能です。

ユーザーストレージ連携機能とは?

 Keycloakのユーザーストレージ連携機能とは、LDAPなどの外部ユーザーストレージと連携するための機能です。これにより、外部ユーザーストレージに保存されているユーザーを使用して、Keycloakと連携しているアプリケーションにシングルサインオンできるようになります(図1)。

図1 図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のようになります。

図2 図2 外部ユーザーストレージ連携の仕組み

 Keycloakは、まず内部ユーザーストレージを検索します(図2の1)。そこにユーザーが存在しなければ、一致するユーザーが見つかるまで、設定した全ての外部ユーザーストレージを検索します(図2の2、3)。外部ユーザーストレージには優先度を設定できるようになっており、検索の順番はそれによって決まります。

●ストレージモードと編集モード

 一般的なユースケースでは、ユーザー情報をKeycloakの内部ユーザーストレージではなく、外部ユーザーストレージとして既存のLDAPサーバで管理することが多いのではないかと思います。その場合に注意しなければならないのは、Keycloakの機能を利用する上で必要なユーザー情報を、既存のLDAPサーバに保存できるとは限らないということです。

 例えば、Keycloakのワンタイムパスワード(以下、OTP)機能を使用する場合を考えてみましょう。一般的なLDAPサーバには、OTPの秘密鍵や生成時刻を保存するためのユーザー属性がありません。従って、OTPの秘密鍵や生成時刻を保存するために、内部ユーザーストレージも併用する必要があります(図3)。

図3 図3 OTPを使用する場合の構成の例

 この場合、外部ユーザーストレージだけでなく、内部ユーザーストレージにもユーザー情報が保存されることになります。そのため、ユーザー情報は不整合が発生しないように、両者の間で同期しなければなりません。

 同期の方法を決めるのは、主に以下の2つの動作モードです。

  • ストレージモード
  • 編集モード

 「ストレージモード」は、外部ユーザーストレージから内部ユーザーストレージにユーザーをインポートするかどうかを制御します。デフォルトは「オン」で、インポートするようになっています。インポートされたユーザーは、必要に応じて管理コンソールで同期するか、または定期的なバックグラウンドタスクによって同期します。

 例外の1つはパスワードです。パスワードはインポートされず、値の検証はLDAPサーバに委任されます。ストレージモードを「オフ」にすると、ユーザーはインポートされません。両者のメリットは、以下の表1のようになります。

ストレージモード メリット
オン(インポートする) ・Keycloakの動作に必要なユーザー属性を全て保存できるため、全てのKeycloakの機能が利用可能
・パスワードの検証を除くユーザー操作に対して、外部ストレージへのアクセスが不要になるため、外部ストレージへの負荷が軽減できる
オフ(インポートしない) ・ユーザー情報を内部ユーザーストレージにインポートして同期するオーバーヘッドがない
・その後の同期も不要
表1 ストレージモードの選択肢とメリット

 「編集モード」は、外部ユーザーストレージで管理されたユーザー情報に対する更新のポリシーを決定します。ユーザー情報の更新は、エンドユーザーの場合はユーザーアカウントサービスを介して、管理者の場合は管理コンソールを介してできますが、このモードによりその際の動作が変わります(表2)。

編集モード 動作 利用シチュエーション
READONLY ユーザー属性は変更できない。これらのフィールドを更新しようとすると、Keycloakはエラーを表示する。パスワードの更新もサポートされない 読み取り専用の外部ユーザーストレージと連携し、ユーザー属性の更新をサポートしなくてもよい場合
WRITABLE ユーザー属性は全て更新でき、外部ユーザーストレージと自動的に同期される 書き込み可能な外部ユーザーストレージと連携し、ユーザー属性の更新をサポートしたい場合
UNSYNCED パスワードを含むユーザー属性の変更は、内部ユーザーストレージに保存される。外部ユーザーストレージに同期する方法は別途検討する必要がある。このオプションは、ストレージモードが「オン」の場合にのみ適用される 読み取り専用の外部ユーザーストレージと連携するが、ユーザー属性の更新もサポートしたい場合
表2 編集モードの選択肢
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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