管理访问权限级别

本页面介绍如何管理现有访问权限级别。您可以执行以下操作:

准备工作

  • 设置默认访问权限政策,以便使用 Google Cloud CLI。

    或

    获取您的政策名称。对于使用 gcloud CLI 和进行 API 调用的命令,政策名称是必需的。如果您设置了默认访问权限政策,则无需为 gcloud CLI 指定该政策。

  • 确保在组织级层拥有 Identity and Access Management (IAM) 角色,该角色允许您管理访问权限级别。请让您的管理员授予您以下角色之一或具有相同权限的自定义角色:

列出访问权限级别

控制台

如需列出所有访问权限级别,请在 Google Cloud 控制台中打开 Access Context Manager 页面,然后根据提示选择您的组织。该页面会以网格形式显示组织的访问权限级别,包括每个访问权限级别的配置详情。

打开 Access Context Manager 页面

gcloud

要列出所有访问权限级别,请使用 list 命令。

gcloud access-context-manager levels list \
  [--policy=POLICY_NAME]

替换以下内容:

  • POLICY_NAME:贵组织的访问权限政策的名称。 只有在未设置默认访问权限政策的情况下,才需要指定此值。

输出类似于以下内容:

NAME             TITLE                  LEVEL_TYPE
Device_Trust     Device_Trust Extended  Basic
Service_Group_A  Service_Group_A        Basic

API

要列出一项政策的所有访问权限级别,请调用 accessLevels.list。

GET https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels

替换以下内容:

  • POLICY_NAME:贵组织的访问权限政策的名称。

请求正文

请求正文必须为空。

可选参数

可包含以下一个或多个查询参数。

参数
pageSize

number

默认情况下,会将 accessLevels.list 返回的访问权限级别列表分页。每个页面 100 个访问权限级别。

您可以使用此参数来修改每页返回的访问权限级别数量。

pageToken

string

如果调用返回的访问权限级别数量超过了页面大小,则响应正文会包含页面令牌。

在后续调用中,您可以使用此参数来获取下一页结果。

accessLevelFormat

enum(LevelFormat)

一般来说,访问权限级别会以定义的方式返回,即作为 BasicLevel 或 CustomLevel。

您可以为此参数指定值 CEL,以采用 Cloud 通用表达式语言将 BasicLevels 作为 CustomLevels 返回。

响应正文

如果成功,则调用的响应正文包含一个列出访问权限级别的 AccessLevels 对象,以及一个 nextPageToken 字符串。仅当返回的访问权限级别数量超过页面大小时,nextPageToken 才会有值。否则,nextPageToken 将作为空字符串返回。

列出访问权限级别(有格式)

使用 gcloud CLI,您可以获取 YAML 或 JSON 格式的访问权限级别列表。

要获取有格式的访问权限级别列表,请使用 list 命令。

gcloud access-context-manager levels list \
  --format=FORMAT \
  [--policy=POLICY_NAME]

替换以下内容:

  • FORMAT:以下值之一:

    • list(YAML 格式)

    • json(JSON 格式)

  • POLICY_NAME:贵组织的访问权限政策的名称。 只有在未设置默认访问权限政策的情况下,才需要指定此值。

YAML 输出类似于以下内容:

- basic: {'conditions': [{'ipSubnetworks': ['192.0.2.0/24']}]}
  description: Level for corp access.
  name: accessPolicies/123456789012/accessLevels/corp_level
  title: Corp Level
- basic: {'combiningFunction': 'OR', 'conditions': [{'ipSubnetworks': ['192.0.2.0/24']}]}
  description: Level for net access.
  name: accessPolicies/123456789012/accessLevels/net_level
  title: Net Level

JSON 输出类似于以下内容:

[
  {
    "basic": {
      "conditions": [
        {
          "ipSubnetworks": [
            "192.0.2.0/24"
          ]
        }
      ]
    },
    "description": "Level for corp access.",
    "name": "accessPolicies/123456789012/accessLevels/corp_level",
    "title": "Corp Level"
  },
  {
    "basic": {
      "combiningFunction": "OR",
      "conditions": [
        {
          "ipSubnetworks": [
            "192.0.2.0/24"
          ]
        }
      ]
    },
    "description": "Level for net access.",
    "name": "accessPolicies/123456789012/accessLevels/net_level",
    "title": "Net Level"
  }
]

描述访问权限级别

控制台

使用 Google Cloud 控制台,请参阅列出访问权限级别的步骤。列出访问权限级别时,出现的网格中会提供其详细信息。

