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 17

midPoint からActive Directoryにプロビジョニングする(グループ編)

Last updated at Posted at 2024-12-16

midPoint by OpenStandia Advent Calendar 2024 の17日目は、15日目の記事で構築したActive Directory(以下、AD)互換環境であるSamba4に対して、グループをプロビジョニングします。

8日目の記事「midPoint にCSVの源泉データをインポートする(組織編)」で解説したように、既にmidPointに組織情報を取り込んでいるはずです。今回は、その組織情報をmidPointからADグループ(セキュリティグループ)としてプロビジョニングするように設定を追加します。

16日目までの環境を前提としています。

リソース設定

16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」で、「AD」リソースは既に作成済みです。このリソース設定に対して、グループプロビジョニングの設定を追加します。

オブジェクトタイプの追加

作成済みの「AD」リソースの詳細画面より、「スキーマ処理」メニューを開き、グループプロビジョニングのためのオブジェクトタイプの追加を行います。

基本情報の設定画面では、以下を設定します。

  • 表示名Group
  • 種類エンタイトルメント

image.png

リソース・データの設定画面では、以下を設定します。

  • オブジェクトクラスgroup

image.png

MidPointデータの設定画面では、以下を設定します。これで「設定を保存」ボタンをクリックして保存します。

  • タイプ組織

image.png

マッピングの設定

マッピング設定画面では、下表を参考にアウトバウンドマッピングを設定します。

ソース ターゲット
name スクリプト dn
name 現状 sAMAccountName
displayName 現状 displayName
(なし) リテラル groupType

ターゲットdnのスクリプト設定は以下のようにnameのオリジナル値よりcnでRDNを構成するようにしておきます。

  • コードbasic.composeDnWithSuffix("cn", name.orig, "ou=Groups,ou=IDM,dc=ad,dc=example,dc=com")

image.png

ターゲットgroupTypeについては、今回は固定値を設定します。その場合、リテラルを選択して、「値を表示する」をクリックします。

image.png

すると、リテラル値の入力ダイアログが表示されます。「値を追加」をクリックします。

image.png

入力フィールドが表示されるので、-2147483646を設定して「実行」ボタンをクリックします。

image.png

groupType属性には、グループの種類とスコープに応じて設定すべき値がAD側で規定されています。要件に応じて設定する必要があります。今回はグローバルスコープのセキュリティグループとしてプロビジョニングするために、-2147483646を設定しています。

  • セキュリティグループ
    • グローバル:-2147483646
    • ドメインローカル:-2147483644
    • ユニバーサル:-2147483640
  • 配布グループ
    • グローバル:2
    • ドメインローカル:4
    • ユニバーサル:8

そうすると、値が設定されていることを示す表示「Evaluator value is set」に変わります。

image.png

最終的に以下の設定となります。「マッピングを保存」ボタンをクリックして保存します。

image.png

同期の設定

16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様に、同期の設定をしておきます。

以下の表の内容で設定します。「Unmatched」に対する設定はしないでおきます(安全のため、AD側にだけ存在するグループを削除しないように)。

状況 アクション 設定意図
Linked 同期 既にLinked状態のグループに対して、リコンシリエーションタスクの実行時に差分があれば反映する
Unlinked 紐づけ 名寄せ処理にて、ADのグループと一致するmidPoint側のデータを発見した場合に、紐づけを行う
Deleted 同期 リコンシリエーションタスク実行時にAD側でグループが削除されたことを検知した場合は、再びADにグループをプロビジョニングする

Correlationの設定

16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様に、名寄せの設定をしておきます。

名寄せ用のインバウンドマッピングの追加

再度マッピングの設定画面を開き、以下の内容でインバウンドマッピングを追加します。

今回は簡易のためcnを使っていますが、異なるOUにもプロビジョニングを行う場合は、cnでは一意に名寄せできないケースも想定されるため注意してください。

  • ソースcn
  • 現状
  • To resource attributename

image.png

追加したインバウンドマッピングの詳細画面で、以下の設定を行い名寄せ専用とします。

  • Use for相関

image.png

Correlationの設定

Correlationの設定画面を開き、ルールを追加します。

image.png

ルールの詳細設定画面を開き、「アイテム」に先ほど追加した名寄せ用のインバウンドマッピングのアイテムであるnameを選択します。

