如何在cloudbuild.yaml中使用带有KMS的Google Cloud Build将多个环境变量作为秘密传递?

时间:2019-07-10 16:31:54

标签: node.js google-app-engine google-cloud-platform google-cloud-build

我应该如何编辑cloudbuild.yaml文件,以便可以将多个环境变量作为秘密传递?

我已将两个身份验证令牌存储在本地计算机当前工作目录中的两个单独文件SECRET1.txt和SECRET2.txt中。

我想将这两个身份验证令牌作为秘密传递给使用KMS的Google Cloud Build。

cloudbuild.yaml文件的外观如何,以便Cloud Build安全访问我的令牌?

我尝试使用此处https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials

处的加密机密

这是我尝试的cloudbuild.yaml:

steps:
- name: "gcr.io/cloud-builders/gcloud"
  secretEnv: ['SECRET1', 'SECRET2']
timeout: "1600s"

secrets:
- kmsKeyName: projects/<Project-Name>/locations/global/keyRings/<Key-Ring-Name>/cryptoKeys/<Key-Name>
  secretEnv:
    SECRET1: <encrypted-key-base64 here>
    SECRET2: <encrypted-key-base64 here>

我收到此错误消息: Error

Cloud Build能够读取令牌(我在Error处使用红色墨水将其删除了),但是它输出一条错误消息,提示'错误:ENOENT:没有这样的文件或目录'。

谁能告诉我我的方法出了什么问题以及为什么Cloud Build无法访问这些身份验证令牌(秘密)?

1 个答案:

答案 0 :(得分:0)

在没有更多细节的情况下,我假设您的所有机密信息都是分别加密的,并且您会收到类似Error 400: Decryption failed: verify that 'name' refers to the correct CryptoKey的错误消息。典型的设置是确保secrets列表中的每个对象只有一对匹配的kmsKeyNamesecretEnv对。

在下面的示例中,SECRET1环境变量将使用projects/<Project-Name>/locations/global/keyRings/<Key-Ring-Name>/cryptoKeys/<Key-Name-1>的密钥解密,而SECRET2使用<Key-Name-2>。您的示例要求KMS进行的操作是使用同一密钥解密所有秘密,这可能是不可能的。

steps:
- name: "gcr.io/cloud-builders/gcloud"
  secretEnv: ['SECRET1', 'SECRET2', ...]
  timeout: "1600s"

secrets:
- kmsKeyName: projects/<Project-Name>/locations/global/keyRings/<Key-Ring-Name>/cryptoKeys/<Key-Name-1>
  secretEnv:
    SECRET1: <encrypted-key-base64 here>
- kmsKeyName: projects/<Project-Name>/locations/global/keyRings/<Key-Ring-Name>/cryptoKeys/<Key-Name-2>
  secretEnv:
    SECRET2: <encrypted-key-base64 here>
...