Мы работаем в двух разных местах. необходимо запускать код, который выполняет вызовы API к Google Диску: в рабочей среде Google Compute Engine и в средах разработки, т. е. локально на ноутбуках наших разработчиков.
Наша компания довольно строго относится к учетным данным и не позволяет загружать учетные данные учетной записи службы Ключи JSON (это лучший метод и обеспечивает более высокий уровень безопасности). По-видимому, во всех документах GCP говорится, что нужно просто загрузить ключ JSON для учетной записи службы и использовать его. Или в документах Google API/разработчиков говорится, что нужно создать идентификатор клиента OAuth2 и загрузить его ключ, как здесь.
Они часто используют такой код:
Код: Выделить всё
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
Для среды Google Compute Engine мы смогли выполнить аутентификацию с помощью учетных данных приложения GCP по умолчанию (ADC), т. е. не указывая явным образом учетные данные для использования в коде и позволяя клиентским библиотекам «просто работать» — это прекрасно работает, поскольку до тех пор, пока человек гарантирует, что Виртуальная машина создается с правильными областями https://www.googleapis.com/auth/drive, а электронная почта учетной записи службы вычислений по умолчанию получает разрешение на доступ к листу, к которому необходимо получить доступ - это описано в документации. здесь. Вы можете сделать это так;
Код: Выделить всё
from googleapiclient.discovery import build
service = build('sheets', 'v4')
SPREADSHEET_ID=""
RANGE_NAME="A1:A2"
s = service.spreadsheets().values().get(
spreadsheetId=SPREADSHEET_ID,
range=RANGE_NAME, majorDimension="COLUMNS"
).execute()
Обычно мы используем вход в приложение по умолчанию с использованием gcloud auth для создания учетных данных приложения по умолчанию, которые клиентские библиотеки Google используют те, которые «просто работают», например, для Google Storage. Однако это не работает для API Google за пределами GCP, например, для Google Drive API service = build('sheets', 'v4'), который завершается с ошибкой: «Запрос имел недостаточные области аутентификации». Затем мы попробовали всевозможные решения, например:
Код: Выделить всё
credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/drive"])
Код: Выделить всё
credentials, project_id = google.auth.default()
credentials = google_auth_oauthlib.get_user_credentials(
["https://www.googleapis.com/auth/drive"], credentials._client_id, credentials._client_secret)
)
Все это приводит к множеству ошибок/проблем, которые мы не можем преодолеть при попытке выполнить аутентификацию в Google Drive API

Есть мысли?
Подробнее здесь: https://stackoverflow.com/questions/635 ... -engine-an