You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GKE Autopilot中访问Google Secrets Manager时出现403错误

GKE Autopilot下Secrets Manager访问403权限问题排查与解决

问题场景

在GKE Autopilot模式部署Golang应用,通过Workload Identity关联GCP服务账户访问Secrets Manager时,出现403权限错误:

rpc error: code = Unauthenticated desc = transport: per-RPC creds failed due to error: compute: Received 403 `Unable to generate access token; IAM returned 403 Forbidden: Permission 'iam.serviceAccounts.getAccessToken' denied on resource (or it may not exist).

已执行的操作流程:

  • 创建Autopilot集群:
gcloud config set project goproject
gcloud container clusters create-auto goproject-develop-gke --project goproject --region us-central1
  • 为GCP服务账户绑定角色:
gcloud iam service-accounts add-iam-policy-binding goproject-service-account@goproject.iam.gserviceaccount.com \
    --member "serviceAccount:goproject.svc.id.goog[default/goproject-sa]" \
    --role "roles/iam.workloadIdentityUser"
gcloud projects add-iam-policy-binding goproject \
    --member "serviceAccount:goproject-service-account@goproject.iam.gserviceaccount.com" \
    --role "roles/secretmanager.secretAccessor"
  • 创建K8s服务账户:
kubectl create serviceaccount goproject-google-sa
  • 为K8s服务账户添加IAM注解:
kubectl annotate serviceaccount goproject-google-sa \
    iam.gke.io/gcp-service-account=goproject-service-account@goproject.iam.gserviceaccount.com
  • 部署应用时指定使用goproject-google-sa服务账户,代码使用Secrets Manager官方SDK访问凭证。

核心问题定位

Workload Identity绑定关系不匹配:在为GCP服务账户添加workloadIdentityUser角色时,指定的K8s服务账户是default/goproject-sa,但实际创建并在部署中使用的K8s服务账户是goproject-google-sa,导致权限映射未生效。

修复步骤

  1. 修正IAM绑定关系
    先删除错误的绑定(可选,若不需要保留):
gcloud iam service-accounts remove-iam-policy-binding goproject-service-account@goproject.iam.gserviceaccount.com \
    --member "serviceAccount:goproject.svc.id.goog[default/goproject-sa]" \
    --role "roles/iam.workloadIdentityUser"

添加正确的绑定,对应实际使用的K8s服务账户:

gcloud iam service-accounts add-iam-policy-binding goproject-service-account@goproject.iam.gserviceaccount.com \
    --member "serviceAccount:goproject.svc.id.goog[default/goproject-google-sa]" \
    --role "roles/iam.workloadIdentityUser"
  1. 重启部署生效
    让Pod重新加载服务账户权限:
kubectl rollout restart deployment/goproject-service

额外验证项

  • 确认GCP服务账户goproject-service-account@goproject.iam.gserviceaccount.com已正确配置roles/secretmanager.secretAccessor角色(已通过IAM页面验证,此部分无需调整)
  • GKE Autopilot默认启用元数据服务器,部署中的nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"为冗余配置,可保留或移除

内容的提问来源于stack exchange,提问作者Inventor Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:13:25