部署GCP Cloud Functions时遭遇ArtifactRegistry权限错误
排查Gen2 Cloud Functions部署时Artifact Registry缓存权限错误的思路
错误核心
部署Gen2 Cloud Functions时,Cloud Build阶段报错,提示缺少
artifactregistry.repositories.downloadArtifacts权限,即使指定的函数服务账号已配置Artifact Registry Administrator角色。
排查步骤
- 区分构建服务账号和函数运行服务账号:你通过
--service-account指定的是函数运行时使用的账号,但Cloud Build执行构建过程用的是项目的Cloud Build默认服务账号:[你的项目编号]@cloudbuild.gserviceaccount.com。需要给这个账号添加Artifact Registry Reader角色,或者直接授予artifactregistry.repositories.downloadArtifacts权限,作用范围可以是项目级或目标gcf-artifacts仓库。 - 验证权限的作用范围:检查
Artifact Registry Administrator角色是否绑定在了正确的资源上——确保该角色是作用在项目级别,或者明确指定了欧洲区(europe-west1)的gcf-artifacts仓库。如果角色只绑定到了其他仓库,会导致权限不覆盖默认的gcf-artifacts仓库。 - 确认gcf-artifacts仓库存在:登录Artifact Registry控制台,检查欧洲区(europe-west1)是否存在名为
gcf-artifacts的Docker类型仓库。如果不存在,手动创建该仓库,Gen2 Cloud Functions依赖此仓库存储构建缓存和镜像。 - 直接检查仓库的IAM绑定:进入
gcf-artifacts仓库的IAM管理页面,确认Cloud Build服务账号(或你使用的构建账号)是否有downloadArtifacts的权限。若没有,手动添加该权限,避免角色继承的延迟或遗漏。 - 临时禁用构建缓存验证问题:在部署命令中添加
--no-build-cache参数,绕过缓存拉取步骤,验证是否是缓存相关的权限问题。修改后的部署命令:
gcloud functions deploy my_cf --entry-point start_process \ --gen2 \ --trigger-http \ --region europe-west1 \ --runtime python310 \ --service-account <service account name>@<project>.iam.gserviceaccount.com \ --no-allow-unauthenticated \ --source=./CloudFunction/ \ --no-build-cache
- 检查API启用状态:确认项目中已启用
Artifact Registry API和Cloud Build API,未启用的API会导致权限类的错误提示。
内容的提问来源于stack exchange,提问作者swygerts
相关产品推荐
相关产品推荐

