Доступ к переменным среды, хранящимся в Google Secret Manager, из Google Cloud Build

Как мне получить доступ к переменным, которые я определяю в Google Secret Manager из моего конвейера сборки Google Cloud?


comment
Я бы не рекомендовал использовать Google Secret Manager сейчас, потому что он находится в предварительном состоянии, что означает, что он обязательно изменится в будущем. Что касается доступа к переменным среды, хранящимся в Google Secret Manager, по-прежнему нет способа получить их из Cloud Build. Тем не менее, здесь вы найдете как управлять зашифрованными ресурсами в Cloud Build. Я надеюсь, что это помогает.   -  person Christopher Rodriguez Conde    schedule 03.02.2020
comment
Я не согласен с @ChristopherRodriguezConde. Продукт Google Beta часто очень близок к производственной версии. Альфа-версия может быть изменена (или отменена), вы можете быть уверены в бета-версии с точки зрения стабильности и доступности.   -  person guillaume blaquiere    schedule 03.02.2020
comment
В любом случае, можете ли вы описать свой вариант использования для этого? Почему вам нужно, чтобы ваш секрет был в виде обычного текста во время конвейера Cloud Build?   -  person guillaume blaquiere    schedule 03.02.2020
comment
@guillaumeblaquiere У меня много переменных среды, и мне нужен более интуитивно понятный способ их хранения для разных сред. Я бы предпочел не использовать KMS, так как это усложняет довольно простую задачу. Мне просто нужны переменные в сборке, как если бы они были в circleci, travisci, bitbucket-pipelines ... e.t.c   -  person martinkaburu    schedule 03.02.2020
comment
Отвечает ли это на ваш вопрос? Как указать secretEnv в cloudbuild.yaml через аргументы gcloud cli или переменные среды   -  person sethvargo    schedule 06.03.2020


Ответы (1)


Вы можете получить доступ к секрету из Cloud Build, используя стандартный Cloud Builder gcloud

Но есть 2 проблемы:

  1. Если вы хотите использовать секретное значение на другом шаге Cloud Build, вы должны сохранить свой секрет в файле, это единственный способ повторно использовать предыдущее значение с одного шага на другой.
  2. Текущая версия Cloud Builder gcloud устарела (сегодня, 3 февраля 2020 г.). Вы должны добавить обновление компонента gcloud, чтобы использовать правильную версию. Я открыл для этого проблему.
steps:
    - name: gcr.io/cloud-builders/gcloud
      entrypoint: "bash"
      args:
          - "-c"
          - |
              gcloud components update
              # Store the secret is a temporary file
              gcloud beta secrets versions access --secret=MySecretName latest > my-secret-file.txt
    - name: AnotherCloudBuildStepImage
      entrypoint: "bash"
      args:
          - "-c"
          - |
              # For getting the secret and pass it to a command/script
              ./my-script.sh $(cat my-secret-file.txt)

Подумайте о предоставлении роли Secret Manager Secret Accessor roles/secretmanager.secretAccessor учетной записи службы Cloud Build по умолчанию <PROJECT_ID>@cloudbuild.gserviceaccount.com

ИЗМЕНИТЬ

Вы можете получить доступ к секрету из любого места, либо с установленным интерфейсом командной строки gcloud (и инициализированным с помощью учетной записи службы, авторизованной для доступа к секретам), либо через вызов API

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://secretmanager.googleapis.com/v1beta1/projects/PROJECT_ID/secrets/MySecretName/versions/latest:access

Примечание. Вы получаете секрет в поле данных в формате с кодировкой base64. Не забудьте расшифровать его перед использованием!

Вам необходимо создать токен доступа для учетной записи службы с правильной предоставленной ролью. Здесь я снова использую gcloud, потому что так проще. Но в зависимости от вашей платформы используйте наиболее подходящий метод. Сценарий Python также может выполнить эту работу.


ИЗМЕНИТЬ 2

Новый способ получить секреты теперь в облаке Строить. Меньше бойлера, безопаснее. Посмотрите и используйте этот способ сейчас.

person guillaume blaquiere    schedule 03.02.2020
comment
Есть ли какие-либо намерения сделать это напрямую с помощью Cloud Build, или я ДОЛЖЕН собрать скрипт для обработки получения переменных? Похоже, что Google должен был что-то автоматизировать. - person martinkaburu; 03.02.2020
comment
Cloud Build, потому что это был заголовок вашего вопроса, но вы можете сделать это где угодно. Либо с помощью команды Gcloud, как в моем примере, либо напрямую с помощью вызова API. Посмотри на мою правку - person guillaume blaquiere; 03.02.2020
comment
Хотя я не могу комментировать детали, мы работаем над более глубокой интеграцией с другими продуктами GCP. В будущем это будет проще, но пока вы можете использовать gcloud или API - person sethvargo; 03.02.2020
comment
С нетерпением жду этого будущего. - person martinkaburu; 04.02.2020
comment
Я не совсем уверен, что моя проблема такая же, но я следую этому руководству, и на шаге 4 мы создаем секрет. Однако на шаге 7 при запуске миграции кажется, что секрет не обнаруживается: File "/usr/local/lib/python3.8/site-packages/environ/environ.py", line 273, in get_value value = self.ENVIRON[var] File "/usr/local/lib/python3.8/os.py", line 675, in __getitem__ raise KeyError(key) from None KeyError: 'SECRET_KEY' codelabs.developers.google.com/codelabs/cloud-run-wagtail#7 - person dev-jeff; 24.12.2020
comment
Можете ли вы предложить передавать секреты между шагами с другой точкой входа? Пример здесь github.com/vivekkranjan / docker-dataflowrunner-python3 / blob / - person Vivek Ranjan; 14.02.2021
comment
Я отредактировал свой пост. Теперь существует новый способ. @sethvargo - person guillaume blaquiere; 14.02.2021