建立自訂存取層級

您可以在 Access Context Manager 中使用自訂存取層級,透過以一般運算語言 (CEL) 子集編寫的布林運算式,控管Google Cloud 資源的存取權。您可以評估要求屬性 (例如來源網路專案、IP 位址、身分和第三方安全性服務的裝置資料),強制執行精細的情境感知存取權規定。

如要在自訂存取層級運算式中使用裝置屬性,必須訂閱付費方案。如要進一步瞭解如何建構 CEL 運算式,請參閱自訂存取層級詳細說明。建立自訂存取層級後,您可以按照管理基本存取層級的方式管理。

事前準備

建立自訂存取層級

您可以使用 Google Cloud 控制台、gcloud 指令列工具、REST API 或 RPC 建立自訂存取層級。

控制台

如要使用 Google Cloud 控制台建立自訂存取層級,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟「Access Context Manager」頁面。

    開啟 Access Context Manager 頁面

  2. 如果系統提示您選取機構,請依提示選取您的機構。

  3. 按一下「Access Context Manager」頁面最上方的 [New] (新增)。

  4. 在「New Access Level」(建立新的存取層級) 窗格中:

    1. 在「存取層級標題」方塊中,輸入存取層級的標題。 標題長度不得超過 50 個字元,開頭須為英文字母,且只能包含數字、英文字母、底線和空格。

    2. 在「Create Conditions in」下方,選取「進階模式」。

    3. 在「條件」部分,輸入自訂存取層級的運算式。條件必須解析為單一布林值。

      如需範例和更多資訊,瞭解一般運算語言 (CEL) 支援和自訂存取層級,請參閱自訂存取層級規格。

    4. 按一下 [儲存]。

gcloud

如要使用 gcloud 指令列工具建立自訂存取層級,請使用 gcloud access-context-manager levels create 指令。

gcloud access-context-manager levels create LEVEL_NAME \
--title=TITLE \
--custom-level-spec=FILE \
--description=DESCRIPTION \
--policy=POLICY_NAME

更改下列內容:

  • LEVEL_NAME:存取層級的專屬名稱。名稱開頭須為英文字母,且只能使用英文字母、數字和底線。名稱長度上限為 50 個半形字元。

  • TITLE:存取層級的人類可讀簡短標題。

  • FILE:包含 CEL 運算式的 YAML 檔案,格式為單一鍵值組:expression: "CEL_EXPRESSION"。

    如需一般運算語言 (CEL) 支援和自訂存取層級的範例及詳細資訊,請參閱「自訂存取層級詳細說明」。

  • DESCRIPTION:存取層級的人類可讀說明。

  • POLICY_NAME:組織存取權政策的數字名稱。

您也可以選擇加入任何gcloud 範圍的旗標。

custom-level-spec YAML 檔案

使用 gcloud 指令列工具建立自訂存取層級時,您必須為 custom-level-spec 選項提供 YAML 檔案。YAML 檔案定義的 CEL 運算式會解析為單一布林值。YAML 檔案必須包含單一鍵/值組合,格式為 expression: "CEL_EXPRESSION"。expression 的值必須是字串。

YAML 檔案範例

expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"

範例指令

gcloud access-context-manager levels create Custom_Trust \
    --custom-level-spec=customspec.yaml \
    --description="Custom access level for corp." \
    --title="Custom Trust Level" \
    --policy=1521580097614100

REST

如要使用 REST API 建立自訂存取層級,請使用 accessPolicies.accessLevels.create 方法。

要求主體

在呼叫的要求主體中,加入 AccessLevel 物件的執行個體。

{
  "name": string,
  "title": string,
  "description": string,
  "custom": {
    "expr": {
      "expression": string,
      "title": string,
      "description": string
    }
  }
}

在 custom 欄位中,建立包含自訂存取層級 CEL 運算式的物件。完整運算式必須解析為布林值。title 和 description 為選用欄位。

範例

{
  "name": "example_custom_level",
  "title": "Example custom level",
  "description": "An example custom access level.",
  "custom":  {
    "expr": {
      "expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
      "title": "Check for known devices",
      "description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
    }
  }
}

RPC

如要使用 RPC 建立自訂存取層級,請呼叫 CreateAccessLevel。

在 access_level 欄位中,加入 AccessLevel 的例項。

欄位
name
類型 string
說明

必要。

存取層級的資源名稱。POLICY_ID 是組織存取權政策的數字名稱。「SHORT_NAME」只能使用英文字母、數字和底線,開頭須為英文字母。

格式:

            accessPolicies/policy_id/accessLevels/short_name
            
title
類型 string
說明

存取層級的人類可讀標籤。存取層級名稱不得重複。

description
類型 string
說明

存取層級的說明。

custom
類型 string
說明

自訂存取層級的 CEL 運算式。完整運算式必須解析為布林值。

自訂存取層級範例

本節提供自訂存取層級的範例。

根據來源專案限制存取權

您可以限制資源存取權,只允許來自特定 Google Cloud 專案和相關租戶專案的要求。以專案為基礎的存取限制,有助於透過Workload Identity確保互動安全。Workload Identity 屬於 Google Cloud 專案,且並非人類身分。工作負載身分包括服務帳戶、Workload Identity Federation 身分、代管工作負載身分和代理身分。

如果要求來自 projects/123456789,下列運算式會授予存取權:

originatesFromProjects(origin, ["projects/123456789"])

限制 Workload Identity 僅能存取其網路專案

您可以限制 Workload Identity,使其只能從與擁有該 Workload Identity 的 Google Cloud 專案相關聯的網路提出要求。專案可以是頂層專案,也可以是頂層專案的租戶專案。以專案為基礎的存取限制,有助於確保 Workload Identity 互動安全無虞。與 originatesFromProjects 不同,您不需要在運算式中指定專案編號,因此可以在多個專案中重複使用相同的存取層級。

如果來源網路專案 (或其相關聯的租戶專案) 與呼叫 Workload Identity 所屬的專案相符,下列運算式會授予存取權:

request.auth.matchesNetworkProject(origin)