为虚拟机启用基于证书的访问权限

本页介绍了如何为 Google Cloud 虚拟机启用基于证书的访问权限 (CBA)。您可以使用 CBA 来确保从 连接到 Google Cloud 虚拟机。

概览

适用于虚拟机的 CBA 使用 Google Cloud 情境感知访问权限功能来确保 使用双向 TLS (mTLS) 进行访问。以下是您在为虚拟机启用和使用 CBA 时要使用的主要组件:

  • Access Context Manager:可让您创建在确定对网站应用的访问权限时需要证书的访问权限级别。
  • Identity-Aware Proxy (IAP):IAP TCP 转发可让您建立加密的 通过该隧道,您可以将 SSH、RDP 和其他流量转发到虚拟机实例。 此外,通过 IAP 政策,您可以精细控制哪些用户可以建立到特定虚拟机实例的隧道,以及用户必须满足哪些访问条件才能使用此类隧道。
  • Chrome 企业版政策:在用户之间提供双向身份验证 (mTLS) 和虚拟机。
  • Google Cloud CLI:在使用 gcloud CLI 时,在用户和虚拟机之间提供互相身份验证 (mTLS)。

准备工作

确保您已为 Google Cloud 项目创建了 CBA 访问权限级别

授予通过 IAP TCP 转发访问虚拟机的角色

您必须为项目授予适当的 Identity and Access Management (IAM) 角色, 允许用户或用户群组使用 IAP TCP 转发来访问虚拟机。

下表显示了您需要授予受信任角色的预定义角色 TCP 转发和相关任务的管理人员。

任务 角色 更多信息
TCP 转发 IAP 保护的隧道用户 (roles/iap.tunnelResourceAccessor) 授予对项目中所有虚拟机实例的访问权限授予对特定虚拟机的访问权限
通过 SSH 访问 计算实例管理员 (v1) (roles/compute.instanceAdmin.v1)
OS Login(推荐) 各种 为用户账号配置 OS Login 角色
使用服务账号 Service Account User (roles/iam.serviceAccountUser) serviceAccountUser 角色

如需详细了解如何授予 IAP TCP 转发角色, 请参阅授予 IAP TCP 转发角色

配置对虚拟机的基于证书的访问权限

虽然 IAP-TCP 允许您授予对项目中所有虚拟机实例的访问权限,但您必须为每个单独的虚拟机实例配置基于证书的访问权限。

要向用户或用户组授予对虚拟机基于证书的访问权限,请授予 虚拟机实例的 roles/iap.tunnelResourceAccessor 角色。其他角色 可以对项目进行授权

控制台

  1. 打开 IAP 管理页面,然后选择 SSH 和 TCP 资源标签页。

    转到 IAP 页面

  2. 选择要配置的虚拟机实例。点击显示信息 面板

  3. 点击添加主账号并配置以下各项:

    • 新的主账号:指定您要 授予访问权限。
    • 选择角色:选择 Cloud IAP > IAP-Secured Tunnel User
  4. 点击添加 IAM 条件,然后配置条件:

    • 标题:输入条件的名称。
    • 条件构建器:从条件类型下拉菜单中选择访问权限级别,然后选择之前创建的基于证书的访问权限级别。
  5. 点击保存

API

要配置对虚拟机基于证书的访问权限,请修改应用的 policy.json 文件。

如需详细了解如何使用 IAM API 管理访问权限政策,请参阅管理对受 IAP 保护的资源的访问权限

  1. 导出以下变量。

    export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    
  2. 使用 getIamPolicy 方法获取 Compute Engine 实例的 IAM 政策。最后的空数据位将 curl 请求转换为 POST,而不是 GET

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \
         -d ''
    
  3. iap.tunnelResourceAccessor 角色和基于证书的访问权限授予 方法是修改 IAM 政策 JSON 文件

    以下是一个 policy.json 文件的示例,该文件会向一组虚拟机实例管理员授予 iap.tunnelResourceAccessor 角色,从而为他们提供对受 IAP 保护的隧道资源的基于证书的访问权限。

    请注意,如果主账号具有 Owner 角色,则他们有权使用 使用 IAP 进行 TCP 转发。

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.tunnelResourceAccessor",
            "members": ["group:instance-admins@example.com"],
            "condition": {
              "expression": "\"accessPolicies/POLICY_NAME/accessLevels/CERTIFICATE_BASED_ACCESS_LEVEL_NAME\" in request.auth.access_levels,
              "title": "CERTIFICATE_BASED_CONDITION_NAME"
            }
          }
        ]
      }
    }
    

    如需查找政策名称,请调用 accessPolicies.list 方法。

    GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
    
  4. 使用 setIamPolicy 方法设置新的 policy.json 文件。

    curl -i -H "Content-Type:application/json" \
              -H "Authorization: Bearer $(gcloud auth print-access-token)" \
              ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \
              -d @${JSON_NEW_POLICY}
    

使用客户端证书访问虚拟机

如需使用客户端证书访问虚拟机,请使用以下方法之一。

  • 使用企业证书: 如果您有 PKI 基础架构,请使用此方法。
  • 使用端点验证预配的证书:如果您没有 PKI 基础架构,请使用此方法。端点验证 自动预配和注册自签名证书 适用于各种设备的 Google Cloud。

使用 Chrome 浏览器上的客户端证书访问虚拟机

  1. 使用以下选项之一配置 Chrome 浏览器。
  2. 在 Chrome 浏览器中,输入以下域名以访问 Google Cloud 控制台:console-secure.cloud.google.com
  3. 使用 IAP 隧道访问 Google Cloud 虚拟机。

使用 gcloud CLI 上的客户端证书访问虚拟机

  1. 使用以下方法之一配置 gcloud CLI。

  2. 使用 IAP 隧道访问 Google Cloud 虚拟机。