Workforce Identity 連携の SCIM プロビジョニング

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 の重複した値になる場合、プロビジョニングは失敗し、HTTP 409 Conflict エラーが発生します。マッピングされた属性が null または空と評価されると、プロビジョニングは HTTP 400 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 必須

認証ユーザーの固有識別子。

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.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 は、使用する属性名に置き換えます。

たとえば、costcenter = "1234" などのカスタム属性を定義し、principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.costcenter/1234 を使用して参照できます。このプリンシパル ID にアクセス権を付与すると、その費用センターで IdP に構成されているすべての ID にアクセス権が付与されます。

最大 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)。

  • フィルタなしでグループを取得してグループを一覧表示する: GetGroup API と ListGroups API は空のメンバー リストを返します。特定のグループのメンバーを取得するには、メンバー フィルタを使用して ListGroups API を使用します。

  • 無効なトークンを含む準拠していない 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 の値が重複するマッピングされた属性を同期すると、HTTP 409 Conflict エラーが発生して失敗します。null または空の値に評価されるマッピングされた属性は、HTTP 400 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 ではサポートされません)

次のステップ