建立以裝置為準的存取層級

本文說明管理員如何使用 Access Context Manager,根據裝置屬性建立存取層級 (以裝置為準的存取層級)。

存取層級是一組屬性,可根據要求的相關情境資訊,允許存取資源。管理員可以根據端點驗證收集的裝置屬性,建立基本或自訂存取層級。

事前準備

建立存取層級

控制台

  1. 前往 Google Cloud 控制台的「Access Context Manager」頁面。

    前往 Access Context Manager

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

  3. 在「Access Context Manager」頁面中,按一下「建立存取層級」圖示 。

  4. 在「New Access Level」(建立新的存取層級) 窗格中,建立基本存取層級或自訂存取層級。如需操作說明,請展開所需部分。

    建立基本存取層級

    1. 在「Access level title」(存取層級標題) 方塊中,輸入存取層級的標題。

      標題不得超過 50 個字元,開頭須為英文字母,且只能包含數字、英文字母、底線和空格。

    2. 在「Create Conditions in」(使用以下模式建立條件:) 專區中,選取「Basic mode」(基本模式)。

      .
    3. 在「條件」部分中,選取裝置屬性:
      1. 按一下「裝置政策」。
      2. 選取必要屬性。

        舉例來說,如要強制規定裝置必須經過管理員核准,請選取「必須獲得管理員核准」。

    4. 按一下 [儲存]。

    新建立的存取層級會顯示在「Access Context Manager」頁面。

    建立自訂存取層級

    1. 在「Access level title」(存取層級標題) 方塊中,輸入存取層級的標題。

      標題不得超過 50 個字元,開頭須為英文字母,且只能包含數字、英文字母、底線和空格。

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

      如要查看 CEL 運算式可用的裝置屬性,請參閱端點驗證收集的裝置屬性。

      下列 CEL 運算式只允許從加密裝置存取:

      device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

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

    4. 按一下 [儲存]。

    新建立的存取層級會顯示在「Access Context Manager」頁面。

gcloud CLI

如要建立存取層級,請使用 gcloud access-context-manager levels create 方法。

  1. 建立 .yaml 檔案。

    • 如果是基本存取層級,請為存取層級指定裝置政策屬性。

      範例:如要僅限裝置儲存空間經過加密的使用者存取,請在 .yaml 檔案中輸入下列內容。

        - devicePolicy:
            allowedEncryptionStatuses
              - ENCRYPTED
      
    • 如果是自訂存取層級,請指定格式為單一鍵值對的 CEL 運算式:expression: "CEL_EXPRESSION"

      範例:如要限制只有裝置儲存空間經過加密且裝置狀態為「已核准」的使用者才能存取,請在 .yaml 檔案中輸入下列內容。

      expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && device.is_admin_approved_device"
      

    如需裝置政策存取層級屬性及其 YAML 格式的清單,請參閱「裝置政策屬性」。如需包含所有可能屬性的完整 YAML 檔案,請參閱這個存取層級 YAML 檔案範例。

    如要查看自訂層級規格可用的裝置屬性,請參閱「端點驗證收集的裝置屬性」。

  2. 建立存取層級。

    • 如為基本存取層級,請執行下列指令:

      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"
      }
    }
  }
}

如要進一步瞭解如何建立含各種條件和存取層級依存關係的存取層級,請參閱「建立基本存取層級」。

後續步驟