Как передать несколько переменных среды в качестве секретов, используя Google Cloud Build с KMS в cloudbuild.yaml? - PullRequest
0 голосов
/ 10 июля 2019

Как мне отредактировать мой файл cloudbuild.yaml, чтобы я мог передавать несколько переменных среды в качестве секретов?

Я сохранил два токена аутентификации в двух отдельных файлах, SECRET1.txt и SECRET2.txt, в своем локальномТекущий рабочий каталог компьютера.

Я хочу передать оба этих токена аутентификации в качестве секретов в Google Cloud Build с использованием KMS.

Как должен выглядеть файл 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>

Я получаю этосообщение об ошибке: Ошибка

Cloud Build может прочитать токен (я вычеркнул его, используя КРАСНЫЕ чернила здесь Ошибка ), но выдает сообщение об ошибке, говорящеечто «Ошибка: ENOENT: нет такого файла или каталога».

Может кто-нибудь сказать мне, что пошло не так в моем подходе и почему Cloud Build не может получить доступ к этим токенам аутентификации (секретноц)

1 Ответ

0 голосов
/ 11 июля 2019

Без дальнейших подробностей, я предполагаю, что все ваши секреты были зашифрованы отдельно, и вы получаете сообщение об ошибке типа Error 400: Decryption failed: verify that 'name' refers to the correct CryptoKey.Типичная настройка заключается в том, чтобы каждый объект в вашем списке secrets имел только одну совпадающую пару kmsKeyName и secretEnv.

В приведенном ниже примере переменная SECRET1 env будетрасшифровывается ключом на 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>
...
...