Workforce Identity 連携のセッション継続時間を延長する

デフォルトでは、Workforce Identity 連携セッションの最大継続時間は 12 時間です。セッション継続時間を延長すると、Looker(Google Cloud コア)と Gemini Enterprise モバイルアプリで最長 90 日間のセッションを構成できます。

  • Looker(Google Cloud コア): プロジェクト スコープ(restricted_project)を使用して構成されます。拡張セッションを使用すると、外部 ID プロバイダ(IdP)に対して毎日再認証を行うことなく、Looker(Google Cloud コア)への接続を中断することなく維持できます。Looker(Google Cloud コア)内のユーザー操作は、Looker(Google Cloud コア)のセッション長の構成に則って管理されます。

  • Gemini Enterprise モバイルアプリ: アプリケーション スコープ(restricted_client_application)を使用して構成されます。拡張セッションを使用すると、従業員ユーザーは、外部 ID プロバイダ(IdP)に対する毎日の再認証を必要とせずに、Gemini Enterprise モバイルアプリへの接続を中断することなく維持できます。

拡張セッション全体でセキュリティを維持するため、 Google Cloud は、バックグラウンドで外部 ID プロバイダ(IdP)からユーザー属性とグループ メンバーシップを直接定期的に同期します。

このドキュメントでは、プロジェクト スコープの制御(Looker(Google Cloud コア))とアプリケーション スコープの制御(Gemini Enterprise モバイルアプリ)で Access Context Manager API を使用して拡張セッション ポリシーを定義し、ワークフォース プール プロバイダを構成して、アクティブなバインディングを管理する方法について説明します。


概要

Workforce Identity 連携では、Access Context Manager の Google Cloud アクセス バインディングを使用して、セッションの延長時間を構成します。

  • Google Cloud アクセス バインディング: 管理者は、Access Context Manager を使用して、組織内のすべての Workforce プールに組織全体で適用されるセッション長ポリシーを定義します。ポリシーでは、次のいずれかを使用して、最大 90 日間の拡張セッションを付与します。

    • プロジェクト スコープ(restricted_project): 指定されたプロジェクトの Looker(Google Cloud コア)インスタンスに拡張セッションを適用します。

    • アプリケーション スコープ(restricted_client_application): Gemini Enterprise モバイルアプリに拡張セッションを適用します。

  • 背景属性の同期:

    • OIDC: offline_access スコープを使用した OIDC 認可コードフロー(更新トークンを使用して、外部 IdP からユーザー属性とグループ メンバーシップをバックグラウンドで定期的に更新する)または SCIM プロビジョニングを使用してサポートされます。

    • SAML: SAML プロバイダの場合、ユーザー属性とグループ メンバーシップは SCIM プロビジョニングを使用して最新の状態に保たれます。

  • 鮮度保護: ユーザー属性を 24 時間以内に外部 IdP から更新できない場合(たとえば、ユーザーがプロビジョニング解除された場合や、IdP で認証情報が取り消された場合)、 Google Cloud はセッションを終了します。


始める前に

セッションの延長時間を構成する前に、必要な Identity and Access Management 権限と API が有効になっていることを確認してください。

必要なロールと権限

セッションの延長を構成するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

API を有効にする

プロジェクトで Access Context Manager API と IAM API を有効にします。

gcloud services enable \
    accesscontextmanager.googleapis.com \
    iam.googleapis.com

制限事項と要件

