跨GCP项目使用Artifact Registry镜像部署App Engine flex报错如何解决
解决方案
1. 定位App Engine Flexible服务账号
你找不到该账号是因为它属于Google托管的服务代理类账号,默认不会展示在项目IAM的主账号列表中,它的格式为:service-[projectB的项目数字ID]@gae-api-prod.google.com.iam.gserviceaccount.com
你可以执行以下命令获取projectB的数字ID:
gcloud projects describe projectB --format="value(projectNumber)"
如果执行后仍匹配不到对应账号,先在projectB中启用App Engine Flexible Environment API,启用后该服务账号会自动创建,且默认绑定App Engine Flexible Environment Service Agent角色。
2. 配置跨项目镜像访问权限
所有权限都需要配置在镜像所在的projectA的Artifact Registry对应仓库/镜像层级:
- 给projectB的App Engine默认服务账号(格式为
projectB@appspot.gserviceaccount.com)授予roles/artifactregistry.reader角色,你也可以继续使用之前配置的roles/storage.objectViewer,两者对镜像拉取场景等效 - 给上面找到的projectB的App Engine Flexible服务代理账号授予
roles/artifactregistry.reader角色
3. 验证部署
权限配置完成后等待1-2分钟让权限生效,再执行你原来的部署命令即可:
gcloud app deploy --project=projectB --version=test1 --image-url="asia-northeast1-docker.pkg.dev/projectA/default/my-image:latest"
内容的提问来源于stack exchange,提问作者valenterry
相关产品推荐
相关产品推荐

