Comment se connecter à Google Cloud Storage à partir d'une fonction python?
Je suis nouveau sur Google Cloud Storage et j'essaie de configurer une fonction qui télécharge un blob une fois par jour. Pour le moment, je travaille dans mon Jupyter Notebook mais finalement, le code s'exécutera dans une fonction Azure. J'ai du mal à configurer le client qui me connecte au bucket. J'ai un identifiant de compte de service JSON qui me permet de me connecter à google.
Localement j'ai trouvé une solution:
from google.cloud import storage
client = storage.Client.from_service_account_json('<PATH_TO_SERVICE_ACCOUNT_JSON>')
Le problème est que je n'ai pas de chemin où je stocke mon JSON dans le cloud mais je le stocke dans le coffre de clés. J'ai proposé la solution suivante:
from google.cloud import storage
import json
from google.oauth2 import service_account
string_key = get_key_from_key_vault()
service_account_info = json.loads(string_key)
google_credentials = service_account.Credentials.from_service_account_info(
service_account_info
)
scoped_credentials = google_credentials.with_scopes(
['https://www.googleapis.com/auth/cloud-platform.read-only'])
print(type(scoped_credentials))
client = storage.Client(credentials = scoped_credentials)
Je ne suis pas tout à fait sûr d'avoir besoin de la scoped_credentials = ...pièce, mais je n'ai que des autorisations de lecture sur le seau. (si je saute la partie, l'erreur reste la même)
Lorsque je cherche cette solution, j'obtiens l'erreur suivante:
DefaultCredentialsError: Could not automatically determine credentials. Please set
GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For
more information, please see https://cloud.google.com/docs/authentication/getting-started
Je n'ai aucune idée de ce que je fais mal car je pense que j'ai déjà défini les informations d'identification explicitement.
Meilleur P
Réponses
vous pouvez définir la variable d'environnement GOOGLE_APPLICATION_CREDENTIALSavec le chemin du fichier json et authentifier votre fonction en démarrant le client de stockage sans paramètres.
client = storage.Client()
* par défaut, le client de stockage utilise le chemin du fichier sur la variable d'environnementGOOGLE_APPLICATION_CREDENTIALS
C'est le moyen le plus simple d'utiliser les informations d'identification JSON et il est compatible avec la plupart des bibliothèques python de Google Cloud.
après quelques tests supplémentaires, j'ai découvert que j'avais manqué d'ajouter project = None. Si vous l'ajoutez, utilisez la commande suivante pour créer le client, cela fonctionne:
client = storage.Client(project = None, credentials = scoped_credentials)
Merci pour votre aide et matière à réflexion :-)
(J'utilise la partie réponse car le formatage du code dans le commentaire est horrible)
Pouvez-vous essayer ceci et me dire si vous voyez le jeton d'accès 2 imprimé?
from google.cloud import storage
import json
from google.oauth2 import service_account
from google.auth.transport import requests as grequests
string_key = get_key_from_key_vault()
service_account_info = json.loads(string_key)
google_credentials = service_account.Credentials.from_service_account_info(
service_account_info
)
google_credentials.refresh(grequests.Request())
print(google_credentials.token)
scoped_credentials = google_credentials.with_scopes(
['https://www.googleapis.com/auth/cloud-platform.read-only'])
scoped_credentials.refresh(grequests.Request())
print(scoped_credentials.token)