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

本文档介绍管理员如何使用 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 表达式可以使用的设备属性, 请参阅端点验证收集的设备属性

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

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

后续步骤