保护 Google Cloud Console 和 Google Cloud API

使用 Cloud Console 和 Google Cloud API 情境感知访问权限,通过基于上下文的规则限制对于 Cloud Console 和 Google Cloud API 的访问。它基于现有 BeyondCorp Enterprise 套件(端点验证和 Access Context Manager)构建,可帮助确保组织中满足已定义的访问权限要求的个人和群组能够访问 Cloud Console 和 Google Cloud API(包括通过 gcloud 命令行工具)。

此功能可按照以下步骤设置:

  1. [可选] 将端点验证部署到组织中的设备。
  2. 在 Access Context Manager 中创建访问权限级别。
  3. 创建要受 BeyondCorp Enterprise 限制约束的一组用户。
  4. 获取所需的 Identity and Access Management 权限。
  5. 创建实施 Cloud Console 和 Google Cloud API 情境感知规则的访问权限绑定。

[可选] 部署端点验证

借助端点验证,您可以构建访问组织数据的设备清单。作为 BeyondCorp Enterprise 解决方案的一部分,它还提供关键设备信任和基于安全性的访问权限控制,并帮助实施对 Google Cloud 资源的精细访问权限控制。

在 Mac、Windows 和 Linux 用户的桌面设备和笔记本电脑上,端点验证作为 Chrome 扩展程序运行。管理员可以通过 Google Workspace 管理控制台将其部署到组织的公司自有设备上,组织的成员也可以自行安装

创建访问权限级别

您需要在 Access Context Manager 中创建基本访问权限级别,以定义在确定对 Cloud Console 和 Google Cloud API 的访问权限时要使用的访问权限级别。

创建用户组

创建一组应受情境感知限制约束的用户。该组中的任何用户(也是您组织的成员)都必须满足之前创建的访问权限级别,才能访问 Cloud Console 和 Google Cloud API。

授予所需的 IAM 权限

在组织级层授予创建 Access Context Manager 访问权限绑定所需的 IAM 权限。

控制台

  1. 转到 Cloud Console 中的 IAM 和管理页面。

    转到“IAM 和管理”

  2. 点击添加并配置以下内容:

    • 新成员:指定要授予权限的用户或群组。
    • 选择角色:选择 Access Context Manager > Cloud Access Binding Admin
  3. 点击保存

gcloud

  1. 确保您已经过身份验证并拥有在组织级层添加 IAM 权限的足够权限。您至少需要具有 Organization Admin 角色。

    确认拥有适当权限后,运行以下命令进行登录:

    gcloud auth login
    
  2. 通过运行以下命令来分配 GcpAccessAdmin 角色:

    gcloud organizations add-iam-policy-binding ORG_ID \
      --member=user:EMAIL \
      --role=roles/accesscontextmanager.gcpAccessAdmin
    
    • ORG_ID 是您组织的 ID。如果您不知道组织 ID,可使用以下命令进行查找:

       gcloud organizations list
      
    • EMAIL 是您要授予角色的用户或群组的电子邮件地址。

创建访问权限绑定

现在,您可以开始创建访问权限绑定。该访问权限绑定是之前创建的用户组和定义的用于访问 Cloud Console 和 Google Cloud API 的 Access Context Manager 访问权限级别之间的映射。

控制台

  1. 转到 Cloud Console 中的 BeyondCorp Enterprise 页面。

    转到 BeyondCorp Enterprise

  2. 选择一个组织,然后点击选择

  3. 点击管理访问权限以选择哪些用户组应拥有访问权限。

  4. 点击添加并配置以下内容:

    • 成员组:指定要授予访问权限的群组。 您只能选择尚未绑定到访问权限级别的群组。
    • 选择访问权限级别:选择应应用于该群组的访问权限级别。
  5. 点击保存

gcloud

如需详细了解此命令以及其他 gcloud access-context-manager cloud-bindings 命令,请参阅 Cloud SDK。

gcloud access-context-manager cloud-bindings create \
    --group-key GROUP_ID \
    --level ACCESS_LEVEL \
    --organization ORG_ID
  • GROUP_ID 替换为您之前创建的用户组的 ID。

  • ACCESS_LEVEL 的形式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。在您创建访问权限级别后,可以在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

  • 如果尚未预设 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。

