SaaS

Microsoft Entra IDにSCIMでユーザー作成するし、カスタム属性も同期する話

はじめに

こんにちは、Identityチームのすかんくです。最近永谷園のはま吸いがマイブームです。

今回は Microsoft Entra に SCIM でユーザーを作成したり、作成する際にカスタム属性を付与したりする手順を紹介したいと思います。そうです、Entra から SP への SCIM ではなく、Entra への SCIM です。

1,2年前、人事ドリブンな ID 管理とか流行りましたよね。SmartHR と Okta の連携機能みたいなやつです。
これを Entra で実現するための手順に加えて、結局人事ドリブンな認可管理をしようと思ったら Entra の標準属性だけじゃ不足するよねというのは誰でも知っているので、カスタム属性を同期するための手順を記載しています。

前提条件

  • Entra ID P1 以上であること
  • 同期ドメインではないこと
  • カスタム属性は文字列型のみサポートされています

カスタム属性の作成

まずはディレクトリ拡張属性と呼ばれる機能を用いて、組織固有の属性を Entra ID に追加します。

① Microsoft Entra 管理センター(https://entra.microsoft.com/#home)へアクセスし、[ID]- [アプリケーション] – [アプリの登録] から任意の [名前] でアプリを登録する

② Graph Explorer(https://developer.microsoft.com/en-us/graph/graph-explorer)にアクセスし、グローバル管理者でサインインする
③ Graph Explorer で以下の内容を実行する(Modify Permissions を忘れずに)

POST <https://graph.microsoft.com/v1.0/applications/><Object ID>/extensionProperties

{
    "name": "unitpath",
    "dataType": "String",
    "targetObjects": [
        "User"
    ]
}

④ 以下のリクエストで作成した属性が表示されることを確認する

POST <https://graph.microsoft.com/v1.0/directoryObjects/getAvailableExtensionProperties>
{

}
Entra がサポートするカスタム属性の種類:

今回作成した属性はディレクトリ拡張と呼ばれるものです、Entra IDではディレクトリ拡張以外にも様々な属性の拡張方法がサポートされており、以下のURLから機能対応表を確認できます

https://learn.microsoft.com/en-us/graph/extensibility-overview?tabs=http#comparison-of-extension-types

API 駆動型インバウンドプロビジョニングの作成

① Microsoft Entra 管理センター(https://entra.microsoft.com/#home)へアクセスし、[ID] – [アプリケーション] – [エンタープライズ アプリケーション] から、[API-driven provisioning to Microsoft Entra ID] を検索して作成する(名前は任意に変更可能)

② 作成したアプリケーションにて、[プロビジョニング] を選択して [作業の開始] をクリック

③ [プロビジョニング モード] を “自動” に設定して [保存] する
④ 表示される [マッピング] タブを展開し、属性マッピングのリンクを選択する

⑤ [詳細オプションの表示] にチェックを入れ、[API の属性リストを編集します] のリンクを選択する

⑥ 独自の名前空間を追加して [保存] する(今回はディレクトリ拡張で作成した unitpath 属性の名前空間を追加)
※公式手順通り SCIM 1.0 で名前空間を定義しているが、今どき 2.0 の方が良いのでは?と思いながら検証しています(教えて詳しい人)

urn:ietf:params:scim:schemas:extension:<任意の名前空間>:1.0:User:unitpath 

⑦ [新しいマッピングの追加] を選択する

⑧ [ソース属性] に追加した名前空間、[対象の属性] に追加したディレクトリ拡張属性を選択して [OK] をクリック

⑨ 属性マッピングが追加されていることを確認して [保存] をクリック

⑩ プロビジョニングのトップページに戻り、[プロビジョニングの状態] を “オン” にして [保存] する

動作テスト

① プロビジョニングのトップページから [概要] を開き、[API エンドポイントのプロビジョニング:]をコピーする

② Graph Explorer(https://developer.microsoft.com/en-us/graph/graph-explorer)にアクセスし、グローバル管理者でサインインする
③ コピーした API エンドポイントを Graph Explorer へ貼り付ける
④ [Request headers] で Content-Type:application/scim+json ヘッダーを追加する

⑤ 追加した名前空間へのリクエストも含む要求スキーマを [Request body] に張り付け、[Run query] をクリックする(Modify Permissions も忘れずに)

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"],
    "Operations": [
    {
        "method": "POST",
        "bulkId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "path": "/Users",
        "data": {
            "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
            "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"
            ],
            "externalId": "701984",
            "userName": "bjensen@example.com",
            "name": {
                "formatted": "Ms. Barbara J Jensen, III",
                "familyName": "Jensen",
                "givenName": "Barbara",
                "middleName": "Jane",
                "honorificPrefix": "Ms.",
                "honorificSuffix": "III"
            },
            "displayName": "Babs Jensen",
            "nickName": "Babs",
            "emails": [
            {
              "value": "bjensen@example.com",
              "type": "work",
              "primary": true
            }
            ],
            "addresses": [
            {
              "type": "work",
              "streetAddress": "100 Universal City Plaza",
              "locality": "Hollywood",
              "region": "CA",
              "postalCode": "91608",
              "country": "USA",
              "formatted": "100 Universal City Plaza\nHollywood, CA 91608 USA",
              "primary": true
            }
            ],
            "phoneNumbers": [
            {
              "value": "555-555-5555",
              "type": "work"
            }
            ],
            "userType": "Employee",
            "title": "Tour Guide",
            "preferredLanguage": "en-US",
            "locale": "en-US",
            "timezone": "America/Los_Angeles",
            "active":true,
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
                 "employeeNumber": "701984",
                 "costCenter": "4130",
                 "organization": "Universal Studios",
                 "division": "Theme Park",
                 "department": "Tour Operations",
                 "manager": {
                     "value": "89607",
                     "displayName": "John Smith"
                 }
            },
            "urn:ietf:params:scim:schemas:extension:contoso:1.0:User": {
                "unitpath": "AA本部/BB部/CC課/DDグループ"
            }
        }
    }
],
    "failOnErrors": null
}

⑥ プロビジョニングのトップページから [プロビジョニングログ] を開き、ジョブが成功していることを確認する
⑦ 該当ジョブの [概要] タブから、“ターゲットID” を控える

⑧ Graph Explorer で以下の内容を実行し、カスタム属性が入力された状態で作成されていることを確認する

Tips:Graph API バージョン違いによる Get User の取得属性

Graph API BetaではGet Userでディレクトリ拡張も標準で返してくれるようになっています
(ver1.0では返してくれないので、地味に嬉しいアップデートとなっています)

GET <https://graph.microsoft.com/beta/users/><ターゲットID>

おわりに

いかがだったでしょうか?

今回は、SCIM でのユーザー作成とカスタム属性の同期について解説しました。カスタム属性を活用することで、より柔軟な人事ドリブンのID管理が実現可能になります。この記事が皆様のEntra ID運用の一助となれば幸いです。ではまた!

参考

  • Entra ID の属性拡張と機能対応表
  • ディレクトリ拡張
  • API 駆動型インバウンドプロビジョニング – チュートリアル
  • Graph Explorer を使用した API 駆動インバウンド プロビジョニングの動作テスト
  • カスタム属性の同期

すかんく

2022/1 入社、Identity チームのすかんくと申します。
ブログでは IdP 関連の機能紹介を中心に記載していこうと思います。
好きな漫画はアイシールド21・ハイキュー・ベイビーステップです。