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

步骤如下:

  • 创建了Dockerfile并包含构建Docker镜像的步骤。步骤之一包括从Google存储(存储桶)下载文件,我需要以GCP服务帐户访问该文件。
  • Docker镜像是通过使用Cloud Build触发器构建的,该触发器在链接存储库中的每次更改后触发并存储在GCR中。

  • 第一步失败是因为:

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

    2.)我可以将BUT认证为服务帐户

    a。)我不想在本地或存储库中存储未加密的JSON私钥。
    b。)如果我将其加密存储在GCP存储库中,则需要先进行身份验证,然后再使用KMS对其进行解密。但是我没有密钥,因为它仍然是加密的。所以我回到了我的问题。
    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密钥文件。

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

    10-09 00:28