セッションの延長を設定する前に、次の要件と制限事項を確認してください。

  • サポートされているアプリケーション: 延長されたセッション継続時間は、以下にのみ適用されます。
    • Looker(Google Cloud コア)(プロジェクト スコープを使用して構成)
    • Gemini Enterprise モバイルアプリ(アプリケーション スコープを使用して構成)
  • Gemini Enterprise モバイルアプリの許可リスト要件: Gemini Enterprise モバイルアプリのセッション時間の延長は、許可リストに登録されている場合にのみ利用できます。プレビュー期間中に許可リストへのアクセスをリクエストするには、 Google Cloud サポート担当者(POC)にお問い合わせください。
  • スコープタイプ: セッション設定は、次のいずれかのクライアント スコープを使用して scopedAccessSettings 内で構成する必要があります。
    • プロジェクト スコープ(restricted_project): Looker(Google Cloud コア)インスタンス(projects/{PROJECT_NUMBER})を所有する Google Cloud プロジェクトを指定します。指定されたプロジェクトが所有する Looker(Google Cloud コア)インスタンスのみが影響を受けます。
    • アプリケーション スコープ(restricted_client_application): 正規表示 name でアプリケーションを指定します。
    • Gemini Enterprise モバイルアプリのアプリケーション スコープを構成するには、次の正確なアプリケーション名のいずれかまたは両方を明示的に使用する必要があります。
      • "Gemini Enterprise mobile Android"
      • "Gemini Enterprise mobile IOS"
    • OAuth クライアント ID(clientId)によるスコープ設定は、Workforce Identity 連携バインディングではサポートされておらず、拒否されます。name フィールドを使用してアプリケーションを識別する必要があります。
  • セッション継続時間の範囲: セッション継続時間は、1 時間(3600s)から 90 日(7776000s)の範囲で指定する必要があります。
  • セッション設定パラメータの要件:
    • session_length_enabled: true に設定する必要があります。
    • session_length: 1 時間(3600s)から 90 日(7776000s)までの必須期間。
    • session_reauth_method: 未設定にするか、LOGIN に設定する必要があります。
    • use_oidc_max_age: 未設定にするか、false に設定する必要があります。
    • max_inactivity: 設定を解除する必要があります(またはデフォルトの 0s)。アイドル セッションのタイムアウトは、restricted_project バインディングと restricted_client_application バインディングではサポートされていません。
  • サポートされている ID プロバイダ:
    • OIDC: 認可コードフローと offline_access スコープで構成された OIDC プロバイダ(更新トークンを発行するため)または SCIM プロビジョニングで構成された OIDC プロバイダが必要です。
    • SAML 2.0: Workforce プール プロバイダで SCIM プロビジョニングを有効にする必要があります。
  • 属性の未更新しきい値: 24 時間の未更新しきい値が適用されます。 Google Cloud が 24 時間以内に IdP からユーザー属性を更新できない場合、セッションは無効になり、ユーザーは再認証する必要があります。
  • Access Context Manager の制約:
    • 単一の組織バインディング: Workforce プールのセッション期間の延長バインディングは、組織の「すべての Workforce プール」プリンシパル(principalSet://cloudresourcemanager.googleapis.com/organizations/{ORG_ID}/type/WorkforcePool)をターゲットにする必要があります。この連携プリンシパル ID は、組織内のすべての Workforce プールに適用されるため、組織ごとに 1 つのバインディングのみが存在できます。複数の Looker(Google Cloud コア)プロジェクト、Gemini Enterprise モバイルアプリ、またはその両方の組み合わせに対して拡張セッションを構成するには、1 つのバインディングの scopedAccessSettings リスト内に複数の restricted_project スコープ ブロックと restricted_client_application スコープ ブロックを含めます。
    • アクセスレベル(access_levels、dry_run_access_levels)は、Workforce プール バインディングではサポートされていません。
    • GcpUserAccessBinding の最上位の sessionSettings は、Workforce プールのバインディングではサポートされていません。設定は scopedAccessSettings.activeSettings.sessionSettings 内で定義する必要があります。

Workforce プール プロバイダを構成する

セッションの延長を許可するには、バックグラウンド属性の更新をサポートするように Workforce プール プロバイダを構成する必要があります。OIDC または SAML プロトコルを使用するようにプロバイダを構成できます。

OIDC プロバイダを構成する

OIDC プロバイダのバックグラウンド属性の更新は、更新トークン(offline_access スコープ)または SCIM プロビジョニングを使用して処理できます。トークンベースの属性更新を使用している場合:

  1. 外部 IdP で、認可コードフローを使用して OIDC アプリケーションを構成し、オフライン アクセスを有効にして、更新トークンが返されるようにします。
  2. Google Cloudで、OIDC Workforce プール プロバイダの追加スコープに offline_access を追加します。

拡張セッション期間ポリシーが意図した効果を発揮するには、 Google Cloud 組織内のすべての Workforce Identity プールでオフライン アクセスを構成する必要があります。

gcloud

プロバイダに既存の追加スコープがある場合は、上書きされないように offline_access と一緒に含めます。

gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
    --workforce-pool=WORKFORCE_POOL_NAME \
    --location=global \
    --web-sso-additional-scopes="offline_access[,EXISTING_ADDITIONAL_SCOPES]"

次のように置き換えます。

  • PROVIDER_ID: Workforce Identity プール プロバイダの名前。
  • WORKFORCE_POOL_NAME: Workforce Identity プールの名前。
  • EXISTING_ADDITIONAL_SCOPES: プロバイダで以前に構成されたカンマ区切りの追加スコープ。既存の追加スコープがない場合は、このパラメータを省略します。

REST API

PATCH リクエストを送信してプロバイダを更新します。offline_access とともに、既存の追加スコープを含めます。

PATCH https://iam.googleapis.com/v1/locations/global/workforcePools/WORKFORCE_POOL_NAME/providers/PROVIDER_ID?updateMask=oidc.webSsoConfig.additionalScopes

リクエスト本文:

{
  "oidc": {
    "webSsoConfig": {
      "additionalScopes": [
        "offline_access"
      ]
    }
  }
}

次のように置き換えます。

  • WORKFORCE_POOL_NAME: Workforce Identity プールの名前。
  • PROVIDER_ID: Workforce Identity プール プロバイダの ID。

SAML プロバイダを構成する

SAML プロバイダの場合、バックグラウンドでの属性の更新には SCIM プロビジョニングが必要です。

  1. Workforce プール プロバイダの SCIM テナントを設定します。
  2. SAML ID プロバイダから SCIM エンドポイントへのユーザーとグループのプロビジョニングを構成します。

手順については、Workforce Identity 連携の SCIM プロビジョニングをご覧ください。


Looker(Google Cloud コア)のポリシー構成の例

拡張セッション長のポリシーを組織の Workforce プールに割り当てる GcpUserAccessBinding リソースを作成し、Looker(Google Cloud コア)インスタンスをホストするプロジェクトにポリシーをスコープ設定します。

gcloud

esl-binding.yaml という名前の YAML ファイルでポリシーを定義します。

scopedAccessSettings:
- scope:
    clientScope:
      restrictedProject:
        name: projects/PROJECT_NUMBER
  activeSettings:
    sessionSettings:
      sessionLength: 7776000s
      sessionLengthEnabled: true
      sessionReauthMethod: LOGIN

アクセス バインディングを作成します。

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --federated-principal="principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool" \
    --binding-file="esl-binding.yaml"

次のように置き換えます。

  • ORG_ID: Google Cloud 組織 ID(例: 123456789012)。
  • PROJECT_NUMBER: ターゲットの Looker(Google Cloud コア)インスタンスを所有するプロジェクト番号(例: 987654321098)。このプロジェクトが所有する Looker(Google Cloud コア)アプリケーションのみが、延長されたセッション時間を受け取ります。
  • sessionLength: セッション継続時間(秒単位)。その後に s が続きます。たとえば、7776000s は 90 日間のセッションを指定します。
  • sessionLengthEnabled: true に設定します。
  • sessionReauthMethod: LOGIN に設定します(または未設定のままにします)。

REST API

POST リクエストを Access Context Manager API に送信します。

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

JSON リクエストの本文:

{
  "principal": {
    "federatedPrincipal": "principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool"
  },
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedProject": {
            "name": "projects/PROJECT_NUMBER"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7776000s",
          "sessionLengthEnabled": true,
          "sessionReauthMethod": "LOGIN"
        }
      }
    }
  ]
}

