midPointにおける「パスワード管理」

midPointアドベントカレンダー17日目は、IGAの主要な要素であるパスワード管理について解説させて頂きます。

#パスワード管理とは

さまざまなサービスで使用されるパスワードは、ユーザーIDと紐付いて利用者が本人かどうか確認するためのもので、決して他人に知られてはいけない重要なものです。悪意ある人物に盗まれた場合は大変な被害が発生する可能性があります。パスワード管理とはこの重要なパスワードを安全に管理するための機能になります。

# IGAで定義されているパスワード管理とは

ガートナーではIGAにおけるパスワード管理を以下のように説明しています。

（日本語訳）
"セルフサービスパスワードリセット（SSPR）を可能にすること。同様に、パスワードポリシーの適用を可能とすること。また、異なるアカウントリポジトリ間のパスワードを同期すること。"

（原文）
Enabling self-service password reset (SSPR), as well as password policy enforcement, and synchronizing passwords among different account repositories.

※ 出典 Gartner社「Gartner, Definition: [Identity Governance and Administration](https://www.gartner.com/en/documents/3885381/definition-identity-governance-and-administration)」, Felix Gaehtgens, Refreshed 11 September 2019, Published 7 August 2018 (2018年9月の記事-閲覧は有料)



## 異なるアカウントリポジトリ間のパスワードの同期

ユーザーが複数のサービスを利用している場合、それぞれのアカウントのパスワードを個別に変更するのは手間がかかります。この機能ではユーザーに紐付いている複数のサービスアカウントのパスワードを一括して変更することができます。

![異なるアカウントリポジトリ間のパスワードの同期](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/96be3c70-b2fc-0ed5-42bb-4f6fcb02071a.png)

<table>
<tr>
<th>:information_source:パスワード同期を行わなくて良いケース</th>
</tr>
<tr>
<td>シングルサインオン(SSO)を使用している場合は、パスワード同期を行う必要はありません。 しかし、SSOを利用するためには、各々のサービスを利用するSSOシステムに対応できるように修正する必要がありますので、コストなどの面で実現が難しい場合もあります。</td>
</tr>
</table>

参考: [Single Sign On First](https://wiki.evolveum.com/display/midPoint/Single+Sign-On+First)



## パスワードポリシーの適用

ユーザー自身がパスワードを設定するような場合、誰でも考えそうな簡単なパスワードを設定されてしまうとセキュリティ上のリスクが高まります。この機能は、簡単なパスワードを設定できなくするためにパスワードのルール(例えば 長さは x 文字以上、半角英数字、記号を混在させることなど)を決めるものです。

![パスワードポリシーの適用](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/53761b40-910d-4291-fd86-78780ce23da0.png)

## セルフサービスパスワードリセット(SSPR)

セルフサービスパスワードリセットとは、パスワードを忘れてしまったユーザーが、自分自身でパスワードをリセットできる機能です。会員登録が必要な多くのサービスで見かけるおなじみの機能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/e86cd7a6-7198-52ce-3f29-bde781f40b70.png" width="200" alt="パスワード忘れ"/>

# midPointにおけるパスワード管理

midPoint では IGA で挙げられているパスワード管理機能は全て実装されています。

## 異なるアカウントリポジトリ間のパスワードの同期

この機能はフルフィルメントの機能に含まれますが、その中でもパスワードは機密性の高いデーターであるため、midPoint では暗号化して保存されます。但し、他のアカウントリポジトリとパスワードの同期を行うためには一度クリアテキストに戻す必要があるため可逆的な暗号化が行われています。これは IDM においては一般的な仕様になります。

## パスワードポリシーの適用
midPoint では以下のようにユーザーが設定可能なパスワードのルールを細かく設定することが出来ます。

- 設定可能な最小文字数
- 設定可能な最大文字数
- アルファベット、数字、特殊文字などの使用可能な文字の指定
- アルファベット、数字、特殊文字などの使用を強制
- パスワードの有効期限
- パスワードがロックされるまでに許容される失敗回数
- パスワードのロック解除期間
- 辞書に含まれる文字の利用制限
- パスワード変更時のメール通知

デフォルトでは、5文字以上、同じ文字は3回まで使用可能、辞書の文字を使用しているかどうかのチェックがされています。

設定方法などの詳細については、[midPoint by OpenStandia Advent Calendar 2019](https://qiita.com/advent-calendar/2019/midpoint-by-openstandia):star:18日目の [midPointにおける「パスワード管理」実践編](https://qiita.com/ogawa_pro/items/56a5229b8c78f7400f31) や以下の midPoint の wiki をご参照下さい。

[Password Policy](https://wiki.evolveum.com/display/midPoint/Password+Policy)
[Security Policy Configuration](https://wiki.evolveum.com/display/midPoint/Security+Policy+Configuration)
[Password Related Configuration](https://wiki.evolveum.com/display/midPoint/Password-Related+Configuration)
[Notifications](https://wiki.evolveum.com/display/midPoint/Notifications)

## セルフサービスパスワードリセット(SSPR)

セルフサービスパスワードリセットの機能はデフォルトでは使用できません。使用するためにはいくつか設定が必要です。セルフサービスパスワードリセットを有効にした場合は以下のような動作になります。

![パスワード忘れ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/a404f5d7-e34a-795f-f584-07b2ae19af84.gif)
ユーザーのメールアドレスにメールが送信されてきます。
![メール送信](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/7891e9c2-3fd9-1c0f-3f3b-e03f45e9b930.png)
メール本文のリンクをクリックして、新たにパスワードを設定し直します。
![パスワードリセット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227018/84d51f98-6681-0578-bc47-872f9bd3fd57.gif)

設定方法などの詳細については、[midPoint by OpenStandia Advent Calendar 2019](https://qiita.com/advent-calendar/2019/midpoint-by-openstandia):star:18日目の [midPointにおける「パスワード管理」実践編](https://qiita.com/ogawa_pro/items/56a5229b8c78f7400f31) や下記の midPoint の wiki をご参照下さい。

[Reset Password Configuration](https://wiki.evolveum.com/display/midPoint/Reset+Password+Configuration)

パスワードリセットを行うユーザー向け画面（フォーム）は midPoint のインストールディレクトリの下記にサンプルが付属していますので、利用することが可能です。

doc/samples/forms/form-reset-password.xml

# まとめ

パスワードはそれ自体は単純な文字列ですが、情報の漏洩や不正ログインなどに繋がりかねない重要な情報のため、その扱いに関しては[議論](https://wiki.evolveum.com/display/midPoint/Initial+Password+Management+Discussion)が尽きません。

midPoint でのパスワード管理は、XMLでの定義の他、スクリプトによる柔軟な定義も可能ですので、あらゆるケースに対応できると思います。
現状は、GUI での設定ができませんが、midPoint は速いペースで開発が行われているため今後の改良が期待されます。


# 参考

[midPointにおける「パスワード管理」実践編](https://qiita.com/ogawa_pro/items/56a5229b8c78f7400f31)
※「[midPoint by OpenStandia Advent Calendar 2019](https://qiita.com/advent-calendar/2019/midpoint-by-openstandia)」18日目

[Password Policy](https://wiki.evolveum.com/display/midPoint/Password+Policy)
※パスワードポリシーの概要説明

[Security Policy Configuration](https://wiki.evolveum.com/display/midPoint/Security+Policy+Configuration)
※セキュリティポリシーの設定（パスワードポリシーもここで設定します。）

[Password Related Configuration](https://wiki.evolveum.com/display/midPoint/Password-Related+Configuration)
※パスワード関連の各種設定について

[Notifications](https://wiki.evolveum.com/display/midPoint/Notifications)
※メール通知関連の設定について

[Reset Password Configuration](https://wiki.evolveum.com/display/midPoint/Reset+Password+Configuration)
※パスワードリセット機能について

[Initial Password Management Discussion](https://wiki.evolveum.com/display/midPoint/Initial+Password+Management+Discussion)
※初期パスワードの管理についての議論