Help us understand the problem. What is going on with this article?

midPointにおける「フルフィルメント(プロビジョニング)」実践編(CSV/LDAPへの出力)

はじめに

前日10日目の記事では、midPoint上のフルフィルメント(プロビジョニング)を簡単な実例と共に紹介しました。
midPointアドベントカレンダー11日目となる今回は、CSVとLDAPへのプロビジョニングの手順をより詳しく解説していきたいと思います。

CSVへのプロビジョニング

リソース定義の新規作成

画面左のメニューから「リソース」⇒「新規リソース」を選択します。
ここでは、リソース名と利用するコネクターを選択します。今回はCSVへの出力のため、コネクターは「CsvConnector」を選択します。

Screenshot_2019-11-27 新規リソース.png

設定

指定したコネクタの詳細設定を行います。ここの設定項目は利用するコネクタ種類によって変わってきます。CSVの設定では、必須項目である「File path」「Unique attribute name」を設定します。「File path」は出力先のCSVのファイルパスを、「Unique attribute name」はCSVで利用する一意の属性名を定義します。

Screenshot_2019-11-27 新規リソース_設定.png

その他にも設定可能な項目がありますが、必須項目以外では以下を設定します。

表示名 詳細 設定例
multivalueDelimiter マルチバイト文字(日本語)を区切る文字の指定 ;
encoding エンコード形式を指定 utf-8
fieldDelimiter 区切り文字の指定 ,

※ その他の項目については、こちらを参照してください。

設定後、「保存と接続テスト」ボタンを押下して、エラーがなければ次に進みます

スキーマ(Schema)

出力先に指定したCSVのオブジェクトクラスが表示されます。リソースがLDAPなどの場合はLDAP側で設定されたオブジェクトクラスが表示されます。CSVにはオブジェクトクラスが存在しないため、「AccountObjectClass (Default Account)」のみが表示されます。ここは変更せずに「次」へ進みます。

Screenshot_2019-11-27 リソース'resource-csv'の編集.png

スキーマ処理(Schema handling)

ここでは、midPoint内部DBのカラムとプロビジョニング先の属性(カラム)のマッピングの設定を行います。「オブジェクトタイプの追加」を押下し、設定画面を開いてください。
開いた画面ではオブジェクトタイプを追加します。
必須項目である「オブジェクトクラス」はリソースに合わせて定義されているオブジェクトクラスを指定しますが、今回のCSV連携ではオブジェクトクラスの概念は無いため、「AccountObjectClass」のみを指定します。

Screenshot_2019-11-28 リソース'resource-csv'の編集.png

その他の設定項目は以下のように設定します。

表示名 詳細 設定値
種類(Kind) 操作するリソースオブジェクトの種類 アカウント
用途(Intent) リソースオブジェクトの意図。今回は種類がアカウントなので、defaultならデフォルトアカウントの意 default
属性(Attributes) 後述 後述の表を参照

※ 各項目の詳細はこちらを参照してください。
※ 設定値の詳細については、こちらを参照してください。

属性(Attributes)

属性の編集では、リソースのアカウント属性とmidPointのマッピングを設定します。今回はプロビジョニング設定のため、アウトバウンド・マッピングを設定しますが、リソースからアカウントを同期する場合は、インバウンド・マッピングも設定します。

Screenshot_2019-11-28 リソース'resource-csv'の編集_スキーマ設定1.png

属性名 ソース
ri:empno $focus/name
ri:firstname $focus/givenName
ri:lastname $focus/familyName

※ マッピングの詳細はこちらを参照してください。

設定例:
Screenshot_2019-11-28 リソース'resource-csv'の編集_属性設定例.png

同期(Synchronization)

ここでは、アカウントが作成または削除されたなどの同期イベントが検出された場合に、どのようなリアクションをするかを設定します。「同期オブジェクトの追加」を押下し、設定画面を開いてください。

Screenshot_2019-12-02 リソース'resource-csv'の編集_同期一覧.png

