第 3 步:配置访问权限

本部分根据您的需求,提供了有关如何授予对 MDE 部署的访问权限的不同方式的指南。

通过 IAP 建立 SSH 隧道

如需连接到 MDE 服务的专用 IP,您可以使用 SSH 隧道连接到代理虚拟机。借助此方法,您可以使用 Postman 等本地工具与 MDE API 进行交互。

标准 MDE 部署会创建一个名为 mde-proxy 的代理虚拟机。此机器可以将传入请求代理到 MDE API 网关或 MDE 网页界面。此虚拟机 仅具有专用 IP,但 IAP 允许您使用 Identity-Aware Proxy (IAP) for TCP 转发为此机器创建安全的 SSH 隧道。 本部分的其余内容介绍了如何配置 IAP 以将流量隧道传输到 mde-proxy,以及如何从工作站创建到该虚拟机的隧道:

  1. 在 Google Cloud 控制台中,前往 IAP ,然后点击 Enable API(启用 API)。此操作可能需要几分钟才能完成。

  2. 在 Google Cloud 控制台中,前往 IAP,然后 点击 SSH AND TCP RESOURCES(SSH 和 TCP 资源)。

  3. 向获授权使用 IAP 通过 IAP 连接到 mde-proxy 的用户授予权限:

    在用户可以使用 IAP 连接到 mde-proxy 之前,请按照以下说明向其授予 roles/iap.tunnelResourceAccessor 角色:

    1. 从列表中选择 mde-proxy 。

    2. 点击右侧面板中的 Add Principal (添加主账号)。

    3. 输入您要授予访问权限的主账号的电子邮件地址。

    4. 选择 IAP-secured Tunnel User 角色。

  4. 使用以下命令创建到 MDE API 的隧道:

    export MDE_PROXY_ZONE=$(gcloud compute instances list --filter="mde-proxy"  \
    --format="value(zone)")
    
    gcloud compute ssh mde-proxy \
    --zone "$MDE_PROXY_ZONE" --tunnel-through-iap  \
    -- -N -L 8080:api.mde.cloud.google.com:80
    

    运行该命令后,您可以在 http://localhost:8080 下访问 MDE API。

  5. 创建到 MDE 网页界面的隧道。

    如果您在第 3 步中创建了到 MDE API 的隧道,则可以打开一个新终端以稍后执行命令。到 MDE API 和 MDE 网页界面的 SSH 隧道可以并行运行。

    export MDE_PROXY_ZONE=$(gcloud compute instances list --filter="mde-proxy" \
    --format="value(zone)")
    
    gcloud compute ssh mde-proxy \
    --zone "$MDE_PROXY_ZONE" --tunnel-through-iap  \
    -- -N -L 8081:ui.mde.cloud.google.com:80
    

    运行该命令后,您可以在 http://localhost:8081 下访问 MDE 网页界面。

配置 Identity-Aware Proxy

Identity-Aware Proxy (IAP) 可让您安全地连接到 MDE API 和网页界面的内部 IP,如果您使用外部负载平衡器选项部署了 MDE Web 界面,还可以将对 MDE Web 界面的外部访问权限限制为仅限获授权的用户。

如需使用 IAP,您必须先启用 IAP 服务 API(如果您尚未启用),然后配置 OAuth 屏幕:

  1. 在 Google Cloud 控制台中,前往 IAP,然后 点击 Enable API。此操作可能需要几分钟才能完成。

  2. 为 IAP 配置 OAuth 权限请求页面:

    1. 在 Google Cloud 控制台中,前往 Google Auth Platform 页面,并在系统提示时选择 MDE 部署项目。
    2. 在“概览”页面上,点击开始 。
    3. 输入您要显示的应用名称 ,例如 MDE。
    4. 将您的电子邮件地址添加为用户支持邮箱 ,然后点击下一步 。
    5. 在“受众群体”部分,选择外部 ,然后点击下一步 。
    6. 将您的电子邮件地址添加为联系信息 ,然后点击下一步 。
    7. 阅读并同意 Google API 服务用户数据政策,然后点击继续 。
    8. 点击创建 。

