Microsoft Entra ID で SCIM を構成する

このドキュメントでは、Workforce Identity プールで SCIM テナントを構成する方法について説明します。SCIM の詳細については、Workforce Identity 連携の SCIM プロビジョニングをご覧ください。

各 Workforce Identity プールで 1 つの SCIM テナントのみがサポートされます。すでに SCIM テナントが存在するプールに新しい SCIM テナントを構成するには、まず既存のテナントを完全に削除する必要があります。

SCIM テナントの --claim-mapping フラグに使用できるのは、特定の Common Expression Language(CEL)式のみです。サポートされている式については、トークンと SCIM 属性をマッピングするをご覧ください。

System for Cross-domain Identity Management(SCIM)を構成する手順は次のとおりです。
  1. で SCIM テナントとトークンを構成する Google Cloud
  2. Microsoft Entra ID で SCIM を構成する
  3. プロバイダを更新して SCIM を有効にする
  4. SCIM 同期を確認する

で SCIM テナントとトークンを構成する Google Cloud

Google Cloudで SCIM テナントを構成する手順は次のとおりです。

  1. SCIM テナントを作成します。

        gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --provider="PROVIDER_ID" \
            --display-name="SCIM_TENANT_DISPLAY_NAME" \
            --description="SCIM_TENANT_DESCRIPTION" \
            --claim-mapping="CLAIM_MAPPING" \
            --location="global"
        

    次のように置き換えます。

    • SCIM_TENANT_ID: SCIM テナントの ID。
    • WORKFORCE_POOL_ID: このドキュメントで作成した Workforce プールの ID。
    • PROVIDER_ID: このドキュメントで作成した Workforce Identity プール プロバイダの ID。
    • SCIM_TENANT_DISPLAY_NAME: SCIM テナントの表示名。
    • SCIM_TENANT_DESCRIPTION: SCIM テナントの説明。
    • CLAIM_MAPPING: 属性マッピングのカンマ区切りのリスト。マッピング属性の拡張リストについては、トークンと SCIM 属性をマッピングするをご覧ください。Gemini Enterprise では、次のマッピングをおすすめします。
      google.subject=user.emails[0].value.lowerAscii(),google.group=group.externalId

      SCIM テナントでマッピングする google.subject 属性は、--attribute-mapping フラグを使用して、Workforce Identity プール プロバイダの google.subject 属性でマッピングされる同じ ID を一意に参照する必要があります。 SCIM テナントの作成後に、クレーム マッピングを更新することはできません。置き換えるには、SCIM テナントを完全に削除して、すぐに新しいテナントを作成します。SCIM を使用する際の考慮事項の詳細については、SCIM のサポートをご覧ください。

  2. コマンドが完了したら、次の操作を行います。

    1. 出力の baseUri フィールドに、https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID 形式の URI 全体を保存します。この URI を IdP に提供する必要があります。
    2. または、URI から SCIM_TENANT_UID のみを保存します。 この UID は、このドキュメントで後述する SCIM テナントに IAM 許可ポリシーを設定するために必要です。
  3. SCIM トークンを作成します。

        gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \
            --display-name DISPLAY_NAME \
            --scim-tenant SCIM_TENANT_ID \
            --workforce-pool WORKFORCE_POOL_ID \
            --provider PROVIDER_ID \
            --location global
        

    次のように置き換えます。

    • SCIM_TOKEN_ID: SCIM トークンの ID
    • DISPLAY_NAME: SCIM トークンの表示名
    • WORKFORCE_POOL_ID: Workforce プールの ID
    • SCIM_TENANT_ID: SCIM テナントの ID
    • PROVIDER_ID: Workload Identity プール プロバイダの ID
  4. gcloud iam workforce-pools providers scim-tenants tokens create コマンドが完了したら、次の操作を行います。

    1. 出力で、SCIM_TOKEN の値を securityToken フィールドに保存します。このセキュリティ トークンを IdP に提供する必要があります。セキュリティ トークンはこの出力にのみ表示されます。 紛失した場合は、新しい SCIM トークンを作成する必要があります。

    2. SCIM_TOKEN が組織のポリシーによって拒否されているかどうかを確認するには、次のコマンドを実行します。

      curl -v -H "Authorization: Bearer SCIM_TOKEN"  https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users

      コマンドが権限関連のエラーで失敗した場合は、後のステップで説明する gcloud organizations add-iam-policy-binding コマンドを実行します。コマンドが成功した場合は、そのステップをスキップできます。

  5. SCIM テナントとトークンに IAM 許可ポリシーを設定します。前の手順の curl コマンド が権限関連のエラーで失敗した場合は、次のコマンドを実行する必要があります。

        gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
            --member=serviceAccount:SERVICE_AGENT_EMAIL \
            --role roles/iam.scimSyncer
        

    次のように置き換えます。

    • ORGANIZATION_ID: 組織の ID。
    • SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。メールアドレスは o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com の形式で指定します。SCIM_TENANT_UID は、SCIM テナントの作成時に返されます。

