您可以在 Access Context Manager 中使用自訂存取層級,透過以一般運算語言 (CEL) 子集編寫的布林運算式,控管Google Cloud 資源的存取權。您可以評估要求屬性 (例如來源網路專案、IP 位址、身分和第三方安全性服務的裝置資料),強制執行精細的情境感知存取權規定。
如要在自訂存取層級運算式中使用裝置屬性,必須訂閱付費方案。如要進一步瞭解如何建構 CEL 運算式,請參閱自訂存取層級詳細說明。建立自訂存取層級後,您可以按照管理基本存取層級的方式管理。
事前準備
- 為貴機構建立存取權政策。
建立自訂存取層級
您可以使用 Google Cloud 控制台、gcloud 指令列工具、REST API 或 RPC 建立自訂存取層級。
控制台
如要使用 Google Cloud 控制台建立自訂存取層級,請按照下列步驟操作:
在 Google Cloud 控制台中開啟「Access Context Manager」頁面。
如果系統提示您選取機構,請依提示選取您的機構。
按一下「Access Context Manager」頁面最上方的 [New] (新增)。
在「New Access Level」(建立新的存取層級) 窗格中:
在「存取層級標題」方塊中,輸入存取層級的標題。 標題長度不得超過 50 個字元,開頭須為英文字母,且只能包含數字、英文字母、底線和空格。
在「Create Conditions in」下方,選取「進階模式」。
在「條件」部分,輸入自訂存取層級的運算式。條件必須解析為單一布林值。
如需範例和更多資訊,瞭解一般運算語言 (CEL) 支援和自訂存取層級,請參閱自訂存取層級規格。
按一下 [儲存]。
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
|
|
||||
title
|
|
||||
description
|
|
||||
custom
|
|
||||
自訂存取層級範例
本節提供自訂存取層級的範例。
根據來源專案限制存取權
您可以限制資源存取權,只允許來自特定 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)