次のように置き換えます。

  • ORG_ID: Google Cloud 組織 ID(例: 123456789012)。
  • PROJECT_NUMBER: ターゲットの Looker(Google Cloud コア)インスタンスを所有するプロジェクト番号(例: 987654321098)。このプロジェクトが所有する Looker(Google Cloud コア)アプリケーションのみが、延長されたセッション時間を受け取ります。
  • sessionLength: セッション継続時間(秒単位)。その後に s が続きます。たとえば、7776000s は 90 日間のセッションを指定します。
  • sessionLengthEnabled: true に設定します。
  • sessionReauthMethod: LOGIN に設定します(または未設定のままにします)。

Gemini Enterprise モバイルアプリのポリシー構成の例

GcpUserAccessBinding リソースを作成して、組織の Workforce プールに拡張セッション期間ポリシーを割り当て、restricted_client_application スコープを使用してポリシーのスコープを Gemini Enterprise モバイルアプリに設定します。アプリケーションは、正規の表示名("Gemini Enterprise mobile Android" と "Gemini Enterprise mobile IOS")を使用して正確に識別する必要があります。

gcloud

esl-app-binding.yaml という名前の YAML ファイルでポリシーを定義します。

scopedAccessSettings:
- scope:
    clientScope:
      restrictedClientApplication:
        name: "Gemini Enterprise mobile Android"
  activeSettings:
    sessionSettings:
      sessionLength: 7776000s
      sessionLengthEnabled: true
      sessionReauthMethod: LOGIN
