Como usar o GOOGLE_APPLICATION_CREDENTIALS com o gcloud em um servidor?

11

Qual é a maneira mais simples de usar a gcloudlinha de comando de maneira não interativa com uma Conta de Serviço fora do GCE? De preferência, sem sobrecarregar o sistema de arquivos com arquivos de credenciais, e é gcloud auth activate-service-account --key-file=...isso que faz.

Existem muitos casos de uso para usar gcloudcom uma conta de serviço. Por exemplo, em um servidor, eu gostaria de testar se o GOOGLE_APPLICATION_CREDENTIALSestá definido corretamente e tem as permissões necessárias antes de executar meu aplicativo. Ou, eu gostaria de executar alguns scripts de instalação ou scripts cron que realizam alguma verificação com a gcloudlinha de comando.

As bibliotecas do Google Cloud (por exemplo , python , java ) usam automaticamente a variável de ambiente GOOGLE_APPLICATION_CREDENTIALSpara autenticar no Google Cloud. Infelizmente, porém, essa linha de comando parece não ter efeito gcloud. O que é uma maneira limpa de usar gcloud, deixando intacto o sistema de arquivos?

$ 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
fonte
Sinta-se livre para abrir um pedido de recurso no Issue Google Public Tracker com mencionando seus casos de uso: issuetracker.google.com
Kamran
1
Eu criei o problema 38098801
yonran 8/17

Respostas:

20

gcloudgeralmente não usa GOOGLE_APPLICATION_CREDENTIALSvariável de ambiente. Ele possui apenas alguns comandos para facilitar a configuração dessas credenciais padrão do aplicativo gcloud auth application-default [login|revoke|print-access-token...].

Por padrão, gcloudarmazena sua configuração em $ {HOME} /. Config / gcloud. É possível substituir esse local definindo CLOUDSDK_CONFIGa variável de ambiente.

Também é possível (embora mais tedioso) substituir a maioria das configurações, para que elas não precisem ser pré-configuradas via gcloud config set ...e / ou gcloud auth activate-service-account. Para cada configuração, pode-se especificar uma variável de ambiente.

Por exemplo, o comando equivalente que você tentou usar o arquivo de chave da conta de serviço seria:

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

Observe que isso ainda armazenará em cache as credenciais, CLOUDSDK_CONFIGpois ele precisa armazenar em cache o token de acesso, para que não seja necessário atualizá-lo a cada chamada.

Para o seu caso de uso, a melhor opção, na minha opinião, seria

  1. Defina CLOUDSDK_CONFIGpara algum diretório temporário
  2. gcloud auth activate-service-account --key-file=...
  3. ... use gcloudpara fazer o seu trabalho ...
  4. Remova o CLOUDSDK_CONFIGdiretório temporário .
cherba
fonte
1

Você já viu a --accountopção? Gostar

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

( Referência )

Em relação a "De preferência sem desarrumar o sistema de arquivos com arquivos de credenciais", não tenho certeza se isso é possível.

Pato Donald
fonte
Acho que o OP está perguntando sobre como se autenticar sem ter que ativar as credenciais da conta de serviço que armazenam as credenciais em outro local. Eu acho que você só pode usar --account=quando as credenciais forem ativadas.
David Xia
1

1) Crie uma conta de serviço no GCP IAM. Marque a caixa "Fornecer uma nova chave privada" e selecione JSON como o tipo de arquivo.

2) Faça o download do arquivo JSON para o seu servidor e digite: gcloud auth activate-service-account --key-file serviceaccount.json

3) Verifique se as credenciais foram aplicadas executando gcloud auth list.

Shane Ramey
fonte