midPointにおける「フルフィルメント（プロビジョニング）」

# はじめに
midPointアドベントカレンダー10日目はIGAの主要な要素である、`フルフィルメント`について、一般的な意味とIGAの概念の説明、またmidPointでどのように実現していくのかをご紹介したいと思います。


# フルフィルメントとは
`フルフィルメント`は近年、ECサイト・通販業界で多く聞く言葉で、一般的には商品が注文されてからエンドユーザに商品が届くまでに必要な業務全般を指します。
主に含まれる業務として、「受注・問い合わせ対応」「発注・仕入れ」「在庫管理」「入荷・検品」「梱包」「出荷」「返品処理」「入金管理」などがあります。

![一般的なフルフィルメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/6cf38e34-1517-96c8-2d33-3f4aabb55a15.png)


# IGAで定義されているフルフィルメント
ガートナー社ではIGAにおける`フルフィルメント`を以下のように定義しています。

（日本語訳）
"IGAツールによって開始された変更をアカウントリポジトリに伝播します。
自動フルフィルメントはプロビジョニングとも呼ばれ、コネクタを介してアカウントリポジトリに接続します。
一方、手動フルフィルメントでは、ワークフローまたはチケット処理システムやITサービス管理（ITSM）ツールなどの外部プロセスを使用してアクションを完了します。
アカウントとエンタイトルメントの変更を調整する必要があるため、IDガバナンス機能を含むツールにはフルフィルメントが必要です。"

（原文）
Propagating changes initiated by the IGA tool to account repositories. 
Automatic fulfillment is also known as provisioning, and it connects with account repositories through connectors. 
On the other hand, manual fulfillment uses a workflow or external process, such as a ticketing system or an IT service management (ITSM) tool, to complete actions. 
Fulfillment is necessary for any tool that includes identity governance capabilities, because there's a need to orchestrate changes for accounts and entitlements.

※ 出典 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月の記事-閲覧は有料)

## 手動フルフィルメント
手動フルフィルメントは前述の定義の通り、変更点をワークフローやチケット処理システム、ITサービス管理（ITSM）ツールなどの外部プロセスを使用して管理し、ワークフローやチケットでの承認を受け、人が手動で連携先システムにアカウント等を作成することを指します。

## 自動フルフィルメント
自動フルフィルメントでは、IGAツールのコネクタを介して連携先システムに接続し、IGAツールで管理している変更点を自動で伝播させます。IGAツールの導入初期段階では品質確保とリスク低減ために、まず手動フルフィルメントで対応し、自動フルフィルメントへの移行は段階的に行うことを推奨しています。


# midPointにおけるフルフィルメント
midPointでは、IGAで定義されている`フルフィルメント`を、`プロビジョニング`や`同期`と表現しています。midPoint上の動作としては、源泉データ（アカウント）をmidPointに同期し、アカウントの新規作成や変更、削除を連携先システムへと伝播させます。また、手動・自動`フルフィルメント`を実現するための機能も用意されています。

## 手動プロビジョニング
IGAの定義と同様に、変更点をJiraなどのITサービス管理（ITSM）ツールにて管理し、手動で連携先システムにアカウント等を作成することを支援する機能があります。
詳細は[こちらページ](https://wiki.evolveum.com/display/midPoint/Manual+Resource+and+ITSM+Integration)を参考にしてください。

## 自動プロビジョニング
IGAの定義と同様に、ユーザの変更をコネクタを介してターゲットリソースへ同期させる機能を指します。

![midPointのフルフィルメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/c04c5605-c696-0b85-b914-5afec7946162.png)

### コネクタ
リソースへの同期は以下のような多彩なコネクタにより、あらゆるリソースとのユーザ同期が可能です。その数は動作確認が取れているものから検証段階のものを含めて、**30個**（2019年12月現在）にもおよびます。

![コネクタWiki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/e513c03b-8a0b-2e88-c578-4d78e7743720.png)

※コネクタの詳細については[こちらのWiki](https://wiki.evolveum.com/display/midPoint/Identity+Connectors)をご参照ください。

## プロビジョニングの設定
midPointで'プロビジョニング'を実現するには、連携先システムとなるリソースの設定を行う必要があります。リソースへの接続情報、リソースオブジェクトクラスとリソーススキーマの定義、これらの属性のmidPointユーザとのマッピング、リソースによってサポートされる機能、パスワードポリシーなどを設定します。

![SnapCrab_NoName_2019-12-5_18-32-59_No-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/eae4925f-b14d-de01-4b75-897bd9452ff1.jpeg)
引用元：[Resource Configuration](https://wiki.evolveum.com/display/midPoint/Resource+Configuration)

### リソーススキーマ
リソーススキーマの処理は、個々の属性の名前の付け方、読み取り可能または書き込み可能かどうか、新しいアカウントが作成された場合の属性値の定義、リソースで変更が検出された場合の属性の使用方法を定義します。

![schemas-schemahandling-overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/1c3d60eb-d06e-bb23-e8eb-aed5ed6b8155.png)
引用元：[Resource Schema Handling](https://wiki.evolveum.com/display/midPoint/Resource+Schema+Handling)

## プロビジョニングの実例
midPointの`プロビジョニング`には、様々な同期方法が用意されています。
例えば、変更をリアルタイムに同期する`Live Synchronization`や、操作中に変更が見つかった場合に同期処理を行う`Discovery`など、要件に合わせた同期方法が選択可能です。選択する同期方法の組み合わせによっては、パフォーマンスの向上や、より強固な同期が実施可能です。
今回は`Provisioning Synchronization`と`Reconciliation`を例として記載します。

### Provisioning Synchronization
midPointの同期処理で最も利用されているのが、`Provisioning Synchronization`です。midPoint上のユーザデータが追加/変更されると、アウトバウンド方式（midPointからリソースへ）で実行され、変更がリソース反映されます。

![プロビジョニング4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/01d0a753-3ece-553c-ef5c-7c26a66abbc9.gif)

### Reconciliation
`Reconciliation`はmidPointとリソースの一貫性をmidPointでスケジュールされたサーバタスクがチェックをし、相違があった場合に同期が実行されます。
この同期処理では、midPointとリソースの両方の変更点をチェックし、追加/変更がある場合はmidPoint、リソース共に変更点が反映されます。

![リコンシリエーション2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316808/d3c14c1b-c52d-4e4c-5183-7546543710fa.gif)


# まとめ
上記の通り、midPointでは`Provisioning Synchronization`や`Reconciliation`など、様々な同期機能を利用することで`プロビジョニング`を実現しています。
明日は、実際にプロビジョニングを行うための設定方法などを紹介する、midPointにおける「フルフィルメント（プロビジョニング）」実践編（CSV/LDAPへの出力）をお送りいたします。

# 参考
[Live Demo](https://wiki.evolveum.com/display/midPoint/Live+Demo)
※ 公式の構成例（リソースや同期の設定例が記載されています）

[Resource Configuration](https://wiki.evolveum.com/display/midPoint/Resource+Configuration)
※ リソースの設定方法とサンプル

[Identity Connectors](https://wiki.evolveum.com/display/midPoint/Identity+Connectors)
※ コネクタの種類と詳細

[Synchronization Flavors](https://wiki.evolveum.com/display/midPoint/Synchronization+Flavors)
※ 同期の種類

[Synchronization Tasks](https://wiki.evolveum.com/display/midPoint/Synchronization+Tasks)
※ 同期の設定方法とサンプル