在 Apigee Hybrid 中选择服务账号身份验证方法
Apigee Hybrid 需要服务账号才能与 Google Cloud 服务进行安全通信。为这些服务账号选择一种符合您的安全和运营要求的身份验证方法。本指南简要概述了可用的选项。
了解服务账号身份验证
Apigee Hybrid 使用 Google Cloud 服务账号对 Kubernetes 集群中运行的组件进行身份验证和授权。这些服务账号可访问 Google Cloud Cloud Storage 存储分区和 Cloud Logging 等资源。每个服务账号都需要特定的 Identity and Access Management (IAM) 角色才能执行其功能。
身份验证方法选项
Apigee Hybrid 支持多种服务账号身份验证方法。每种方法管理服务账号密钥的方式各不相同,可提供不同级别的安全性和操作复杂性。 选择方法时,请考虑您的平台、安全状况和现有基础设施。
下表总结了可用的身份验证方法:
方法 | 密钥存储位置 | 平台兼容性 | 密钥管理 |
---|---|---|---|
Kubernetes Secret | Kubernetes 集群 Secret | 任何 Kubernetes 平台 | Kubernetes 管理 Secret,手动轮换 |
服务账号 JSON 密钥文件 | 本地文件系统 | 任何 Kubernetes 平台 | 手动轮替和分发 |
保险柜 | HashiCorp Vault | 任何 Kubernetes 平台 | Vault 管理密钥,手动轮替 |
Workload Identity Federation for GKE | Google Cloud IAM | Google Kubernetes Engine (GKE) | Google Cloud 管理,无需密钥文件 |
其他平台上的工作负载身份联合 | Google Cloud IAM | AKS、EKS、OpenShift 或其他 Kubernetes 平台 | Google Cloud 管理,无需密钥文件 |
将服务账号密钥存储在 Kubernetes Secret 中
将服务账号密钥作为 Kubernetes Secret 存储在集群中。此方法利用了 Kubernetes 中的内置 Secret 管理功能。 与直接存储在文件中的密钥相比,Kubernetes Secret 可以提供更安全的密钥管理方式。您仍然需要手动管理密钥轮换。
混合组件使用 overrides.yaml
文件中的 serviceAccountRef
和 envs[].serviceAccountRefs
属性引用这些 Secret。
Kubernetes 会管理这些 Secret 向相应 pod 的分发。
例如:
logger: serviceAccountRef: "my-project-apigee-logger-key"
如需使用此方法,请参阅将服务账号密钥存储在 Kubernetes Secret 中。
服务账号 JSON 密钥文件
此方法涉及为每个服务账号创建 JSON 密钥文件,并将这些文件直接存储在文件系统上。这种方法可简化初始设置。不过,这需要确保文件系统的安全性。密钥轮替是手动进行的。
将每个服务账号的私钥 JSON 文件放置在 Apigee Hybrid 组件可访问的目录中。在 overrides.yaml
配置中使用 serviceAccountPath
和 envs[].serviceAccountPaths
属性引用这些文件的路径。
例如:
logger: serviceAccountPath: "my-project-apigee-logger.json"
您可以使用 Apigee Hybrid 提供的 create-service-account
工具生成并下载服务账号密钥文件。如需了解详情,请参阅 create-service-account
。
在 Vault 中存储服务账号密钥
集成 HashiCorp Vault 以管理您的服务账号密钥。Vault 为 Secret 管理提供强大的解决方案,可提供动态 Secret 生成、审核和自动化密钥轮换等功能。需要设置和维护 Vault 实例。
您需要为组织级和环境级组件分别创建 Vault Secret、政策和角色。您可以使用 serviceAccountSecretProviderClass
和 envs[].serviceAccountSecretProviderClass
属性在 overrides.yaml
配置中引用这些密钥。
例如:
serviceAccountSecretProviderClass: apigee-orgsakeys-spc envs: - name: my-env serviceAccountSecretProviderClass: apigee-envsakeys-my-env-spc
Workload Identity Federation for GKE
借助适用于 GKE 的工作负载身份联合,Kubernetes 服务账号可以充当 Google Cloud服务账号。此方法完全无需使用服务账号密钥文件。相反,GKE 集群会直接使用Google Cloud IAM 对工作负载进行身份验证。Workload Identity Federation for GKE 提供了一种高度安全且自动化的身份验证机制,可简化密钥管理。此方法仅适用于 GKE 集群。
此方法要求将每个 Kubernetes 服务账号绑定到特定的 Google Cloud 服务账号。在安装 Apigee Hybrid Helm 图表时,Apigee Hybrid 安装过程会创建特定于您的安装的 Kubernetes 服务账号。当您为每个图表运行带有 --dry-run
标志的 helm install
或 helm upgrade
命令时,输出将包含用于将 Kubernetes 服务账号绑定到相应图表中特定 Apigee Hybrid 组件的 Google Cloud 服务账号的命令。
您可以使用 gcp.workloadIdentity.enabled
属性在 overrides.yaml 文件中启用 Workload Identity Federation for GKE。
例如:
gcp: projectID: my-project region: us-west1 workloadIdentity: enabled: true
请参阅启用 Workload Identity Federation for GKE。
在 GKE 以外的平台上使用工作负载身份联合
工作负载身份联合将 Workload Identity Federation for GKE 的优势扩展到了 Google Cloud之外运行的 Kubernetes 集群,例如 Azure Kubernetes Service (AKS)、Amazon Elastic Kubernetes Service (EKS) 或 OpenShift。此方法允许您的非 GKE 集群使用集群的 OIDC 提供方对 Google Cloud 进行身份验证,以在集群的身份提供方与 Google Cloud之间配置信任关系。完成初始设置后,此方法可让您无需使用服务账号密钥文件。
您可以将工作负载身份联合与以下项搭配使用:
- 凭据配置文件(代替服务账号密钥文件)
- Kubernetes Secret
- 保险柜
如需使用工作负载身份联合,您需要为每个 Google Cloud 服务账号创建凭据配置文件。您可以使用这些文件来代替服务账号密钥文件,或者在您使用 Kubernetes Secret 或 Vault 时设置这些文件。
您可以在 overrides.yaml 文件中使用 gcp.federatedWorkloadIdentity.enabled
、gcp.federatedWorkloadIdentity.audience
和 gcp.federatedWorkloadIdentity.credentialSourceFile
属性启用工作负载身份联合。
例如:
gcp: projectID: my-project region: us-west1 federatedWorkloadIdentity: enabled: true audience: "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider" credentialSourceFile: "/var/run/service-account/token"
请参阅启用工作负载身份联合。
选择身份验证方法
根据您的部署环境和安全要求选择身份验证方法。
- 对于 GKE 部署,Workload Identity Federation for GKE 提供了一种安全且简化的方法。这样一来,您无需直接管理服务账号密钥文件。
- 对于非 GKE Kubernetes 部署(AKS、EKS、OpenShift),工作负载身份联合提供类似的无密钥身份验证体验。 对于这些环境,建议选择此方法。
- 如果“Workload Identity Federation for GKE”或“工作负载身份联合”不是选项,请考虑使用 Vault 进行集中式密钥管理和自动化。
- 对于较简单的部署或在没有 Vault 设置的情况下,将密钥存储在 Kubernetes Secret 中可提供原生 Kubernetes 解决方案。与直接存储文件相比,此方法可提供更高的安全性。
- 服务账号密钥文件适用于初始测试或无法使用其他方法的环境。不过,此方法需要仔细进行手动密钥管理和轮替。
后续步骤
- 继续规划和准备:安全端口使用。
- 详细了解 Apigee Hybrid 中的服务账号:服务账号简介。
- 安装 Apigee Hybrid:第 1 部分:项目和组织设置 - 概览。