ID プロバイダ(IdP)が System for Cross-domain Identity Management(SCIM)をサポートしている場合は、 Google Cloudでグループをプロビジョニングして管理するように IdP を構成できます。
機能
Workforce Identity 連携の SCIM サポートは、次の機能を提供します。
ID の同期: IdP からユーザーデータの読み取り専用コピーを同期して、 Google Cloudでユーザーのプロパティとメンバーシップの全体像を把握します。
グループのフラット化: SCIM は IdP からグループを処理し、ユーザーの直接メンバーシップと間接メンバーシップ(ネストされたメンバーシップ)をすべてフラット化してGoogle Cloud グループ メンバーシップ サービス(GMS)に同期します。IAM は、これらのフラット化されたグループをポリシー チェックに使用し、IdP トークンでよく見られるサイズ制限を克服します。
Gemini Enterprise との統合: SCIM テナントは、Gemini Enterprise での共有をサポートしています。SCIM テナントを使用すると、Gemini Notebook Enterprise 内でノートブックを共有する次の 2 つの機能が有効になります。
メールアドレスとグループのオートコンプリート
オブジェクト ID(UUID)ではなくグループ名を使用している
詳細については、ノートブックをグループと共有するをご覧ください。
考慮事項
Workforce Identity 連携の SCIM サポートを使用する場合は、次の点に注意してください。
- SCIM テナントを構成する前に、Workforce Identity プールとプロバイダを設定する必要があります。
- 各 Workforce Identity プールで 1 つの SCIM テナントのみがサポートされます。SCIM テナントは特定の Workforce Identity プール プロバイダの下に作成されるため、そのプロバイダのみがグループに SCIM を使用できます。同じプール内の他のプロバイダで SCIM の使用(
--scim-usage=enabled-for-groupsまたは--scim-usage=enabled-for-users-groups)を有効にすることはできません。同じ Workforce Identity プールで新しい SCIM テナントを構成するには、まず既存のテナントを削除する必要があります。SCIM テナントを削除するには、次のいずれかの方法を使用します。- 削除(復元可能)(デフォルト): SCIM テナントを削除すると、30 日間の削除(復元可能)期間が開始されます。この間、当該テナントは非表示になり、使用できなくなります。また、同じ Workforce Identity プールに新しい SCIM テナントを作成することもできません。
- 削除(復元不可): SCIM テナントを直ちに完全に削除するには、
--hard-deleteフラグを指定して削除コマンドを実行します。この操作は元に戻すことができません。削除の完了後すぐに、同じ Workforce Identity プールに新しい SCIM テナントを作成できます。または、新しい Workforce Identity プールと新しい SCIM テナントを作成するか、以前に SCIM テナントが構成されていない Workforce Identity プールを使用することもできます。
- 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 テナントが関連付けられている Workforce Identity プール プロバイダで
--scim-usage=enabled-for-groups(または--scim-usage=enabled-for-users-groups)を設定します。SCIM を使用してグループをマッピングすると、そのプロバイダで定義されているグループ マッピングは無視され、SCIM で管理されるグループが優先されます。SCIM で管理されているグループを参照するとき、マッピングされた属性はgoogle.groupsではなくgoogle.groupです。google.groupsは、トークンでマッピングされたグループのみを参照します。SCIM テナントが関連付けられていないプロバイダで SCIM の使用を有効にすると、そのプロバイダのパスに SCIM テナントが見つからないため、そのプロバイダを介したログイン試行はランタイムで失敗します。 Google Cloud - 一意性の適用: Google Cloud は、SCIM テナントの
google.subject(ユーザー)とgoogle.group(グループ)にマッピングされた属性の一意性を検証して適用します。IdP によってプロビジョニングされたマッピングされた属性が、同期中にgoogle.subjectまたはgoogle.groupの重複した値になる場合、プロビジョニングは失敗し、HTTP409 Conflictエラーが発生します。マッピングされた属性が null または空の値に評価されると、プロビジョニングは HTTP400 Bad Requestエラーで失敗します。 - SCIM を使用する場合、
--attribute-mappingでマッピングされたトークンベースの属性は、引き続き認証とプリンシパル ID で使用できます。 - Microsoft Entra ID の構成で、Gemini Enterprise で人が読めるグループ名を有効にするには、SCIM を使用します。
- SCIM API(
iamscim.googleapis.com)には、標準の IAM リソース API の割り当てとは異なるレート割り当てが適用されます。デフォルトでは、書き込みリクエストと読み取りリクエストは、組織ごとに 1 分あたり SCIM テナントごとに 3,000 リクエストに制限されます。詳細については、割り当てと上限をご覧ください。
OIDC プロバイダと SAML プロバイダを SCIM 構成にマッピングする
Workforce Identity プール プロバイダ構成(--attribute-mapping)の属性マッピングと SCIM テナント(--claim-mapping)の要求マッピングの間には一貫性が必要です。google.subject(ユーザーの場合)の入力に使用される基盤となる IdP 属性は、トークン要求または SCIM 属性から読み取られるかどうかにかかわらず、同じである必要があります。
これらのマッピングに一貫性がない場合、ユーザーはログインできる可能性がありますが、SCIM プロビジョニングされたグループのメンバーとして認識されません。たとえば、プロバイダが google.subject に assertion.email を使用している場合、SCIM テナントも google.subject に同等の SCIM 属性(user.emails[0].value など)を使用する必要があります。
次の表に、トークン クレーム属性と SCIM 属性のマッピングを示します。
| Google の属性 | Workforce Identity プール プロバイダのマッピング | SCIM テナントのマッピング(SCIM) |
|---|---|---|
google.subject |
assertion.oid(EntraId) |
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() |
google.group |
該当なし(SCIM を使用してマッピング) | group.externalId |
サポートされているエンドポイントとサポートされていないエンドポイント
次の標準 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 トークンを含む API は、 Google Cloudから
401 HTTP errorを返します。レスポンスが、仕様で求められている 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()のみがサポートされています。
属性の制限事項
以降のセクションでは、ユーザー、グループ、エンタープライズ ユーザー スキーマ拡張機能の属性サポートについて説明します。
ユーザー属性
次の表に、ユーザー属性のサポートの詳細を示します。
| 属性 | サブ属性 | サポート対象 | 制限事項 |
|---|---|---|---|
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 はサポートされていません。 |
グループ属性
次の表に、グループ属性のサポートの詳細を示します。
| 属性 | サポートされているサブ属性 |
|---|---|
displayName |
なし |
externalId |
なし |
members |
value、type、$ref、display |
エンタープライズ ユーザー スキーマの拡張属性
次の表に、エンタープライズ ユーザー スキーマ拡張機能のサポートの詳細を示します。
| 属性 | サポートされているサブ属性 |
|---|---|
employeeNumber |
なし |
costCenter |
なし |
organization |
なし |
division |
なし |
department |
なし |
manager |
value、$ref、displayName |