Como usar o GOOGLE_APPLICATION_CREDENTIALS com gcloud em um servidor?

6

Qual é a maneira mais simples de usar a linha de comando gcloud de forma não interativa com uma conta de serviço fora do GCE? De preferência sem colocar lixo no sistema de arquivos com arquivos de credenciais, que é o que o gcloud auth activate-service-account --key-file=... faz.

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

Bibliotecas do Google Cloud (por exemplo, python , java ) usa automaticamente a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS para autenticar no Google Cloud. Mas, infelizmente, esta linha de comando parece não ter efeito em gcloud . O que é uma maneira limpa de usar gcloud enquanto deixa o sistema de arquivos 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.
    
por yonran 06.05.2017 / 07:23

3 respostas

8

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

Por padrão gcloud armazena sua configuração em $ {HOME} /. config / gcloud. É possível sobrescrever esse local definindo a variável de ambiente CLOUDSDK_CONFIG .

Também é possível (embora mais tedioso) substituir a maioria das configurações, de modo 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 a variável de ambiente.

Por exemplo, o comando equivalente que você tentou usar o arquivo de chaves 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 credenciais em CLOUDSDK_CONFIG , já que ele precisa armazenar em cache o token de acesso, para que não precise atualizá-lo em cada chamada.

Para o seu caso de uso, a melhor opção a meu ver seria

  1. Defina CLOUDSDK_CONFIG para algum diretório temporário
  2. gcloud auth activate-service-account --key-file=...
  3. ... use gcloud para fazer seu trabalho ...
  4. Remova o diretório temp CLOUDSDK_CONFIG .
por 13.05.2017 / 16:06
1

Você observou a opção --account ? Como

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

( Referência )

Com relação a "De preferência sem colocar lixo no sistema de arquivos com arquivos de credenciais", não tenho certeza se é possível alcançar.

    
por 23.08.2017 / 15:28
0

1) Crie uma conta de serviço no IAM do GCP. 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 .

    
por 20.11.2017 / 08:26