Encryption 如何使用Google Cloud build和Google Cloud KMS从构建时解密的文件中读取变量
我正在学习如何将加密密钥放入cloudbuild YAML文件。 我试图理解在YAML文件的后续步骤中如何“使用工作区目录中解密的…文件”变量 我解密密钥文件的cloudbuild步骤如下所示: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>', '
- 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步骤之间共享(更大)数量的数据: