Comment utiliser GOOGLE_APPLICATION_CREDENTIALS avec gcloud sur un serveur?

11

Quelle est la manière la plus simple d'utiliser la gcloudligne de commande 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 qui gcloud auth activate-service-account --key-file=...fait.

Il existe de nombreux cas d'utilisation pour une utilisation gcloudavec un compte de service. Par exemple, sur un serveur, je voudrais tester que le GOOGLE_APPLICATION_CREDENTIALSest 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 gcloudligne de commande.

Les bibliothèques Google Cloud (par exemple python , java ) utilisent automatiquement la variable d'environnement GOOGLE_APPLICATION_CREDENTIALSpour s'authentifier auprès de Google Cloud. Mais malheureusement, cette ligne de commande semble n'avoir aucun effet gcloud. Quelle est une façon propre d'utiliser gcloudtout 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.
yonran
la source
N'hésitez pas à ouvrir une demande de fonctionnalité sur Google Public Issue Tracker en mentionnant vos cas d'utilisation: issuetracker.google.com
Kamran
1
J'ai créé le numéro 38098801
yonran

Réponses:

20

gcloudn'utilise généralement pas de GOOGLE_APPLICATION_CREDENTIALSvariable 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 gcloudstocke sa configuration dans $ {HOME} /. Config / gcloud. Il est possible de remplacer cet emplacement en définissant CLOUDSDK_CONFIGla 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 CLOUDSDK_CONFIGcar 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. Défini CLOUDSDK_CONFIGsur un répertoire temporaire
  2. gcloud auth activate-service-account --key-file=...
  3. ... utilisez gcloudpour faire votre travail ...
  4. Supprimez le CLOUDSDK_CONFIGrépertoire temporaire .
cherba
la source
1

Avez-vous --accountenvisagé l' option? Comme

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

( Référence )

Concernant "De préférence sans salir le système de fichiers avec des fichiers d'informations d'identification", je ne sais pas s'il est possible de le réaliser.

Donald Duck
la source
Je pense que l'OP demande comment s'authentifier sans avoir à activer les informations d'identification du compte de service qui met en cache les informations d'identification ailleurs. Je pense que vous ne pouvez utiliser que --account=lorsque les informations d'identification ont été activées.
David Xia
1

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.

Shane Ramey
la source