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

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

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

准备工作

创建访问权限级别

控制台

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

    转到 Access Context Manager

  2. 如果出现提示,请选择您的组织。

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

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

    创建基本访问权限级别

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

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

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

      .
    3. 条件部分,选择设备属性:
      1. 点击 设备政策
      2. 选择所需的属性。

        例如,如果您想强制要求设备获得管理员批准,请选择需要管理员批准

    4. 点击保存

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

    创建自定义访问权限级别

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

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

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

      如需查找您的 CEL 表达式可以使用的设备属性,请参阅 Endpoint Verification 收集的设备属性

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

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

后续步骤