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

デフォルトでは、Workforce Identity 連携セッションの最大継続時間は 12 時間です。セッション継続時間の延長により、組織は Looker(Google Cloud コア)のお客様向けに最長 90 日間のセッションを構成できます。

セッションの延長により、従業員ユーザーは外部 ID プロバイダ(IdP)に対して毎日再認証を行うことなく、Looker(Google Cloud コア)への接続を中断することなく維持できます。Looker(Google Cloud コア)内のユーザー インタラクションは、Looker(Google Cloud コア)のセッション長の構成に則って引き続き管理されます。拡張セッション全体でセキュリティを維持するため、 Google Cloud はユーザー属性とグループ メンバーシップを外部 ID プロバイダ(IdP)からバックグラウンドで定期的に直接同期します。

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


概要

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

  • Google Cloud アクセス バインディング: 管理者は、Access Context Manager を使用して、組織内のすべての Workforce プールに組織全体で適用されるセッションの長さのポリシーを定義します。restricted_project スコープを使用すると、ポリシーは最大 90 日間の拡張セッションを付与し、そのプロジェクトが所有する Looker(Google Cloud コア)インスタンスにのみ影響します。
  • バックグラウンド属性の同期:
    • 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 コア)にのみ適用されます。
  • 必須のプロジェクト スコープ(restricted_project: scopedAccessSettings 内で、Looker(Google Cloud コア)インスタンス(projects/{PROJECT_NUMBER})を所有する Google Cloud プロジェクトを指定する restricted_project クライアント スコープを使用して、セッション設定を構成する必要があります。
    • ESL ポリシーの影響を受けるのは、指定されたプロジェクトが所有する Looker(Google Cloud コア)アプリケーションのみです。
    • 他のすべてのアプリケーション(他のプロジェクトが所有する Looker(Google Cloud コア)アプリケーションを含む)は、このポリシーの影響を受けません。
  • セッション継続時間の範囲: セッション継続時間は、最小 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 バインディングではアイドル セッション タイムアウトはサポートされていません。
  • サポートされている ID プロバイダ:
    • OIDC: 認可コードフローoffline_access スコープで構成された OIDC プロバイダで更新トークンを発行するか、SCIM プロビジョニングで構成された OIDC プロバイダが必要です。
    • SAML 2.0: Workforce プール プロバイダで SCIM プロビジョニングが有効になっている必要があります。
  • 属性の未更新しきい値: 24 時間の未更新しきい値が適用されます。24 時間以内に IdP からユーザー属性を更新できない場合、セッションは無効になり、ユーザーは再認証する必要があります。 Google Cloud
  • Access Context Manager の制約:
    • 単一の組織バインディング: Workforce プールのセッション期間の延長バインディングは、組織の「すべての Workforce プール」プリンシパル(principalSet://cloudresourcemanager.googleapis.com/organizations/{ORG_ID}/type/WorkforcePool)をターゲットにする必要があります。このフェデレーション プリンシパル ID は、組織内のすべての Workforce プールに組織全体で適用されるため、このようなバインディングは組織ごとに 1 つしか存在できません。複数の Workforce プールにまたがる複数の Looker(Google Cloud コア)プロジェクトの拡張セッションを構成するには、単一バインディングの scopedAccessSettings リストに複数の restricted_project スコープ ブロックを含めます。
    • Workforce プール バインディングでは、アクセスレベルaccess_levelsdry_run_access_levels)は対象外です。
    • ワークフォース プール バインディングでは、GcpUserAccessBinding の最上位の sessionSettingsサポートされていません。設定は 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 プールに割り当て、Looker(Google Cloud コア)インスタンスをホストするプロジェクトにポリシーをスコープ設定する GcpUserAccessBinding リソースを作成します。

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

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

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 に設定します(または設定しないままにします)。

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

バインディングは組織内のすべての 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。