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

midPointにおける「IDライフサイクル管理」実践編(CSV/画面からの取り込み)

はじめに

今回は、前回の記事の続きとして、IDライフサイクル管理を体験するための設定を行って行きたいと思います。

midPoint をインストールした状態では、ユーザー(ID)がまだ登録されていません。初期データとして人事システムなどの他のシステムからアカウントを取り込む必要があります。実践編では、すぐに試せるように midPoint に付属しているサンプルを元にCSVファイルからアカウントをまとめて取り込む手順を説明させて頂きます。

また、midPoint は、GUI(画面) でユーザーを登録する機能もありますので、後半はそちらも紹介したいと思います。

源泉(CSV)からのデータ取り込み

midPoint のユーザーを人事システムなどの源泉データから取り込む場合、midPointに接続しているシステムはリソースと呼び、リソースとの接続はコネクタと呼ばれるモジュールで行います。

今回は源泉データであるCSVファイルをmidPointに取り込む設定を行います。midPointのライブデモにある下図でいえば左側のCSV FileHR Feedの部分の設定を行って行こうと思います。
CSV FileHR FeedリソースCSV FileHR Feedをつなぐ矢印がコネクタにあたります。データの取得先であるこのリソースをターゲットリソースとします。

electra-deployment.png

図の引用元:Live Demo

実際に源泉データの取り込み設定を行う前に、midPoint上でデータがどのように扱われているかについて軽く解説します。詳細はPDFのBook Practical Identity Management with MidPoint が公開されていますので、ご参照ください。

midPointのオブジェクト

midPont では、リソースのデータを取り込むためにリソースオブジェクトリソースオブジェクトシャドウフォーカスオブジェクトというオブジェクトを使用します。それぞれ以下のようになります。

  • リソースオブジェクト
     取り込み対象のターゲットリソースにあるアカウント情報です。midPoint 内部ではオブジェクトとして扱われるため、リソースオブジェクトと呼ばれます。プロジェクションとも呼ばれます。

  • リソースオブジェクトシャドウ
     midPoint内のオブジェクトと、リソースオブジェクトとのデータ形式の違いを吸収する役割を持つオブジェクトです。ターゲットリソースにアカウントが追加されると、midPoint 上にそれに対応するシャドウオブジェクトが作成され、ターゲットリソースのアカウント情報が変更されると、対応するシャドウオブジェクトも更新されます。シャドウオブジェクトシャドウとも呼ばれます。

  • フォーカスオブジェクト
    midPoint のユーザー一覧に表示されるユーザーの本体である User オブジェクトを指します。フォーカスオブジェクトまたはフォーカスと呼ばれます。ターゲットリソースから取り込まれるとシャドウとフォーカスはリンクされます。

focus-projection-3.png

図の引用元:Focus and Projections
:notebook:シャドウオブジェクトについて:Shadow Objects
:notebook:フォーカスとプロジェクション:Focus and Projections

図中のInboundOutboud はそれぞれ以下のようになります。

  • インバウンド(Inbound)
     インバウンドは、リソース側のシャドウ(アカウントなど)からmidPoint側のフォーカス(Userなど)にデータを変換するためのマッピング設定です。

  • アウトバウンド(Outbound)
     アウトバウンド(Outbound)は、インバウンドとは逆にmidPoint側のフォーカスからリソース側のシャドウにデータを変換するためのマッピング設定です。

:notebook: User 以外に RoleOrganizationService オブジェクトもフォーカスとして機能します。

CSVを取り込むための設定

CSVを取り込むための設定であるリソース定義は、midPoint に付属しているサンプルを元にします。サンプルは midPont のインストールディレクトリの下の doc/samples/に用意されています。使用するファイルは以下です。

ファイル 内容
doc/samples/book/5/resource-csv-hr.xml ターゲットリソースからデータを取り込むための設定が書かれているリソース定義ファイルです。
doc/samples/book/5/hr.csv ターゲットリソースである CSV 形式の源泉データです。

:information_source: github 上ではサンプルは midPoint 本体とは別プロジェクトなっています。付属しているサンプルが動かない場合はこちらが最新なのでチェックしてみてください。

リソース定義の取り込み

リソース定義のインポート画面を開いて組み込みエディタを選択します。

リソース定義1

エディタの編集フォームが開きますので、resource-csv-hr.xmlの内容をまるごとコピー&ペーストします。

image008.png

オブジェクトのインポートボタンを押して設定を取り込みます。

image011.png

最初の状態ではユーザー一覧にはadministratorしかいません。

image014.png

リソース一覧にはHR Systemの定義が取り込まれていますのでHR Systemをクリックして詳細画面を開きます。

image017.png

リソースの状態が不明と表示されていますのでウィザードを使用して編集ボタンを押して設定を確認します。

image021.png

最初の画面は変更する必要が無いのでボタンを押して次の画面に行きます。

image024.png

File path の項目を実際に csv ファイルがあるパスに変更して保存と接続テストボタンを押してテストを行います。

image028.png

接続テスト結果ウィンドウが開いてテストが始まります。全て緑になれば成功です。

image033.png

