为用户群组强制执行基于证书的访问权限

本页面介绍了如何使用基于用户群组的情境感知访问权限政策来强制执行基于证书的访问权限 (CBA)。

您可以将 CBA 访问权限级别绑定到用户组,以限制对所有 Cloud de Confiance by S3NS 服务的访问权限。此限制适用于调用 API 的所有客户端 应用。 Cloud de Confiance

您还可以选择将限制应用于特定客户端应用,或豁免特定应用。这些应用包括第三方 应用和 Google 构建的第一方应用,例如 Cloud Console的控制台和 Google Cloud SDKGoogle Cloud CLI。 Cloud de Confiance

准备工作

创建 CBA 访问权限级别 ,该级别要求在确定对资源的访问权限时提供证书。

创建用户组

创建一个用户组,其中包含应根据 CBA 访问权限级别授予访问权限的成员。

分配 Cloud Access Binding Admin 角色

Cloud Access Binding Admin 角色分配给用户组。

您必须拥有在组织级层添加 IAM 权限的足够权限。您至少需要具有 Organization AdminCloud Access Binding Admin角色。

控制台

  1. 在控制台中,前往 IAM

    转到 IAM

  2. 权限标签页中,点击授予访问权限,然后配置 以下内容:

    1. 新正文:指定要向其授予角色的群组。
    2. 对于选择角色 选项,选择 Access Context Manager > Cloud Access Binding Admin
    3. 点击保存

gcloud

  1. 登录:

    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 是您要向其授予角色的人员或群组的电子邮件地址。

将 CBA 访问权限级别绑定到用户组

在此绑定选项中,CBA 访问权限级别适用于您指定的用户组的所有客户端应用。

  1. 在控制台中,前往“控制台和 API 访问权限政策”页面:

    前往“控制台和 API 访问权限政策”页面

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

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

  4. 点击添加 ,然后配置以下内容:

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

将 CBA 访问权限级别绑定到用户组和特定应用

在某些使用情形(例如支持客户端证书的应用)中, 将 CBA 访问权限级别绑定到用户组可能过于 宽泛。您可以使用此选项将 CBA 访问权限级别应用于支持客户端证书的应用。

以下示例将 CBA 访问权限级别绑定到 Cloud de Confiance 控制台、 gcloud CLI 和用户的 OAuth 应用。

  1. 登录 gcloud CLI。

    gcloud auth application-default login
    
  2. 创建 policy_file.yaml 文件。

    您可以使用应用的 OAuth 客户端 ID 指定应用。如需指定 Google 应用,请使用应用名称,例如控制台的 Cloud de Confiance Cloud Console。仅支持 Cloud de Confiance 控制台和 Google Cloud SDK Google 应用。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            name: Cloud Console
      activeSettings:
        accessLevels:
        - CBA_ACCESS_LEVEL
    - scope:
        clientScope:
          restrictedClientApplication:
            name: Google Cloud SDK
      activeSettings:
        accessLevels:
        - CBA_ACCESS_LEVEL
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID_1
      activeSettings:
        accessLevels:
        - CBA_ACCESS_LEVEL
    

    替换以下内容:

    • CLIENT_ID_1:OAuth 客户端 ID。
    • CBA_ACCESS_LEVEL:CBA 访问权限级别名称,格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
  3. 创建 CBA 访问权限级别绑定。

    gcloud access-context-manager cloud-bindings create \
       --group-key='GROUP_KEY' \
       --organization='ORG_ID' \
       --binding-file=policy_file.yaml
    

    替换以下内容:

    • GROUP_KEY:唯一的群组 ID
    • ORG_ID:组织 ID

    gcloud

    您可以使用唯一的群组 ID 作为 GROUP_KEY。如需获取唯一的群组 ID,请使用以下命令:

    gcloud identity groups describe EMAIL
    

    EMAIL 替换为群组的电子邮件地址。唯一的群组 ID 是群组名称中 / 之后返回的值。 例如,groups/01gf8i8311xalqg 中的唯一群组 ID 为 01gf8i8311xalqg

    REST

    您可以使用唯一的群组 ID 作为 GROUP_KEY。如需使用 REST API 获取 get唯一的群组 ID,您可以通过对群组资源调用该方法来检索该 ID。唯一的群组 ID 会在群组资源的 id 字段中返回。

  4. 可选:更新现有访问权限级别绑定。

    gcloud access-context-manager cloud-bindings update \
       --binding='BINDING_NAME' \
       --binding-file=policy_file.yaml
    

    BINDING_NAME 替换为创建绑定时自动生成的 绑定名称。

从绑定中豁免应用

另一种应用 CBA 访问权限级别的方法(不会屏蔽不支持客户端证书的客户端应用)是将这些应用从政策中豁免。

以下步骤假定您之前已 创建 CBA 访问权限级别 ,该级别要求在确定对资源的访问权限时提供证书。

  1. 使用以下方法之一创建豁免访问权限级别。

  2. 创建 exemption_file.yaml 文件。

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID_2
      activeSettings:
        accessLevels:
        - EXEMPT_ACCESS_LEVEL
    - scope:
        clientScope:
          restrictedClientApplication:
            name: APPLICATION_NAME_2
      activeSettings:
        accessLevels:
        - EXEMPT_ACCESS_LEVEL
    

    替换以下内容:

    • CLIENT_ID_2:OAuth 客户端 ID
    • APPLICATION_NAME_2:应用名称
    • EXEMPT_ACCESS_LEVEL:豁免访问权限级别名称,格式为 accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
  3. 创建豁免绑定政策。

    gcloud access-context-manager cloud-bindings create \
       --group-key='GROUP_KEY' \
       --organization='ORG_ID' \
       --binding-file=exemption_file.yaml
    

    替换以下内容:

    • GROUP_KEY:唯一的群组 ID
    • ORG_ID:组织 ID