設定重新驗證的工作階段控制項

工作階段控制項可讓您設定使用者獲得存取權後,必須重新驗證的頻率,以及是否需要完整登入、僅輸入密碼或使用實體安全金鑰。

您可以套用工作階段控制項,執行下列操作:

  • 強制要求具備特殊權限的使用者頻繁重新驗證:要求具備進階權限的使用者 (例如專案擁有者和帳單管理員) 頻繁重新驗證。
  • 為特定應用程式設定較長的工作階段持續時間:允許支援的應用程式 (例如 Google Cloud 控制台、Google Cloud SDK 或特定 OAuth 應用程式) 擁有較長的工作階段持續時間,以保留最佳效能所需的大型脈絡視窗。

定義工作階段長度和重新驗證方法

建立 Access Context Manager 繫結時,您可以定義工作階段控制項。如要進一步瞭解工作階段控制項,請參閱「使用存取權繫結將政策套用至使用者群組」。

gcloud

  • 為所有應用程式設定預設工作階段控制項

    使用 --session-length 旗標設定工作階段持續時間。這個值必須是 0s,或介於 1 小時至 24 小時之間。指定時間長度 (以小時為單位)。例如,如要將工作階段長度設為 12 小時,請使用「12h」。使用 --session-reauth-method 旗標指定重新驗證方式。舉例來說,您可以將工作階段持續時間設為 3 小時 (3h),並設定 LOGIN、PASSWORD 或 SECURITY_KEY 重新驗證方法。

    這項設定會套用至所有應用程式,除非遭到應用程式專屬設定覆寫。

  • 設定應用程式專屬工作階段控制項

    在 YAML 檔案中定義 scopedAccessSettings,為使用 clientId 的特定應用程式指定工作階段控制項。這樣就能覆寫這些應用程式的預設工作階段控制項。接著,您可以使用 --binding-file flag 傳遞 YAML 檔案。

REST API

在 POST 要求的 JSON 主體中,定義 sessionSettings 物件內的 sessionLength 和 sessionReauthMethod 欄位,建立或更新 GcpUserAccessBinding 繫結。

  • sessionLength 是工作階段持續時間 (以秒為單位),格式為秒數後接 s (例如 3600s)。值必須是 0s,或介於 3600s (1 小時) 到 86400s (24 小時) 之間。如果設為 0s,則 sessionLengthEnabled 必須設為 false 或不設定。您無法將 sessionLength 設為 0s,並將 sessionLengthEnabled 設為 true。
  • sessionReauthMethod 可以是 LOGIN、PASSWORD 或 SECURITY_KEY。
  • 使用 scopedAccessSettings 定義應用程式專屬的工作階段控制項。詳情請參閱「定義特定應用程式的設定」。

Terraform

在 Terraform Google Cloud 使用者存取權繫結資源中,設定 session_settings 引數,即可設定適用於所有使用者流量的一般工作階段長度控制項:

  • session_length:工作階段持續時間,單位為秒。舉例來說,3600s 會將工作階段長度設為 1 小時。結尾必須加上 s。
  • session_length_enabled:設為 false 可停用指定的工作階段設定。
  • session_reauth_method:用於重新整理憑證的驗證問題類型。選項包括 LOGIN、PASSWORD 或 SECURITY_KEY。
  • use_oidc_max_age:進階欄位,用於設定工作階段是否遵循選用的 OIDC 最大年齡參數。如果驗證憑證是 OAuth 權杖,則會指定這個參數。

定義工作階段控制項時,系統只會使用最近建立且符合要求的存取繫結,來解析工作階段控制項設定。

政策設定範例

以下範例說明如何建立工作階段控制項,要求每 18 小時使用 LOGIN 重新驗證,以及每兩小時使用 SECURITY_KEY 重新驗證特定應用程式 (SENSITIVE_APP_ID)。

預設設定

