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

midPointにおける「エンタイトルメント管理」「ポリシーとロール管理」実践編

はじめに

midPointアドベントカレンダー7日目は昨日の記事で紹介された「エンタイトルメント管理」「ポリシーとロール管理」について、実際のmidPointでの設定方法をご紹介します。具体的には、ポリシーに基づきロールがユーザに自動でアサインされるように設定をする方法をご紹介します。

また、PeopleレイヤとResourceレイヤの考え方に基づき、リソース(プロビジョニング先システム)のアクセス権限を管理する設定もご紹介します。

ポリシーやロール、Peopleレイヤ、Resourceレイヤなどの詳細は昨日の記事をご参照ください。

今回、midPointはmidPointの公式Docker Hubリポジトリで公開されているバージョン4.0.1のevolveum/midpoint:4.0.1を使用しています。

ロールのアサインポリシーの設定

midPointにおける、ロールをアサインするためのポリシーの設定方法は、大きく分けて2つあります。

1つ目は、ロール自体にそのロールをアサインする条件を設定する方法です。例えば、「正社員」ロールに対して、この「正社員」ロールをユーザ情報の雇用形態情報が「正社員」となっているユーザに割り当てる、といったポリシーを設定する形になります。

ロールポリシー.png

もう一つの方法は、オブジェクトテンプレートを作成する方法です。midPointではユーザや組織、ロール、リソースなどのmidPoint内でデータとして保持するものをオブジェクトと呼びます。オブジェクトテンプレートとは、ユーザなどのオブジェクトの設定に関してのルールを保持するものです。

オブジェクトテンプレートでの設定の場合は、ロールにアサインポリシーを設定する方法に比べ、柔軟な設定ができます。例えば、ユーザの雇用形態情報に格納されている情報と同じ名前のロールをそのユーザにアサインするといったルールでオブジェクトテンプレートを作成します。すると、雇用形態情報が「正社員」となっているユーザには「正社員」ロールを、「インターン」となっているユーザには「インターン」ロールをアサインするといった動作の設定が一括でできます。ロールにアサインポリシーを設定する方法で同様の動作を実現するには、「正社員」ロールと「インターン」ロールのそれぞれに設定を加える必要があります。

オブジェクトテンプレートポリシー.png

本記事では両方の設定方法を説明していきます。

ロール自体にアサインポリシーを設定する

ここから、具体的な設定方法を説明していきます。まずは、ロールにアサインポリシーを設定する方法です。

自動アサインの有効化

ロールのアサインポリシーでの自動アサインには、システム設定の自動アサインを有効にする必要があります。ロール管理(システム > ロール管理)の自動アサインが有効Trueとすることで、自動アサインが有効となります。

1-1自動アサイン有効化.png

ロールの作成とポリシー設定

次に、ポリシーを設定するロールを作成します。今回はemployeeというロールを作成します。

1-2employeeロール作成.png

作成したロールにポリシーを設定します。この設定は、「RAWデータの編集」と呼ばれるロール定義のXMLを直接編集する方法で設定します。先程作成したemployeeロールの画面の右下の「RAWデータの編集」を押下します。

1-3employeeRAWデータの編集.png

編集エディタにて、roleタグ内に以下の定義を追加します。

1-4employeeロールにポリシーを追加.png

自動アサイン設定
    <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としたユーザを作成してみます。

1-5employeeユーザ作成.png

保存後、作成したユーザの詳細画面に行くと、employeeロールが自動でアサインされていることが確認できます。

1-6employeeロールアサイン確認.png

なお、サブタイプの値がemployee以外になると自動的にemployeeロールのアサインも外れます。

アサインポリシーを設定したオブジェクトテンプレートを作成する

次に、オブジェクトテンプレートでロールのポリシーを設定する方法です。

ポリシーを設定したオブジェクトテンプレートの作成

オブジェクトテンプレートでアサインポリシーを設定する場合は、まずオブジェクトテンプレートを作成します。

オブジェクトテンプレートは「オブジェクトのインポート」から、「組み込みエディター」を選択し、下記のXMLをインポートすることで作成してください。

2-1オブジェクトテンプレート作成.png

ロール自動アサインオブジェクトテンプレート
<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
  • 「タイプ」: ユーザー

2-2オブジェクトポリシー設定.png

これで設定は完了です。

動作確認

オブジェクトテンプレートの適用まで完了すると、ユーザのサブタイプにロール名を指定することで、指定したロールがアサインされます。

以下はinternという名前のロールを新規に作成し、サブタイプをinternとしたユーザを作成した際にinternロールがアサインされていることを確認した結果となります。

2-3インターンアサイン確認.png

なお、サブタイプが変更されると、ロールのアサインも自動で対応するものに変更されます。

ロールでの設定とオブジェクトテンプレートでの設定

今回ご紹介した2つの設定方法について、ロールのアサインポリシーの設定のはじめで、オブジェクトテンプレートで設定する方法のほうが柔軟性がある点に触れていました。その他に、性能の面でもオブジェクトテンプレートでの設定の方が有利です。公式のガイドでも、ロールにアサインポリシーを設定する方法では数十ロールまでは問題ないがそれを超えるとパフォーマンスに影響が出てくるといった旨が記載されています。

本格的な運用を見据えると、オブジェクトテンプレートで設定する方がおすすめできるかと思います。

PeopleレイヤとResourceレイヤ

昨日の記事で説明されている通り、ロールはPeopleレイヤとResourceレイヤに分けて階層的に管理することが推奨されています。ロールのアサインポリシーの設定の中で作成しユーザにアサインした雇用形態を表すロールはPeopleレイヤに分類することができます。

ここでは、リソースのアクセス権限を表すResourceレイヤのロールを設定し、そのリソースへのアクセスを許可する雇用形態に対して、そのロールを紐付けます。これにより、間接的にリソースの権限をユーザに割り当てます。今回はリソースとしてmidPoint自体を対象に説明していきます。

people-resource.png

Resourceレイヤロールの設定

リソースへの権限を指定したResourceレイヤロールの作成

まず、Resourceレイヤのロールとしてidm-userというロールを作成します。

3-1idm-user.png

次に、作成したidm-userに、midPointにデフォルトで用意されている一般ユーザ用のロールのEnd userロールをインデュースメントします。

3-2enduserインデュースメント.png

インデュースメントとはロール等を多段に紐付ける仕組みの一つで、大元のロールがアサインされているオブジェクト(ユーザ等)に多段に紐付けられたロール等が関節的にアサインされる設定となります(参考: Assignment vs Inducement - midPoint - Evolveum Confluence)。

midPointでは、このインデュースメントやアサインを多段に設定することで、PeopleレイヤとResourceレイヤといったロールの階層管理が実現できます。

上記のインデュースメント設定で、midPointへのアクセス権限を設定したResourceレイヤのロールが完成しました。この時点では、まだユーザにこのロールを紐付けていないため、ユーザはmidPointへログインすることができません。試しに、ロールのアサインポリシーの設定で作成したtestユーザにパスワードを設定しログインしてみると下記のようにエラーとなります。

3-3testpassword.png

3-4アクセス拒否.png

PeopleレイヤへのResouceレイヤの指定

今回はemployeeロールを持つユーザにはmidPointのアクセスを許可することにします。employeeロールの設定にてidm-userロールをインデュースメントします。

3-5employe-idmuser.png

これで、employeeロールを持つtestユーザもmidPointへのアクセス権限を得た形になります。再度testユーザでログインすると、今度は問題なくEnd user権限でログインできることが確認できます。

3-6testユーザログイン.png

おわりに

今回は、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

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