ID プロバイダ(IdP)が System for Cross-domain Identity Management(SCIM)をサポートしている場合は、 Google Cloudでユーザーとグループをプロビジョニングして管理するように構成できます。
機能
Workforce Identity 連携の SCIM サポートは、次の機能を提供します。
- ID の同期: 外部 IdP のユーザーとグループを Google Cloud に同期し、ワークフォース ID の全体像を維持します。
- クレームの主なソース: ワークフォース プロバイダで SCIM が有効になっている場合、 Google Cloud は、同期された SCIM ユーザーとグループを、IAM ポリシー評価のユーザー属性とグループ メンバーシップの両方の信頼できる情報源として使用します。
- ID の自動補完: Gemini Enterprise でアクセス権を付与したり、リソース(ノートブックやエージェントなど)を共有したりするときに、ユーザーとグループの自動補完を有効にします。
考慮事項
Workforce Identity 連携の SCIM サポートを使用する場合は、次の点に注意してください。
- SCIM テナントを構成する前に、Workforce Identity プールとプロバイダを設定する必要があります。
- 各 Workforce Identity プールは、1 つのプロバイダにリンクされた 1 つの SCIM テナントのみをサポートします。同じプール内の他のプロバイダで SCIM の使用(
--scim-usage)を有効にすることはできません。同じ Workforce Identity プールで新しい SCIM テナントを構成するには、まず既存のテナントを削除する必要があります。SCIM テナントを削除するには、次のいずれかの方法を使用します。- 削除(復元可能)(デフォルト): SCIM テナントを削除すると、30 日間の削除(復元可能)期間が開始されます。この間、当該テナントは非表示になり、使用できなくなります。また、同じ Workforce Identity プールに新しい SCIM テナントを作成することもできません。
- 削除(復元不可): SCIM テナントを直ちに完全に削除するには、
--hard-deleteフラグを指定して削除コマンドを実行します。この操作は元に戻すことができません。30 日間の保持期間を待たずに、同じ Workforce Identity プールに新しい SCIM テナントをすぐに作成できます。あるいは、新しい Workforce Identity プールを作成して新しい SCIM テナントを追加することも、以前に SCIM テナントが構成されていない Workforce Identity プールを使用することもできます。
- SCIM 使用モード(
--scim-usage):enabled-for-groups(Gemini Enterprise): IAM 認証とポリシー評価に SCIM 同期グループを使用します。ユーザー属性は引き続きログイン トークンから取得されます。google.subjectとgoogle.groupのマッピングのみが評価されます。enabled-for-users-groups(Looker)(プレビュー): SCIM 同期されたユーザーとグループのデータを、IAM 認可と OAuth ログイン ワークフローのクレームのソースとして使用します。google.subject、google.group、構成されているすべてのユーザー クレーム(google.display_name、google.profile_photo、google.email、google.posix_username、カスタムattribute.KEYなど)を評価します。
- 相互排他性:
--scim-usage=enabled-for-users-groups(プレビュー)の設定は、追加属性(extra_attributes_oauth2_client)および拡張属性(extended_attributes_oauth2_client)と相互に排他的です。 - SCIM を使用する場合は、Workforce Identity プール プロバイダと SCIM テナントの両方で属性をマッピングします。
google.subject属性では、同じ ID を一意に参照する必要があります。google.subjectは、Workforce Identity プール プロバイダでは--attribute-mappingフラグ、SCIM テナントでは--claim-mappingフラグを使用して指定します。一意でない ID 値をマッピングすると、 Google Cloud で異なる IdP ID が同じ ID として扱われる可能性があります。その結果、1 つのユーザーまたはグループ ID に付与されたアクセス権が他の ID にも適用される可能性がありますが、1 つの ID のアクセス権を取り消しても、すべての ID のアクセス権が取り消されない可能性があります。 - SCIM テナントが関連付けられていないプロバイダで SCIM の使用を有効にすると、 Google Cloud がそのプロバイダの SCIM テナントを見つけられないため、ログイン試行は失敗します。
- 一意性の適用: Google Cloud は、SCIM テナントの
google.subject(ユーザー)とgoogle.group(グループ)にマッピングされた属性の一意性を検証して適用します。IdP によってプロビジョニングされたマッピングされた属性が、同期中にgoogle.subjectまたはgoogle.groupの重複した値になる場合、プロビジョニングは失敗し、HTTP409 Conflictエラーが発生します。マッピングされた属性が null または空と評価されると、プロビジョニングは HTTP400 Bad Requestエラーで失敗します。 - 属性サイズの制限: シリアル化されたマッピング済みユーザー属性(
google.groupを除く)の最大サイズは 16 KB です。マッピングされた属性がこの上限を超えると、ログイン試行は失敗します。 - SCIM トークンの上限: 各 SCIM テナントは、最大 2 つの SCIM トークンをサポートします(たとえば、ダウンタイムなしのトークン ローテーションをサポートするため)。トークンが 2 つある場合は、新しいトークンを作成する前に既存のトークンを削除します。
- SCIM API(
iamscim.googleapis.com)には、標準の IAM リソース API の割り当てとは異なるレート割り当てが適用されます。デフォルトでは、書き込みリクエストと読み取りリクエストは、組織ごとに 1 分あたり 3,000 リクエストに制限されます。詳細については、割り当てと上限をご覧ください。
クレーム マッピング
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 文字。 |
プロバイダの SCIM 使用状況に基づく動作(--scim-usage)
SCIM クレーム マッピングの評価は、Workforce Identity プール プロバイダで構成された --scim-usage モードによって異なります。
enabled-for-groups(Gemini Enterprise):google.subjectマッピングとgoogle.groupマッピングのみが評価されます。--claim-mapping内の追加のユーザー クレーム マッピングは無視されます。enabled-for-users-groups(Looker)(プレビュー):google.subject、google.group、および構成されたすべてのユーザー クレーム(google.display_name、google.profile_photo、google.email、google.posix_username、カスタムattribute.<var>KEY</var>など)を評価します。
件名の整合性のマッピングの例
クレーム マッピングでサポートされている属性で説明したように、google.subject の入力に使用される基盤となる IdP 属性は、プロバイダ マッピング(--attribute-mapping)と SCIM テナント(--claim-mapping)の両方で同じである必要があります。次の表に、リファレンス例を示します。
| Google の属性 | Workforce Identity プール プロバイダのマッピング | SCIM テナントのマッピング(SCIM) |
|---|---|---|
google.subject |
assertion.oid(Entra ID) |
user.externalId |
google.subject |
assertion.sub(Okta) |
user.externalId |
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 プロトコル エンドポイントがサポートされています。
/Users: ユーザー リソースを管理します。サポートされているオペレーション:Create、Get、Update、Delete、Patch、Put。/Groups: グループ リソースを管理します。サポートされているオペレーション:Create、Get、Update、Delete、Patch。PUTメソッドはグループではサポートされていません。/Schemas: スキーマ情報を取得します。/ServiceProviderConfig: サービス提供者の構成を取得します。
次の SCIM プロトコル エンドポイントはサポートされていません。
/Me/Bulk/Search/ResourceTypes
制限事項
以降のセクションでは、Workforce Identity 連携の SCIM 実装の制限事項と、SCIM 仕様(RFC 7643 と 7644)からの逸脱について説明します。
プロトコル機能の制限事項
フィルタのサポート:
/Usersエンドポイントまたは/Groupsエンドポイントを使用してユーザーまたはグループを一覧表示する場合、フィルタ式ではeq(等号)演算子のみがサポートされます。複数のeqフィルタはandと組み合わせることができます。co(次を含む)やsw(次から始まる)などの他の SCIM フィルタ演算子はサポートされていません。ページネーション: IAM SCIM API は、ユーザーまたはグループのリストの標準ページネーションをサポートしていません。
startIndex: このパラメータは常に1です。startIndexに指定した値に関係なく、API は最大 100 件の結果を返します。itemsPerPage: 1 回のレスポンスで返されるリソースの最大数は 100 です。totalResults: API は、一致するリソースの実際の合計数を返しません。レスポンスのtotalResultsフィールドは、そのレスポンスで返されるアイテムの数と常に等しくなります(最大 100)。
フィルタなしでグループを取得してグループを一覧表示する:
GetGroupAPI とListGroupsAPI は空のメンバー リストを返します。特定のグループのメンバーを取得するには、メンバー フィルタを使用してListGroupsAPI を使用します。無効なトークンを含む準拠していない JSON レスポンス: 無効な API トークンを含むリクエストは、 Google Cloudから
HTTP 401ステータス コードを返します。レスポンスは、SCIM 仕様で要求されている有効な JSON ではありません。
SCIM の動作に関する制限事項
不変の識別子:
google.subjectまたはgoogle.groupにマッピングされた SCIM 属性の値は、 Google Cloud内で不変の識別子として扱われます。これらの値を変更する必要がある場合は、IdP からユーザーまたはグループを完全に削除してから、新しい値で再作成する必要があります。一意で空でない識別子: Google Cloud は、SCIM テナントの
google.subjectとgoogle.groupにマッピングされた値の一意性を適用します。google.subjectまたはgoogle.groupの値が重複するマッピングされた属性を同期すると、HTTP409 Conflictエラーが発生して失敗します。null または空の値に評価されるマッピングされた属性は、HTTP400 Bad Requestエラーで失敗します。単一のメールアドレスの要件: SCIM 同期を成功させるには、各ユーザーに
workタイプのメールアドレスが 1 つだけ必要です。IdP が複数のメールを送信した場合や、指定された単一のメールがworkタイプでない場合、プロビジョニングまたは更新は失敗します。大文字と小文字を区別しない変換: SCIM クレーム マッピングでは、限定的な Common Expression Language(CEL)変換がサポートされています。
user.userNameとuser.emails[0].valueの大文字と小文字を区別しない比較では、.lowerAscii()のみがサポートされます。
属性の制限事項
以降のセクションでは、ユーザー、グループ、エンタープライズ ユーザー スキーマ拡張機能の属性サポートについて説明します。
ユーザー属性
次の表に、ユーザー属性と、Workforce Identity 連携のクレームでの可用性を示します。
| 属性 | サブ属性 | SCIM プロビジョニングでサポートされている | 制限事項 | --claim-mapping でサポート |
|---|---|---|---|---|
userName |
なし | ○ | 該当なし | ○ |
name |
formatted、familyName、givenName、middleName、honorificPrefix、honorificSuffix |
○ | 該当なし | ○ |
displayName |
該当なし | ○ | 該当なし | ○ |
nickName |
該当なし | ○ | 該当なし | ○ |
profileUrl |
該当なし | ○ | 該当なし | ○ |
title |
該当なし | ○ | 該当なし | ○ |
userType |
該当なし | ○ | 該当なし | ○ |
preferredLanguage |
該当なし | ○ | 該当なし | ○ |
locale |
該当なし | ○ | 該当なし | ○ |
timezone |
該当なし | ○ | 該当なし | ○ |
active |
該当なし | ○ | 該当なし | ○ |
password |
なし | いいえ | なし | × |
emails |
display、type、value、primary |
○ | work メールタイプのみがサポートされています。 |
○ |
phoneNumbers |
display、type、value、primary |
○ | 該当なし | ○ |
ims |
display、type、value |
○ | 該当なし | ○ |
photos |
display、type、value |
○ | 該当なし | ○ |
addresses |
formatted、streetAddress、locality、region、postalCode、country |
○ | 該当なし | ○ |
groups |
なし | いいえ | なし | × |
entitlements |
display、type、value |
○ | 該当なし | ○ |
roles |
type、value |
○ | display はサポートされていません。 |
○ |
x509Certificates |
type、value |
○ | display はサポートされていません。 |
× |
グループ属性
次の表に、グループ属性と、Workforce Identity 連携のクレームでの可用性を示します。
| 属性 | サポートされているサブ属性 | --claim-mapping でサポート |
|---|---|---|
displayName |
なし | ○ |
externalId |
該当なし | ○ |
members |
value、type、$ref、display |
× |
エンタープライズ ユーザー スキーマの拡張属性
次の表に、エンタープライズ ユーザー スキーマ拡張機能のサポートの詳細を示します。
| 属性 | サポートされているサブ属性 | --claim-mapping でサポート |
|---|---|---|
employeeNumber |
なし | ○ |
costCenter |
該当なし | ○ |
organization |
該当なし | ○ |
division |
該当なし | ○ |
department |
該当なし | ○ |
manager |
value、$ref、displayName |
はい($ref は SCIM プロビジョニングでのみサポートされ、--claim-mapping ではサポートされません) |