我正在尝试使用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存储桶中,我也需要进行身份验证。所以我回到我的问题了。
还有其他方法可以执行Cloud build触发作业并保持/获取GCP服务帐户上下文吗?
答案 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)
您可以让云构建为您从云存储下载文件,并让docker访问目录以便它可以使用该文件。您需要允许云构建服务帐户访问您的存储桶。
请参阅:https://cloud.google.com/cloud-build/docs/securing-builds/set-service-account-permissions
OR
使用gcloud auth configure-docker
,然后您可以使用--impersonate-service-account
来作为具有存储桶访问权限的服务帐户,因此docker用户具有足够的权限来下载文件
请参阅:https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker