OIDC または SAML IdP で 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. OIDC または SAML IdP で 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 の詳細については、グループをご覧ください。

OIDC または SAML IdP で SCIM を構成する

IdP のドキュメントの説明に従って IdP で SCIM を構成します。前の手順で取得した SCIM URL と SCIM トークンを使用します。

プロバイダを更新して 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.sub user.externalId
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=PROVIDER_ID \
              --workforce-pool=WORKFORCE_POOL_ID \
              --location= global
              --scim-usage=SCIM_USAGE_UNSPECIFIED
            

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

    • PROVIDER_ID: Workload Identity プール プロバイダの ID
    • WORKFORCE_POOL_ID: Workforce プールの ID

  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 のサポートをご覧ください。

次のステップ