- scope:
    clientScope:
      restrictedClientApplication:
        name: "Gemini Enterprise mobile IOS"
  activeSettings:
    sessionSettings:
      sessionLength: 7776000s
      sessionLengthEnabled: true
      sessionReauthMethod: LOGIN

アクセス バインディングを作成します。

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --federated-principal="principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool" \
    --binding-file="esl-app-binding.yaml"

次のように置き換えます。

  • ORG_ID: Google Cloud 組織 ID(例: 123456789012)。
  • name: "Gemini Enterprise mobile Android" または "Gemini Enterprise mobile IOS"。Workforce プールでは、OAuth クライアント ID(clientId)によるアプリケーションの識別はサポートされていません。
  • sessionLength: セッション継続時間(秒単位)。s を続けます(3600s~7776000s)。
  • sessionLengthEnabled: true に設定します。
  • sessionReauthMethod: LOGIN に設定します(または未設定のままにします)。

REST API

POST リクエストを Access Context Manager API に送信します。

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

JSON リクエストの本文:

{
  "principal": {
    "federatedPrincipal": "principalSet://cloudresourcemanager.googleapis.com/organizations/ORG_ID/type/WorkforcePool"
  },
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Gemini Enterprise mobile Android"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7776000s",
          "sessionLengthEnabled": true,
          "sessionReauthMethod": "LOGIN"
        }
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Gemini Enterprise mobile IOS"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7776000s",
          "sessionLengthEnabled": true,
          "sessionReauthMethod": "LOGIN"
        }
      }
    }
  ]
}

次のように置き換えます。

  • ORG_ID: Google Cloud 組織 ID(例: 123456789012)。
  • name: "Gemini Enterprise mobile Android" または "Gemini Enterprise mobile IOS"。Workforce プールでは、OAuth クライアント ID(clientId)によるアプリケーションの識別はサポートされていません。
  • sessionLength: セッション継続時間(秒単位)。その後に s が続きます。たとえば、7776000s は 90 日間のセッションを指定します。
  • sessionLengthEnabled: true に設定します。
  • sessionReauthMethod: LOGIN に設定します(または未設定のままにします)。

バインディングの表示と一覧表示

バインディングは組織内のすべての Workforce プールに適用されるため、組織ごとに最大 1 つのアクセス バインディングが存在します。

アクティブなバインディングを一覧表示する

組織内の Workforce プール アクセス バインディングを一覧表示するには、principal:federatedPrincipal フィルタを使用します。

gcloud

gcloud access-context-manager cloud-bindings list \
    --organization=ORG_ID \
    --filter="principal:federatedPrincipal"

REST API

GET https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings?filter=principal:federated_principal

