docker - 如何从容器化的 Dockerfile 向 GCP 进行身份验证

标签 docker google-cloud-platform dockerfile google-cloud-build

我正在尝试使用 Cloud Build 触发器作业动态构建新的 Docker 镜像,但是我看不到如何安全地检索我的凭据以使用服务帐户对 GCP 进行身份验证。

步骤如下:

  1. 使用构建 Docker 镜像的步骤创建的 Dockerfile。其中一个步骤包括从我需要作为 GCP 服务帐户访问的 Google 存储(存储桶)下载文件。

  2. Docker 镜像是使用 Cloud Build 触发器构建的,该触发器在链接存储库中的每次更改后触发并存储在 GCR 中。

第一步失败是因为:

1.) 默认情况下,出于某种原因,在 GCP 中运行 Dockerfile 的用户未针对 GCP 进行身份验证。它不是默认的 Google Cloud Build 帐户,而是匿名用户。

2.) 我可以验证为服务帐户但是

a.) 我不想在本地或存储库中存储未加密的 JSON 私钥。 b.) 如果我将它加密存储在 GCP 存储库中,那么我需要在使用 KMS 解密之前进行身份验证。但我没有 key ,因为它仍然是加密的。所以我回到我的问题。 c.) 如果我将它存储在 GCP 存储桶中,我也需要进行身份验证。所以我回到我的问题。

有没有其他方法可以执行云构建触发作业并保留/获取 GCP 服务帐户上下文?

最佳答案

@ParthMehta 的#1 解决方案是正确的。

在调用Docker Build之前,在你的Cloud Build中添加这个步骤,使用Cloud Build环境的权限从Cloud Storage下载文件(服务账号如下:<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com)

- name: gcr.io/cloud-builders/gsutil
  args: ['cp', 'gs://mybucket/my_file', 'my_file']

文件复制到Cloud Build执行的当前目录/workspace .然后通过添加一个简单的 COPY 将文件添加到您的容器中在你的Dockerfile

....
COPY ./my_file ./my_file
....

一般来说,当您在 GCP 环境中工作时,您不应该使用 JSON key 文件。

关于docker - 如何从容器化的 Dockerfile 向 GCP 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59325936/

相关文章:

docker - Traefik V2 的主机和路径

javascript - Firebase云函数中的空传播错误

python - 在同一个 Dockerfile 中使用 Python 和 Node.js 并创建一个我在云中同时使用的镜像

php - 通过 apt-get 修复已安装软件包的版本

ubuntu - 在 Ubuntu Docker 镜像上录制声音

docker - 使用commit docker命令的最佳情况是什么?

docker - 在 docker 中构建并运行您的图像 - 网络问题

kubernetes - 如何利用部署在 Kubernetes 上的服务的延迟来扩展部署?

ssl - 如何为两个子域使用一个 GCP 负载均衡器?

hadoop - 是否可以在docker文件中间执行CMD?