IdP でグループをプロビジョニングする場合は、displayName フィールドで指定された各グループの表示名が SCIM テナント内で一意であることを確認してください。Microsoft Entra ID のグループと SCIM の詳細については、グループをご覧ください。

Microsoft Entra ID で SCIM を構成する

Microsoft Entra ID で SCIM を構成するには、次の操作を行います。

  1. Azure Portal を開き、グローバル管理者権限を持つユーザーとしてログインします。
  2. [Microsoft Entra ID] > [Enterprise アプリ] の順に選択します。
  3. [新しいアプリケーション] をクリックします。
  4. [Microsoft Entra ギャラリーを参照する] で、[独自のアプリケーションの作成] をクリックします。
  5. 表示された [独自のアプリケーションの作成] パネルで、次の操作を行います。
    1. [お使いのアプリの名前はなんですか?] に、アプリの名前を入力します。
    2. [ギャラリーに見つからないその他のアプリケーションを統合します(ギャラリー以外)] を選択します。
    3. アプリを作成するには、[作成] をクリックします。
  6. アプリケーションで、次の操作を行います。
    1. [管理] セクションで [プロビジョニング] をクリックします。
    2. 右側に表示されるペインで、[新しい構成] をクリックします。
    3. [管理者資格情報] の [テナントの URL] に、SCIM テナントの作成時に取得した SCIM URL に ?aadOptscim062020 を追加して入力します。 ベース URI の末尾に ?aadOptscim062020 を追加する必要があります。

      このクエリ パラメータは、Microsoft Entra ID で必須とされており、SCIM PATCH リクエストが SCIM RFC 規格に準拠していることを確認します。詳しくは、 Microsoft のドキュメントをご覧ください

      最終的に、Microsoft Entra ID のテナント URL は、次の形式にする必要があります。

      https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID?aadOptscim062020

      SCIM_TENANT_UID を SCIM テナント UID に置き換えます。

    4. [**シークレット トークン**] に、SCIM トークンの作成時に取得したシークレット トークンを入力します。
    5. Workforce Identity 連携で SCIM 構成をテストするには、 [Test connection] をクリックします。
    6. 構成を保存するには、[作成] をクリックします。
  7. [管理] セクションで、次の操作を行います。
    1. [属性マッピング] をクリックします。
    2. [Provision Microsoft Entra ID Users] をクリックします。
    3. [属性マッピング] ページで、次の操作を行います。
      1. [属性マッピング] テーブルで、externalId の行を見つけて、その行の [編集] をクリックします。 [属性の編集] ページで、次の操作を行います。
        1. [ソース属性] プルダウン リストで、objectId を選択します。
        2. [OK] をクリックします。
      2. 属性マッピングを保存するには、[保存] をクリックします。

プロバイダを更新して SCIM を有効にする

プロバイダの SCIM を有効にするには、次の操作を行います。

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

次のように置き換えます。

  • PROVIDER_ID: Workload Identity プール プロバイダの ID
  • WORKFORCE_POOL_ID: Workforce プールの ID
  • LOCATION: Workforce プールのロケーション

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

