Keycloakによるポリシー制御 ( 多要素認証とパスワードポリシー )

目次

概要

Keycloakの検証環境を構築し、実際にポリシーを適用してみましょう。このチュートリアルの実行にあたり、作業用の仮想マシンを新たに用意してください。

仮想サーバーの用意

例として、仮想環境としてVirtualBoxを使っていますが、他の仮想環境でも構いません。

< 以下は、VirtualBoxを使った場合の例 >

仮想サーバーのスペック

  • OS:Ubutnu Server 22.04

  • 仮想CPU割り当て数 : 1

  • 仮想メモリ割り当て:4096MB(4GB)以上

  • 仮想ディスク:64GB以上

  • ネットワーク設定:NAT + ホストオンリーアダプタの構成。ホストオンリーアダプタには、固定IPを割り当てること。

  • デスクトップ環境:なし

  • SSH接続:必須 ( ユーザー名 + パスワードでもOK )

仮想サーバー の設定

  • ホストオンリーアダプタの固定IP例:192.168.125.20

  • Your server’s name (ホスト名):ubuntu1test

  • ユーザー名 : vboxuser

  • パスワード:任意のもの

Keycloak検証環境(development mode)を構築

https://mydocument.atlassian.net/wiki/spaces/support4textbook/pages/1688240169 を参考に行い、レルム名「myrealm」の作成とユーザー作成を終えているものとします。

レルムのポリシー設定

Keycloak管理画面にて、作成したレルム「myrealm」に切り替えます。

image-20240507-063042.png

レルムで、「Configure」>>「Authentication」をクリックします。その後、「Authentication」画面にて「Policies」タブをクリックします。

image-20240513-150906.png

「Policies」タブでは、レルムにおけるポリシーを設定することができます。この環境は、各自のパソコン上、つまりローカル上の仮想マシン(VM)でKeycloakを動かしているため、実施可能なポリシーは、「Password policy」と「OTP Policy」になります。
独自ドメインとサーバーを用意する場合は、SSL接続が必須となる「Webauthn Policy」や「Webauthn Passwordless Policy」「CIBA Policy」を設定することができます。「Webauthn Policy」と「Webauthn Passwordless Policy」ではセキュリティキー(指紋認証 / 顔認証 / USBタイプの生体認証機器)も用意しましょう。

多要素認証(OTP Policy)を使う

多要素認証「OTP Policy」の設定

「Policies」タブで「OTP Policy」をクリックします。最低限、「OTP hash algorithm」を、SHA1から、SHA256もしくはSHA512に変更します。ハッシュ関数のSHA-1は、今後数年で利用が終了していくためです。
それ以外は、多要素認証のための「OTP Policy」について求める強度に応じて変更します。「Save」をクリックします。

「OTP Policy」画面内の「Supported applications」に、多要素認証に使用可能なアプリケーションが表示されます。「FreeOTP」や「Google Authenticator」などの認証アプリをスマートフォンもしくはタブレット端末にインストールしておきましょう。

レルム内のユーザーに、多要素認証(OTP Policy)を適用

多要素認証「OTP Policy」を適用したレルム内のユーザー一覧にアクセスします。ここでは作成済みの「testuser1」をクリックし、ユーザーの詳細情報画面を表示します。

「Details」タブにて、「Required user actions」にて「Configure OTP」を選びます。「Required user actions」に「Configure OTP」が選択された状態にします。その後、画面下の「Save」をクリックします。

設定後、Keycloak管理画面から、画面右上のアカウント名(例 admin)をクリックし、サインアウト(ログアウト)します。

FreeOTPのインストール

https://freeotp.github.io/ にアクセスします。お使いのスマートフォンおよびタブレット端末に合わせて、FreeOTPアプリのインストールを行います。 特にAndroid系の場合は、Google Playを使えない場合があるので、その場合はアプリストアとしてF-Droidを選ぶ場合があります。

多要素認証の動作確認

多要素認証(OTP Policy)を設定したレルムのKeycloakアカウントコンソールにアクセスします。例 http://192.168.125.20/realms/myrealm/account
Keycloakのアカウントコンソールが表示されます。「Sign In」をクリックし、作成したユーザー(例 testuser1)でサインイン(ログイン)します。

