为本地应用启用 IAP

本指南介绍如何通过部署 IAP 连接器使用 Identity-Aware Proxy (IAP) 保护 Google Cloud 外部基于 HTTP 的本地应用的安全。

如需详细了解 IAP 如何保护本地应用和资源,请参阅在本地应用中使用 Cloud IAP 概览

准备工作

在开始之前,您需要做好以下准备:

  • 安装 Google Cloud SDK
  • 一个基于 HTTP 的本地应用,该应用可通过 DNS 主机名进行访问并接受 HTTPS 流量。该应用还必须具有自己的 IAP 实例。
  • 如果您的应用无法公开访问,请使用 Cloud Interconnect 在 Google Cloud 和本地应用之间建立连接。
  • Cloud Identity 成员已授予您 Google Cloud 项目的 Owner 角色
  • 启用了结算功能的 Google Cloud 项目。
  • DNS 主机名,用作到 Google Cloud 的流量的入口点。例如,www.hr-domain.com
  • 您的本地应用的 DNS 主机名。例如,hr-internal.domain.com
  • DNS 主机名的 SSL 或 TLS 证书,用作到 Google Cloud 的流量的入口点。可以使用现有的自行管理证书或由 Google 管理的证书。如果您没有证书,请使用 Let's Encrypt 创建一个。

启用所需的 API

要配置 IAP 连接器,必须启用以下 API:

  1. 启用 Compute Engine API。

    启用 Compute Engine API

  2. 启用 Google Kubernetes Engine API。

    启用 Google Kubernetes Engine API

  3. 启用 Cloud Deployment Manager API V2。

    启用 Cloud Deployment Manager API V2

创建 IAP 连接器部署

IAP 连接器Deployment Manager 模板。部署后,模板将生成将经过 IAP 身份验证和授权的请求转发到本地应用所需的资源和路由规则。以下各部分逐步介绍了如何配置和部署 IAP 连接器。

设置权限

要部署 IAP 连接器,您的 Google Cloud 项目的 Google API 服务代理帐号需要具有 Kubernetes Engine Admin 角色。通过此服务帐号,Deployment Manager 可以创建 Google Kubernetes Engine (GKE) 集群以及其中运行的所有资源。

要向 Google API 服务代理帐号授予 Kubernetes Engine Admin 角色,请执行以下操作:

  1. 转到 IAM 页面
    转到 IAM 页面
  2. 点击修改成员 ,修改 PROJECT_NUMBER@cloudservices.gserviceaccount.com 成员的权限。
  3. 点击添加其他角色,然后从角色下拉列表中选择 Kubernetes > Kubernetes Engine Admin
  4. 点击保存

Google API 服务代理帐号现在具有项目编辑者Kubernetes Engine 管理员角色。

创建 SSL 证书资源

配置 IAP 连接器的 HTTP(S) 负载平衡器代理时,需要新的 SSL 证书资源

如需使用您的 SSL 或 TLS 证书和私钥从 gcloud 命令行工具创建 SSL 证书资源,请执行以下操作:

  1. 使用 compute ssl-certificates create 创建 SSL 证书资源。

    gcloud compute ssl-certificates create CERTIFICATE_NAME --private-key=PRIVATE_KEY_FILE.pem
    --certificate=CERTIFICATE_FILE.pem
    
  2. (可选)确认新的 SSL 证书资源是否可用。

    1. 转到“负载平衡”页面
      转到“负载平衡”页面
    2. 在负载平衡器列表的下方,点击高级菜单
    3. 点击证书

下载和配置 IAP 连接器

为满足您的部署需求,需要更新 IAP 连接器的可配置 Deployment Manager 模板。如需下载和配置模板,请执行以下操作:

  1. 通过克隆 IAP 连接器 GitHub 代码库,下载 IAP 连接器 Deployment Manager 模板。

  2. 打开已克隆的代码库文件夹并更新 iap-connector.yaml 文件中的必需字段。如需了解路由规则,请参阅在本地应用中使用 IAP 概览

         resources:
         - name: iap-connector
           type: iap-connector.py
           properties:
             zone: ZONE
             serviceAccountName: PROJECT_NUMBER@cloudservices.gserviceaccount.com
             routing:
             - name: BACKEND_SERVICE_NAME
               mapping:
               - name: host
                 source: SOURCE
                 destination: DESTINATION_URL
             tls:
             - CERTIFICATE_NAME
    
    必需字段:

    • 地区:IAP 连接器的部署地区。例如 us-central1-a
    • serviceAccountName:被授予 Kubernetes Engine 管理员角色的 Google API 服务代理帐号的名称。
    • routing.mapping.source:传入 Google Cloud 的请求的网址。该网址是流量进入环境的位置。
    • 路由映射目的地:对用户进行授权和身份验证后,IAP 将流量路由到的本地应用的网址。IAP 使用 TLS 将流量路由到此网址,并且托管在该网址上的应用需要提供 HTTPS 端点。
    • tlsSSL 证书资源的名称。
    • routing.name:HTTP(S) 负载平衡器后面运行的新后端服务的名称。

    可选字段:

    • initialNodeCount:集群中所需的初始节点数。 默认情况下,初始节点数为 3
    • imageVersion:要运行的 Ambassador 映像版本。默认情况下,映像版本为 0.39.0
    • 副本:Ambassador 部署的初始副本数。默认情况下,副本数为 3

    如需了解 IAP 连接器规范,请查看 iap-connector.py.schema 文件。

  3. 保存更新后的 iap-connector.yaml 文件。