バインディングの詳細を取得する

特定の Workforce プールのアクセス バインディングの詳細を表示するには:

gcloud

gcloud access-context-manager cloud-bindings describe \
    --binding=BINDING_NAME

BINDING_NAME は、バインディングの完全なリソース名(例: organizations/123456789012/gcpUserAccessBindings/b1234567890)に置き換えます。

REST API

GET https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID

次のように置き換えます。

  • ORG_ID: Google Cloud 組織 ID(例: 123456789012)。
  • BINDING_ID: アクセス バインディングの ID(例: b1234567890)。

アクセス バインディングを更新する

既存のワークフォース プール アクセス バインディングを更新して、セッションの長さを変更したり、新しいプロジェクト スコープやアプリケーション スコープを追加したり、既存のスコープを削除したりできます。

gcloud

  1. 更新されたポリシーを updated-esl-binding.yaml という名前の YAML ファイルで定義します。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedProject:
            name: projects/PROJECT_NUMBER
      activeSettings:
        sessionSettings:
          sessionLength: 2592000s
          sessionLengthEnabled: true
          sessionReauthMethod: LOGIN
    
  2. 更新されたポリシーを適用します。

    • スコープ付きアクセス設定を置き換える: 既存のスコープを updated-esl-binding.yaml で定義された構成で上書きするには、次のようにします。
    gcloud access-context-manager cloud-bindings update \
        --binding=BINDING_NAME \
        --binding-file="updated-esl-binding.yaml"
    
    • 既存の設定に追加する: updated-esl-binding.yaml で定義されたスコープを、上書きせずにバインディングの既存のスコープに追加するには、--append フラグを渡します。
    gcloud access-context-manager cloud-bindings update \
        --binding=BINDING_NAME \
        --binding-file="updated-esl-binding.yaml" \
        --append
    

次のように置き換えます。 * BINDING_NAME: バインディングの完全なリソース名(例: organizations/123456789012/gcpUserAccessBindings/b1234567890)。 * PROJECT_NUMBER: ターゲット Looker(Google Cloud コア)インスタンスを所有するプロジェクト番号。* sessionLength: 更新されたセッション継続時間(30 日の場合は 2592000s など)。

REST API

PATCH リクエストを送信してバインディングを更新します。

  • スコープ アクセスの設定を置き換える: 既存のスコープを上書きするには:
PATCH https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID?updateMask=scopedAccessSettings
  • 既存の設定に追加する: 既存のスコープを上書きせずに新しいスコープを追加するには、append=true クエリ パラメータを設定します。
PATCH https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID?updateMask=scopedAccessSettings&append=true

JSON リクエストの本文:

{
"scopedAccessSettings": [
  {
    "scope": {
      "clientScope": {
        "restrictedProject": {
          "name": "projects/PROJECT_NUMBER"
        }
      }
    },
    "activeSettings": {
      "sessionSettings": {
        "sessionLength": "2592000s",
        "sessionLengthEnabled": true,
        "sessionReauthMethod": "LOGIN"
      }
    }
  }
]
}

次のように置き換えます。 * ORG_ID: Google Cloud 組織 ID(例: 123456789012)。 * BINDING_ID: アクセス バインディングの ID(例: b1234567890)。 * PROJECT_NUMBER: ターゲットの Looker(Google Cloud コア)インスタンスを所有するプロジェクト番号。* sessionLength: 更新されたセッション継続時間(30 日の場合は 2592000s など)。


アクセス バインディングを削除する

Workforce プール アクセス バインディングを削除すると、組織内のすべての Workforce プールでセッションの延長が無効になります。

gcloud

gcloud access-context-manager cloud-bindings delete \
    --binding=BINDING_NAME

BINDING_NAME は、バインディングの完全なリソース名に置き換えます。

REST API

DELETE リクエストを送信してバインディングを削除します。

DELETE https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID

次のように置き換えます。

  • ORG_ID: 実際の Google Cloud 組織 ID。
  • BINDING_ID: 削除するアクセス バインディングの ID。