Como acesso um depósito de armazenamento do google cloud usando uma conta de serviço na linha de comando?

5

Eu achei que seria muito fácil fazer isso, mas não consigo trabalhar:

Estou tentando enviar arquivos de um servidor (GCE) para um intervalo de armazenamento do Google Cloud. Para evitar a concessão de muitos outros direitos ao comando gsutil no servidor, criei uma "Conta de serviço" na seção de credenciais do meu projeto do Google.

Para o intervalo gs://mybucket , adicionei o endereço de e-mail dessa conta de serviço com permissões OWNER como USER ao grupo.

No servidor, ativei a conta de serviço da seguinte forma:

$gcloud auth activate-service-account --key-file <path-to-keyfile> myservice

$gcloud auth list
Credentialed accounts:
 - [email protected]
 - myservice (active)

To set the active account, run:
  $ gcloud config set account <account>

Então tudo parece bem até agora. No entanto, o acesso ao bucket falha:

$gsutil cp tempfile gs://mybucket
CommandException: Error retrieving destination bucket gs://mybucket/: [('PEM routines', 'PEM_read_bio', 'no start line')]

$gsutil cp tempfile gs://mybucket/tempfile
Failure: [('PEM routines', 'PEM_read_bio', 'no start line')].

Claro, verifiquei se as ACLs do bucket exibem a conta de serviço como OWNER. Eu também tentei isso em uma máquina diferente com um sistema operacional diferente. Mesmo resultado. Escusado será dizer que eu não consigo entender as mensagens de erro. Eu apreciaria todas as sugestões. Registro de erros detalhado em esta essência .

Atualização:

Depois de remover ~/.config , em que gcloud armazena seus dados de autorização, use o comando obsoleto

gsutil config -e

gerará ~/.boto com a conta de serviço conforme pretendido. O acesso subseqüente a gs://mybucket funciona .

No entanto, não tenho certeza se esse é o caminho que devo seguir. Como faço para que isso funcione usando gcloud auth ?

    
por bjoseru 15.07.2014 / 15:39

2 respostas

1

Eu estava tendo o mesmo problema. O arquivo-chave padrão que o Google Developers Console me forneceu era na verdade um arquivo .json com o material de chave em um campo json. Revoguei a conta de serviço com "gcloud auth revoke", criei uma nova chave no console de desenvolvedores e baixei a chave como um arquivo .p12 e, dessa vez, depois de ativar a conta de serviço, ela funcionou.

    
por 29.07.2014 / 01:24
3

Para o registro, vi a mesma mensagem de erro hoje ao tentar ativar a conta de serviço em uma instância do GCE por meio do arquivo de chaves json gerado. O sdk do Gcloud pré-instalado na instância era muito antigo e não funcionava corretamente com as teclas json. Além disso, a ferramenta não dava nenhum feedback ao tentar ativar minha conta dessa maneira, mas a tentativa de usar a conta para autorização falharia com o erro mencionado.

Depois de instalar a versão atual, consegui ativar minha conta de serviço via gcloud auth activate-service-account --key-file /key.json e, em seguida, gsutil cp file gs://testbucket/ funcionou corretamente.

    
por 18.10.2015 / 19:18