You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dockerfile中通过keyrings.google-artifactregistry-auth使用临时令牌(无需长期GCP服务账号JSON密钥)完成私有AR包的pip安装?

如何在Dockerfile中通过keyrings.google-artifactregistry-auth使用临时令牌(无需长期GCP服务账号JSON密钥)完成私有AR包的pip安装?

我目前在Docker容器中安装GCP Artifact Registry的私有Python包时,不想使用长期有效的服务账号(GSA)JSON密钥,而是希望全程使用环境凭据(ambient creds)或OIDC来完成认证,避免密钥管理的安全风险和维护成本。

现有可行方案(但依赖长期GSA密钥)

我现在用长期GSA JSON密钥的方法是可以正常工作的,具体流程如下:

构建命令

# 传入长期服务账号密钥文件到构建上下文
docker build -f "Dockerfile" \
    --secret id=gcp_creds,src="gsa_key.json" .

对应的Dockerfile内容

# 我不想再依赖这种长期密钥的方式
ENV GOOGLE_APPLICATION_CREDENTIALS=/run/secrets/gcp_creds

# 安装认证所需的依赖包
RUN pip install keyring keyrings.google-artifactregistry-auth 
COPY requirements.txt requirements.txt
# 挂载密钥和缓存来执行安装
RUN --mount=type=secret,id=gcp_creds \
    --mount=type=cache,target=/root/.cache \
    pip install -r requirements.txt

我的核心需求

我想彻底替换掉长期GSA密钥,改用临时令牌来完成认证。同时我希望完全在Dockerfile内部完成pip安装流程,不想把Python包的构建过程放到容器外,再把产物复制进镜像的折中方案。

尝试过但失败的方法

我尝试用已激活的环境凭据或身份模拟生成临时令牌,然后传入Docker构建,但keyrings.google-artifactregistry-auth并不认可这些令牌文件:

# 先通过环境凭据或身份模拟激活目标GSA
gcloud auth print-access-token > /tmp/token.json
# 也试过用config-helper生成凭据:gcloud config config-helper --format="json(credential)" > /tmp/token.json

# 将临时令牌作为secret传入Docker构建
docker build -f "Dockerfile" \
    --secret id=gcp_creds,src="/tmp/token.json" .

已验证的可行方向(GitHub Actions场景)

后来我在GitHub Actions里用GCP官方提供的工具成功实现了这个需求,说明用临时令牌完成认证是完全可行的!具体的Actions配置如下:

- id: 'auth'
  name: 'auth to gcp'
  uses: 'google-github-actions/auth@v2'
  with:
    token_format: 'access_token'
    workload_identity_provider: 'projects/xxxxx/locations/global/workloadIdentityPools/github/providers/github'
    service_account: xxxxxxxx

- name: Set up Docker Buildx
  uses: docker/setup-buildx-action@v3

- uses: docker/build-push-action@v6
  with:
    push: false
    context: '.'
    file: 'Dockerfile'
    tags: myimage:mytag
    load: true
    cache-from: type=gha,scope=localbuild
    cache-to: type=gha,mode=max,scope=localbuild
    secret-files: |
      gcp_creds=${{steps.auth.outputs.credentials_file_path}}

我的核心疑问

既然GitHub Actions里的GCP官方工具能生成让keyrings.google-artifactregistry-auth认可的临时凭据文件,那用gcloud CLI怎么生成符合要求的临时凭据文件呢? 也就是不需要长期GSA密钥,只用环境凭据/OIDC就能生成对应的文件,然后在Docker构建时作为secret传入,让pip能正常拉取私有AR包。


备注:内容来源于stack exchange,提问作者red888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:25:30