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

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

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

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

IdP が、google.subject と google.group にマッピングされた属性に一意の空でない値を指定していることを確認します。重複する値の同期は HTTP 409 Conflict エラーで失敗し、null 値または空の値の同期は HTTP 400 Bad Request エラーで失敗します。詳細については、SCIM のサポートをご覧ください。

System for Cross-domain Identity Management(SCIM)を構成するには、次の操作を行います。

  1. Google Cloudで SCIM テナントとトークンを構成する
  2. OIDC または SAML IdP で SCIM を構成する
  3. プロバイダを更新して SCIM を有効にする
  4. SCIM 同期を確認する

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

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: 属性マッピングのカンマ区切りリスト。マッピング属性の拡張リストについては、クレーム マッピングをご覧ください。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 の詳細については、グループをご覧ください。

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

プロバイダの SCIM を有効にするには、プロダクトのターゲットに基づいて --scim-usage フラグを設定します。

グループの SCIM を有効にする(Gemini Enterprise)

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 を有効にする(Looker)(プレビュー)

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-users-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-users-groups
    

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

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

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

クレーム マッピング

SCIM を構成するときに、SCIM ユーザーとグループの属性を Google 属性にマッピングするクレーム マッピング(--claim-mapping)を SCIM テナントで定義します。

クレーム マッピングでサポートされている Google Cloud 属性

次の表に、Common Expression Language(CEL)を使用して SCIM テナント(--claim-mapping)でマッピングできる Google Cloud 属性を示します。

Google Cloud 属性 要件 説明 サポートされている式と上限
google.subject 必須

認証ユーザーの固有識別子。

google.subject の入力に使用される基盤となる IdP 属性は、プロバイダ マッピング(--attribute-mapping)と SCIM テナント(--claim-mapping)の両方で同じである必要があります。これらのマッピングに一貫性がない場合、ユーザーはログインできる可能性がありますが、SCIM プロビジョニング グループのメンバーとして認識されません。

次の基本式(または .lowerAscii() を使用)に制限されます。
  • user.externalId
  • user.userName
  • user.emails[0].value

最大長: 127 バイト。

注: このマッピングは、SCIM テナントの作成後に変更できません。更新するには、SCIM テナントを完全に削除して再作成する必要があります。

google.group SCIM グループでは必須 SCIM を使用して同期されたグループ メンバーシップの固有識別子。 次の基本式(または .lowerAscii() を使用)に制限されます。
  • group.externalId
  • group.displayName

注: このマッピングは、SCIM テナントの作成後に変更できません。更新するには、SCIM テナントを完全に削除して再作成する必要があります。

google.display_name 省略可 Google Cloud コンソールでログイン ユーザーの名前を設定する属性。IAM 許可ポリシーでは使用できません。 文字列属性(user.displayName や user.name.formatted など)にマッピングされます。最大長: 100 バイト。
google.profile_photo 省略可 Google Cloud コンソールにプロフィール写真として表示されるユーザーのサムネイル写真の URL。IAM 許可ポリシーでは使用できません。 有効な URL 文字列(user.photos.filter(p, p.type == 'thumbnail')[0].value や user.photos[0].value など)に評価される必要があります。
google.email 省略可 IdP から Workforce Identity 連携 OAuth クライアント統合を使用して統合されたプロダクトにメールアドレスをマッピングするために使用される属性。IAM 許可ポリシーでは使用できません。 メール属性(user.emails.filter(e, e.type == 'work')[0].value や user.emails[0].value など)にマッピングされます。
google.posix_username 省略可 ブラウザでの SSH と Workforce Identity 連携の OS Login で使用される POSIX 準拠の一意のユーザー名文字列。この属性は、IAM の許可ポリシーでは使用できません。 最大 32 文字までです。
attribute.KEY 省略可

IAM 許可ポリシーで認証戦略を定義するために使用できる IdP のカスタム属性。KEY は、使用する属性名に置き換えます。

たとえば、costcenter = "1234" などのカスタム属性を定義し、principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.costcenter/1234 を使用して参照できます。このプリンシパル ID にアクセス権を付与すると、その費用センターで IdP に構成されているすべての ID にアクセス権が付与されます。

最大 50 個のカスタム属性マッピング ルール。ルールあたりの最大サイズ: 256 文字。

件名の整合性のためのマッピングの例

クレーム マッピングでサポートされている属性で説明したように、google.subject の入力に使用される基盤となる IdP 属性は、プロバイダ マッピング(--attribute-mapping)と SCIM テナント(--claim-mapping)の両方で同じである必要があります。次の表に、OIDC または SAML IdP の参照例を示します。

Google の属性 Workforce Identity プール プロバイダのマッピング SCIM テナントのマッピング

SCIM 同期を確認する

SCIM を構成したら、curl を使用して IAM SCIM サービス エンドポイント(iamscim.googleapis.com)をクエリし、ユーザーとグループが Google Cloudに同期していることを確認できます。これらのコマンドには、有効な SCIM トークンと SCIM テナント UID が必要です。iamscim.googleapis.com サービスは、SCIM 2.0 プロトコル(RFC 7644)を実装します。サポートされているエンドポイント、クエリフィルタ、制限事項の詳細については、サポートされているエンドポイントとサポートされていないエンドポイントとプロトコルの機能の制限事項をご覧ください。

ユーザー同期を確認する

ユーザーが正しく同期したことを確認するには、次のフィルタを使用してユーザーの 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_ID と USER_ID を取得するには、まず displayName フィルタと userName フィルタを使用してグループとユーザーを見つけます。ID はレスポンスの id フィールドに返されます。SCIM_TOKEN、SCIM_TENANT_UID、USER_NAME、GROUP_NAME、GROUP_ID、USER_ID は、実際の値に置き換えます。

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

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

  1. プロバイダに --scim-usage=enabled-for-groups または --scim-usage=enabled-for-users-groups が設定されている場合は、プロバイダの構成から無効にします。

    OIDC

    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 プールのロケーション

    SAML

    gcloud iam workforce-pools providers update-saml 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 のサポートをご覧ください。

次のステップ