完了ボタンを押して前の画面に戻ると、リソースは起動していますというメッセージに変わっているはずです。

image036.png

アカウントタブ、リソースボタンを押すとターゲットリソースにあるアカウントの一覧が表示されます。これでリソースの設定が完了しました。

image042.png

アカウントのインポート

源泉データであるCSVファイルのアカウント一覧から midPoint にユーザーを取り込んでみましょう。源泉データのインポートはタスクにより自動化できますが今回は手動で行います。

リソースアカウント一覧の中からインポートしたいアカウントの右側にあるからインポートを選択してインポート出来ます。

image047.png

アカウントをまとめてインポート

先頭行の名前の左側のチェックボックスをチェックすると、表示されている全てのアカウントのチェックボックスがチェックされます。その状態で先頭行の右側のでインポートするとまとめてインポートされます。

image052.png

インポートが終わりすべてのユーザー画面を開くとユーザーがインポートされていることが確認できます。

image056.png

リソース定義

リソース定義ファイル resource-csv-hr.xml には、これらの処理を行うための各種設定がなされています。主な設定内容を紹介します。詳細は midPoint の Wiki をご参照ください。

タグ 説明
<name> リソースの名前を設定します。サンプルでは HR System になっています。
<connectorRef> リソースと接続するためのコネクタの設定です。サンプルではCSVのデータの読み書きを行える com.evolveum.polygon.connector.csv.CsvConnector が指定してあります。
<connectorConfiguration> コネクタの各種設定を記述します。
<schemaHandling> CSVのどの項目をどのように反映させるか、インバウンドの設定を記述します。サンプルでは empno 項目をフォーカスオブジェクトのname項目と employeeNumber の両方に反映させる設定になっています。
<synchronization > ターゲットリソースのアカウントと、どのように同期するかを設定を記述します。今回の例では手動でアカウントのインポートを行いましたが、タスク機能を使用することで自動的に同期させることが出来ます。

:notebook: コネクタの設定:Connector Setup
:notebook: 各種コネクタについて:Identity Connectors
:notebook: リソース設定:Resource Configuration
:notebook: インバウンドマッピング設定:Inbound Mapping
:notebook: User に設定できる項目について: UserType
:notebook: 同期設定:Synchronization Configuration
:notebook: Expression:Expression

:information_source:前の記事 midPointにおける「IDライフサイクル管理」を解説する では、CSV ファイルに Eメールアドレスの項目 email を追加し、リソース定義の、<schemaHandling> に以下のようなインバウンド設定を追加しました。

<attribute>
    <ref>ri:email</ref>
    <displayName>Email Address</displayName>
    <inbound>
        <target>
            <path>$focus/emailAddress</path>
        </target>
    </inbound>
</attribute>

:information_source:サンプルの <credentials> 設定では初期パスワードを自動生成するようになっているので、CSVのパスワードをそのまま使う場合は <expression> の<generate/> を <asIs/>に変更して下さい。

<credentials>
    <password>
        <inbound>
            <strength>weak</strength>
            <expression>
                <asIs/>
            </expression>
        </inbound>
    </password>
</credentials>

:information_source:サンプルの設定で取り込んだユーザーがログインするためにはEnd Userロールの付与が必要です。自動的に付与するためには別途設定が必要になります。:notebook: Automatic Role Assignment HOWTO

画面からのユーザー登録

CSVファイルのような元となる源泉データが無い場合は、midPoint の画面から直接ユーザーを登録することが出来ます。

基本情報を入力する

管理者 Administrator でログイン、メニューのユーザー新規ユーザー より新規ユーザー作成画面を開きます。入力項目が大量にありますが、全部入れなくてもいいので必要な項目を入力していきます。

image004.png

プロパティー

入力可能な項目は以下になります。midPoint のユーザーを一意に識別するための名前以外は全てオプション扱いになっているので、必要に応じて使用することになります。

項目名(英語名) 内容
名前(Name) User を一意に識別するための文字列、これだけは必須です。
説明(Description) 説明などがあれば記入します。
サブタイプ(Subtype) プロジェクト、チームが異なっている場合など、ユーザーの種類を区別する必要がある場合に記入します。
ライフサイクル状態(Lifecycle state) オブジェクトの状態(ドラフト、アクティブ、非推奨など)を記入します。
氏名(Full name) 氏名を記入します。通常は使用することになると思います。
名(Given name) 名を記入します。通常は使用することになると思います。
姓(Family name) 姓を記入します。通常は使用することになると思います。
追加名(ミドルネーム)(Additional Name) ミドルネームを記入します。
ニックネーム(Nickname) ニックネームを記入します。
敬称接頭語(Honorific Prefix) 名前の前にある敬称、キャプテン・・・、など
敬称接尾語(Honorific Suffix) 名前の後ろにある敬称、・・・教授、など
タイトル(Title) タイトルを記入します。
優先言語(Preferred Language) 多言語で使用する場合に優先する言語を記入します。
ロケール(Locale) 多言語で使用する場合のロケールを記入します。
タイムゾーン(Timezone) タイムゾーンを記入します。
テナント(Tenant) テナントを記入します。
Eメール(Email) Eメールアドレスを記入します。通常は使用することになると思います。これを設定しないとEメールによる各種通知ができません。
電話番号(Telephone number) 電話番号を記入します。
従業員番号(Employee Number) 従業員番号を記入します。
コストセンター(Cost Center) 必要に応じて記入します。
組織(Organization) 組織、会社名などを記入します。
所属組織(Organizational Unit) 組織、部署名などを記入します。
地域(Locality) 組織の地域などを記入します。
JPEG写真(Jpeg photo) ユーザーの写真をアップロードします。

