为Cloud Build配置Secrets Manager权限及部署容器IAM账号配置
问题解决方案
一、解决Cloud Build构建时的权限问题
1. 定位Cloud Build默认服务账号
你提到的99999999@cloudbuild.gserviceaccount.com是Cloud Build的默认服务账号,它不会显示在常规的服务账号列表中,需直接到IAM页面搜索该邮箱地址找到它。
2. 授予Secrets Manager访问权限
- 控制台操作:进入IAM页面,搜索到该账号后点击「编辑权限」,添加
Secret Manager Secret Accessor角色(该角色包含secretmanager.versions.access权限);若需要更细粒度控制,可直接添加secretmanager.versions.access权限。 - 命令行操作:
gcloud projects add-iam-policy-binding myproject \ --member="serviceAccount:99999999@cloudbuild.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
二、部署后Docker容器的权限配置
根据你部署容器的平台,按以下方式配置IAM服务账号:
1. 部署在GKE(Google Kubernetes Engine)
- 准备一个服务账号,为其授予
Secret Manager Secret Accessor角色。 - 确保GKE集群已启用工作负载身份(Workload Identity)。
- 在Deployment/StatefulSet的配置中,指定服务账号:
容器内的程序可直接通过Google Cloud客户端库访问Secrets Manager,客户端会自动从元数据服务器获取凭据。spec: template: spec: serviceAccountName: 你的服务账号名称 # 需与服务账号在同一命名空间
2. 部署在Cloud Run
- 准备一个服务账号,为其授予
Secret Manager Secret Accessor角色。 - 部署时指定该服务账号:
程序无需额外配置凭据,客户端库会自动获取权限。gcloud run deploy 你的服务名称 \ --image gcr.io/myproject/你的镜像名 \ --service-account=你的服务账号@myproject.iam.gserviceaccount.com
3. 部署在Compute Engine(VM)
- 准备一个服务账号,为其授予
Secret Manager Secret Accessor角色。 - 为VM关联该服务账号:
确保容器能访问VM的元数据服务器(默认host网络或配置代理即可),程序即可通过客户端库自动获取凭据。gcloud compute instances set-service-account 你的VM名称 \ --service-account=你的服务账号@myproject.iam.gserviceaccount.com
内容的提问来源于stack exchange,提问作者Mark McWiggins
相关产品推荐
相关产品推荐