gcloud

列出访问权限级别时,仅会显示其名称、标题和级别类型。要获取有关级别实际作用的详细信息,请使用 describe 命令。

gcloud access-context-manager levels describe LEVEL_NAME \
    [--policy=POLICY_NAME]

替换以下内容:

  • LEVEL_NAME:要描述的访问权限级别的名称。

  • POLICY_NAME:贵组织的访问权限政策的名称。 只有在未设置默认访问权限政策的情况下,才需要指定此值。

该命令会输出有关该级别的信息,格式为 YAML。例如,如果该级别限制对特定操作系统版本的访问,则输出类似于以下内容:

basic:
  conditions:
  - devicePolicy:
      allowedEncryptionStatuses:
      - ENCRYPTED
      osConstraints:
      - minimumVersion: 10.13.6
        osType: DESKTOP_MAC
      - minimumVersion: 10.0.18219
        osType: DESKTOP_WINDOWS
      - minimumVersion: 68.0.3440
        osType: DESKTOP_CHROME_OS
      requireScreenlock: true
name: accessPolicies/123456789012/accessLevels/Device_Trust
title: Device_Trust Extended

API

列出访问权限级别时,仅会显示级别的名称、标题和类型。 要获取有关访问权限级别的详细信息,请调用 accessLevels.get。

GET https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME

替换以下内容:

  • POLICY_NAME:贵组织的访问权限政策的名称。

  • LEVEL_NAME:要描述的访问权限级别的名称。

请求正文

请求正文必须为空。

可选参数

(可选)包括 accessLevelFormat 查询参数。一般来说,访问权限级别会以定义的方式返回,即作为 BasicLevel 或 CustomLevel。

您可以为此参数指定值 CEL,以采用 Cloud 通用表达式语言将 BasicLevels 作为 CustomLevels 返回。

响应正文

如果成功,调用的响应正文将包含一个 AccessLevel 资源,提供关于该访问权限级别的作用、该级别上次更新时间等详细信息。

更新访问权限级别

本部分介绍如何更新单个访问权限级别。要通过一项操作更新贵组织的所有访问权限级别,请参阅对访问权限级别进行批量更改。

控制台

要更新访问权限级别,请执行以下操作:

  1. 在 Google Cloud 控制台中打开 Access Context Manager 页面。

    打开 Access Context Manager 页面

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

  3. 在网格中,点击您要更新的访问权限级别名称。

  4. 在修改访问权限级别窗格中,更改访问权限级别。

    如需可添加或修改的属性完整列表,请参阅访问权限级别属性。

  5. 点击保存。

    除了更新或移除任何现有条件外,您还可以添加新的条件,以及向现有条件添加新的属性。

gcloud

使用 update 命令更新访问权限级别。

基本访问权限级别:

gcloud access-context-manager levels update LEVEL_NAME \
    --basic-level-spec=FILE \
    [--policy=POLICY_NAME]

自定义访问权限级别:

gcloud access-context-manager levels update LEVEL_NAME \
    --custom-level-spec=FILE \
    [--policy=POLICY_NAME]

替换以下内容:

  • LEVEL_NAME:您要更新的访问权限级别的名称。

  • FILE:用于定义访问权限级别条件(对于基本访问权限级别)的 YAML 文件的名称,或解析为单个布尔值的 CEL 表达式(对于自定义访问权限级别)。

    如需了解可在基本访问权限级别条件中使用的属性完整列表,请参阅访问权限级别属性。

  • POLICY_NAME:贵组织的访问权限政策的名称。 只有在未设置默认访问权限政策的情况下,才需要指定此值。

  • 您可以添加一个或多个以下选项。

    选项
    combine-function

    此选项仅用于基本访问权限级别。

    确定条件的合并方式。

    有效值:AND、OR

    description

    访问权限级别的详细说明。

    title

    访问权限级别的简短标题。访问权限级别的标题会显示在 Google Cloud 控制台中。

    您可以添加任何在 gcloud 范围内适用的标志。

示例命令

gcloud access-context-manager levels update Device_Trust \
    --basic-level-spec=corpdevspec.yaml \
    --combine-function=OR \
    --description='Access level that conforms to updated corporate spec.' \
    --title='Device_Trust Extended' \
    --policy=123456789012

API

要更新访问权限级别,请调用 accessLevels.patch。

PATCH https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME?updateMask=FIELDS

