Секретные переменные среды в Cloudbuild (без файлов), как? - PullRequest
2 голосов
/ 12 июня 2019

Я создаю конвейер CI / CD в Cloud Build очень простого приложения Node.js с развертыванием в стандартном приложении GCP.

Не секретные переменные среды хранятся в файле app.yaml. Но, конечно, я не хочу раскрывать там свои секреты. На самом деле я не хочу помещать их в какие-либо файлы (зашифрованные или нет), поскольку этот файл окажется в экземпляре AppEngine и может быть «просмотрен» «плохим администратором». Существует множество примеров, которые предлагают зашифровать / расшифровать полные файлы (а иногда даже код), но я не хочу идти по этому пути.

Я ищу способ установки секретных переменных среды "в памяти" как часть конвейера CI / CD. Кто-нибудь? * * 1006

Я не добавил никаких секретов в файл app.yaml (env_variables) - отлично работает Добавлены зашифрованные секреты в мой cloudbuild.yaml файл (секреты) - без ошибок Добавлен secretEnv: в шаги сборки, но значение не заканчивается как process.env. [KEY] в движке приложения

cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: "appengine/hello-world/standard"
 - name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", "test-app.yaml"]
  dir: "appengine/hello-world/standard"
  secretEnv: ['API_KEY', 'API_URL']

secrets:
- kmsKeyName: projects/XXXXXXXX/locations/global/keyRings/customintegrations-secrets/cryptoKeys/integration-secrets
  secretEnv:
    API_KEY: XXQAoHgKKoHBKOURrUU2RqU+ki8XyqmTjz+ns+MEWp5Kx3hQBpgSQgATFQ5yRdW4m1TLNqNRIdHIqVJi8tn8jFrtlHIEouOzNDe/ASlOT0ZQBfl9Rf7xlvOHAa667poBq2hEoMNvOclxUQ==
    API_URL: YYQAoHgKKklo08ZsQF+/8M2bmi9nhWEtb6klyY4rNthUhSIhQ8oSQQATFQ5ywKOxaM/TLwGDmvMtCpl/1stXOOK0kgy42yipYbw/J/QZL68bMat1u4H3Hvp/GMbUVIKEb9jwUtN2xvbL

Я надеялся, что secretEnv: ['API_KEY', 'API_URL'] сделает расшифрованные значения доступными в коде (process.env.API_KEY) в обработчике приложения.

1 Ответ

1 голос
/ 29 июня 2019

Вот полный учебник о том, как безопасно хранить переменные env в настройках облачной сборки (триггеры) и импортировать их в ваше приложение.

В основном есть три шага:

  1. Добавьте ваши переменные env в раздел «переменные» в одной из настроек триггера сборки

    Снимок экрана, на котором необходимо добавить переменные в триггеры сборки

    По условию переменные, установленные в триггере сборки, должны начинаться с подчеркивания (_)

  2. Настроить cloudbuild.yaml (на втором шаге в примере кода) для чтения в переменныхиз вашего триггера сборки установите их как env vars и запишите все env vars в локальный файл .env

    Добавьте couldbuild.yaml (ниже) в корневой каталог вашего проекта

steps:
- name: node:10.15.1
  entrypoint: npm
  args: ["install"]
- name: node:10.15.1
  entrypoint: npm
  args: ["run", "create-env"]
  env:
    - 'MY_SECRET_KEY=${_MY_SECRET_KEY}'
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy"]
timeout: "1600s"

Добавить create-env скрипт в package.json

"scripts": {
  "create-env": "printenv > .env"
},

Чтение переменных env из .env в ваше приложение (config.js)

Установка пакета dotenv

npm i dotenv -S

Добавление config.js вваше приложение

// Import all env vars from .env file
require('dotenv').config()

export const MY_SECRET_KEY = process.env.MY_SECRET_KEY

console.log(MY_SECRET_KEY) // => Hello

Готово!Теперь вы можете развернуть свое приложение, запустив облачную сборку, и ваше приложение получит доступ к env vars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...