Не удалось загрузить учетные данные по умолчанию? (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
-
Создайте ключ учетной записи службы и загрузите файл json. https://console.cloud.google.com/apis/credentials/serviceaccountkey
-
Добавьте это в ваш файл 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
- это встроенная переменная среды для выполнения облачной функции