開いた画面では、同期設定を行います。入力項目は以下のように設定します。

表示名 詳細 設定値
名前(Name) 同期オブジェクトの名称 任意
種類(Kind) 操作するリソースオブジェクトの種類 アカウント
用途(Intent) リソースオブジェクトの意図。今回は種類がアカウントなので、defaultならデフォルトアカウントの意 default
オブジェクトクラス 現在設定中の定義が適用されるオブジェクトクラスを指定。今回はCSVのため指定は不要 なし
フォーカス リソースオブジェクトに対応するフォーカルタイプを指定。アカウントであればUserTypeを指定 UserType
相関(Correlation) 後述 後述のコードを参照
リアクション 個々の同期状況にmidPointが、どのように反応するかを設定 後述の表を参照

※ 各項目の詳細はこちらを参照してください。

相関(Correlation)

相関では相関関係式を使用して、新しいアカウントと現行のユーザを結び、オブジェクトの状況を判別します。
相関式と確認式の詳細はこちらを参照してください。
今回のフィルター句への入力値は以下のようになります。

<q:equal xmlns:org="http://midpoint.evolveum.com/xml/ns/public/common/org-3">
    <q:path>employeeNumber</q:path>
    <expression >
        <path>$shadow/attributes/empno</path>
    </expression>
</q:equal>

リアクション

状況 同期 アクション
Linked True 未定義
Unlinked 未定義 紐づけ
Deleted 未定義 リンクの解除
Unmatched 未定義 フォーカスの追加

※ 各アクションの意味はこちらを参照してください。

能力(Capabilities)

リソースオブジェクトが保持する機能を表示します。変更の必要はないため「完了」を押下し、リソース定義の設定を完了します。

LDAPへのプロビジョニング

リソース定義の新規作成

画面左のメニューから「リソース」⇒「新規リソース」を選択します。
ここでは、リソース名と利用するコネクターを指定します。今回はLDAPへの出力のため、コネクターは「LdapConnector」を選択します。

Screenshot_2019-11-29 リソース'OpenLDAP'の編集.png

設定

指定したコネクタの詳細設定を行います。ここの設定項目は利用するコネクタ種類によって変わってきます。LDAPの設定では、以下の項目を設定します。
※ 接続情報は一例なので、環境に合わせた設定をお願いします。

表示名 詳細 設定例
Host LDAPサーバのホスト名またはIPアドレス localhost
Bind DN LDAPサーバにバインドする際のDN cn=admin,dc=example,dc=com
Bind password LDAPサーバにバインドする際に使用するパスワード password
Base context 明示的なベースDNが指定されていない場合に使用するベースDN区切り文字の指定 ou=midpoint,dc=example,dc=com
Password hash algorithm サーバーに送信される前に、指定されたアルゴリズムでパスワードをハッシュ SSHA
VLV sort attribute ページングにVLVが使用され、リクエストで明示的な並べ替え属性が指定されていない場合、結果の並べ替えに使用されるLDAP属性の名前 uid
VLV ordering rule VLV要求で使用するLDAP順序付けルール。 一部のLDAPサーバでは、順序付け規則の明示的な指定が必要 2.5.13.3
Operational attributes 運用属性 memberOf
createTimestamp

※ その他の項目については、こちらを参照してください。

設定後、「保存と接続テスト」ボタンを押下して、エラーがなければ次に進みます

スキーマ(Schema)

出力先に指定したLDAPのオブジェクトクラスが表示されます。変更の必要はないため「次」へ進みます。

Screenshot_2019-11-29 リソース'OpenLDAP'の編集_スキーマ.png

スキーマ処理(Schema handling)

ここでは、midPoint内部DBのカラムとプロビジョニング先の属性(カラム)のマッピングの設定を行います。「オブジェクトタイプの追加」を押下し、設定画面を開いてください。
開いた画面ではオブジェクトタイプを追加します。
必須項目である「オブジェクトクラス」はリソースに合わせて定義されているオブジェクトクラスを指定します。今回のLDAP連携では「inetOrgPerson」のみを指定します。