image.png

プロビジョニングの確認

「AD」リソース設定に「Group」オブジェクトタイプの追加設定ができましたので、プロビジョニングさせてみます。

リソースアサイン追加によるプロビジョニング

16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様に、まずは簡易的な確認方法として、リソースを直接アサインして動作確認をします。

8日目の記事「midPoint にCSVの源泉データをインポートする(組織編)」でmidPointに取り込んだ適当な組織の詳細画面から「アサイン > リソース」メニューを開きます。

image.png

アサインの追加操作を行い「オブジェクトの選択」ダイアログを表示します。「AD」リソースにチェックを入れて、「種類」ではエンタイトルメント、「用途」ではdefaultを選択して、「追加」ボタンをクリックします。

image.png

その後、「変更のプレビュー」ボタンをクリックしてみましょう。リソースの設定が正しければ、ADへのプロビジョニング処理のプレビューが表示されます。「保存」ボタンをクリックして保存します。

image.png

該当組織のプロジェクションを確認しておきます。「AD」リソースのプロジェクションが追加されていることが分かります。

image.png

DN箇所をクリックしてプロジェクションの詳細画面も確認しておきます(この時、裏でコネクターを通じてLDAP検索が行われます)。以下のように、プロビジョニングされたADグループの属性を確認することができます。

image.png

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

16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様に、ロールを作成して「AD」リソースとインデュースメントを設定し、組織にはそのロールをアサインすることでプロビジョニングさせることができます。

既に16日目の記事まで読まれた方であれば簡単に設定と動作確認ができるはずなので、ここでは省略します。注意点として、「AD」リソースへのインデュースメントを設定する際に、「種類」にはエンタイトルメントを指定するくらいです。

アーキタイプ経由の自動プロビジョニング

16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様に、アーキタイプにリソースをインデュースメントで設定し、組織がHRシステムよりmidPointに取り込まれたタイミングでプロビジョニングさせることができます。このように設定することで、組織改正と連動してADのセキュリティグループを作成・更新・削除を自動的に行うことが可能になります。

実際には、組織改正の内容と完全に連動するのではく、セキュリティグループは物理削除せず残す運用をしたり、組織階層のレベルに応じて一定期間(31日間など)は残すといった運用をされるケースが考えられます。このあたりは企業ごとにルールが異なる部分であり、一般的なIDM/IGAプロダクトでは中々対応に苦労する箇所です。midPointの場合は、複雑な組織改正時のルールにも対応できるように、かなりの部分がカスタマイズ可能になっています。

今までの記事では組織に対するアーキタイプは作成していませんでしたので、このタイミングで作成して自動プロビジョニングの設定を追加します。

アーキタイプの作成

既に13日目の記事「midPoint のアーキタイプを使用した自動プロビジョニング(Birthright)」でアーキタイプの作成と、リソースへの関連付け方法について解説していますので、詳細な手順はそちらを参照してください。

アーキタイプの新規作成とリソースへの関連付け

HRシステムから取り込む組織データ用のアーキタイプとして、今回は「Company Org」というアーキタイプを定義することにします。アーキタイプの作成画面で、以下のようにします。

  • 名前Company Org

image.png

「インデュースメント > リソース」メニューを開き、リソースの追加を行います。

image.png

「AD」リソースを指定します。

image.png

「種類:エンタイトルメント、用途:default」を選択します。

image.png

エンタイトルメントの設定画面では、現状は特に選ぶものがないためそのまま次に進みます。

image.png

マッピングの設定画面では、特に追加のマッピングはないためそのまま「設定画面を保存」をクリックして保存します(このタイミングでアーキタイプが保存されます)。

image.png

Assignment Relationの設定

作成したアーキタイプを適用可能(アサイン可能な)なオブジェクトタイプを設定します。組織にCompany Orgアーキタイプを適用(アサイン)するため、OrgTypeを設定する必要があります。残念ながらmidPoint 4.8では、この設定を行う専用UIは用意していませんので、作成したアーキタイプの詳細画面より、「RAWデータの編集」ボタンをクリックしてRaw更新で設定します。

以下の〜を〜のどこかに挿入してください。これで「保存」ボタンをクリックして保存します。

    <assignment>
        <identifier>holderType</identifier>
        <assignmentRelation>
            <holderType>OrgType</holderType>
        </assignmentRelation>
    </assignment>

