使用服务帐号向 Cloud Platform 验证身份

本教程演示了如何创建 Google Cloud 服务帐号、如何分配角色以向 Cloud Platform 服务进行身份验证,以及如何在 GKE 上运行的应用中使用服务帐号凭据。

本示例使用的是 Cloud Pub/Sub,但这些说明也适用于任何 Cloud Platform 服务。本教程中的示例应用使用服务帐号Cloud Pub/Sub 进行身份验证,并通过基于 Python 的应用订阅发布到 Pub/Sub 主题的消息。

目标

本教程介绍以下步骤:

  • 如何创建服务帐号
  • 如何为您的服务帐号分配必要的角色以使用 Cloud Pub/Sub
  • 如何将帐号密钥保存为 Kubernetes Secret
  • 如何使用服务帐号配置和部署应用。

本教程中使用的示例应用会订阅 Pub/Sub 主题,并将发布的消息输出到标准输出。您必须为应用配置正确的权限、使用 gcloud 发布消息并检查容器的输出流,观察能否正确接收消息。

使用服务帐号进行身份验证

在 GKE 中使用服务帐号向 Google Cloud 服务进行身份验证的方法有三种:

1. 使用 Workload Identity

Workload Identity 是从 GKE 向 Google Cloud 服务进行身份验证的推荐方法。Workload Identity 让您可以使用 Kubernetes 资源配置 Google Cloud 服务帐号。如果这适合您的用例,则应首选它。此示例还涵盖不适合使用 Workload Identity 的用例。

2. 使用默认 Compute Engine 服务帐号

GKE 集群中的每个节点都是一个 Compute Engine 实例。因此,默认情况下,在 GKE 集群上运行的应用将会尝试使用“Compute Engine 默认服务帐号”进行身份验证,并继承关联的范围。

此默认服务帐号不一定具有使用所需 Google Cloud 服务的权限。您可以扩展默认服务帐号的范围,但这样做可能会带来安全风险,因此不建议这样做。

3. 使用密钥管理服务帐号凭据

最后一个方法是为应用创建服务帐号,并将身份验证密钥作为 Kubernetes 密钥注入。 这是本教程的重点。

为何使用服务帐号?

为不同应用提供单独的服务帐号有诸多好处,具体如下所示:

  • 更好地了解和审核您的应用所发出的 API 请求。

  • 可以撤消特定应用的密钥,而无需共享服务帐号,也无需立即撤消所有应用的 API 访问权限。

  • 在存在潜在的安全事件的情况下,降低服务帐号凭据被盗用的风险。

准备工作

请按照以下步骤启用 Kubernetes Engine API:
  1. 访问 Google Cloud Console 中的 Kubernetes Engine 页面
  2. 创建或选择项目。
  3. 稍作等待,让 API 和相关服务完成启用过程。 此过程可能耗时几分钟。
  4. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

安装本教程中使用的以下命令行工具:

  • gcloud 用于创建和删除 Kubernetes Engine 集群。gcloud 包含在 Google Cloud SDK 中。
  • kubectl 用于管理 Kubernetes(即 Kubernetes Engine 使用的集群编排系统)。您可以使用 gcloud 安装 kubectl
    gcloud components install kubectl

gcloud 命令行工具设置默认值

如需节省在 gcloud 命令行工具中输入项目 IDCompute Engine 区域选项的时间,您可以设置以下默认值:
gcloud config set project project-id
gcloud config set compute/zone compute-zone

启用 API

在本教程中,您需要在项目上启用 Pub/Sub API 和 Resource Manager API:

gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com

创建容器集群

创建一个名为 pubsub-test 的容器集群以部署 Pub/Sub 订阅者应用:

gcloud container clusters create pubsub-test