Screenshot_2019-11-29 リソース'OpenLDAP'の編集_スキーマ処理.png

その他の設定項目は以下のように設定します。

表示名 詳細 設定値
種類(Kind) 操作するリソースオブジェクトの種類 アカウント
用途(Intent) リソースオブジェクトの意図。今回は種類がアカウントなので、defaultならデフォルトアカウントの意 default
属性(Attributes) 後述 後述の表を参照

※ 各項目の詳細はこちらを参照してください。
※ 設定値の詳細については、こちらを参照してください。

属性(Attributes)

属性の編集では、リソースのアカウント属性とmidPointのマッピングを設定します。今回はプロビジョニング設定のため、アウトバウンド・マッピングを設定しますが、リソースからアカウントを同期する場合は、インバウンド・マッピングも設定します。

Screenshot_2019-11-29 リソース'OpenLDAP'の編集_スキーマ処理_属性編集.png

属性名 ソース
ri:dn $focus/name
ri:entryUUID なし
ri:cn $focus/fullName
ri:sn $focus/familyName
ri:givenName $focus/givenName
ri:uid $focus/name

※ マッピングの詳細はこちらを参照してください。

同期(Synchronization)

ここでは、アカウントが作成または削除されたなどの同期イベントが検出された場合に、どのようなリアクションをするかを設定します。「同期オブジェクトの追加」を押下し、設定画面を開いてください。

Screenshot_2019-12-02 リソース'OpenLDAP'の編集_同期.png

開いた画面では、同期設定を行います。入力項目は以下のように設定します。

表示名 詳細 設定値
名前(Name) 同期オブジェクトの名称 任意
種類(Kind) 操作するリソースオブジェクトの種類 アカウント
用途(Intent) リソースオブジェクトの意図。今回は種類がアカウントなので、defaultならデフォルトアカウントの意 default
オブジェクトクラス 現在設定中の定義が適用されるオブジェクトクラスを指定 inetOrgPerson
フォーカス リソースオブジェクトに対応するフォーカルタイプを指定。アカウントであればUserTypeを指定 UserType
相関(Correlation) 後述 後述のコードを参照
リアクション 個々の同期状況にmidPointが、どのように反応するかを設定 後述の表を参照

※ 各項目の詳細はこちらを参照してください。

相関(Correlation)

相関では相関関係式を使用して、新しいアカウントと現行のユーザを結び、オブジェクトの状況を判別します。
相関式と確認式の詳細はこちらを参照してください。
今回のフィルター句への入力値は以下のようになります。

<q:equal xmlns:org="http://midpoint.evolveum.com/xml/ns/public/common/org-3" xmlns="">
    <q:path >c:name</q:path>
    <expression xmlns="">
        <path>$shadow/attributes/uid</path>
    </expression>
</q:equal>

リアクション

状況 同期 アクション
Linked True 未定義
Unlinked 未定義 紐づけ
Deleted 未定義 フォーカスの削除
Unmatched 未定義 フォーカスの追加

※ 各アクションの意味はこちらを参照してください。

能力(Capabilities)

リソースオブジェクトが保持する機能を表示します。変更の必要はないため「完了」を押下し、リソース定義の設定を完了します。

サーバータスクの作成

サーバータスクでは、各種同期の設定を行います。様々な同期がありますが、今回は、Live同期、リコンシリエーションを作成します。以下の手順でCSV、LDAP共に作成してください。
同期種別の詳細については、こちらを参照してください。

Live同期

項目名 説明 設定値
タスク名 タスクの名前 任意
タイプ 同期タイプの選択 Live同期
リソース参照(Resource reference) どのリソースをタスクの対象とするか 作成したリソース名
種類(Kind) 処理するオブジェクトの種類 アカウント
用途(Intent) 処理するオブジェクトの用途 default
オブジェクトクラス 処理するオブジェクトのクラス CSVまたはLDAPで指定したオブジェクトクラス

