Okta で SCIM を構成する

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

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

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

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

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

  1. Google Cloudで SCIM テナントとトークンを構成する
  2. Okta で 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.displayName

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

Okta で SCIM を構成する

Okta で SCIM を構成するには、既存の Okta アプリケーションで次の操作を行います。

  1. Okta 管理コンソールにログインします。
  2. [Applications] > [Applications] に移動します。
  3. アプリケーションを選択または作成します。

    • 既存のアプリケーションを選択する場合は、次の操作を行います。

      1. Google Cloud Workforce Identity 連携テンプレートを使用して作成したアプリケーションの名前をクリックします。
      2. [全般] タブで、次の操作を行います。

        1. [アプリの設定] ペインで、[編集] をクリックします。
        2. [テナント] フィールドに、gcloud CLI から取得したテナント ID を入力します。
        3. [完了] をクリックします。
    • 新しいアプリケーションを作成するには、次の操作を行います。

      1. [Browse App Catalog] をクリックします。
      2. [検索] フィールドに「Google Cloud Workforce Identity 連携」と入力し、結果から [Google Cloud Workforce Identity 連携] インテグレーションを選択します。
      3. [統合を追加] をクリックします。

        1. [アプリケーション] フィールドに、アプリの名前を入力します。
        2. [テナント] フィールドに、gcloud CLI から取得したテナント ID を入力します。
        3. [完了] をクリックします。
  4. [プロビジョニング] タブで、次の操作を行います。

    1. [統合] ペインで、[編集] をクリックします。

      1. [API トークン] フィールドに、 Google Cloudから取得した SCIM トークンを入力します。
      2. API トークンの有効性を確認するには、[認証情報をテスト] をクリックします。
      3. [グループをインポート] を選択します。
      4. [保存] をクリックします。
    2. [To App] ペインで、[Edit] をクリックします。

      1. [ユーザーの作成]、[ユーザー属性の更新]、[ユーザーの無効化] を選択します。
      2. [保存] をクリックします。

プロバイダを更新して 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.displayNameuser.name.formatted など)にマッピングされます。最大長: 100 バイト。
google.profile_photo 省略可 Google Cloud コンソールにプロフィール写真として表示されるユーザーのサムネイル写真の URL。IAM 許可ポリシーでは使用できません。 有効な URL 文字列(user.photos.filter(p, p.type == 'thumbnail')[0].valueuser.photos[0].value など)に評価される必要があります。
google.email 省略可 IdP から Workforce Identity 連携 OAuth クライアント統合を使用して統合されたプロダクトにメールアドレスをマッピングするために使用される属性。IAM 許可ポリシーでは使用できません。 メール属性(user.emails.filter(e, e.type == 'work')[0].valueuser.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)の両方で同じである必要があります。次の表に、Okta のリファレンス例を示します。

Google の属性 Workforce Identity プール プロバイダのマッピング SCIM テナントのマッピング
google.subject assertion.sub user.externalId
google.subject assertion.subject user.userName
google.subject assertion.subject.lowerAscii() user.userName.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.email user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()

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 または --scim-usage=enabled-for-users-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 のサポートをご覧ください。

次のステップ