アクティベーション

ユーザーの有効期限やパスワードロックを設定します。必要に応じて使用します。

項目名(英語名) 内容
管理ステータス(Administrative status) 有効、無効、アーカイブ済などのIDの状態を設定します。
開始日時(Valid from) 有効期限の開始日を設定します。
終了日時(Valid to) 有効期限の終了日を設定します。
ロックアウト・ステータス(Lock-out Status) ログイン失敗回数によるアカウントロックが有効化されていて、該当ユーザーがアカウントロックされていた場合は「ロックされています」と表示されます。「通常に設定」ボタンでロックを解除できます。
ロックアウトの有効期限(Lock-out Expiration) ロックされたアカウントが有効になるまでの期限を設定します。

パスワード

パスワードも必須ではありませんが、これを設定しないと midPoint にログインできず、他システムとの連携も難しいため、通常は設定することになると思います。

項目名 内容
パスワード パスワードを入力します。
パスワードを再入力 確認用にパスワードを再度入力します。

ここでは必要最低限の項目のみ入れます。名前Eメールパスワードを入力して保存ボタンを押すととりあえずユーザーの登録が完了します。緑の帯が表示されれば成功です。しかし、まだユーザーのアイコンが黒くなっています。

image007.png

ロールを追加する

次に必要最低限のロールを設定します。登録したユーザーの名前をクリックし、詳細画面を開きアサインタブをクリックします。

image010.png

チェックボックスの下の 新規割り当て ボタンを押すとロールの選択画面が開きます。

image013.png

End Userをチェックして追加ボタンを押します。

image018.png

:information_source:デフォルトの状態では、以下のようなロールが用意されています。

ロール 説明
Approver アクセス認定の承認者用のロールです。
Delegator アクセス認定で承認を行う権限を他のユーザーに委譲することを許可するロールです。
End user ログイン、パスワードの変更を許可する基本的なロールです。
Reviewer アクセス認定のレビュワー用のロールです。
Superuser administrator などの midPoint の管理者用のロールです。

ロールの選択画面が閉じると、先ほど選択したロールが薄い緑色で表示されていますので、保存ボタンを押します。

image021.png

緑の帯が表示されれば成功です。登録したユーザーのアイコンが青くなりログインできるようになりました。

image023.png

まとめ

midPoint は用意されている多くのサンプルを使用することで動作を確認することが出来ます。リソース定義用の GUI も用意されていますが、現状ではまだ発展途上の部分も多く、サンプルのXMLをベースにカスタマイズする方が近道だと思いました。この辺りは今後の改良に期待したいと思います。

付録1: 参考URL

https://www.youtube.com/channel/UCSDs8qBlv7MgRKRLu1rU_FQ
Evolveum社の Youtubeチャンネルです。いくつかデモ動画がアップされています。やや古いバージョン 3.6 を使っていますが、イメージはつかめると思います。

付録2: midPointの内部処理

midPoint では ID はオブジェクトとして扱われています。オブジェクトはIDライフサイクルを制御する特別なプロパティLifecycleStateを持っており、以下のような値を取ります。

schemas-lifecycle-statechart.png

引用元:Object Lifecycle

状態 アクティブ 説明
ドラフト(Draft) no IDは、まだ準備ができておらず、変更される可能性があります。
提案済み(Proposed) no IDの定義は完了していますが、まだレビュー(承認など)がされていません。
アクティブ(Active) YES IDは有効であり、使用可能な状態です。
非推奨(Deprecated) YES まだ使用可能ですが、段階的に廃止される予定であるため新たに使用(承認)すべきではありません。
アーカイブ済み(Archived) no 既に使用できない状態であり、履歴として確認するためにのみ存在しています。
失敗(Failed) no ライフサイクル中に予期しないエラーが発生しています。オブジェクトは非アクティブになり、手動での対応が必要です。

アクティブ列は、オブジェクトが有効かどうかです。noの場合は非アクティブ(無効またはアーカイブ済み)な状態です。通常は lifecycleState や有効期限などから自動的にアクティブにすべきかどうか決定されますが、特別な理由で管理者が判断する必要がある場合は、以下の管理ステータスで明示的に決定することもできます。

説明
値なし 明示的な決定はなされていません
enabled アクティブな状態
disabled 非アクティブな状態。後で有効にする場合に指定します。育児休業中、休暇中、セキュリティ上の理由など、一時的にアカウントを無効にする場合に使用します。
archived 非アクティブな状態。後で有効化されることはありません。従業員が退職した場合などに使用します。

参考:
Object Lifecycle
Activation

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
ユーザーは見つかりませんでした