调用GCP Artifact Registry的Docker Registry v2 _catalog API需何种IAM角色?
调用Artifact Registry
/_catalog API的细粒度权限需求 问题背景
使用Google服务账号(GSA)执行以下命令调用Artifact Registry的/_catalog接口,尝试列出仓库:
curl -sL https://us-central1-docker.pkg.dev/v2/_catalog --user "_json_key_base64:${GSA_KEY_B64?}"
返回结果为空数组:
{ "repositories" : [] }
已测试的权限配置效果:
- 特定仓库的
roles/artifactregistry.reader→ 返回空结果 - 特定仓库的
roles/viewer→ 返回空结果 - 整个GCP项目的
roles/artifactregistry.reader→ 返回空结果 - 整个GCP项目的
roles/viewer→ 成功获取结果(但权限粒度过粗)
对比角色权限后发现,Viewer角色比Artifact Registry Reader多了artifactregistry.repositories.getIamPolicy,但官方文档未明确/_catalog对应的权限要求,需确定该接口所需的细粒度权限/角色。
解决方案
调用/_catalog接口列出仓库的核心权限是**artifactregistry.repositories.list**,该权限为项目级权限,需在GCP项目层面授予。
权限与角色说明
- 权限本质:
/_catalog接口的作用是枚举指定区域内项目下的所有仓库,属于项目级别的资源列表操作,因此需要项目级的artifactregistry.repositories.list权限,而非单个仓库的权限。 - 权限配置选项:
- 预定义角色:
roles/artifactregistry.repoAdmin包含artifactregistry.repositories.list权限,但同时附带仓库管理权限,适合需要完整仓库管理能力的场景。 - 自定义角色:若需最小权限,可创建仅包含
artifactregistry.repositories.list,加上你需要的仓库读取权限(如artifactregistry.repositories.get、artifactregistry.versions.list等)的自定义角色,实现最细粒度的权限控制。
- 预定义角色:
验证逻辑
项目级roles/viewer能成功返回结果,是因为该角色默认包含了artifactregistry.repositories.list这个项目级枚举权限;而roles/artifactregistry.reader仅拥有单个仓库的读取权限,不具备项目级的仓库列表权限,因此调用/_catalog会返回空结果。
内容的提问来源于stack exchange,提问作者Matthew Monaco
相关产品推荐
相关产品推荐