HR Orgsリソースの設定変更

HR Orgsリソースから組織が取り込まれた際に作成したアーキタイプをアサインするように、リソース設定を変更します。

HR Orgsリソースの詳細画面を開き、「スキーマ処理」メニューから「Org」オブジェクトタイプをクリックして、オブジェクト・タイプのウィザードを開きます。

image.png

「基本属性」をクリックしてオブジェクト・タイプの設定ウィザードを開始し、そのまま「MidPointデータ」の設定画面まで進めます。「アーキタイプ」の設定が可能ですので設定します。「選択」ボタンをクリックします。

image.png

オブジェクトの選択ダイアログが表示されるので、作成したアーキタイプである「Company Org」をクリックします。

image.png

アーキタイプが設定された状態になるので、これで「設定を保存」ボタンをクリックして保存します。

image.png

アーキタイプの自動付与による自動プロビジョニングの確認

まだADにグループプロビジョニングしていない適当な組織の詳細画面を開き、「オプション」より「リコンサイル」にチェックを付けて、「変更のプレビュー」ボタンをクリックします。

image.png

リコンサイルにより「HR Orgs」リソースに設定したアーキタイプの自動付与が再計算され「Company Org」アーキタイプへのアサインが追加されると同時に、そのアーキタイプに設定したインデュースメント設定に従い、「AD」リソースに対してグループプロビジョニングが発生する予定であることが分かります。「保存」ボタンをクリックします。

image.png

組織のプロジェクションを確認すると、ADにグループとしてプロビジョニングされていることが分かります。

image.png

HR recon orgs タスクの実行

最後に、HR recon orgsタスクを実行して、残りの組織にも「Company Org」アーキタイプを適用し、「AD」リソースにグループのプロビジョニングを実施しておきます。

HR recon orgsタスクの詳細画面を開き、「今すぐ実行」ボタンをクリックして開始します。タスクが「成功」で「終了」で完了したことを確認し、コンソールよりdocker compose exec ad bash -c "ldapsearch -D cn=Administrator,cn=Users,dc=ad,dc=example,dc=com -w p@ssw0rd -b ou=Groups,ou=IDM,dc=ad,dc=example,dc=com dn" と実行してLDAP検索し、グループがプロビジョニングされたことを確認しておきます。

$ docker compose exec ad bash -c "ldapsearch -D cn=Administrator,cn=Users,dc=ad,dc=example,dc=com -w p@ssw0rd -b ou=Groups,ou=IDM,dc=ad,dc=example,dc=com dn"
# extended LDIF
#
# LDAPv3
# base <ou=Groups,ou=IDM,dc=ad,dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: dn
#

# 011, Groups, IDM, ad.example.com
dn: CN=011,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 002, Groups, IDM, ad.example.com
dn: CN=002,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 004, Groups, IDM, ad.example.com
dn: CN=004,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 006, Groups, IDM, ad.example.com
dn: CN=006,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 003, Groups, IDM, ad.example.com
dn: CN=003,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 005, Groups, IDM, ad.example.com
dn: CN=005,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 008, Groups, IDM, ad.example.com
dn: CN=008,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 001, Groups, IDM, ad.example.com
dn: CN=001,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# Groups, IDM, ad.example.com
dn: OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 010, Groups, IDM, ad.example.com
dn: CN=010,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 007, Groups, IDM, ad.example.com
dn: CN=007,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# 009, Groups, IDM, ad.example.com
dn: CN=009,OU=Groups,OU=IDM,DC=ad,DC=example,DC=com

# search result
search: 2
result: 0 Success

# numResponses: 13
# numEntries: 12

まとめ

17日目では、midPointからADへのグループプロビジョニングの設定ついて解説しました。基本的な設定の流れはユーザーと同じなので、既に16日目までを読み進めた方であればサクッと設定、動作確認ができたのではないかと思います。

さて、ここまでADに対して、ユーザーとグループをプロビジョニングしました。しかしこれだけでは、midPointを中心としたエンタイトルメント管理まではまだできておりません。作成したADグループのメンバーには誰も登録されておりません。

次回は、ユーザーとグループのメンバーシップ関係をADにプロビジョニングする部分を解説します。これでようやく、エンタイトルメント管理ができる状態になります。お楽しみに!

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?