本主题介绍如何在 AKS 和 AKS 平台上为 Apigee Hybrid 安装启用 Workload Identity。
概览
借助工作负载身份联合,在 Google Cloud 外部运行的应用可以使用来自外部身份提供方的凭据来模拟 Google Cloud Platform 服务账号。
通过使用工作负载身份联合,您可以让应用使用外部环境提供的身份验证机制并替换服务账号密钥,从而提高安全性。
如需了解概览,请参阅使用工作负载身份联合的最佳实践。
设置工作负载身份联合
如需将工作负载身份联合与 Apigee Hybrid 搭配使用,请先配置集群,然后将该功能应用于 Apigee Hybrid 安装。
配置集群以使用工作负载身份联合。
按照 Google Cloud 说明为 Kubernetes 配置工作负载身份联合,并进行以下修改:
-
使用以下命令列出您的 IAM 服务账号和 Kubernetes 服务账号:
-
IAM 服务账号:您很可能已在使用
create-service-account
工具进行 Apigee Hybrid 初始安装期间创建了 IAM 服务账号(也称为“Google 服务账号”)。如需查看 Apigee Hybrid 所需的 IAM 服务账号列表,请参阅服务账号简介。您可以使用以下命令查看项目中的 IAM 服务账号列表:
gcloud iam service-accounts list --project PROJECT_ID
-
Kubernetes 服务账号:当您运行
helm install
或helm update
命令时,Apigee Hybrid 图表会为每个组件创建必要的 Kubernetes 服务账号。您可以使用
kubectl get sa
命令查看集群中的 Kubernetes 服务账号:kubectl get sa -n APIGEE_NAMESPACE
kubectl get sa -n apigee-system
-
IAM 服务账号:您很可能已在使用
-
在配置工作负载身份联合步骤中,创建的工作负载身份池和提供方的默认受众群体如下所示。使用此默认值或设置自定义预期受众群体,并保存此值以供日后使用。
https://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
-
完成部署 Kubernetes 工作负载下的第 1 步后停止。每个 Google 服务账号都有一个凭据配置文件。保存每个凭据配置文件,并保存针对
--credential-source-file
参数输入的路径,例如:/var/run/service-account/token
。
将 Apigee Hybrid 配置为使用工作负载身份联合
-
将凭据源文件和输出文件 (
credential-configuration.json
) 复制到以下图表目录中。这些是您在部署 Kubernetes 工作负载下的第 1 步中提供的值。apigee-datastore/
apigee-env
apigee-org/
apigee-telemetry/
-
对集群的替换文件进行以下全局更改:
gcp: workloadIdentity: enabled: false # must be set to false to use Workload Identity Federation federatedWorkloadIdentity: enabled: true audience: "AUDIENCE" credentialSourceFile: "CREDENTIAL_SOURCE_FILE"
其中:
-
AUDIENCE 是 Workload Identity 提供方允许的受众群体,即凭据配置 JSON 文件中
.audience
下的值(您在部署 Kubernetes 工作负载下的第 1 步中配置)。 -
CREDENTIAL_SOURCE_FILE 是供工作负载身份联合用来获取服务账号凭据的凭据源文件的文件名和路径。这是您在部署 Kubernetes 工作负载下的第 1 步中使用
create-cred-config
命令配置工作负载身份联合时为credential-source-file
提供的值。例如:
例如:
gcp: workloadIdentity: enabled: false federatedWorkloadIdentity: enabled: true audience: "//iam.googleapis.com/projects/123456789012/locations/global/workloadIdentityPools/aws-pool/providers/aws-provider" credentialSourceFile: "/var/run/service-account/token"
-
AUDIENCE 是 Workload Identity 提供方允许的受众群体,即凭据配置 JSON 文件中
-
使用工作负载身份联合为每个组件配置替换项。根据需要选择证书文件、Kubernetes Secret 或保险柜的说明。
证书文件
将
serviceAccountPath
的值替换为凭据源文件。此路径必须相对于图表目录。例如:udca: serviceAccountPath: fwi/credential-configuration.json
K8s Secret
-
创建一个用于凭据来源文件的新 Kubernetes Secret。
kubectl create secret -n apigee generic SECRET_NAME --from-file="client_secret.json=CREDENTIAL_CONFIGURATION_FILE"
例如:
kubectl create secret -n apigee generic udca-fwi-secret --from-file="client_secret.json=./fwi/credential-configuration.json"
-
将
serviceAccountRef
的值替换为新 Secret。例如:udca: serviceAccountRef: udca-fwi-secret
保险柜
使用凭据源文件更新保险柜中的服务账号密钥
SAKEY
。例如,对于 UDCA(该过程在所有组件中都类似):SAKEY=$(cat ./fwi/credential-configuration.json); kubectl -n apigee exec vault-0 -- vault kv patch secret/apigee/orgsakeys udca="$SAKEY"
-
创建一个用于凭据来源文件的新 Kubernetes Secret。
-
使用
helm update
命令将更改应用于每个受影响的组件:如果您是首次在此集群中使用保险柜,请更新
apigee-operator
图表:helm upgrade operator apigee-operator/ \ --namespace apigee-system \ --atomic \ -f overrides.yaml
按以下顺序更新其余受影响的图表:
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f overrides.yaml
helm upgrade telemetry apigee-telemetry/ \ --namespace apigee \ --atomic \ -f overrides.yaml
helm upgrade $ORG_NAME apigee-org/ \ --namespace apigee \ --atomic \ -f overrides.yaml
更新每个环境的
apigee-env
图表,每次替换 ENV_NAME:helm upgrade $ENV_NAME apigee-env/ \ --namespace apigee \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
如需查看组件及其对应图表的列表,请参阅 Apigee Hybrid Helm 参考文档。
如需详细了解工作负载身份联合和最佳实践,请参阅使用工作负载身份联合的最佳实践。