Google Cloud CLI 指令中的 --level、--session-length 和 --session-reauth-method 旗標 (或 API 呼叫 JSON 主體中的對應欄位),會為 scopedAccessSettings 中未明確定義的所有應用程式設定預設行為。

應用程式專屬設定

YAML 檔案 (或 JSON 主體) 中的 scopedAccessSettings 區段可讓您覆寫特定應用程式的預設設定。在範例中,我們為用戶端 ID 為 SENSITIVE_APP_ID 的應用程式設定了兩小時的重新驗證要求,並使用 SECURITY_KEY。

scopedAccessSettings 中的應用程式專屬設定會完全覆寫預設 (全域) 工作階段控制項。如果為應用程式定義了範圍設定,預設工作階段控制項就不會套用至該應用程式。

如要在全域控制項啟用時,將特定應用程式排除在工作階段控制項之外,您必須明確將這些應用程式新增至 scopedAccessSettings,並將 sessionLength 欄位設為 0s,以及將 sessionLengthEnabled 設為 false。

gcloud

以下範例說明工作階段設定:

scopedAccessSettings:
- scope:
    clientScope:
      restrictedClientApplication:
        clientId: SENSITIVE_APP_ID
  activeSettings:
    sessionSettings:
      sessionLength: 7200s
      sessionReauthMethod: SECURITY_KEY
      sessionLengthEnabled: true

建立存取權繫結:

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --group-key=GROUP_ID \
    --binding-file=BINDING_FILE_PATH \
    --session-length=SESSION_LENGTH \
    --session-reauth-method LOGIN

更改下列內容:

  • ORG_ID: Google Cloud 組織的 ID

  • GROUP_ID:專屬 Cloud Identity 群組 ID

  • BINDING_FILE_PATH:繫結檔案的路徑

  • SESSION_LENGTH:工作階段長度,例如 18h

如要取得專屬群組 ID,請執行下列指令:

gcloud identity groups describe GROUP_EMAIL

將 GROUP_EMAIL 替換為群組的電子郵件地址。不重複群組 ID 是輸出內容中 name 欄位內 groups/ 之後傳回的值。舉例來說,groups/01gf8i8311xalqg 中的專屬群組 ID 是 01gf8i8311xalqg。

REST API

API 要求的 JSON 主體範例:

{
  "groupKey": "GROUP_ID",
  "sessionSettings": {
    "sessionLength": "64800s",
    "sessionReauthMethod": "LOGIN",
    "sessionLengthEnabled": true
  },
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "clientId": "SENSITIVE_APP_ID"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "7200s",
          "sessionReauthMethod": "SECURITY_KEY",
          "sessionLengthEnabled": true
        }
      }
    }
  ]
}

請以下列格式建構 POST 要求:

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

將 ORG_ID 替換為 Google Cloud 組織 ID。

Terraform

如要指定適用於全域和特定應用程式的工作階段控制項,請設定 session_settings 和 scoped_access_settings 引數:

    resource "google_access_context_manager_gcp_user_access_binding" "gcp_user_access_binding" {
      organization_id = "ORG_ID"
      group_key = "GROUP_ID"
      session_settings {
        session_length = "64800s"
        session_length_enabled = true
        session_reauth_method = "LOGIN"
        use_oidc_max_age = false
      }
      scoped_access_settings {
        scope {
          client_scope {
            restricted_client_application {
              client_id = "CLIENT_ID"
            }
          }
        }
        active_settings {
          session_settings {
            session_length = "7200s"
            session_length_enabled = true
            session_reauth_method = "SECURITY_KEY"
            use_oidc_max_age = false
          }
        }
      }
    }

更改下列內容:

  • ORG_ID: Google Cloud組織的數字 ID。

  • GROUP_ID:原始 Cloud Identity 或 Google Workspace Directory API 群組 ID。請勿使用群組電子郵件地址或 "groups/..." 資源名稱。請改為傳遞原始 ID 或使用 trimprefix(google_cloud_identity_group.example.id, "groups/")。

  • CLIENT_ID:應用程式的 OAuth 2.0 用戶端 ID。

