我正在尝试使用 Cloud Build 触发器作业动态构建新的 Docker 镜像,但是我看不到如何安全地检索我的凭据以使用服务帐户对 GCP 进行身份验证。
步骤如下:
使用构建 Docker 镜像的步骤创建的 Dockerfile。其中一个步骤包括从我需要作为 GCP 服务帐户访问的 Google 存储(存储桶)下载文件。
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/