如何使用Google Cloud Build和Google Cloud KMS从构建时解密的文件中读取变量

时间:2019-07-26 11:22:21

标签: encryption google-cloud-build google-cloud-kms

我正在遵循this教程,以将加密密钥获取到我的cloudbuild YAML文件中。 我试图了解如何在YAML文件的后续步骤中“使用工作区目录中的已解密...文件”变量。

我解密密钥文件的cloudbuild步骤如下:

- name: gcr.io/cloud-builders/gcloud
  args: ['kms', 'decrypt', '--ciphertext-file=<encrypted_file>', '--plaintext-file=<decrypted_file>', '--location=<location>', '--keyring=<keyring>', '--key=<key>']

该教程尚不清楚如何执行此操作,因此我在Internet上找不到与此相关的任何内容。

非常感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:2)

使用gcloud kms encrypt加密内容时,可以将输出写入工作区中的文件,例如:

# replace with your values
gcloud kms encrypt \
  --location=global \
  --keyring=my-kr \
  --key=my-key \
  --plaintext-file=./data-to-encrypt \
  --ciphertext-file=./encrypted-data

./data-to-encrypt是磁盘上的文件,其中包含您的 plaintext 机密,而./encrypted-data是磁盘上的目标路径,加密的密文应该在其中被写。

直接使用API​​时,交互如下所示:

plaintext -> kms(encrypt) -> ciphertext

但是,当使用gcloud时,它看起来像这样:

plaintext-file -> gcloud(read) -> kms(encrypt) -> ciphertext -> gcloud(write)

当您调用Cloud Build时,它会有效地获取应用程序的压缩文件,减去.gcloudignore中指定的所有文件。这意味着./encrypted-data将在容器步骤内的文件系统上可用:

steps:
# decrypt the value in ./my-secret
- name: gcr.io/cloud-builders/gcloud
  args:
  - kms
  - decrypt
  - --location=global
  - --keyring=my-kr
  - --key=my-key
  - --ciphertext=file=./encrypted-data
  - --plaintext-file=./my-secret

- name: gcr.io/my-project/my-image
  steps: 
  - my-app start --secret=./my-secret

目前,在Cloud Build中的步骤之间共享数据的唯一方法是使用文件,但是所有构建步骤都具有相同的共享文件系统。