API

  1. 编写请求正文:

    {
      "groupKey": "GROUP_ID",
      "accessLevels": [ "ACCESS_LEVEL" ]
    }
    
    • GROUP_ID 替换为您之前创建的用户组的 ID。

    • ACCESS_LEVEL 的形式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。在您创建访问权限级别后,可以在 Access Context Manager 中找到 POLICY_IDACCESS_LEVEL_NAME 的值。

  2. 通过调用 gcpUserAccessBindings 端点创建访问权限绑定,将 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID:

    POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    响应会返回 GcpUserAccessBinding 资源,其格式为:

    {
      // Unique name for the access binding, in the form
      // "organizations/ORG_ID/gcpUserAccessBindings/BINDING_ID"
      name: string,
    
      // Unique Group ID.
      group_key: string,
    
      // The access level that users of the group must satisfy, in the form
      // "accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"
      access_levels: [ string ]
    }
    

验证成功

为一组用户设置访问权限绑定后,应根据是否满足绑定的访问权限级别来控制对 Cloud Console 和 Google Cloud API 的访问权限。

您可以验证绑定是否成功创建,对其进行修改,也可以将其删除。

控制台

访问权限绑定创建后,控制台中会显示组织的所有访问权限绑定,您可根据需要进行修改或删除。

gcloud

  • 查看组织中的所有访问权限绑定:

    gcloud access-context-manager cloud-bindings list \
        --organization ORG_ID
    

    如果尚未预设 access-context-manager/organization 属性,请将可选 --organization 标志中的 ORG_ID 替换为您在创建 GcpAccessAdmin 角色时使用的组织的 ID。

  • 如需修改访问权限绑定(例如更改访问权限级别),请执行以下操作:

    gcloud access-context-manager cloud-bindings update \
        --binding ACCESS_BINDING \
        --level ACCESS_LEVEL
    

    ACCESS_BINDING 替换为 organizations/ORG_ID/gcpUserAccessBindings/ACCESS_BINDING_NAME,其中 ORG_ID 是您在创建 GcpAccessAdmin 角色时使用的组织的 ID,ACCESS_BINDING_NAME 是在创建访问绑定时为 name 标识符返回的唯一字符串。

    应按照为该资源创建绑定时的格式设置 ACCESS_LEVEL 值的格式。

  • 如需删除特定访问权限绑定,请执行以下操作:

    gcloud access-context-manager cloud-bindings delete \
        --binding ACCESS_BINDING
    

    按照修改访问权限绑定的相同方式设置 ACCESS_BINDING 值的格式。

API

  • 查看组织中的所有访问权限绑定:

    GET https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    这会返回 GcpUserAccessBinding 资源的列表。

  • 如需修改访问权限绑定(例如更改访问权限级别),请编写定义更改的请求正文,然后使用资源名称调用端点:

    {
      "accessLevels": [ "ACCESS_LEVEL" ]
    }
    

    按照为该资源创建绑定时的格式设置 ACCESS_LEVEL 值的格式。

    PATCH https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME?update_mask=access_levels
    

    ACCESS_BINDING_NAME 替换为创建访问权限绑定时为 name 标识符返回的唯一字符串。

  • 如需删除特定的 GcpUserAccessBinding 资源,请使用资源名称调用端点:

    DELETE https://accesscontextmanager.googleapis.com/v1/ACCESS_BINDING_NAME
    

    ACCESS_BINDING_NAME 替换为创建访问权限绑定时为 name 标识符返回的唯一字符串。

常见问题解答

  • 新创建的访问权限绑定需要多长时间才能生效?

    最长可能需要 24 小时。

  • 如果我删除具有访问权限绑定的组,会发生什么情况?

    组和绑定会被删除,组中的所有用户都被允许访问。

  • 如果我删除访问权限级别绑定中使用的访问权限级别,会发生什么情况?

    始终无法满足访问权限级别,该绑定组所有用户的访问将被拒绝。

  • 如果一个用户属于多个具有访问权限绑定的组,会发生什么情况?

    该用户只需满足其中一个组的访问权限级别即可获得访问权限。

  • 不属于我的组织的用户会怎么样?

    不属于您组织的任何用户不受访问权限绑定的约束,即使您已将其添加到受情境感知限制约束的用户组也是如此。

后续步骤