Come usare GOOGLE_APPLICATION_CREDENTIALS con gcloud su un server?


11

Qual è il modo più semplice di utilizzare la gcloudriga di comando in modo non interattivo con un account di servizio al di fuori di GCE? Preferibilmente senza sporcare il file system con file di credenziali, che è ciò che gcloud auth activate-service-account --key-file=...fa.

Esistono molti casi d'uso da utilizzare gcloudcon un account di servizio. Ad esempio, su un server, vorrei verificare che GOOGLE_APPLICATION_CREDENTIALSsia impostato correttamente e disponga delle autorizzazioni necessarie prima di eseguire la mia applicazione. Oppure, vorrei eseguire alcuni script di installazione o cron script che eseguono un controllo con la gcloudriga di comando.

Le librerie di Google Cloud (ad esempio python , java ) utilizzano automaticamente la variabile d'ambiente GOOGLE_APPLICATION_CREDENTIALSper autenticarsi su Google Cloud. Sfortunatamente, questa riga di comando sembra non avere alcun effetto gcloud. Qual è un modo pulito da usare gcloudlasciando intatto il filesystem?

$ 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.


1
Ho creato il numero 38098801
yonran,

Risposte:


20

gcloudgeneralmente non usa GOOGLE_APPLICATION_CREDENTIALSla variabile d'ambiente. Ha solo alcuni comandi per facilitare l'impostazione di queste credenziali predefinite dell'applicazione in gcloud auth application-default [login|revoke|print-access-token...].

Di default gcloudmemorizza la sua configurazione in $ {HOME} /. Config / gcloud. È possibile sovrascrivere quella posizione impostando CLOUDSDK_CONFIGla variabile di ambiente.

Inoltre è possibile (anche se più noioso) sostituire la maggior parte delle impostazioni in modo che non debbano essere preconfigurate tramite gcloud config set ...e / o gcloud auth activate-service-account. Per ogni impostazione è possibile specificare una variabile d'ambiente.

Ad esempio, il comando equivalente che si è tentato di utilizzare il file chiave dell'account di servizio sarebbe:

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

Tieni presente che questo memorizzerà comunque le credenziali CLOUDSDK_CONFIGpoiché deve memorizzare nella cache il token di accesso, quindi non dovrà aggiornarlo ad ogni chiamata.

Per il tuo caso d'uso l'opzione migliore a mio avviso sarebbe

  1. Impostato CLOUDSDK_CONFIGsu una directory temporanea
  2. gcloud auth activate-service-account --key-file=...
  3. ... usa gcloudper fare il tuo lavoro ...
  4. Rimuovi la CLOUDSDK_CONFIGdirectory temporanea .

1

Hai visto l' --accountopzione? Piace

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

( Riferimento )

Per quanto riguarda "Preferibilmente senza sporcare il file system con file di credenziali", non sono sicuro che sia possibile ottenerlo.


Penso che il PO stia chiedendo come eseguire l'autenticazione senza dover attivare le credenziali dell'account di servizio che memorizzano nella cache le credenziali altrove. Penso che puoi usarlo solo --account=dopo aver attivato le credenziali.
David Xia,

1

1) Creare un account di servizio in GCP IAM. Seleziona la casella "Fornisci una nuova chiave privata" e seleziona JSON come tipo di file.

2) Scarica il file JSON sul tuo server e digita: gcloud auth activate-service-account --key-file serviceaccount.json

3) Verificare che le credenziali siano state applicate eseguendo gcloud auth list.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.