Okta で 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. 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: 属性マッピングのカンマ区切りリスト。マッピング属性の拡張リストについては、トークンと SCIM 属性をマッピングするをご覧ください。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. [アプリのカタログを参照] をクリックします。
      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 を有効にするには、次の操作を行います。

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.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()
google.group プロバイダが --scim-usage=enabled-for-groups で更新されていることを確認します N/A group.displayName

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

次のステップ