web-dev-qa-db-fra.com

Comment authentifier sur Google Cloud en utilisant un compte de service en Python?

Im essayant de faire un projet qui téléchargera le fichier json de stockage Google sur BigQuery (automatisez simplement quelque chose qui est fait manuellement maintenant).

Et j'aimerais utiliser 'compte de service' pour cela car mon script va être exécuté quotidiennement.

Après avoir lu tout ce que je peux trouver sur l'utilisation du compte de service, j'ai toujours du mal à m'authentifier.

Je me demande si quelqu'un pourrait vérifier et me montrer ce que j'ai manqué?

Voici ce que j'ai fait jusqu'à présent:

  1. Fichier de clé json créé pour le compte de service
  2. Bibliothèques clientes installées: pip install --upgrade google-cloud-bigquery
  3. SDK Google Cloud installé selon: https://cloud.google.com/sdk/docs/
  4. Courir export GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file> avec le chemin de clé spécifié correctement

Maintenant, j'essaie d'exécuter le script python:

from google.cloud import bigquery
bigquery_client = bigquery.Client()

je reçois cette erreur:

google.auth.exceptions.DefaultCredentialsError: impossible de déterminer automatiquement les informations d'identification. Veuillez définir GOOGLE_APPLICATION_CREDENTIALS ou créer explicitement des informations d'identification et réexécuter l'application. Pour plus d'informations, veuillez consulter https://developers.google.com/accounts/docs/application-default-credentials .

Je suis assez nouveau pour les deux python et l'API Google Cloud ont donc possiblement manqué quelque chose,

Vous vous demandez si quelqu'un pourrait indiquer où/ce qui n'allait pas dans mes étapes ci-dessus ou me diriger pour effacer les instructions des mannequins sur la configuration et l'exécution d'un script simple avec Bigquery en utilisant un compte de service?

11
user912830823

Je règle généralement cette variable dans le script python lui-même, quelque chose comme:

import os
from google.cloud.bigquery.client import Client

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path_to_json_file'
bq_client = Client()
22
Willian Fuks

Si vous avez mis en œuvre un contrôle plus fin des autorisations des comptes de service et que vous avez une application qui doit en utiliser plusieurs (disons une pour Pub/Sub, une pour le stockage), vous devrez définir le GOOGLE_APPLICATION_CREDENTIALS variable d'environnement avant de créer chaque client.

Au lieu de cela, vous pouvez charger vos informations d'identification séparément et les transmettre à leurs clients appropriés comme suit:

import json

from google.cloud import storage
from google.oauth2 import service_account

project_id = 'my-test-project'

with open('/path/to/my/service_keys/storage_service.json') as source:
    info = json.load(source)

storage_credentials = service_account.Credentials.from_service_account_info(info)

storage_client = storage.Client(project=project_id, credentials=storage_credentials)

Assurez-vous simplement dans votre console IAM que le compte dispose des autorisations nécessaires pour effectuer les opérations que vous en avez besoin, mais heureusement dans ce cas, les messages d'erreur sont vraiment informatifs.

9
tarikki

Exécutez-vous le script dans la même session de ligne de commande que celle que vous avez définie pour votre variable d'environnement lors de l'utilisation de l'exportation? Sinon, vous voudrez peut-être envisager de le configurer pour votre utilisateur ou votre système (voir cette question pour plus d'informations).

Une autre option qui pourrait rendre les choses encore plus faciles et s'en occuper automatiquement consiste à utiliser outil gcloud cli . Si vous regardez la deuxième option ici sous le Fonctionnement des informations d'identification par défaut de l'application , vous pouvez trouver des informations sur la façon d'utiliser pour gérer les informations d'identification pour vous (gcloud auth login et gcloud auth application-default login)

3
Matthias Baetens

Ceci est une vieille question mais je veux ajouter que vous devez créer un nouveau compte de service et ne pas utiliser un ancien un. Une récente présentation de Google Cloud Next sur la sécurité a déclaré qu'il n'y a aucune garantie que le compte de service par défaut existera à l'avenir, et qu'il pourrait être supprimé à tout moment (ou ses autorisations disponibles modifiées), donc aucune de vos applications ne devrait en dépendre. J'ai également constaté qu'il existe des problèmes potentiels d'authentification lors de l'utilisation du compte de service par défaut et que la création d'un nouveau compte est plus susceptible de permettre le contrôle dont vous avez besoin pour vous authentifier avec succès.

Reportez-vous à la présentation YouTube suivante de 11 minutes 10 secondes dans:

https://www.youtube.com/watch?v=ZQHoC0cR6Qw

2
Chris Halcrow