Ошибка «Не удалось найти учетные данные по умолчанию» при использовании Google Cloud Storage - PullRequest
0 голосов
/ 19 июня 2020

У нас есть приложение Golang, работающее в Google App Engine, которое считывает ключ подписи с использованием cloud.google.com/go/storage. При попытке развернуть недавно обновленную версию он начал получать ошибки, говоря, что он не может найти учетные данные по умолчанию и, следовательно, не может получить доступ к хранилищу.

bucketName, err := file.DefaultBucketName(ctx)
if err != nil {
     log.Errorf(ctx, "failed to get default GCS bucket name: %v", err)
     return nil, nil, err
}
client, err = storage.NewClient(ctx)
if err != nil {
     log.Errorf(ctx, "failed to create client: %v", err)
     return nil, nil, err
}

(ctx - это context.Context мы создаем, используя appengine.NewContext() с входящим объектом http.Request в качестве параметра; file is google.golang.org/appengine/file)

Это привело к следующему журналу ошибок:

"2020-06-15 09: 16: 51.809 CEST не удалось создать клиента: dialing: google: не удалось найти учетные данные по умолчанию. См. https://developers.google.com/accounts/docs/application-default-credentials для получения дополнительной информации"

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

Мы решили обойти эту проблему, добавляя это в файл app.yaml , но это неправильно:

env_variables:
  GCE_METADATA_HOST: "169.254.169.254"

Это заставляет testOnGCE() в метаданных. go (https://github.com/googleapis/google-cloud-go/blob/master/compute/metadata/metadata.go#L117), чтобы вернуть истину, и позволяет нам d ключ подписи из хранилища.

Это ошибка платформы Google Cloud, которую нам нужно исправить, или что-то не так с приведенным выше кодом? Он работал нормально с тех пор, как мы добавили его в 2018 году, и только начал давать сбой при развертывании кода в июне 2020 года, а развертывание, которое сломалось, содержало только изменения в коде клиента JavaScript, бэкэнд golang не был затронут. Мы пытались повторно развернуть его несколько раз, но сообщение об ошибке было на 100% воспроизводимым, пока мы не добавили обходной путь.

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