Google Cloud 應用程式的政策設定範例

您可以為 Google Cloud 應用程式設定專屬的重新驗證控制項,例如要求 Google Cloud SDK SECURITY_KEY, Google Cloud 控制台則LOGIN。以下範例說明如何建立工作階段控制項,要求 Google Cloud SDK 搭配 SECURITY_KEY 每小時重新驗證一次, Google Cloud 控制台搭配 LOGIN 每 4 小時重新驗證一次。

YAML 檔案 (或 JSON 主體) 中的 scopedAccessSettings 區段可讓您覆寫特定應用程式的預設設定。在這個範例中,我們使用 name 欄位識別這些應用程式,並為 Google Cloud SDK 設定一小時的重新驗證要求 (SECURITY_KEY),以及為 Google Cloud 控制台設定四小時的重新驗證要求 (LOGIN)。

如要讓特定應用程式不受工作階段控制,請將 sessionLength 欄位設為 0s,或將 sessionLengthEnabled 設為 false。系統會忽略 sessionReauthMethod 方法。

gcloud

以下範例說明工作階段設定:

scopedAccessSettings:
- scope:
    clientScope:
      restrictedClientApplication:
        name: Google Cloud SDK
  activeSettings:
    sessionSettings:
      sessionLength: 3600s
      sessionReauthMethod: SECURITY_KEY
      sessionLengthEnabled: true
- scope:
    clientScope:
      restrictedClientApplication:
        name: Cloud Console
  activeSettings:
    sessionSettings:
      sessionLength: 14400s
      sessionReauthMethod: LOGIN
      sessionLengthEnabled: true

建立存取權繫結:

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --group-key=GROUP_ID \
    --binding-file=BINDING_FILE_PATH

更改下列內容:

  • ORG_ID: Google Cloud 組織的 ID

  • GROUP_ID:專屬 Cloud Identity 群組 ID

  • BINDING_FILE_PATH:繫結檔案的路徑

REST API

API 要求的 JSON 主體範例:

{
  "groupKey": "GROUP_ID",
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Google Cloud SDK"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
            "sessionLength": "3600s",
            "sessionReauthMethod": "SECURITY_KEY",
            "sessionLengthEnabled": true
          }
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Cloud Console"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
            "sessionLength": "14400s",
            "sessionReauthMethod": "LOGIN",
            "sessionLengthEnabled": true
          }
      }
    }
  ]
}

請以下列格式建構 POST 要求:

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

將 ORG_ID 替換為 Google Cloud 組織 ID。

Terraform

如要指定 Google Cloud SDK 和 Google Cloud 控制台的工作階段長度設定,請設定適當的 scoped_access_settings 引數:

    resource "google_access_context_manager_gcp_user_access_binding" "gcp_user_access_binding" {
      organization_id = "ORG_ID"
      group_key = "GROUP_ID"
      scoped_access_settings {
        scope {
          client_scope {
            restricted_client_application {
              name = "Google Cloud SDK"
            }
          }
        }
        active_settings {
          session_settings {
            session_length = "3600s"
            session_length_enabled = true
            session_reauth_method = "SECURITY_KEY"
            use_oidc_max_age = false
          }
        }
      }
      scoped_access_settings {
        scope {
          client_scope {
            restricted_client_application {
              name = "Cloud Console"
            }
          }
        }
        active_settings {
          session_settings {
            session_length = "14400s"
            session_length_enabled = true
            session_reauth_method = "LOGIN"
            use_oidc_max_age = false
          }
        }
      }
    }

更改下列內容:

  • ORG_ID: Google Cloud組織的數字 ID。

  • GROUP_ID:原始 Cloud Identity 或 Google Workspace Directory API 群組 ID。請勿使用群組電子郵件地址或 "groups/..." 資源名稱。請改為傳遞原始 ID 或使用 trimprefix(google_cloud_identity_group.example.id, "groups/")。