FreeOTPのインストールを行い、QRコードをスキャンするように指示されます。

「FreeOTP」アプリに、トークンを追加します。

  1. 「FreeOTP」アプリを起動し、「Add a token」をタップします。もしくは「FreeOTP」アプリの画面右上のQRコードアイコンをクリックします。

  2. 「FreeOTP」アプリで、QRコードをスキャンします。スキャンするQRコードは、Keycloakの画面に表示されたものをスキャンします。

  3. 「Choose an icon」が表示されますので、任意のアイコンをクリックします。

  4. 画面右上の「Next」をクリックします。

  5. 続けて、画面右上の「Next」をクリックします。

  6. 「FreeOTP」アプリの画面に「myrealm」が表示されるので、「myrealm」をタップします。ワンタイムパスワードが表示されます。

Keycloakの画面に戻り、「FreeOTP」アプリに表示されたワンタイムパスワードを、Keycloak側の「One-time code」に入力します。その後、「Submit」をクリックします。

時間が経ちすぎている場合は再度ログインするように求められるので、指示通りに再ログインします。その後、上記で追加したトークン名「myrealm」を削除します。「FreeOTP」アプリ上で、「myrealm」を左から右にスワイプすることで、「Remove token」が表示されるので、タップします。これで、「FreeOTP」アプリにトークンの追加をやり直すことができます。やり直し後、「FreeOTP」アプリに表示されたワンタイムパスワードを、Keycloak側の「One-time code」に入力します。その後、「Submit」をクリックします。

「Personal Info」が表示されれば、サインイン(ログイン)できたことになります。

「Account security」下の「Singing in」をクリックします。画面内の「Two-factor authenticaion」に、OTPでサインイン(ログイン)した履歴が残っていれば、Keycloakで多要素認証(OTP Policy)の適用ができることを確認できたことになります。

動作確認後、サインアウト(ログアウト)します。Keycloak管理画面に戻ります。Webブラウザで、http://IPアドレス:18080/admin(例 http://192.168.125.20:18080/admin)にアクセスし、サインイン(ログイン)します。

このように、Keycloakを使うことで、多要素認証基盤を自分で構築することができます。OpenID ConnectやSAMLを使うことで、自身が作成したアプリケーションの認証基盤として活用することもできます。

パスワードポリシー(Password policy)を使う

「Password policy」画面の表示

多要素認証(OTP Policy)を設定したレルムに切り替えます。レルムで、「Configure」>>「Authentication」をクリックします。その後、「Authentication」画面にて「Policies」タブをクリックします。
「Policies」タブで「Password policy」タブが選ばれた状態で表示されます。「Password policy」では、「Add policy」をクリックすることで、パスワードポリシーを設定することができます。

「Expire Password」のポリシー追加

「Add policy」をクリックします。画面ショットの都合で表示されませんが、14個のパスワードポリシーを追加することができます。ここでは「Expire Password」にしましょう。「Expire Password」はパスワードの有効期限の日数のことです。

「Expire Password」の日数は標準の日数は「365」になっています。セキュリティポリシーに合わせて、パスワードの有効期限日数を設定します。ここでは、90としました。「Save」をクリックします。これで、90日後にパスワードが無効化され、再度パスワードを設定しなければならない状況になります。

「Expire Password」のポリシーを無効にしたい場合は、「⊝」をクリックした後、「Save」をクリックします。こうして「Add policy」をクリックすることで、パスワードポリシーを追加することができます。追加して設定後、必ず「Save」をクリックします。

検証環境の終了

作業を終えるには、ターミナル上で、「Ctrl+cキー」を押して、プロセスを終了します。その後、コンテナの削除のコマンドを実行します。

docker compose down

関連資料

Keycloak 公式ドキュメント

困ったときは、最初に公式ドキュメントを見ること。日本語であっても、公式ドキュメント以外は情報が古いことがあり、記載内容通りに動作しないことが多々ある。

https://www.keycloak.org/documentation