Screenshot_2019-11-29 csv_live_sync.png

リコンシリエーション

項目名 説明 設定値
タスク名 タスクの名前 任意
タイプ 同期タイプの選択 リコンシリエーション
リソース参照(Resource reference) どのリソースをタスクの対象とするか 作成したリソース名
種類(Kind) 処理するオブジェクトの種類 アカウント
用途(Intent) 処理するオブジェクトの用途 default
オブジェクトクラス 処理するオブジェクトのクラス CSVまたはLDAPで指定したオブジェクトクラス

Screenshot_2019-12-02 新しいタスク.png

プロビジョニングの動作確認

ユーザの追加とアサイン

プロビジョニングの動作を確認するため、新たにユーザ追加し、リソースへアサインします。
※ここでは簡単な動作検証のため、ユーザに直接リソースをアサインする方式を使用しています。

画面左のメニューから「ユーザー」⇒「新規ユーザー」を選択します。「名前」「氏名」「名」「姓」を入力し、保存します。

Screenshot_2019-12-09 新規ユーザーを作成.png

「アサイン」タブ⇒「リソース」を選択し、左下の「新規割り当て」を押下します。

Screenshot_2019-12-09 ユーザー 'test01'の編集_リソース.png

別ウィンドウで表示されたリソースから対象のリソースを選択し、パラメーターの種類に「アカウント」用途に「default」を選択して「追加」を押下します。

Screenshot_2019-12-09 ユーザー 'test01'の編集_リソースの選択.png

リソースを追加が出来ましたら、「保存」を押下します。

Screenshot_2019-12-09 ユーザー 'test01'の編集_保存.png

アサインしたユーザ「test01」がCSV・LDAPにプロビジョニングされているかを確認します。前項で作成したLive同期をCSV、LDAP共に実行します。

Screenshot_2019-12-02 タスク詳細_csv_live.png

Live同期の実行が完了したら、正常にプロビジョニングされているかを確認します。

LDAP_ユーザ追加_トリミング.jpg

resources.csv
empno,firstname,lastname
test01,ユーザ01,テスト

ユーザの更新

アサインしたユーザの変更がCSV・LDAPにプロビジョニングされるかを確認します。
「test01」の「氏名」を「テストユーザ02」、「名」を「ユーザ02」に変更します。

Screenshot_2019-12-09 ユーザー 'test01'の編集_名称変更.png

ユーザの変更を取得するため、CSV・LDAPのリコンシリエーションタスクを実行します。タスクが実行されると、ユーザの情報が更新されます。

Screenshot_2019-12-02 タスク詳細_ldap_rec.png

更新後、以下のようにプロビジョニングされます。

LDAP_ユーザ変更_トリミング.jpg

resources.csv
empno,firstname,lastname
test01,ユーザ02,テスト

ユーザの削除

最後にユーザを削除し、アサインしたユーザがCSV・LDAP上で削除されるかを確認します。ユーザの一覧から、対象のユーザをチェックし、右の「▼」から削除を選択します。

FireShot Capture 002 - ユーザー一覧_削除 - idm.example.com.jpg

ここでもリコンシリエーションタスクを実行します。タスクが実行されると、ユーザの情報が削除されます。

LDAP_ユーザ削除_トリミング.jpg

resources.csv
empno,firstname,lastname

まとめ

以上が、midPoint上でのプロビジョニング動作の確認となります。今回はアカウントを直接リソースへアサインしていますが、6日の記事でご紹介したロールを元に自動でリソースをアサインする方法もございます。RDBへのプロビジョニング方法と合わせて、明日の記事でご紹介する予定ですので、ご期待ください。

参考

midPoint Wiki
※ マニュアルも兼ねたwikiサイト

GitHub - Evolveum/midpoint
※ ソースコード管理はこちらで行われています

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした