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

Encryption 如何使用Google Cloud build和Google Cloud KMS从构建时解密的文件中读取变量,encryption,google-cloud-build,google-cloud-kms,Encryption,Google Cloud Build,Google Cloud Kms,我正在学习如何将加密密钥放入cloudbuild YAML文件。 我试图理解在YAML文件的后续步骤中如何“使用工作区目录中解密的…文件”变量 我解密密钥文件的cloudbuild步骤如下所示: - name: gcr.io/cloud-builders/gcloud args: ['kms', 'decrypt', '--ciphertext-file=<encrypted_file>', '--plaintext-file=<decrypted_file>', '

我正在学习如何将加密密钥放入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>']
-名称:gcr.io/cloud-builders/gcloud
参数:['kms','decrypt','--密文文件=','--明文文件=','--位置=','--密钥环=','--密钥=']
教程不清楚如何做到这一点,我在互联网上找不到任何与此相关的内容

非常感谢您的帮助


谢谢。

使用
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
是磁盘上包含明文密码的文件,
/encrypted data
是磁盘上应该写入加密密文的目标路径

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

plaintext -> kms(encrypt) -> ciphertext
plaintext-file -> gcloud(read) -> kms(encrypt) -> ciphertext -> gcloud(write)
但是,当使用
gcloud
时,它看起来是这样的:

plaintext -> kms(encrypt) -> ciphertext
plaintext-file -> gcloud(read) -> kms(encrypt) -> ciphertext -> gcloud(write)
当您调用Cloud Build时,它会有效地获取应用程序的tarball,减去
.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

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

非常感谢您的回答。最后一步,在构建映像之后,我将部署到一个云运行服务。我怎样才能把我的秘密档案交给服务局?例如,假设解密的文件是一个json,我如何将该json作为环境变量传递给--set env vars?您需要确保使用bash和unix工具以及
cat
将文件内容传递到标志中。但是,请注意,环境变量不被视为云运行威胁模型的一部分。具有project/viewer或更高权限的任何人都可以在web ui中查看环境变量。泄漏明文环境变量也很容易。请参阅并查看更安全的替代方案。是否可以作为环境变量传递文件的路径(这可能吗?!),然后将文件加载到代码中?作为您提出的解决方案的替代方案。您可以传递环境变量,但它们不会在步骤之间持续存在。步骤之间唯一共享的是文件系统。我的一位同事今天刚刚发表了这篇文章,它说明了如何在GCB步骤之间共享(更大)数量的数据: