keyrings.google-artifactregistry.auth 用于没有服务帐户 json 密钥的 python AR 存储库

问题描述 投票:0回答:1

我不使用不会过期的服务帐户 json 密钥,我在任何地方都使用环境信用和 OIDC,因此我无法为 AR 生成和使用 json 密钥。

我想在我的 Dockerfile 中进行 pip 安装来安装我的私有 AR 包。

做这样的事情是有效的:

# Passing in a non expiring key
docker build -f "Dockerfile" \
    --secret id=gcp_creds,src="gsa_key.json" .

##### IN DOCKERFILE
# I dont want to generate json keys like this
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=target=/root/.cache \
    pip install -r requirements.txt

keyrings.google-artifactregistry-auth 是否以某种方式支持令牌?

这不起作用,例如:

# GSA is active through ambient creds or impersonation
gcloud auth print-access-token > /tmp/token.json
# also tried: gcloud config config-helper --format="json(credential)" > /tmp/token.json

docker build -f "Dockerfile" \
    --secret id=gcp_creds,src="/tmp/token.json" .

我想避免采取诸如在容器外部构建并复制图像中构建的工件之类的做法。我想在 dockerfile 中进行构建。

编辑

因此,我使用 GCP 提供的 GH 操作工具来完成此操作,因此我知道可以以密钥环可接受的格式生成临时令牌。我仍然想知道如何使用 gcloud cli 在其他场景中执行此操作。

使用上面的 dockerfile 和这些 GH 操作步骤,我可以通过 OIDC 进行身份验证并生成 pip 密钥环提供商接受的信用文件:

- 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}}
python google-cloud-platform pip google-iam google-artifact-registry
1个回答
0
投票

通常情况下,您不需要在

Dockerfile
中设置凭据文件。相反,您可以通过
Application Default Credentials (ADC)
使用身份验证。

keyrings.google-artifactregistry-auth
软件包与
ADC
无缝协作。

例如,如果您想在本地测试您的

Dockerfile
,您可以在身份验证后将 ADC 生成的短期凭证挂载为卷。

首先,使用以下方法通过 Google Cloud 验证您的本地计算机:

gcloud auth application-default login

此命令将生成短期凭据并将其保存到 GCP 配置中的已知路径,例如:

Credentials saved to file: [/Users/current_user/.config/gcloud/application_default_credentials.json]

在 Docker 中安装凭证

运行 Docker 容器时,您可以使用以下命令将此凭证文件作为卷安装到容器中:

docker run -it \
   -v $HOME/.config/gcloud:/root/.config/gcloud \
   your_image

CI/CD 管道中的身份验证

在 CI/CD 管道的上下文中,例如使用

GitHub Actions
,如果您使用
Workload Identity Federation
或其他身份验证方法,则无需将凭据传递到
Dockerfile

容器将在当前执行上下文中自动进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.