Utilice las credenciales predeterminadas de la aplicación en Google Compute Engine para acceder al API de Sheets

¿El flujo de trabajo de ADC (credenciales predeterminadas de la aplicación) solo es compatible con las API de Google Cloud (por ejemplo, es compatible con la API de almacenamiento de Google Cloud, pero no con la API de Google Sheet)?

Me refiero al método predeterminado de google.auth : no tener que almacenar ninguna clave privada con el código es una gran ganancia y el principal beneficio de hacer un uso efectivo de la configuración de ADC (credenciales predeterminadas de la aplicación).

El siguiente código funciona si configuro la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en el archivo de clave privada, por ejemplo, key.json. Esto está en línea con el método default según el paso 1 del paquete google.auth : 1. If the environment variable GOOGLE_APPLICATION_CREDENTIALS is set to the path of a valid service account JSON private key file, then it is loaded and returned.

 import google.auth from apiclient import discovery credentials, project_id = google.auth.default(scopes=['https://www.googleapis.com/auth/spreadsheets']) sheets = discovery.build('sheets', 'v4', credentials=credentials) SPREADSHEETID = '....' result = sheets.spreadsheets().values().get(spreadsheetId=SPREADSHEETID, range='Sheet1!A:B').execute() print result.get('values', []) 

Ahora, mirando el paso 4 del método: 4. If the application is running in Compute Engine or the App Engine flexible environment then the credentials and project ID are obtained from the Metadata Service.

Si GOOGLE_APPLICATION_CREDENTIALS la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en una instancia de Google Compute, obtengo el siguiente error:

googleapiclient.errors.HttpError:

Esto no es coherente con el asistente de Google según la consola de la nube: descubre qué credenciales necesitas

no necesitas credenciales

De acuerdo con esta documentación , el scope que está utilizando requiere la autorización de Oauth 2.0 . Por lo tanto, se requiere un inicio de sesión de usuario y el consentimiento.