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

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

概览

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

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

准备工作

确保您已创建 CBA 访问权限级别 Google Cloud 项目的配额。

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

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

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

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

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

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

虽然使用 IAP-TCP,您可以授予对集群中的所有虚拟机实例的访问权限 项目时,您必须为每个虚拟机实例配置基于证书的访问权限。

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

控制台

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

    转到 IAP 页面

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

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

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

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

API

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

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

  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. 通过以下方式访问 Google Cloud 虚拟机: IAP 隧道

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

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

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