通过Cloud Build从Dockerfile安装Artifact Registry Python包遇权限问题
解决方案:用服务账号模拟解决权限问题
完全可以用服务账号模拟来解决,不需要挂载密钥文件,步骤如下:
1. 准备有权限的服务账号
- 创建或复用一个已有的服务账号,给它授予Artifact Registry Reader角色(
roles/artifactregistry.reader),确保该账号能访问你的europe-west9-python.pkg.dev/sample-project/python-repo仓库。 - 给你本地执行构建命令的账号(即当前gcloud使用的账号)授予Service Account Token Creator角色(
roles/iam.serviceAccountTokenCreator),允许它模拟目标服务账号。
2. 修改构建命令
执行gcloud builds submit时,添加--impersonate-service-account参数,指定目标服务账号的邮箱:
gcloud builds submit --tag $CONTAINER_IMAGE --impersonate-service-account=你的服务账号邮箱@sample-project.iam.gserviceaccount.com .
3. 原理说明
你Dockerfile里已经安装了keyrings.google-artifactregistry-auth,这个包会自动读取Cloud Build环境中的临时凭证。当Cloud Build以模拟的服务账号身份运行时,pip安装流程会自动调用该身份的权限去Artifact Registry拉取包,全程不需要手动配置密钥文件。
另外建议确认:你的mypackage确实存在于指定的Artifact Registry仓库中,若指定了版本号也要确保版本匹配,避免因包本身不存在导致的匹配错误。
内容的提问来源于stack exchange,提问作者Grégoire Borel
相关产品推荐
相关产品推荐

