web-dev-qa-db-fra.com

Comment utiliser GOOGLE_APPLICATION_CREDENTIALS avec gcloud sur un serveur?

Quelle est la manière la plus simple d'utiliser la ligne de commande gcloud de manière non interactive avec un compte de service en dehors de GCE? De préférence sans salir le système de fichiers avec des fichiers d'informations d'identification, c'est ce que gcloud auth activate-service-account --key-file=... Est-ce que.

Il existe de nombreux cas d'utilisation pour utiliser gcloud avec un compte de service. Par exemple, sur un serveur, je voudrais tester que le GOOGLE_APPLICATION_CREDENTIALS est correctement défini et dispose des autorisations requises avant d'exécuter mon application. Ou, je voudrais exécuter des scripts de configuration ou des scripts cron qui effectuent une vérification avec la ligne de commande gcloud.

Les bibliothèques Google Cloud (par exemple python , Java ) utilisent automatiquement la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pour vous authentifier auprès de Google Cloud. Mais malheureusement, cette ligne de commande semble n'avoir aucun effet sur gcloud. Quelle est une façon propre d'utiliser gcloud tout en laissant le système de fichiers intact?

$ GOOGLE_APPLICATION_CREDENTIALS=/etc/my-service-account-4b4b6e63aaed.json gcloud alpha pubsub topics publish testtopic hello
ERROR: (gcloud.alpha.pubsub.topics.publish) You do not currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.
11
yonran

gcloud n'utilise généralement pas GOOGLE_APPLICATION_CREDENTIALS variable d'environnement. Il ne contient que quelques commandes pour faciliter la configuration de ces informations d'identification par défaut de l'application dans gcloud auth application-default [login|revoke|print-access-token...].

Par défaut, gcloud stocke sa configuration dans $ {HOME} /. Config/gcloud. Il est possible de remplacer cet emplacement en définissant CLOUDSDK_CONFIG variable d'environnement.

Il est également possible (bien que plus fastidieux) de remplacer la plupart des paramètres afin qu'ils n'aient pas besoin d'être préconfigurés via gcloud config set ... et/ou gcloud auth activate-service-account. Pour chaque paramètre, on peut spécifier une variable d'environnement.

Par exemple, la commande équivalente que vous avez essayé d'utiliser le fichier de clé de compte de service serait:

$ CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE=/etc/my-service-account-4b4b6e63aaed.json \
    gcloud alpha pubsub topics publish testtopic hello

Notez que cela mettra toujours en cache les informations d'identification dans CLOUDSDK_CONFIG car il doit mettre en cache le jeton d'accès, de sorte qu'il n'aura pas à le rafraîchir à chaque appel.

Pour votre cas d'utilisation, la meilleure option à mon avis serait

  1. Ensemble CLOUDSDK_CONFIG vers un répertoire temporaire
  2. gcloud auth activate-service-account --key-file=...
  3. ... utilisez gcloud pour faire votre travail ...
  4. Supprimer temp CLOUDSDK_CONFIG répertoire.
20
cherba

1) Créez un ServiceAccount dans GCP IAM. Cochez la case "Fournir une nouvelle clé privée" et sélectionnez JSON comme type de fichier.

2) Téléchargez le fichier JSON sur votre serveur et tapez: gcloud auth activate-service-account --key-file serviceaccount.json

3) Vérifiez que les informations d'identification ont été appliquées en exécutant gcloud auth list.

1
Shane Ramey

Avez-vous regardé le --account option? Comme

$gcloud --account="foo" ...

( Référence )

En ce qui concerne "De préférence sans joncher le système de fichiers de fichiers d'informations d'identification", je ne sais pas si c'est possible.

1
Donald Duck