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

时间:2019-12-13 15:55:47

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

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

以下是步骤:

  1. Dockerfile已创建,并带有构建Docker映像的步骤。步骤之一包括从Google存储(存储桶)下载一个文件,我需要以GCP服务帐户访问该文件。

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

第一步失败是因为:

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

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

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

还有其他方法可以执行Cloud build触发作业并保持/获取GCP服务帐户上下文吗?

2 个答案:

答案 0 :(得分:3)

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

在调用Docker Build之前,请在Cloud Build中添加此步骤,以使用Cloud Build环境的许可(服务帐户如下:<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com)从Cloud Storage下载文件

- 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密钥文件。

答案 1 :(得分:2)

  1. 您可以让云构建为您从云存储下载文件,并让docker访问目录以便它可以使用该文件。您需要允许云构建服务帐户访问您的存储桶。

    请参阅:https://cloud.google.com/cloud-build/docs/securing-builds/set-service-account-permissions

OR

  1. 使用gcloud auth configure-docker,然后您可以使用--impersonate-service-account来作为具有存储桶访问权限的服务帐户,因此docker用户具有足够的权限来下载文件

    请参阅:https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker