0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

midPoint by OpenStandiaAdvent Calendar 2024

Day 12

midPoint におけるロールベースプロビジョニング

Last updated at Posted at 2024-12-11

midPoint by OpenStandia Advent Calendar 2024 の12日目は、ロールベースプロビジョニングを紹介します。11日目の記事では、プロビジョニング先のリソースをアサイン というオペレーションをトリガーとして、ユーザーをプロビジョニングしていました。しかしこの方法は、アドホックなプロビジョニングとなり、実際の運用では基本的に使われることはありません。midPoint、そしてIGAの思想としては、システムの利用権限が紐づいた抽象度の高いロールを定義しつつ、必要なユーザーに限定し(可能な限り自動で)ロールをアサインすることでプロビジョニングを行います。いわゆるロールベースプロビジョニングと呼ばれるものです。

というわけで、今回は連携先であるAdressbookへのプロビジョニングと関連付けたロールを作成し、それをユーザーにアサインすることでプロビジョングを行ってみます。

11日目までで構築した環境が前提となります。

ロールの作成

Addressbookへのプロビジョニングと関連付けるロールを新規に作成します。画面左メニューより「ロール > 新規ロール」をクリックします。

image.png

作成するロールの種類の選択画面が表示されます。今回はシンプルにプレーンなロールを作成して動作を確認しますので、「すべてのロール」を選択します。

image.png

基本情報の設定

新規ロールの画面が表示されます。基本情報では、必須属性である「名前」のみ入力しておきます。

  • 名前Addressbook User

image.png

インデュースメントの設定

続けて「インデュースメント > リソース」メニューをクリックして、リソースへのインデュースメント設定画面を開きます。

image.png

インデュースメントについては、3日目の記事「midPoint をデモ環境で試してみよう(その2)」で解説していました。この作成したロールに対して、リソースをアサインではなく、リソースをインデュースメントで設定しておくと、このロールそのものがプロビジョニング対象となるのではなく、このロールをアサインした対象(今回だとユーザー)がプロビジョニング対象となります。ロールを経由して間接的に対象にアサインを適用することから、Indirect Assignment(間接アサイン)とも呼ばれます。

今回はこのロールを経由してユーザーにAddressbook Userリソースをアサインさせたいため、作成したロールのインデュースメントにAddressbook Userリソースを設定します。

image.pngをクリックすると、リソースへのインデュースメント設定ウィザードが開きます。「アプリケーション・リソース」の選択画面では、Addressbook Usersリソースをクリックして選択状態にし、「次へ:リソース・オブジェクトタイプ」ボタンをクリックします。

image.png

「リソース・オブジェクトタイプ」の選択画面では、「種類:アカウント、用途:default」を選択し、「次へ:エンタイトルメント」ボタンをクリックします。

Addressbook Usersリソースではオブジェクトタイプは1つしか定義されていませんが、複数のオブジェクトタイプを扱うリソースの場合は、プロビジョニング対象としたいタイプを選択します。

image.png

「エンタイトルメント」の設定画面は、今回のAddressbook Usersリソースではエンタイトルメントが存在しないため、何もせず「次へ:マッピング」ボタンをクリックします。

image.png

「マッピング」の設定画面では、このリソースに対する追加のアウトバウンドマッピングを設定することができます(例えば、このロールをアサインした場合だけある属性値を連携するなど)。今回は何も設定しないため、そのまま「設定を保存」ボタンをクリックします(このタイミングでロールが保存されます)。

image.png

これでロールの作成は完了です。

ロールアサインによるプロビジョニング確認

作成したロールをユーザーにアサインしてプロビジョニング動作を確認します。CSVにプロビジョニングさせたいユーザーの詳細画面を開き、「アサイン > ロール」メニューを開きます。

image.png

image.pngをクリックして、「オブジェクトの選択」ダイアログを開きます。「Addressbook User」ロールにチェックを付けて選択状態とし、「追加」ボタンをクリックします。

image.png

アサイン予定として追加されます(緑色の部分)。この状態で「変更のプレビュー」ボタンをクリックしてプレビューでまずは確認してみましょう。

image.png