次のように置き換えます。

  • PROVIDER_ID: Workload Identity プール プロバイダの ID
  • WORKFORCE_POOL_ID: Workforce プールの ID
  • LOCATION: Workforce プールのロケーション

SCIM 同期を確認するには、SCIM 同期を確認するをご覧ください。

トークンと SCIM 属性をマッピングする

Workforce Identity プール プロバイダと、プロバイダ用に構成された SCIM テナントの両方で、属性を一貫してマッピングする必要があります。Workforce Identity プール プロバイダには --attribute-mapping フラグを使用し、SCIM テナントには --claim-mapping フラグを使用します。ユーザーの google.subject にマッピングされる IdP 属性は、トークンまたは SCIM マッピングで定義されているかどうかにかかわらず、同じ ID を一意に参照する必要があります。SCIM を使用する際の属性のマッピングの詳細については、SCIM のサポート セクションをご覧ください。 次の表は、トークン クレームの属性と SCIM 属性をマッピングする方法を示しています。

Google の属性 Workforce Identity プール プロバイダのマッピング SCIM テナントのマッピング
google.subject assertion.oid user.externalId
google.subject assertion.attributes['http://schemas.microsoft.com/identity/claims/objectidentifier'][0] user.externalId
google.subject assertion.email user.emails[0].value
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0] user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0].lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0] user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0].lowerAscii() user.userName.lowerAscii()
google.group プロバイダが --scim-usage=enabled-for-groups で更新されていることを確認します N/A group.externalId

SCIM 同期を確認する

SCIM を構成したら、curl を使用して、ユーザーとグループが Google Cloudに正しく同期されていることを確認できます。これらのコマンドには、有効な SCIM トークンと SCIM テナント ID が必要です。

ユーザーの同期を確認する

ユーザーが正しく同期されたことを確認するには、次のフィルタを使用してユーザーの userName を検索します。

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users?filter=userName%20eq%20%22USER_NAME%22"

レスポンスの例:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "USER_ID",
      "userName": "USER_NAME",
      ...
    }
  ]
}

グループの同期を確認する

グループが正しく同期されたことを確認するには、次のフィルタを使用してグループの displayName を検索します。

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=displayName%20eq%20%22GROUP_NAME%22"

レスポンスの例:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

グループ メンバーシップを確認する

特定のユーザーがグループのメンバーであるかどうかを確認するには、グループ ID とユーザー ID の両方を指定するフィルタを使用します。

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=id%20eq%20%22GROUP_ID%22%20and%20members%20eq%20%22USER_ID%22"

ユーザーがメンバーの場合のレスポンスの例:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

ユーザーがメンバーでない場合のレスポンスの例:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 0,
  "Resources": []
}

注: GROUP_IDUSER_ID を取得するには、まず displayName フィルタと userName フィルタを使用してグループとユーザーを検索します。ID はレスポンスの id フィールドに返されます。SCIM_TOKENSCIM_TENANT_UIDUSER_NAMEGROUP_NAMEGROUP_IDUSER_ID は実際の値に置き換えます。

SCIM テナントを強制削除する

SCIM テナントを強制削除する手順は次のとおりです。

  1. プロバイダに --scim-usage=enabled-for-groups が設定されている場合は、プロバイダの構成から無効にします。
              gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
                  --workforce-pool=WORKFORCE_POOL_ID \
                  --location=LOCATION \
                  --scim-usage=SCIM_USAGE_UNSPECIFIED
            

    次のように置き換えます。

    • PROVIDER_ID: Workload Identity プール プロバイダの ID
    • WORKFORCE_POOL_ID: Workforce プールの ID
    • LOCATION: Workforce プールのロケーション

  2. SCIM テナントを削除します。
      gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --provider=PROVIDER_ID \
          --hard-delete \
          --location=global
    

    次のように置き換えます。

    • SCIM_TENANT_ID: 削除する SCIM テナントの ID
    • WORKFORCE_POOL_ID: Workforce プールの ID
    • PROVIDER_ID: Workload Identity プール プロバイダの ID
    SCIM テナントの削除など、SCIM の詳細については、SCIM のサポートをご覧ください。

次のステップ