本文說明管理員如何使用 Access Context Manager,根據裝置屬性建立存取層級 (裝置型存取層級)。
存取層級是一組屬性,可根據要求的內容資訊,允許存取資源。管理員可以透過端點驗證收集的裝置屬性,建立基本或自訂存取層級。
事前準備
如要在這個頁面完成工作,您必須具備下列其中一種角色:
- Access Context Manager 管理員 (
roles/accesscontextmanager.policyAdmin
) - Access Context Manager 編輯者 (
roles/accesscontextmanager.policyEditor
)
- Access Context Manager 管理員 (
建立存取層級
主控台
前往 Google Cloud 控制台的「Access Context Manager」頁面。
如果系統提示您選取機構,請依提示選取您的機構。
在「Access Context Manager」頁面中,按一下「建立存取層級」圖示
。在「New Access Level」(建立新的存取層級) 窗格中,建立基本存取層級或自訂存取層級。如需操作說明,請展開所需部分。
建立基本存取層級
在「Access level title」(存取層級標題) 方塊中,輸入存取層級的標題。
標題不得超過 50 個字元,開頭須為英文字母,且只能包含數字、英文字母、底線和空格。
在「Create Conditions in」(在下列位置建立條件) 區段中, 選取「Basic mode」(基本模式)
.- 在「條件」部分中,選取裝置屬性:
- 按一下「裝置政策」 。
選取必要屬性。
舉例來說,如要強制規定裝置必須獲得管理員核准,請選取「規定管理員必須核准」。
- 按一下 [儲存]。
新建立的存取層級會顯示在「Access Context Manager」頁面。
建立自訂存取層級
在「Access level title」(存取層級標題) 方塊中,輸入存取層級的標題。
標題不得超過 50 個字元,開頭須為英文字母,且只能包含數字、英文字母、底線和空格。
- 在「Create Conditions in」(在以下位置建立條件) 區段中,選取「Advanced mode」(進階模式)。
在「條件」部分中,輸入自訂存取層級的運算式。條件必須解析為單一布林值。
如要找出 CEL 運算式可用的裝置屬性,請參閱端點驗證收集的裝置屬性。
下列 CEL 運算式只允許從加密裝置存取:
device.encryption_status == DeviceEncryptionStatus.ENCRYPTED
如需一般運算語言 (CEL) 支援和自訂存取層級的範例及詳細資訊,請參閱「自訂存取層級詳細說明」。
- 按一下 [儲存]。
新建立的存取層級會顯示在「Access Context Manager」頁面。
gcloud CLI
如要建立存取層級,請使用 gcloud access-context-manager levels create 方法。
建立
.yaml
檔案。如果是基本存取層級,請為存取層級指定裝置政策屬性。
範例:如要僅限裝置儲存空間經過加密的使用者存取,請在
.yaml
檔案中輸入下列內容。- devicePolicy: allowedEncryptionStatuses - ENCRYPTED
如果是自訂存取層級,請指定格式為單一鍵值對的 CEL 運算式:
expression: "CEL_EXPRESSION"
範例:如要限制只有裝置儲存空間經過加密且裝置狀態為「已核准」的使用者才能存取,請在
.yaml
檔案中輸入下列內容。expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && device.is_admin_approved_device"
如需裝置政策存取層級屬性及其 YAML 格式的清單,請參閱「裝置政策屬性」。如需包含所有可能屬性的完整 YAML 檔案,請參閱這個存取層級 YAML 檔案範例。
如要查看自訂層級規格可用的裝置屬性,請參閱「端點驗證收集的裝置屬性」。
建立存取層級。
如要設定基本存取層級,請執行下列指令:
gcloud access-context-manager levels create ACCESS_LEVEL_NAME \ --title=TITLE \ --basic-level-spec=FILE_NAME.yaml\ --policy=POLICY_NAME
如為自訂存取層級,請執行下列指令:
gcloud access-context-manager levels create ACCESS_LEVEL_NAME \ --title=TITLE \ --custom-level-spec=FILE_NAME.yaml\ --policy=POLICY_NAME
其中:
ACCESS_LEVEL_NAME 是存取層級的專屬名稱。 格式必須為
accessPolicies/POLICY_ID/accessLevels/LEVEL_ID
。LEVEL_ID 是存取層級的名稱。 名稱長度不得超過 50 個字元,開頭必須是英文字母,且只能包含數字、英文字母和底線。
TITLE 是使用者可理解的文字標題,政策不得使用重複的標題。
FILE_NAME 是
.yaml
檔案的名稱。基本存取層級包含裝置政策屬性。如果是自訂存取層級,則包含格式為單一鍵/值組的 CEL 運算式:`expression: "CEL_EXPRESSION"。POLICY_NAME 是指您機構的存取權政策名稱。
畫面會顯示類似以下內容的輸出:
Create request issued for: NAME Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done. Created level NAME.
API
使用 accessPolicies.accessLevels.create 方法建立存取層級。
建立基本存取層級
使用任何要求資料之前,請先替換以下項目:
- POLICY_ID:貴機構存取權政策的 ID。
- LEVEL_ID:存取層級的名稱。名稱長度不得超過 50 個字元,開頭須為英文字母,而且只能使用數字、英文字母和底線。
- ACCESS_LEVEL_NAME:存取層級的專屬名稱。格式必須為
accessPolicies/POLICY_ID/accessLevels/LEVEL_ID
。 - TITLE:使用者可自然閱讀的標題。政策不得使用重複的標題。
- DESCRIPTION:存取層級及其用途的說明。
- CONDITION:授予存取層級的必要條件清單。
HTTP 方法和網址:
POST https://accesscontextmanager.googleapis.com/v1/{parent=accessPolicies/POLICY_ID}/accessLevels
JSON 要求主體:
For basic access levels: { "name": ACCESS_LEVEL_NAME, "title": TITLE, "description": DESCRIPTION, "basic": { "conditions": [ { CONDITION } ], } }, }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為 request.json
的檔案中,然後執行下列指令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://accesscontextmanager.googleapis.com/v1/{parent=accessPolicies/POLICY_ID}/accessLevels"
PowerShell
將要求主體儲存在名為 request.json
的檔案中,然後執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://accesscontextmanager.googleapis.com/v1/{parent=accessPolicies/POLICY_ID}/accessLevels" | Select-Object -Expand Content
您應該會收到如下的 JSON 回應:
{ "name": "operations/accessPolicies/84961948973/accessLevels/deviceEncrypted/create/1666896068847514", "metadata": { "@type": "type.googleapis.com/google.identity.accesscontextmanager.v1.AccessContextManagerOperationMetadata" }, "done": true, "response": { "@type": "type.googleapis.com/google.identity.accesscontextmanager.v1.AccessLevel", "name": "accessPolicies/84961948973/accessLevels/deviceEncrypted", "title": "accessPolicies/84961948973/accessLevels/deviceEncrypted", "basic": { "conditions": [ { "devicePolicy": { "allowedEncryptionStatuses": [ "ENCRYPTED" ] } } ] } } }
建立自訂存取層級
使用任何要求資料之前,請先替換以下項目:
- POLICY_ID:貴機構存取權政策的 ID。
- LEVEL_ID:存取層級的名稱。名稱長度不得超過 50 個字元,開頭須為英文字母,而且只能使用數字、英文字母和底線。
- ACCESS_LEVEL_NAME:存取層級的專屬名稱。格式必須為
accessPolicies/POLICY_ID/accessLevels/LEVEL_ID
。 - TITLE:使用者可自然閱讀的標題。政策不得使用重複的標題。
- DESCRIPTION:存取層級及其用途的說明。
- CEL_EXPRESSION:評估結果為布林值的 CEL 運算式。
HTTP 方法和網址:
POST https://accesscontextmanager.googleapis.com/v1/{parent=accessPolicies/POLICY_ID}/accessLevels
JSON 要求主體:
{ "name": ACCESS_LEVEL_NAME, "title": TITLE, "description": DESCRIPTION, "custom": { "conditions": [ { "expr": { CEL_EXPRESSION } } ] } }, }
如要傳送要求,請選擇以下其中一個選項:
curl
將要求主體儲存在名為 request.json
的檔案中,然後執行下列指令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://accesscontextmanager.googleapis.com/v1/{parent=accessPolicies/POLICY_ID}/accessLevels"
PowerShell
將要求主體儲存在名為 request.json
的檔案中,然後執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://accesscontextmanager.googleapis.com/v1/{parent=accessPolicies/POLICY_ID}/accessLevels" | Select-Object -Expand Content
您應該會收到如下的 JSON 回應:
{ "name": "operations/accessPolicies/84961948973/accessLevels/sampleCustomAccessLevelName/create/1666936427127701", "metadata": { "@type": "type.googleapis.com/google.identity.accesscontextmanager.v1.AccessContextManagerOperationMetadata" }, "done": true, "response": { "@type": "type.googleapis.com/google.identity.accesscontextmanager.v1.AccessLevel", "name": "accessPolicies/84961948973/accessLevels/sampleCustomAccessLevelName", "title": "accessPolicies/84961948973/accessLevels/sampleCustomAccessLevelTitle", "custom": { "expr": { "expression": "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED" } } } }
如要進一步瞭解如何建立具有各種條件和存取層級依附元件的存取層級,請參閱「建立基本存取層級」。