¿Cómo usar GOOGLE_APPLICATION_CREDENTIALS con gcloud en un servidor?

11

¿Cuál es la forma más sencilla de usar la gcloudlínea de comandos de forma no interactiva con una cuenta de servicio fuera de GCE? Preferiblemente sin ensuciar el sistema de archivos con archivos de credenciales, que es lo que gcloud auth activate-service-account --key-file=...hace.

Hay muchos casos de uso para usar gcloudcon una cuenta de servicio. Por ejemplo, en un servidor, me gustaría probar que GOOGLE_APPLICATION_CREDENTIALSestá configurado correctamente y tiene los permisos necesarios antes de ejecutar mi aplicación. O, me gustaría ejecutar algunos scripts de configuración o scripts cron que realicen alguna comprobación con la gcloudlínea de comando.

Las bibliotecas de Google Cloud (por ejemplo , python , java ) usan automáticamente la variable de entorno GOOGLE_APPLICATION_CREDENTIALSpara autenticarse en Google Cloud. Pero desafortunadamente, esta línea de comando parece no tener efecto gcloud. ¿Cuál es una forma limpia de usar gclouddejando el sistema de archivos intacto?

$ 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
fuente
No dude en abrir una solicitud de función en el Rastreador de problemas públicos de Google mencionando sus casos de uso: issuetracker.google.com
Kamran
1
He creado el problema 38098801
yonran

Respuestas:

20

gcloudgeneralmente no usa GOOGLE_APPLICATION_CREDENTIALSvariable de entorno. Solo tiene algunos comandos para facilitar la configuración de estas credenciales predeterminadas de la aplicación gcloud auth application-default [login|revoke|print-access-token...].

Por defecto gcloudalmacena su configuración en $ {HOME} /. Config / gcloud. Es posible anular esa ubicación configurando CLOUDSDK_CONFIGla variable de entorno.

También es posible (aunque más tedioso) anular la mayoría de las configuraciones para que no tengan que preconfigurarse mediante gcloud config set ...y / o gcloud auth activate-service-account. Para cada configuración, se puede especificar la variable de entorno.

Por ejemplo, el comando equivalente que intentó usar el archivo de clave de la cuenta de servicio sería:

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

Tenga en cuenta que esto seguirá almacenando en caché las credenciales CLOUDSDK_CONFIGya que necesita almacenar en caché el token de acceso, de modo que no tendrá que actualizarlo en cada invocación.

Para su caso de uso, la mejor opción en mi opinión sería

  1. Establecer CLOUDSDK_CONFIGen algún directorio temporal
  2. gcloud auth activate-service-account --key-file=...
  3. ... solía gcloudhacer tu trabajo ...
  4. Eliminar el CLOUDSDK_CONFIGdirectorio temporal .
Cherba
fuente
1

¿Has mirado la --accountopción? Me gusta

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

( Referencia )

Con respecto a "Preferiblemente sin ensuciar el sistema de archivos con archivos de credenciales", no estoy seguro de si es posible lograrlo.

Pato Donald
fuente
Creo que el OP pregunta acerca de cómo autenticarse sin tener que activar las credenciales de la cuenta de servicio que almacena en caché las credenciales en otro lugar. Creo que solo puede usar --account=una vez que se hayan activado las credenciales.
David Xia
1

1) Cree una cuenta de servicio en GCP IAM. Marque la casilla "Proporcionar una nueva clave privada" y seleccione JSON como tipo de archivo.

2) Descargue el archivo JSON en su servidor y escriba: gcloud auth activate-service-account --key-file serviceaccount.json

3) Verifique que las credenciales se hayan aplicado ejecutando gcloud auth list.

Shane Ramey
fuente