配置对网页界面外部 HTTP 负载平衡器的访问权限

在本部分中,您将使用 IAP 配置对 MDE 网页界面外部 HTTP 负载平衡器的访问权限。

如果您为 MDE 网页界面启用了外部 HTTP 负载平衡器,则必须使用 IAP 将对应用的访问权限限制为仅限获授权的用户。

准备工作

请务必满足以下前提条件:

  • 您部署了带有 MDE 网页界面的 MDE。
  • 您部署了带有外部 HTTP 负载平衡器的 MDE Web 界面。
  • 您已完成常规 IAP 配置步骤。

步骤

  1. 在 Google Cloud 控制台中,前往 IAP 页面。

  2. 找到与外部界面服务对应的资源(查找 mde-ui-ext-service)。

  3. 在该资源的 IAP 列中,将开关切换为已启用 。

  4. 在确认对话框中,阅读并接受配置要求,然后点击 Turn On (开启)。

  5. 激活后,选中资源名称 (mde-ui-ext-service) 旁边的复选框。

  6. 在右侧面板中,点击 Add Principal (添加主账号)。

  7. 输入您要授予访问权限的用户或群组的电子邮件地址。

  8. 在角色 下拉列表中,选择 Cloud IAP > IAP-secured Web App User (Cloud IAP > 受 IAP 保护的 Web 应用用户)。

  9. 点击保存 。

跨组织访问权限(可选)

默认情况下,IAP 使用 Google 管理的 OAuth 客户端,这些客户端会严格 限制对与项目位于同一 Google Cloud 组织内的用户的访问权限。 如果您的部署需要外部用户(使用不同网域的合作伙伴)的访问权限,则必须使用配置了外部 用户类型的自定义 OAuth 客户端 。

如需了解详情,请参阅有关 将自定义 OAuth 客户端与 IAP 搭配使用 以及为 GKE 启用 IAP的官方 Google Cloud 文档。

您可以使用以下方法之一进行配置:

方法 A:直接控制台配置(无 GKE Secret)

如果您的 GKE BackendConfig 不管理 IAP 设置(即没有 iap 块,允许 GKE Ingress 继承现有设置),则可以直接在控制台中配置自定义客户端:

  1. 前往 IAP 页面。
  2. 对于 mde-ui-ext-service 资源,点击操作 列中的更多选项 (三个点),然后选择设置 。
  3. 选择 Custom OAuth (自定义 OAuth)。
  4. 点击 Auto Generate Credentials (自动生成凭据)(如果您在“API 和服务”中手动创建了凭据,则提供现有凭据)。
  5. 点击保存 。

方法 B:GKE 管理的配置(使用 Kubernetes Secret)

如果您希望使用 Kubernetes 清单 (GitOps) 管理 IAP 配置,则必须将凭据存储在 Secret 中,并在 BackendConfig 中引用该 Secret:

  1. 将 OAuth 权限请求页面 配置为外部 ,然后在 APIs & Services > Credentials (API 和服务 > 凭据)(Web 应用类型)下手动创建 OAuth 客户端凭据 。
  2. 在集群中创建 Kubernetes Secret: sh kubectl create secret generic iap-oauth-secret \ --namespace=mde \ --from-literal=client_id=YOUR_CLIENT_ID \ --from-literal=client_secret=YOUR_CLIENT_SECRET
  3. 更新服务的 BackendConfig 以引用该 Secret: yaml spec: iap: enabled: true oauthclientCredentials: secretName: iap-oauth-secret

为 MDE 网页界面配置 DNS

如果您为 MDE 网页界面启用了外部 HTTP 负载均衡器,则必须将您分配给 input.tfvars 中变量 MDE_UI_DOMAIN_NAME 的网域名的 A 记录设置为已部署的外部 HTTP 负载均衡器的 IP 地址,以完成 Google 管理的 SSL 证书的预配。

您可以使用以下命令查找外部 HTTP 负载平衡器的 IP 地址:

gcloud compute addresses list --filter="name~'.*mde-ui.*'" --format="value(address)" --global

如需详细了解如何创建 A 记录,请咨询您的 DNS 主机。