覆寫 Google Cloud 應用程式的預設 16 小時工作階段長度

自 2026 年 6 月起,部分 Google Cloud 組織的預設工作階段長度為 16 小時。這項預設政策不會顯示在 Google 管理控制台中,受影響的 Google Cloud 組織必須使用 Access Context Manager API,為使用者覆寫這項政策。

如要覆寫這項預設政策,並將這些應用程式排除在工作階段控制項之外 (讓工作階段長度無限期有效),您可以使用 scopedAccessSettings 建立雲端繫結,其中 Google Cloud SDK 和 Google Cloud 控制台 (「Cloud 控制台」) 應用程式的 sessionLengthEnabled 均設為 false。

gcloud

以下範例顯示 YAML 設定,可停用這些應用程式的工作階段控制項:

scopedAccessSettings:
- scope:
    clientScope:
      restrictedClientApplication:
        name: Google Cloud SDK
  activeSettings:
    sessionSettings:
      sessionLength: 0s
      sessionReauthMethod: LOGIN
      sessionLengthEnabled: false
- scope:
    clientScope:
      restrictedClientApplication:
        name: Cloud Console
  activeSettings:
    sessionSettings:
      sessionLength: 0s
      sessionReauthMethod: LOGIN
      sessionLengthEnabled: false

使用這個檔案建立或更新存取權繫結:

gcloud access-context-manager cloud-bindings create \
    --organization=ORG_ID \
    --group-key=GROUP_ID \
    --binding-file=BINDING_FILE_PATH

更改下列內容:

  • ORG_ID: Google Cloud 組織的 ID

  • GROUP_ID:專屬 Cloud Identity 群組 ID (例如,包含要套用這項覆寫設定的所有使用者群組 ID)

  • BINDING_FILE_PATH:繫結檔案的路徑

REST API

API 要求的 JSON 主體範例:

{
  "groupKey": "GROUP_ID",
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Google Cloud SDK"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "0s",
          "sessionReauthMethod": "LOGIN",
          "sessionLengthEnabled": false
        }
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "Cloud Console"
          }
        }
      },
      "activeSettings": {
        "sessionSettings": {
          "sessionLength": "0s",
          "sessionReauthMethod": "LOGIN",
          "sessionLengthEnabled": false
        }
      }
    }
  ]
}

請以下列格式建構 POST 要求:

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

將 ORG_ID 替換為 Google Cloud 組織 ID。

Terraform

如要指定停用 Google Cloud SDK 和 Google Cloud 控制台的工作階段控制項,請使用 session_length_enabled = false 設定適當的 scoped_access_settings 引數:

    resource "google_access_context_manager_gcp_user_access_binding" "gcp_user_access_binding" {
      organization_id = "ORG_ID"
      group_key = "GROUP_ID"
      scoped_access_settings {
        scope {
          client_scope {
            restricted_client_application {
              name = "Google Cloud SDK"
            }
          }
        }
        active_settings {
          session_settings {
            session_length = "0s"
            session_length_enabled = false
            session_reauth_method = "LOGIN"
            use_oidc_max_age = false
          }
        }
      }
      scoped_access_settings {
        scope {
          client_scope {
            restricted_client_application {
              name = "Cloud Console"
            }
          }
        }
        active_settings {
          session_settings {
            session_length = "0s"
            session_length_enabled = false
            session_reauth_method = "LOGIN"
            use_oidc_max_age = false
          }
        }
      }
    }

更改下列內容:

  • ORG_ID: Google Cloud組織的數字 ID。

  • GROUP_ID:原始 Cloud Identity 或 Google Workspace Directory API 群組 ID。請勿使用群組電子郵件地址或 "groups/..." 資源名稱。請改為傳遞原始 ID 或使用 trimprefix(google_cloud_identity_group.example.id, "groups/")。