はじめに
midPointアドベントカレンダー7日目は昨日の記事で紹介された「エンタイトルメント管理」「ポリシーとロール管理」について、実際のmidPointでの設定方法をご紹介します。具体的には、ポリシーに基づきロールがユーザに自動でアサインされるように設定をする方法をご紹介します。
また、PeopleレイヤとResourceレイヤの考え方に基づき、リソース(プロビジョニング先システム)のアクセス権限を管理する設定もご紹介します。
ポリシーやロール、Peopleレイヤ、Resourceレイヤなどの詳細は昨日の記事をご参照ください。
今回、midPointはmidPointの公式Docker Hubリポジトリで公開されているバージョン4.0.1のevolveum/midpoint:4.0.1
を使用しています。
ロールのアサインポリシーの設定
midPointにおける、ロールをアサインするためのポリシーの設定方法は、大きく分けて2つあります。
1つ目は、ロール自体にそのロールをアサインする条件を設定する方法です。例えば、「正社員」ロールに対して、この「正社員」ロールをユーザ情報の雇用形態情報が「正社員」となっているユーザに割り当てる、といったポリシーを設定する形になります。
もう一つの方法は、オブジェクトテンプレートを作成する方法です。midPointではユーザや組織、ロール、リソースなどのmidPoint内でデータとして保持するものをオブジェクトと呼びます。オブジェクトテンプレートとは、ユーザなどのオブジェクトの設定に関してのルールを保持するものです。
オブジェクトテンプレートでの設定の場合は、ロールにアサインポリシーを設定する方法に比べ、柔軟な設定ができます。例えば、ユーザの雇用形態情報に格納されている情報と同じ名前のロールをそのユーザにアサインするといったルールでオブジェクトテンプレートを作成します。すると、雇用形態情報が「正社員」となっているユーザには「正社員」ロールを、「インターン」となっているユーザには「インターン」ロールをアサインするといった動作の設定が一括でできます。ロールにアサインポリシーを設定する方法で同様の動作を実現するには、「正社員」ロールと「インターン」ロールのそれぞれに設定を加える必要があります。
本記事では両方の設定方法を説明していきます。
ロール自体にアサインポリシーを設定する
ここから、具体的な設定方法を説明していきます。まずは、ロールにアサインポリシーを設定する方法です。
自動アサインの有効化
ロールのアサインポリシーでの自動アサインには、システム設定の自動アサインを有効にする必要があります。ロール管理
(システム > ロール管理)の自動アサインが有効
をTrue
とすることで、自動アサインが有効となります。
ロールの作成とポリシー設定
次に、ポリシーを設定するロールを作成します。今回はemployee
というロールを作成します。
作成したロールにポリシーを設定します。この設定は、「RAWデータの編集」と呼ばれるロール定義のXMLを直接編集する方法で設定します。先程作成したemployee
ロールの画面の右下の「RAWデータの編集」を押下します。
編集エディタにて、role
タグ内に以下の定義を追加します。
<autoassign>
<enabled>true</enabled>
<focus>
<mapping>
<source>
<path>subtype</path>
</source>
<condition>
<script>
<code>subtype == 'employee'</code>
</script>
</condition>
</mapping>
</focus>
</autoassign>
今回はサブタイプ属性を雇用形態情報の属性として利用することにしています。employee
ロールに、サブタイプが employee
となっているユーザへemployee
ロール自身をアサインするという設定を追加した形となります。
動作確認
動作確認のため、サブタイプをemployee
としたユーザを作成してみます。
保存後、作成したユーザの詳細画面に行くと、employee
ロールが自動でアサインされていることが確認できます。
なお、サブタイプの値がemployee
以外になると自動的にemployee
ロールのアサインも外れます。
アサインポリシーを設定したオブジェクトテンプレートを作成する
次に、オブジェクトテンプレートでロールのポリシーを設定する方法です。
ポリシーを設定したオブジェクトテンプレートの作成
オブジェクトテンプレートでアサインポリシーを設定する場合は、まずオブジェクトテンプレートを作成します。
オブジェクトテンプレートは「オブジェクトのインポート」から、「組み込みエディター」を選択し、下記のXMLをインポートすることで作成してください。
<objectTemplate>
<name>User Template</name>
<mapping>
<authoritative>true</authoritative>
<source>
<path>subtype</path>
</source>
<expression>
<assignmentTargetSearch>
<targetType>RoleType</targetType>
<filter>
<equal>
<path>name</path>
<expression>
<path>$subtype</path>
</expression>
</equal>
</filter>
</assignmentTargetSearch>
</expression>
<target>
<path>assignment</path>
</target>
</mapping>
</objectTemplate>
このXMLは、User Templateという名前のオブジェクトテンプレートで、サブタイプと同じ名前のロールがある場合にそのロールをアサインするという設定がされた状態です。
オブジェクトテンプレートの適用
次にこのオブジェクトテンプレートをユーザオブジェクトに適用する設定をします。オブジェクトポリシー
(システム > オブジェクトポリシー)を下記の設定で新規作成します。
- 「オブジェクト・テンプレート参照」: 先ほど作成した
User Template
- 「タイプ」: ユーザー
これで設定は完了です。
動作確認
オブジェクトテンプレートの適用まで完了すると、ユーザのサブタイプにロール名を指定することで、指定したロールがアサインされます。
以下はintern
という名前のロールを新規に作成し、サブタイプをintern
としたユーザを作成した際にintern
ロールがアサインされていることを確認した結果となります。
なお、サブタイプが変更されると、ロールのアサインも自動で対応するものに変更されます。
ロールでの設定とオブジェクトテンプレートでの設定
今回ご紹介した2つの設定方法について、ロールのアサインポリシーの設定のはじめで、オブジェクトテンプレートで設定する方法のほうが柔軟性がある点に触れていました。その他に、性能の面でもオブジェクトテンプレートでの設定の方が有利です。公式のガイドでも、ロールにアサインポリシーを設定する方法では数十ロールまでは問題ないがそれを超えるとパフォーマンスに影響が出てくるといった旨が記載されています。
本格的な運用を見据えると、オブジェクトテンプレートで設定する方がおすすめできるかと思います。
PeopleレイヤとResourceレイヤ
昨日の記事で説明されている通り、ロールはPeopleレイヤとResourceレイヤに分けて階層的に管理することが推奨されています。ロールのアサインポリシーの設定の中で作成しユーザにアサインした雇用形態を表すロールはPeopleレイヤに分類することができます。
ここでは、リソースのアクセス権限を表すResourceレイヤのロールを設定し、そのリソースへのアクセスを許可する雇用形態に対して、そのロールを紐付けます。これにより、間接的にリソースの権限をユーザに割り当てます。今回はリソースとしてmidPoint自体を対象に説明していきます。
Resourceレイヤロールの設定
リソースへの権限を指定したResourceレイヤロールの作成
まず、Resourceレイヤのロールとしてidm-user
というロールを作成します。
次に、作成したidm-user
に、midPointにデフォルトで用意されている一般ユーザ用のロールのEnd user
ロールをインデュースメントします。
インデュースメントとはロール等を多段に紐付ける仕組みの一つで、大元のロールがアサインされているオブジェクト(ユーザ等)に多段に紐付けられたロール等が関節的にアサインされる設定となります(参考: Assignment vs Inducement - midPoint - Evolveum Confluence)。
midPointでは、このインデュースメントやアサインを多段に設定することで、PeopleレイヤとResourceレイヤといったロールの階層管理が実現できます。
上記のインデュースメント設定で、midPointへのアクセス権限を設定したResourceレイヤのロールが完成しました。この時点では、まだユーザにこのロールを紐付けていないため、ユーザはmidPointへログインすることができません。試しに、ロールのアサインポリシーの設定で作成したtest
ユーザにパスワードを設定しログインしてみると下記のようにエラーとなります。
PeopleレイヤへのResouceレイヤの指定
今回はemployee
ロールを持つユーザにはmidPointのアクセスを許可することにします。employee
ロールの設定にてidm-user
ロールをインデュースメントします。
これで、employee
ロールを持つtest
ユーザもmidPointへのアクセス権限を得た形になります。再度test
ユーザでログインすると、今度は問題なくEnd user
権限でログインできることが確認できます。
おわりに
今回は、midPointでのロールやポリシーの設定をご紹介しました。midPointでは、アサインやインデュースメントによりロールを柔軟に管理する仕組みや、アサインポリシーに従いロールを自動でアサインする機能を提供しており、「エンタイトルメント管理」「ポリシーとロール管理」といったIDの権限管理を十分に実現できます。
なお、Resourceレイヤのロールの設定に関して、本記事ではResourceレイヤのロールにmidPointの権限ロールを紐付けていますが、リソースを指定することで、そのロールを持つユーザを、指定されたリソースにプロビジョニングするといった設定ができます。プロビジョニング(フルフィルメント)については本アドベントカレンダーの10日目から12日目で紹介される予定です。
また、Entitlementsという仕組みを使うことで、プロビジョニングするかしないかだけではなく、権限情報をプロビジョニングすることも可能です。例えば、LDAPへのプロビジョニングで、midPointで管理している権限をLDAPグループの所属情報として連携するといったことができます。
参考
Role Autoassignment - midPoint - Evolveum Confluence
Role Autoassign Configuration - midPoint - Evolveum Confluence
Roles, Metaroles and Generic Synchronization - midPoint - Evolveum Confluence
Assignment vs Inducement - midPoint - Evolveum Confluence
Entitlements - midPoint - Evolveum Confluence