midPoint 最新情報 - 2021 Winter

[NRI OpenStandia Advent Calendar 2021](https://qiita.com/advent-calendar/2021/nri-openstandia) の10日目は、OSSのIGAプラットフォームである [midPoint](https://github.com/Evolveum/midpoint) の最新情報をまとめた記事になります。ちょうど先月末に、最新のLTS(Long-term Support)となる v4.4 がリリース :tada: されましたので、前回のLTSである v4.0 からどんな機能が追加になっているのかなどを紹介したいと思います。

:::note info
IGAやmidPointについては、 <a href="https://qiita.com/advent-calendar/2019/midpoint-by-openstandia">midPoint by OpenStandia Advent Calendar 2019</a> を参照してください。2年前とちょっと古い記事ではありますが、IGAとは何か・midPointはどういうものか、の部分は大きく変わっていません。
:::

# リリース状況

v4.0 以降を見ると、メジャーバージョンアップは大体半年に一度のペースで行われています。括弧内は各バージョンのサポート期間になっています。

* [midPoint 4.4](https://docs.evolveum.com/midpoint/release/4.4/): 2021/11/26 (〜2024/11/26) **LTS** :rocket:
* [midPoint 4.3](https://docs.evolveum.com/midpoint/release/4.3/): 2021/04/09 (〜2022/04/09)
* [midPoint 4.2](https://docs.evolveum.com/midpoint/release/4.2/): 2020/10/23 (〜2021/10/23)
* [midPoint 4.1](https://docs.evolveum.com/midpoint/release/4.1/): 2020/04/09 (〜2021/04/09)
* [midPoint 4.0](https://docs.evolveum.com/midpoint/release/4.0/): 2019/09/08 (〜2022/09/08) **LTS** :rocket:

冒頭に書いたとおり、v4.4 が次のLTS(Long-term Support)となります。というわけで、今からmidPointを利用する方は v4.4 を使っておくと良い感じですね :point_up:

# v4.0 以降の新機能

v4.0 :arrow_forward: v4.4 で追加された機能の中からピックアップしてここでは紹介します。

:::note warn
機能によっては、v4.4でもExperimental状態のものがまだあります。詳細は記載のオフィシャルドキュメントを参照してください。
:::

## Flexible Authentication

https://docs.evolveum.com/midpoint/reference/security/authentication/flexible-authentication/

4.0まではmidPointの認証機能はSpring Securityの機能をベースとしており、設定レベルでカスタマイズできる余地はあまりありませんでした。**Flexible Authentication** という機能が追加され、設定で細かく認証機能をカスタマイズ可能な仕組みが構築されました。この機能により、**midPointがネイティブにSAML 2.0のSPとして動作するようになりました**。今までは認証連携を行うリバースプロキシを前段において、midPointはHTTPヘッダ認証を行うという方式でSSOを実現する必要がありましたが、SAML前提であればmidPoint単体で直接SSO可能になりました。

また、通常のログイン処理だけでなく、セルフパスワードリセット・レジストレーションの処理も本機能で実装されており、こちらを利用する方法が推奨となっています。


## Native reports

https://docs.evolveum.com/midpoint/reference/misc/reports/configuration/#new-report

ネイティブなレポーティング機能が実装されました。今までのレポーティング機能はOSSの[JasperReports](https://community.jaspersoft.com/)を利用していました。ネイティブと言っているのは、JasperReportsなしで動作するレポーティング機能になります。JasperReportsを使ったレポーティング機能は非推奨となり、v4.4ではサポートされていません。JasperReportsはPDFやパワーポイントなどのリッチドキュメントでレポート出力可能でしたが、midPointコミュニティでサーベイしたところ加工がしやすいCSVやHTMLなどのテキストデータを利用しているユーザが多く、JasperReportsは利用しない方向性に変わりました。


## Custom data imports (Reverse reports)

https://docs.evolveum.com/midpoint/reference/misc/reports/configuration/#import-report

Native reportsが実装されたと同時に、逆向きのレポーティング機能が実装されました。レポーティング機能はmidPointからCSVファイルなどを出力しますが、ここで言っている逆向きは、CSVファイルをmidPointにアップロードしてデータを取り込むという動きになります。midPointの管理画面からCSVファイルをアップロードしてユーザ・組織・ロール情報などをインポートする、といったユースケースに利用できそうです。

:::note info
CSVコネクタを利用したCSVファイルからのデータ取り込みとの違いは、コネクタの場合は予め設定したファイルパス上からの読み込みで、リソース定義を利用した同期処理になりますが、こちらは画面からのアップロードになり、リソース定義は利用しない独立した取り込み処理となります。
:::


## Resource maintenance mode

https://docs.evolveum.com/midpoint/reference/resources/maintenance-state/

リソース単位でメンテンナンスモードのON/OFFができるようになりました。プロビジョニング先のリソースが何らかの理由で一定期間停止してしまう場合に利用すると便利そうです。メンテナンスモードの状態でプロビジョニング処理が行われると、エラーにはならずに処理が完了します。その際、変更情報はShadowオブジェクト内にキャッシュとして登録されるようになります。メンテナンスモードが解除された後に、キャッシュされていた変更情報が処理されます。


## Outbound multiaccounts

https://docs.evolveum.com/midpoint/reference/resources/multiaccounts/#outbound-mappings

v4.0でインバウンドのマルチアカウント機能が実装されていましたが、アウトバウンドの対応もされました。ここで言うマルチアカウントとは、midPoint内のオブジェクト一つに対して、外部のリソース内のオブジェクトを複数リンクさせることを意味します。例えばあるユーザが、Active Directory上は複数のアカウントを保持する、といったことを表現できます。また、アカウントと書いていますがユーザに限定はされていません。midPointオブジェクト(組織・ロールなど)ももちろん対象です。従来は、これはリソース定義の`kind`と`intent`の組み合わせて実現していました。この場合、リソース定義内に組み合わせごとにマッピング定義を行う必要がありました。事前にリソース定義に設定が必要なので、ダイナミックに組み合わせを増やすことはできませんでした。マルチアカウント機能では、`kind`と`intent`に加えて新たに`tag`というコンセプトが導入されており、`tag`の値をスクリプト処理で動的に算出することが可能になっています。リソース定義に`kind`と`intent`の組み合わせを都度追加することなしに柔軟に対応できるようになりました。

具体的な利用例を1つ書くと、midPoint内で会社内の組織情報(本部や部署、課など)を管理するとします。そして、これらの組織単位に応じてActive Directory内にセキュリティグループを作りたいという要件があり、さらにそのセキュリティグループを役職に応じた複数のグループに分けたい(e.g. 人事部\_管理職グループ と 人事部\_社員全員グループ など)場合があるとします。つまり、midPoint内で管理する組織オブジェクト(OrgType)1つに対して、Active Directory側は複数のセキュリティグループが対応する状態です。このような関係性を表現するのに、マルチアカウント機能は役に立ちます。


## Flat list display for organizational units

地味な機能追加ですが、組織(OrgType)の一覧ページが追加されました(従来はツリー表示のビューのみでした)。これに伴い、Archetypeを利用した組織の一覧ページを作ることも可能になりました。Archetype別に一覧表示画面を用意したいケースは多々あるため、小さい改善ではあるものの嬉しい機能追加です。


## Native PostgreSQL repository implementation

https://docs.evolveum.com/midpoint/reference/repository/native-postgresql/

midPointのデータを格納するRDBMSはメジャーなプロダクトであれば利用可能でしたが、コミュニティからのサーベイ結果で大多数がPostgreSQLを利用しており、今後はPostgreSQLに特化した実装にしていくという方向性になりました。その結果生まれたのが本機能です。PostgreSQLを前提とした効率の良い方式を利用することができます(従来の汎用データベース方式も利用可能です)。

また、本機能は[MidScale](https://docs.evolveum.com/midpoint/projects/midscale/)というプロジェクトでEUより資金を得て開発された機能になります。[最終報告の資料](https://github.com/Evolveum/docs/raw/master/midpoint/projects/midscale/project/2021-10-midscale-coaching-3.pdf)を見ると、良好な性能向上の結果が得られたそうです(ケースによっては、840%の性能改善)。

旧方式からマイグレーションは可能ですが、テーブルスキーマが異なりますので、[ninja](https://docs.evolveum.com/midpoint/reference/deployment/ninja/)というツールで一度XMLファイルに全データをダンプし、新しいテーブルスキーマのmidPointに再インポートするという手順が必要になります。詳しくは以下のマイグレーションガイドを参照してください。

https://docs.evolveum.com/midpoint/reference/repository/native-postgresql/migration/

ダンプ＆再インポート処理が必要になるため、データ量に応じてダウンタイムが発生することになります。今から新規に構築するのであれば最初からNative PostgreSQL repositoryを利用するように設定しておくと良さそうです。


## Task Management

https://docs.evolveum.com/midpoint/reference/tasks/activities/new-in-4.4/

タスク定義に新しく、[Activities](https://docs.evolveum.com/midpoint/reference/tasks/activities/)というコンセプトが導入されました。Activityという単位でリコンシリエーションやBulk Actionの実行を定義しますが、Activityは複数組み合わせることが可能になっており(Composite activity)、これによりより複雑なタスクを定義することが可能になっています。

また、midPointノードのオートスケールに対応したタスク実行も可能になりました。昨今、midPointもコンテナ環境にデプロイすることが当たり前になってきていますので、そういった環境で重いタスク処理を効率的に実行可能になりそうです。

## Axiom Query Language

https://docs.evolveum.com/midpoint/reference/concepts/query/axiom-query-language/

Axiomという新しいクエリー言語が導入されています。従来はXMLでクエリーを表現していましたが、独自のDSLでクエリーを記述するスタイルが導入されています。XMLクエリーはエンドユーザに書いてもらうのは中々厳しいため、自然言語に近いスタイルで記述可能なDSLが新たに開発されたようです。


## その他

その他にも細かいアップデートがたくさんあります。例えば、GUIカスタマイズができる範囲が大幅に増えているようです。

https://docs.evolveum.com/midpoint/reference/admin-gui/admin-gui-config/

また、Linked Objectsという新しいコンセプトも登場しています。midPointで管理される各種オブジェクト間でリンク関係を結び、何らかの処理をトリガーに変更を伝播させて何らかの処理を行う、汎用的な枠組みが提供されているようです。下記ドキュメントにユースケースが記載されています。

https://docs.evolveum.com/midpoint/reference/synchronization/linked-objects/

さらに、非同期にプロビジョニングさせるための機能として、Asynchronous (Messaging) Outbound Resources が追加されています。Apache ActiveMQ Artemis 2.x または JMS 2.0 の接続先をターゲットとして、プロビジョニングが可能となっています。直接接続できない・同期接続に向かないシステムへのプロビジョニングを想定されているようです。

https://docs.evolveum.com/midpoint/reference/resources/asynchronous/outbound/

他にも細かい追加機能はありますので、詳細はリリースノートを参照してください。

# バージョン非互換の変更

個人的にバージョン非互換の気になる変更がありましたので、その部分だけ紹介しておきます。全量や詳細は各バージョンのリリースノートを参照してください。リリースノート内の「Deprecation, Feature Removal And Incompatible Changes」というセクションに記載があります。

## 非推奨属性の削除

非推奨になっていた`objectType`、`employeeType`、`roleType`、`orgType`、`serviceType`がv4.4にてついにスキーマから削除されました。使用している箇所がある場合は、ひとまず`subtype`に移行するなどして対応する必要があります。ただし、`subtype`もすでに非推奨なので(v4.4でも利用は可能)、最終的にはArchetypeに移行を進める必要があります。

## OIDはUUIDフォーマットに

midPointの各種オブジェクトはすべてOIDというユニークな識別子を持っていますが、Native PostgreSQL repository を利用する場合はUUIDフォーマットでないと格納できないようになっています。よって、v4.4にマイグレーションしNative PostgreSQL repositoryに切り替える場合は、OIDがUUIDフォーマットでないものがある場合は、個別に変換が必要になるため注意してください。


# 最新の対応コネクタ

コミュニティで開発されているものを含めた最新のコネクタリストは以下にあります。

https://docs.evolveum.com/connectors/connectors/

この1〜2年だとコロナの影響のためか、Zoomなどのリモートコミュニケーションサービス用のコネクタが増えています。なお、NRI OpenStandiaからも以下のコネクタを開発してOSSで公開しています。

* [Guacamole Connector](https://docs.evolveum.com/connectors/connectors/jp.openstandia.connector.guacamole.GuacamoleConnector/)
* [Keycloak Connector](https://docs.evolveum.com/connectors/connectors/jp.openstandia.connector.keycloak.KeycloakConnector/)
* [Pulumi Connector](https://docs.evolveum.com/connectors/connectors/jp.openstandia.connector.pulumi.PulumiConnector/)
* [Amazon Cognito User Pool Connector](https://docs.evolveum.com/connectors/connectors/jp.openstandia.connector.amazonaws.CognitoUserPoolConnector/)
* [GitHub Connector](https://docs.evolveum.com/connectors/connectors/jp.openstandia.connector.github.GitHubConnector/)
* [Datadog Connector](https://docs.evolveum.com/connectors/connectors/jp.openstandia.connector.datadog.DatadogConnector/)


# v4.5以降のロードマップ

https://docs.evolveum.com/midpoint/roadmap/

上記にロードマップの記載があります。v4.5 (2022年春リリース予定) としては以下が予定されているようです。

* Identity matching
* OpenID Connect
* Case management improvements

Identity matchingは、[Correlation](https://docs.evolveum.com/midpoint/reference/synchronization/correlation-and-confirmation-expressions/) では実現できない複雑なマッチング(midPointのデータと、ソースまたはターゲットシステム内のデータの名寄せ)を実現するテーマのようです。恐らく、Planned Featuresにある[Manual Correlation](https://docs.evolveum.com/midpoint/features/planned/manual-correlation/)に関連した機能と予想しています。OpenID Connectでは、midPointをOIDCのRPとして認証連携できるようにネイティブ対応されると思われます。Case management improvementsはタイトルからはちょっとまだ不明ですね :sweat_smile:

# おわりに

[NRI OpenStandia Advent Calendar 2021](https://qiita.com/advent-calendar/2021/nri-openstandia) の10日目は、midPointの最新情報をまとめました。引き続き新情報をキャッチアップし、有用な情報をお伝えできればと思います。