替换以下内容:

  • POLICY_NAME:贵组织的访问权限政策的名称。

  • LEVEL_NAME:您要更新的访问权限级别的名称。

  • FIELDS:您要更新的完全限定字段名称的逗号分隔列表。

请求正文

请求正文必须包含一个 AccessLevel 资源,用于指定您要对访问权限级别进行的更改。

响应正文

如果成功,调用的响应正文将包含一个 Operation 资源,提供关于修补操作的详细信息。

删除访问权限级别

本部分介绍如何删除 Access Context Manager 访问权限级别。 删除访问权限级别分为两个步骤:

  1. 检查访问权限级别依赖项。

  2. 删除单个访问权限级别。

检查访问权限级别依赖项

在删除访问权限级别之前,请确保其他访问权限级别、VPC Service Controls 服务边界、Google Workspace 情境感知访问权限政策、Google Cloud 访问权限绑定或 IAM 条件未引用该访问权限级别。

如需查找引用您要删除的访问权限级别的所有访问权限级别,请执行以下操作:

  1. 确保您已安装 jq。如需验证是否已安装 jq,请运行 jq --version。如有需要,请安装 jq。

  2. 检查访问权限级别依赖项。此命令会列出所有访问权限级别,然后使用 jq 过滤在基本或自定义级别定义中引用 LEVEL_NAME 的访问权限级别。

    echo "Searching for Access Levels referencing: accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME"
    echo ""
    
    gcloud access-context-manager levels list \
      --policy="POLICY_NAME" \
      --format=json | \
    jq -r '
      .[] |
      select(
        # Check basic levels: Is the target access level present as an element in any requiredAccessLevels array?
        ([(.basic.conditions // [])[] | (.requiredAccessLevels // []) | index("accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME") != null] | any)
        or
        # Check custom levels: Does the expression string contain the target access level?
        ((.custom.expr.expression // "") | (contains("accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME") or contains("levels.LEVEL_NAME")))
      ) |
      "  - \(.title) (Name: \(.name))"
    '
    
    echo ""
    echo "If any levels are listed, they reference LEVEL_NAME. You must update these referencing levels before you delete LEVEL_NAME."

    替换以下内容:

    • POLICY_NAME:您组织的访问权限政策的名称。只有在未设置默认访问权限政策的情况下,才需要指定此值。

    • LEVEL_NAME:要删除的访问权限级别的名称,例如 my_level。

    在输出中,系统会列出引用 accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME 或 levels.LEVEL_NAME 的所有访问权限级别,以及其 title 和 name。这些访问权限级别包括:

    • 基本级别,其中 accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME 列在 requiredAccessLevels 中

    • 自定义级别,其中 accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME 或 levels.LEVEL_NAME 列在 custom.expr.expression 字符串中。

  3. 如果该命令列出了任何引用访问权限级别,您必须先更新这些级别以移除依赖项。如需查看相关说明,请参阅更新访问权限级别。

移除所有引用后,您可以继续删除单个访问权限级别。

删除单个访问权限级别

控制台

要删除访问权限级别,请执行以下操作:

  1. 在 Google Cloud 控制台中打开 Access Context Manager 页面。

    打开 Access Context Manager 页面

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

  3. 在网格中,针对您要删除的访问权限级别所对应行,点击 按钮。

  4. 点击删除。

  5. 在出现的对话框中,确认您要删除访问权限级别。

gcloud

要删除访问权限级别,请执行以下操作:

  1. 使用 delete 命令来删除访问权限级别。

    gcloud access-context-manager levels delete LEVEL_NAME \
        [--policy=POLICY_NAME]

    替换以下内容:

    • LEVEL_NAME:要删除的访问权限级别的名称。

    • POLICY_NAME:您组织的访问权限政策的名称。只有在未设置默认访问权限政策的情况下,才需要指定此值。

  2. 确认您要删除访问权限级别。

    例如:

    You are about to delete level Device_Trust
    
    Do you want to continue (Y/n)?
    

    您将看到如下所示的输出:

    Waiting for operation [accessPolicies/123456789012/accessLevels/Device_Trust/delete/1531171874311645] to complete...done.
    Deleted level [Device_Trust].
    

API

要删除访问权限级别,请调用 accessLevels.delete。

DELETE https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME

替换以下内容:

  • POLICY_NAME:贵组织的访问权限政策的名称。

  • LEVEL_NAME:您要删除的访问权限级别的名称。

请求正文

请求正文必须为空。

响应正文

如果成功,调用的响应正文将包含一个 Operation 资源,提供关于此删除操作的详细信息。