Получите GoogleCredentials от localhost (без указания serviceAccount / privateKey) - PullRequest
0 голосов
/ 16 января 2019

Я и локально, и в наших модулях Kubernetes аутентифицирован в облаке Google. На обоих я могу получить правильный ответ с gcloud info.

Однако, когда я хочу получить доступ к GoogleDrive, мне нужно использовать GoogleCredential следующим образом:

        GoogleCredential.Builder()
                .setTransport(transport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountPrivateKey(privateKey)
                .setServiceAccountId(serviceAccount)
                .setServiceAccountScopes(scopes.toList()).build()

Значение - мне нужно специально установить privateKey и serviceAccount. Есть ли способ заставить его использовать локально аутентифицированную учетную запись?

При использовании Google Buckets это можно сделать довольно легко:

StorageOptions.getDefaultInstance().service.options.credentials

Не могу найти аналогичный способ для Google Диска.

1 Ответ

0 голосов
/ 23 января 2019

Как указывает @DazWilkin, многие клиентские библиотеки GCP (например, GCS в вашем случае) знают, как автоматически определять доступные «учетные данные приложения по умолчанию».

Эти учетные данные ADC в настоящее время работают только в API Google Cloud Platform (Google Drive предшествует этому). Вы можете прочитать краткий обзор Google Drive Java, чтобы узнать, как получить учетные данные: https://developers.google.com/drive/api/v3/quickstart/java

Для справки, клиентские библиотеки GCP будут искать АЦП по:

  1. GOOGLE_APPLICATION_CREDENTIALS Переменная среды, если установлена, указывающая на файл ключа JSON учетной записи службы.
  2. Найти %APPDATA%/gcloud/application_default_credentials.json (Windows) или $HOME/.config/gcloud/application_default_credentials.json (другое), если пользователь выполнил команду gcloud auth application-default login.
  3. В Google App Engine 1-го поколения (не GAE Flex) используйте appengine.AccessToken API.
  4. В средах GCE, GKE или GAE 2-го поколения он вызывает API метаданных GCE (URL-адрес, такой как http://metadata.google.internal или http://169.254.169.254), для получения краткосрочного токена access_token.

В вашем случае ваши модули GKE используют метод # 4 для получения токена для операций с корзиной GCS; но не для Drive API.

...