このドキュメントでは、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)を構成するには、次の操作を行います。
Google Cloudで SCIM テナントとトークンを構成する
Google Cloudで SCIM テナントを構成する手順は次のとおりです。
-
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.displayNameSCIM テナントでマッピングする
google.subject属性は、--attribute-mappingフラグを使用して、Workforce Identity プール プロバイダのgoogle.subject属性でマッピングされる同じ ID を一意に参照する必要があります。SCIM テナントの作成後に、クレーム マッピングを更新することはできません。置き換えるには、SCIM テナントを完全に削除して、すぐに新しいテナントを作成します。SCIM を使用する際の考慮事項の詳細については、SCIM のサポートをご覧ください。
-
コマンドが完了したら、次の操作を行います。
-
出力の
baseUriフィールドに、https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID形式の URI 全体を保存します。この URI を IdP に提供する必要があります。 -
または、URI から
SCIM_TENANT_UIDのみを保存します。この UID は、このドキュメントで後述する SCIM テナントに IAM 許可ポリシーを設定するために必要です。
-
出力の
-
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 トークンの IDDISPLAY_NAME: SCIM トークンの表示名WORKFORCE_POOL_ID: Workforce プールの IDSCIM_TENANT_ID: SCIM テナントの IDPROVIDER_ID: Workload Identity プール プロバイダの ID
-
gcloud iam workforce-pools providers scim-tenants tokens createコマンドが完了したら、次の操作を行います。-
出力で、
SCIM_TOKENの値をsecurityTokenフィールドに保存します。このセキュリティ トークンを IdP に提供する必要があります。セキュリティ トークンはこの出力にのみ表示されます。紛失した場合は、新しい SCIM トークンを作成する必要があります。 -
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を実行します。コマンドが成功した場合は、その手順をスキップできます。
-
-
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 アプリケーションで次の操作を行います。
- Okta 管理コンソールにログインします。
- [Applications] > [Applications] に移動します。
アプリケーションを選択または作成します。
既存のアプリケーションを選択する場合は、次の操作を行います。
- Google Cloud Workforce Identity 連携テンプレートを使用して作成したアプリケーションの名前をクリックします。
-
[全般] タブで、次の操作を行います。
- [アプリの設定] ペインで、[編集] をクリックします。
- [テナント] フィールドに、gcloud CLI から取得したテナント ID を入力します。
- [完了] をクリックします。
新しいアプリケーションを作成するには、次の操作を行います。
- [Browse App Catalog] をクリックします。
- [検索] フィールドに「Google Cloud Workforce Identity 連携」と入力し、結果から [Google Cloud Workforce Identity 連携] インテグレーションを選択します。
[統合を追加] をクリックします。
- [アプリケーション] フィールドに、アプリの名前を入力します。
- [テナント] フィールドに、gcloud CLI から取得したテナント ID を入力します。
- [完了] をクリックします。
-
[プロビジョニング] タブで、次の操作を行います。
[統合] ペインで、[編集] をクリックします。
- [API トークン] フィールドに、 Google Cloudから取得した SCIM トークンを入力します。
- API トークンの有効性を確認するには、[認証情報をテスト] をクリックします。
- [グループをインポート] を選択します。
- [保存] をクリックします。
[To App] ペインで、[Edit] をクリックします。
- [ユーザーの作成]、[ユーザー属性の更新]、[ユーザーの無効化] を選択します。
- [保存] をクリックします。
プロバイダを更新して SCIM を有効にする
プロバイダの SCIM を有効にするには、プロダクトのターゲットに基づいて --scim-usage フラグを設定します。
-
グループで有効(
enabled-for-groups): Gemini Enterprise で使用されます。IAM の承認とポリシー評価に SCIM 同期グループを使用します。ユーザー属性は引き続き IdP ログイン トークンから取得されます。 -
ユーザーとグループに対して有効(
enabled-for-users-groups): Looker(プレビュー)で使用されます。SCIM で同期されたユーザーデータとグループデータを、IAM 認証と OAuth ログイン ワークフローのクレームの主なソースとして使用します。
グループの 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 プール プロバイダの IDWORKFORCE_POOL_ID: Workforce プールの IDLOCATION: 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 プール プロバイダの IDWORKFORCE_POOL_ID: Workforce プールの IDLOCATION: 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 プール プロバイダの IDWORKFORCE_POOL_ID: Workforce プールの IDLOCATION: 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 プール プロバイダの IDWORKFORCE_POOL_ID: Workforce プールの IDLOCATION: Workforce プールのロケーション
SCIM 同期を確認するには、SCIM 同期を確認するをご覧ください。
クレーム マッピング
SCIM を構成するときに、SCIM ユーザーとグループの属性を Google 属性にマッピングするクレーム マッピング(--claim-mapping)を SCIM テナントで定義します。
クレーム マッピングでサポートされている Google Cloud 属性
次の表に、Common Expression Language(CEL)を使用して SCIM テナント(--claim-mapping)でマッピングできる Google Cloud 属性を示します。
| Google Cloud 属性 | 要件 | 説明 | サポートされている式と上限 |
|---|---|---|---|
google.subject |
必須 |
認証ユーザーの固有識別子。
|
次の基本式(または .lowerAscii() を使用)に制限されます。
最大長: 127 バイト。 注: このマッピングは、SCIM テナントの作成後に変更できません。更新するには、SCIM テナントを完全に削除して再作成する必要があります。 |
google.group |
SCIM グループでは必須 | SCIM を使用して同期されたグループ メンバーシップの固有識別子。 | 次の基本式(または .lowerAscii() を使用)に制限されます。
注: このマッピングは、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 は、使用する属性名に置き換えます。 たとえば、 |
最大 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_ID と USER_ID を取得するには、まず displayName フィルタと userName フィルタを使用してグループとユーザーを見つけます。ID はレスポンスの id フィールドに返されます。SCIM_TOKEN、SCIM_TENANT_UID、USER_NAME、GROUP_NAME、GROUP_ID、USER_ID は、実際の値に置き換えます。
SCIM テナントを強制削除する
SCIM テナントを強制削除する手順は次のとおりです。
- プロバイダに
--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 プール プロバイダの IDWORKFORCE_POOL_ID: Workforce プールの IDLOCATION: Workforce プールのロケーション
- 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 テナントの IDWORKFORCE_POOL_ID: Workforce プールの IDPROVIDER_ID: Workload Identity プール プロバイダの ID
次のステップ
- SCIM プロビジョニングのトラブルシューティング
- Workforce Identity 連携ユーザーとそのデータを削除する
- Workforce Identity 連携をサポートする Google Cloud プロダクトを確認する
- コンソール(連携)へのユーザー アクセスを設定する