创建基于设备的访问权限级别

本文档介绍了管理员如何使用 Access Context Manager 根据设备属性(基于设备的访问权限级别)创建访问权限级别。

访问权限级别是一组属性,用于根据请求的上下文信息允许访问资源。作为管理员,您可以使用端点验证收集的设备属性来创建基本访问权限级别或自定义访问权限级别。

准备工作

创建访问权限级别

控制台

  1. 在 Google Cloud 控制台中,前往 Access Context Manager 页面。

    转到 Access Context Manager

  2. 如果收到提示,请选择您的组织。

  3. Access Context Manager 页面上,点击 创建访问权限级别

  4. 新建访问权限级别窗格中,创建基本访问权限级别或自定义访问权限级别。有关说明,请展开必需的部分。

    创建基本访问权限级别

    1. 访问权限级别标题框中,输入访问权限级别的标题。

      标题不得超过 50 个字符,以字母开头,且只能包含数字、字母、下划线和空格。

    2. 在以下中创建条件部分中,选择基本模式

    3. Conditions 部分中,选择设备属性:
      1. 点击 Device Policy
      2. 选择必需属性。

        例如,如果您想在设备上强制执行管理员批准,请选择需要管理员批准

    4. 点击保存

    新创建的访问权限级别会显示在 Access Context Manager 页面上。

    创建自定义访问权限级别

    1. 访问权限级别标题框中,输入访问权限级别的标题。

      标题不得超过 50 个字符,以字母开头,且只能包含数字、字母、下划线和空格。

    2. 在以下中创建条件部分中,选择高级模式
    3. 条件部分中,输入自定义访问权限级别的表达式。条件必须解析为单个布尔值。

      如需查找 CEL 表达式可用的设备属性,请参阅端点验证收集的设备属性

      以下 CEL 表达式仅允许通过已加密设备进行访问:

      device.encryption_status == DeviceEncryptionStatus.ENCRYPTED

      如需查看通用表达式语言 (CEL) 支持和自定义访问权限级别的示例及更多信息,请参阅自定义访问权限级别规范

    4. 点击保存

    新创建的访问权限级别会显示在 Access Context Manager 页面上。

gcloud CLI

要创建访问权限级别,请使用 gcloud access-context-managerLEVEL 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"
      }
    }
  }
}

如需详细了解如何创建具有各种条件和访问权限级别依赖项的访问权限级别,请参阅创建基本访问权限级别

后续步骤