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

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

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

准备工作

创建访问权限级别

控制台

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

    转到 Access Context Manager

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

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

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

    创建基本访问权限级别

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

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

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

      ,了解所有最新动态。
    3. 条件部分,选择设备属性:
      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-manager layers 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"
      }
    }
  }
}

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

后续步骤