ロールアサインにより、「Addressbook Users」リソースに対してアカウントの作成が行われる予定であることを確認できます。

  • 左側の「ユーザーによる変更」:直接の変更内容(今回だと画面操作で実施したロールのアサイン)
  • 右側の「ポリシーに従って計算された変更」:直接の変更に伴って実施される追加の変更内容(今回だと「Addressbook Users」リソースへのプロビジョニング)

「保存」ボタンをクリックしてロールのアサインを保存します。

image.png

プロビジョニング結果を確認します。11日目の記事と同様に、Addressbook用のCSVに該当ユーザーが出力されたことを確認できます。

./addressbook/users.csv
userId,familyName,givenName,email,tel,orgId,orgName
1001,山田,太郎,taro.yamada@example.com,111,005,営業第一部

まとめてロールアサインによるプロビジョニング

リソースの直接アサインとは異なり、ロールのアサインの場合は、特定のロールに対してメンバーをまとめてアサインするGUI操作も可能です。

作成したロールの詳細画面を開き、「メンバー」メニューをクリックします。すると現在このロールが直接アサインされているユーザー一覧が表示されます。

image.png

image.pngをクリックすると、メンバーに追加するオブジェクトの選択ダイアログが開きます。ロールをアサインしたいユーザーを複数選択し、「追加」ボタンをクリックします。

このメンバー設定画面からのまとめてアサインは、「追加」ボタンをクリックしたタイミングで、確認画面なしに即座に非同期実行タスクとして実行開始されるため注意してください。

image.png

画面上部にメンバーを追加開始した旨のメッセージが表示されます。「タスクを表示」をクリックすると、開始されたバックグラウンドタスクの詳細画面に遷移します。

image.png

「成功」状態で終了していれば、指定したユーザーへのアサインは完了しています。

image.png

プロビジョニング結果を確認します。Addressbook用のCSVに該当ユーザーが出力されたことを確認できます。

ロールの一括アサインで処理される順番は、midPoint 4.8 では該当ユーザーのoid(midPoint内の各オブジェクトに割り当てられるUUID v4形式の内部ID)順となり、またCSVコネクターは特にソートについては意識せず末尾に追記を行う仕様のため、処理された順番で出力されます。

./addressbook/users.csv
userId,familyName,givenName,email,tel,orgId,orgName
1001,山田,太郎,taro.yamada@example.com,111,005,営業第一部
1010,山本,一郎,ichiro.yamamoto@example.com,,009,ITインフラ部
1007,渡辺,,sho.watanabe@example.com,,006,営業第二部
1004,高橋,美咲,misaki.takahashi@example.com,,008,IT開発部
1002,佐藤,花子,hanako.sato@example.com,,006,営業第二部
1008,小林,さくら,sakura.kobayashi@example.com,,007,総務部
1003,鈴木,次郎,jiro.suzuki@example.com,,007,総務部
1009,中村,,yu.nakamura@example.com,,008,IT開発部
1006,伊藤,陽菜,hina.ito@example.com,,005,営業第一部
1005,田中,健一,kenichi.tanaka@example.com,,009,ITインフラ部

midPointにおけるロールのモデル

今回はロールを使ってプロビジョングを行いましたが、実はmidPointではロールだけでなく組織なども、ロールの一種として定義されています。内部的なクラス情報で説明すると、下図のように「AbstractRoleType」と呼ばれるものがあり、そのサブクラスとして「ArchetypeType(アーキタイプ)」「RoleType(ロール)」、「OrgType(組織)」、「ServiceType(サービス)」が存在します。ロールとしての機能は上位の「AbstractRoleType」で規定されています。

image.png

つまり、アーキタイプや組織、サービスのアサインによってプロビジョングさせることも可能というわけです。例えば、部署を表す組織オブジェクトに対して、今回のようなリソースへのインデュースメントを設定しておくと、特定の部署に所属している(部署がアサインされている)ユーザーにだけ、プロビジョングを行うといった所属組織に応じたプロビジョングも可能になります。

まとめ

12日目では、ロールアサインによるプロビジョニングについて解説しました。ロールを経由したプロビジョニングとすることで、複数のユーザーをまとめてプロビジョニングもしやすくなります。また、今回はプロビジョニング先が1つのみですが、複数の連携先システムの利用権限を1つのロールに集約することで、効率良く管理することが可能となります。

次回はこの発展版として、アーキタイプを使いつつ、源泉データの取り込みと同時に自動的にプロビジョニングする例を紹介したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?