Какой правильный формат private_key при использовании его в качестве переменной среды?

Я пытаюсь использовать private_key для некоторых клиентских библиотек nodejs службы GCP, например, @google-cloud/pubsub, @google-cloud/trace-agent

я получил private_key из учетных данных службы JSON файл, как это:

Я пытаюсь использовать его в качестве переменной среды для облачной функции.

.env.yaml:

И используйте это так:

// ...

  credentials: {
        private_key: envs.private_key,
        client_email: envs.client_email
  },
  projectId: envs.X_GOOGLE_GCLOUD_PROJECT

Но получил ошибку:

Ошибка: ошибка:0906D06C: процедуры PEM:PEM_read_bio: нет начальной строки

Я проверяю логи в стекдрайвере, вот private_key переменная окружения я получил:

Я думаю, это формат private_key не является правильным. Это, вероятно, вызвано символом новой строки \n, Итак, какой правильный формат при использовании private_key нравится?

2 ответа

Решение

Установка ключа в файле.env.yaml не очень хорошая идея. Действительно, вы сможете зафиксировать его в git, возможно, в публичном репозитории, и вы установите его в виде простого текста в качестве переменной среды вашей функции.

Будет лучше, если вы установите файл в корзину и загрузите его во время выполнения. Кстати, вы не будете держать в секрете в файлах проекта.

Другое решение - зашифровать ключом kms и расшифровать его во время выполнения. На этот раз у вас все еще есть секрет в файлах вашего проекта, но в зашифрованном виде.

Но зачем вам нужен другой сервисный аккаунт? Этого на функции не хватает?

GCLOUD_KEY='{"private_key_id":"XXX", "private_key":"YYY",
             "client_email":"ZZZ@ZZZ.COM", "client_id":"ABC123",
             "type":"service_account"}'