部署 IAP 连接器

  1. 通过运行以下 gcloud 命令来部署 IAP 连接器及其 Google Kubernetes Engine 集群:

    gcloud deployment-manager deployments create NAME_OF_DEPLOYMENT --config=iap-connector.yaml
    
  2. (可选)从 Google Cloud Console 监控部署:

    1. 转到 Deployment Manager 页面
      转到 Deployment Manager 页面
    2. 通过选择部署的名称来查看部署的状态。如果您最近部署了 IAP 连接器,则可能需要等待几分钟才能完成部署,之后才能查看其状态。
  3. (可选)通过转到“Kubernetes 集群”页面查看 Google Kubernetes Engine 集群的状态。
    转到“Kubernetes 集群”页面

  4. 部署会创建一个 Cloud Load Balancing HTTP(S) 负载平衡器。 通过更新网域管理器中的 DNS 资源记录,将来源网域与负载平衡器的公共 IPv4 地址相关联。

    如需获取公共 IPv4 地址,请执行以下操作:

    1. 转到“负载平衡”页面
      转到“负载平衡”页面
    2. 点击已生成的负载平衡器资源的名称

      IPv4 地址在前端下方并与证书名称关联。

现在,通向您应用的 Web 请求流量已从 IAP 连接器转发到本地应用。

配置 OAuth 同意屏幕

如果您尚未配置项目的 OAuth 同意屏幕,则需要执行此操作。您必须配置 OAuth 同意屏幕上的电子邮件地址和产品名称。

  1. 转到 OAuth 同意屏幕
    配置同意屏幕
  2. 支持电子邮件地址下,选择要显示为公开联系人的电子邮件地址。该电子邮件地址必须是您自己的电子邮件地址或您拥有的某一 Google 群组的电子邮件地址。
  3. 输入您要显示的应用名称
  4. 根据需要添加任何可选详细信息。
  5. 点击保存

如需稍后更改 OAuth 同意屏幕上的信息(例如产品名称或电子邮件地址),请重复上述步骤配置同意屏幕。

设置 IAP 访问权限

  1. 转到 Identity-Aware Proxy 页面
    转到 Identity-Aware Proxy 页面
  2. 选择要使用 IAP 保护的项目。
  3. 选中您要向其添加成员的资源旁边的复选框。
  4. 在右侧面板上,点击添加成员
  5. 在显示的添加成员对话框中,输入群组或个人(应拥有项目的受 IAP 保护的网页应用用户角色)的电子邮件地址。

    可以添加以下种类的帐号作为成员:

    • Google 帐号:user@gmail.com
    • Google 群组:<管理员>@googlegroups.com
    • 服务帐号:<服务器>@<示例>.gserviceaccount.com
    • G Suite 域名:example.com

    请务必添加您有权访问的 Google 帐号。

  6. 角色下拉列表中选择 Cloud IAP > 受 IAP 保护的网页应用用户
  7. 点击保存

启用 IAP

  1. Identity-Aware Proxy 页上的 HTTPS 资源下,找到 IAP 连接器部署的名称。如需开启 IAP,请
  2. 在出现的开启 IAP 窗口中,点击开启以确认您想用 IAP 保护本地应用。开启 IAP 后,它需要登录凭据才能连接到负载平衡器。只有在项目上具有 IAP-secured Web App User 角色的帐号才能获得访问权限。
  3. 通过转到本地应用的内部网址来确认是否启用了 IAP。如果出现身份验证提示,则启用 IAP。

IAP 现在正在对到本地应用的所有流量进行身份验证和授权。

保护出站流量

部署后,IAP 连接器会将请求转发到本地后端。由于在 IAP 连接器强制执行 IAM 访问权限政策,这确保了发送给后端的所有请求都已通过 IAP 的身份验证和授权。

如需确认出站流量已通过 IAP 连接器,请检查请求是否具有 IAP 签名的标头。通过 IAP 的身份验证和授权的请求具有一个关联的 IAP 签名的 JWT 标头。

更新 IAP 连接器部署

您可以通过以下流程更新 IAP 连接器的路由规则并将其推送到已部署的 GKE 集群。如需了解详情,请参阅更新部署

  1. 使用新的路由参数更新 iap-connector.yaml 文件。
  2. 运行以下 gcloud 命令:

    gcloud deployment-manager deployments update NAME_OF_DEPLOYMENT
    

删除 IAP 连接器部署

删除 IAP 连接器部署会关闭 IAP,使您的应用失去访问身份验证系统。通过此部署创建的所有资源都会被移除,包括路由规则。

如需删除您的 IAP 连接器部署:

  1. 转到 Deployment Manager 页面
    转到 Deployment Manager 页面
  2. 在部署列表中,选中 IAP 部署旁边的复选框。
  3. 点击页面顶部的删除

如果您需要重新创建已删除的 IAP 连接器部署,可以使用原始配置文件。重新创建的部署会被视为使用新资源的新部署。