Не удалось загрузить учетные данные по умолчанию? (Node.js Google Compute Engine)

СИТУАЦИЯ:

Я следую этому руководству: https://cloud.google.com/nodejs/tutorials/bookshelf-on-compute-engine

Все работает нормально, пока я не npm start и не npm start к:

HTTP://локальный: 8080

На пустой странице меня встретил следующий текст:

Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information.

Что не имеет смысла, так как я использую OAuth. Я перешел по ссылке и прочитал страницу, но у меня нигде нет поля GOOGLE-APPLICATION-CREDENTIALS и ничего об этом нет в учебнике.


ВОПРОС:

Не могли бы вы воспроизвести шаги и сказать мне, если вы получите тот же результат?

(занимает 5 минут)

Если нет, то что я мог сделать не так?

Ответ 1

Да, у меня была такая же ошибка. Это раздражает, потому что документы Google Cloud Platform для их учебника по началу работы с книжной полкой нигде не упоминают об этом. Это означает, что любой новый разработчик, который попробует это руководство, увидит эту ошибку.

Прочитай это: https://developers.google.com/identity/protocols/application-default-credentials

Я исправил эту проблему, запустив: gcloud auth application-default login

Для того, чтобы запустить это gcloud auth application-default login Посещение: https://cloud.google.com/sdk/install 1) Вы должны установить SDK на свой компьютер 2) Это позволит вам запустить код 3) Войдите в свою учетную запись Gmail, тогда вы готовы!

Это заставит вас войти в систему, и после этого вы будете использовать локальный код для аутентификации.

Ответ 2

Есть 2 решения этой проблемы. Один из вариантов, как уже упоминалось другими, это использовать gcloud auth application-default login

Второй вариант - установить переменную среды GOOGLE_APPLICATION_CREDENTIALS. Он должен указывать на файл, который определяет учетные данные. Чтобы получить этот файл, вам необходимо выполнить следующие действия:

Перейдите на страницу учетных данных консоли API.

В раскрывающемся списке проекта выберите свой проект.

На странице "Учетные данные" выберите раскрывающийся список "Создать учетные данные", затем выберите ключ учетной записи службы.

В раскрывающемся списке "Учетная запись службы" выберите существующую учетную запись службы или создайте новую.

В поле Тип ключа выберите параметр ключа JSON, затем выберите Создать. Файл автоматически загружается на ваш компьютер.

Поместите файл *.json, который вы только что скачали, в каталог по вашему выбору.

Этот каталог должен быть закрытым (вы не можете позволить кому-либо получить к нему доступ), но доступным для кода вашего веб-сервера.

Задайте для переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к загруженному файлу JSON.

Подробнее см. Https://developers.google.com/identity/protocols/application-default-credentials.

Ответ 3

Если вы запускаете приложение локально, то для получения локальных учетных данных должно хватить команды gcloud beta auth application-default login (я так и обновил учебник).

При запуске приложения в Google Compute Engine, если экземпляр Compute Engine был создан с надлежащими областями (cloud-platform должно быть достаточно), тогда приложение будет автоматически аутентифицироваться с API-интерфейсами Google Cloud Platform без дополнительной работы с вашей стороны.

Ответ 4

  1. Создайте ключ учетной записи службы и загрузите файл json. https://console.cloud.google.com/apis/credentials/serviceaccountkey

  2. Добавьте это в ваш файл ENV

    GOOGLE_APPLICATION_CREDENTIALS = "<PATH_TO_SERVICE_ACCOUNT_JSON_FILE>"

Например:

GOOGLE_APPLICATION_CREDENTIALS=/Users/hello/Documents/ssh/my-10ebbbc8b3df.json

Ответ 5

используйте это, чтобы решить вашу проблему. это на самом деле работает: - просто введите параметр учетных данных и укажите ссылку на него.

const serviceAccount = require('../key.json');
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});

Ответ 6

Перейдите сюда: https://firebase.google.com/docs/admin/setup#initialize_the_sdk и следуйте инструкциям, чтобы создать закрытый ключ. Затем после загрузки личного ключа откройте командную строку в каталоге проекта и выполните следующую команду:

 set GOOGLE_APPLICATION_CREDENTIALS=C:\YOUR-PATH\YOUR-KEY.json

Ответ 7

Если вы находитесь в среде CI/CD без доступа к браузеру:

или если вы просто хотите автоматизировать процесс.

Вместо запуска gcloud auth application-default login необходимо gcloud auth application-default login местоположение json файла учетной записи службы, используя переменную $GOOGLE_APPLICATION_CREDENTIALS

например, echo "export GOOGLE_APPLICATION_CREDENTIALS=${TF_VAR_gcp_service_account_file_loc}" >> $BASH_ENV (если вам нужно переместить переменные env между шагами/заданиями). $BASH_ENV - это специальное свойство, предоставляемое CircleCI, если вы используете другой инструмент CI/CD, вам нужно будет найти местоположение профиля bash.

или просто export GOOGLE_APPLICATION_CREDENTIALS=[path-to-service-account-json-file] для использования на том же шаге

Ответ 8

Я предоставляю другой способ, который устанавливает учетные данные вручную. Для локальной разработки и работы на GCP, таких как Cloud Function, Compute Engine.

Вы можете использовать служебную учетную запись и предоставить ей соответствующую учетную запись. например Администратор Cloud Trace

Установите параметры private_key, client_email и projectId для любой клиентской библиотеки GCP. Эти параметры можно получить из файла json учетной записи службы.

Например, я использую клиентскую библиотеку Cloud Trace Node.js в своих облачных функциях.

Перед установкой credentials и projectId я получил эту ошибку:

Ошибка: непредвиденная ошибка при получении учетных данных приложения по умолчанию: не удалось загрузить учетные данные по умолчанию. Перейдите на https://developers.google.com/accounts/docs/application-default-credentials для получения дополнительной информации. в GoogleAuth. (/srv/node_modules/google-auth-library/build/src/auth/googleauth.js:248:31) на шаге (/srv/node_modules/google-auth-library/build/src/auth/googleauth.js: 47:23) в Object.next(/srv/node_modules/google-auth-library/build/src/auth/googleauth.js:28:53) в выполненном (/srv/node_modules/google-auth-library/build/src/auth/googleauth.js: 19: 58) at at process._tickDomainCallback (внутренний /process/next_tick.js: 229: 7)

Вы можете передать credentials и projectId как переменные окружения. После настройки credentials и projectId ошибка исчезла.

const tracer = require('@google-cloud/trace-agent').start({
    samplingRate: 0,
    bufferSize: 1,
    credentials: {
      client_email: process.env.CLIENT_EMAIL,
      private_key: process.env.TRACE_AGENT_ADMIN,
    },
    projectId: process.env.X_GOOGLE_GCLOUD_PROJECT || process.env.PROJECT_ID,
  });

X_GOOGLE_GCLOUD_PROJECT - это встроенная переменная среды для выполнения облачной функции