Gsutil: Faça com que a gsutil verifique a chave de acesso e o segredo do Google fornecidos a `gsutil config -a`

Criado em 29 set. 2016  ·  8Comentários  ·  Fonte: GoogleCloudPlatform/gsutil

TLDR seria bom se gsutil config -a verificasse a chave de acesso do Google e o segredo antes de gravá-los no arquivo .boto.

gsutil config me deu a seguinte mensagem de erro, embora eu já tivesse autenticado usando gcloud auth login . (um pouco não relacionado, talvez eu deva abrir um problema separado?)

CommandException: OAuth2 is the preferred authentication mechanism with the Cloud SDK. Run "gcloud auth login" to configure authentication, unless you want to authenticate with an HMAC access key and secret, in which case run "gsutil config -a".

De qualquer forma, consegui contornar isso com gsutil config -a . Copiei e colei minhas credenciais do navegador e continuei a configurar meu arquivo .boto. Então eu tentei executar algum código que fez uso de gsutil e recebi algumas mensagens de erro enigmáticas sobre autenticação. Demorei um pouco para descobrir, mas acontece que acidentalmente copiei um pouco mais do que apenas a chave secreta do google do navegador, então havia algum lixo no final de gs_secret_access_key .

Comentários muito úteis

Enfim, funciona. Obrigado a: https://stackoverflow.com/a/38399516/122441 , se alguém chegar aqui porque o mesmo destino que eu, veja como:

  1. Acesse https://console.cloud.google.com/storage/settings > Interoperabilidade e crie sua chave HMAC . chama-se HMAC, a palavra mágica.
  2. Execute gsutil config -a e insira o que você obteve da etapa 1. Tudo pronto! :)

Por que essas duas etapas simples não estão disponíveis nos documentos está além de mim ...

Todos 8 comentários

A mensagem original está funcionando conforme o esperado; Instalações baseadas gcloud configuram credenciais via gcloud auth login e você só deve executar gsutil config se quiser configurar credenciais HMAC (flag -a ) ou gerar um .boto genérico arquivo de configuração ( -n flag).

O desafio aqui é que gsutil config -a não tem nenhuma informação sobre os recursos que você pretende acessar com esta chave, nem tem sua instrução para acessar um recurso específico. Mesmo que adicionássemos um mecanismo para fazer isso , presumivelmente você obteria um erro semelhante ao que viu quando tentou usar o token inválido.

Então, talvez possamos melhorar a mensagem de erro que você viu? O que você achou confuso?

Ah tudo bem. Acho melhor atualizarmos nosso README então! (PerfKitBenchmarker)

As mensagens de erro podem ser melhoradas do nosso lado - você está certo. (Algo como "Por favor, verifique gs_access_key_id e gs_secret_access_key em seu arquivo .boto."). E algo como "~/.boto arquivo não encontrado. Você executou gsutil config -a ?" em vez de um traceback quando uma exceção é gerada porque o arquivo .boto não foi encontrado. Acho que a parte confusa foi que eu assumi que copiei minhas credenciais corretamente, pois o comando gsutil foi concluído com êxito.

Eu estava me referindo a melhorar as mensagens de erro da gsutil - elas eram confusas?

Garantir que você copiou as credenciais corretamente é um desafio pelos motivos que descrevi anteriormente. Dito isto, estou aberto a sugestões, se você tiver alguma.

Fechando isso - reabra se você tiver sugestões sobre como melhorar a mensagem de erro da gsutil.

Documentação da biblioteca GS Python aqui https://cloud.google.com/storage/docs/xml-api/gspythonlibrary#credentials diz :

Configure o arquivo .boto com a conta de serviço. Você pode fazer isso com gsutil:
gsutil config -e
O comando solicitará o endereço de e-mail da conta de serviço e o local da chave privada da conta de serviço (.p12). Certifique-se de ter a chave privada no computador em que você está executando o comando gsutil.

Mas seguir isso resulta em erro:

>gsutil config -e
CommandException: OAuth2 is the preferred authentication mechanism with the Cloud SDK. Run "gcloud auth login" to configure authentication, unless you want to authenticate with an HMAC access key and secret, in which case run "gsutil config -a".

Ou a documentação está errada ou eu estou errado. :( Quantas opções de autenticação existem, estou realmente confuso. Pesquisando o problema apenas leva a esta página, que não tenho certeza se está correta ou não.

Eu tentei gsutil config -n como nos comentários acima, mas ainda executando meu aplicativo:

> python .\gs2cl.py
Traceback (most recent call last):
  File ".\gs2cl.py", line 40, in <module>
    list_gs()
  File ".\gs2cl.py", line 30, in list_gs
    for obj in uri.get_bucket():
  File "C:\Program Files\Anaconda2\lib\site-packages\boto\storage_uri.py", line 181, in get_bucket
    conn = self.connect()
  File "C:\Program Files\Anaconda2\lib\site-packages\boto\storage_uri.py", line 140, in connect
    **connection_args)
  File "C:\Program Files\Anaconda2\lib\site-packages\boto\gs\connection.py", line 47, in __init__
    suppress_consec_slashes=suppress_consec_slashes)
  File "C:\Program Files\Anaconda2\lib\site-packages\boto\s3\connection.py", line 191, in __init__
    validate_certs=validate_certs, profile_name=profile_name)
  File "C:\Program Files\Anaconda2\lib\site-packages\boto\connection.py", line 569, in __init__
    host, config, self.provider, self._required_auth_capability())
  File "C:\Program Files\Anaconda2\lib\site-packages\boto\auth.py", line 991, in get_auth_handler
    'Check your credentials' % (len(names), str(names)))
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 3 handlers were checked. ['OAuth2Auth', 'OAuth2ServiceAccountAuth', 'HmacAuthV1Handler'] Check your credentials

Quando abro o arquivo (genérico) .boto , ele diz:

# Google OAuth2 credentials are managed by the Cloud SDK and
# do not need to be present in this file.

Portanto, uma documentação diz que você precisa configurar o arquivo .boto , enquanto o próprio arquivo .boto diz que as credenciais não precisam estar presentes neste arquivo . Em quem confiar? E o que significa "gerenciado pelo Cloud SDK"? Eu só quero que meu script Python simples acesse o GS, essa autenticação é muito complexa... A "chave de acesso + chave de acesso secreta" dos velhos tempos é muito mais fácil.

Não sou o único confuso: https://stackoverflow.com/questions/38398066/gsutil-config-a-which-key-to-use

Enfim, funciona. Obrigado a: https://stackoverflow.com/a/38399516/122441 , se alguém chegar aqui porque o mesmo destino que eu, veja como:

  1. Acesse https://console.cloud.google.com/storage/settings > Interoperabilidade e crie sua chave HMAC . chama-se HMAC, a palavra mágica.
  2. Execute gsutil config -a e insira o que você obteve da etapa 1. Tudo pronto! :)

Por que essas duas etapas simples não estão disponíveis nos documentos está além de mim ...

gsutil help config mostra que a opção -n gera um arquivo .boto sem nenhuma autenticação configurada, portanto, é consistente com o erro que você estava vendo.

Além disso, parece que você está usando uma instalação do gsutil que acompanha o gcloud. Também presumo que você não esteja usando a versão mais recente (4.27), pois a mensagem de erro melhorou na última versão (consulte e43b040). Para gerar um arquivo boto que usa credenciais p12, você pode executar gcloud config set pass_credentials_to_gsutil false , depois gsutil config -e , seguido por gcloud config set pass_credentials_to_gsutil true para que a magia de autenticação do gcloud funcione normalmente novamente.

Com relação a isso, convém criar seu arquivo boto em algum lugar diferente do local padrão (~/.boto), pois a gsutil tentará extrair seus métodos de autenticação desse arquivo, além da configuração do OAuth2 que a gcloud envia. Se você já configurou a gsutil para usar credenciais de usuário OAuth2 executando gcloud auth login (essa é a norma), configure a autenticação de arquivo de chave da conta de serviço (p12 ou json) em seu arquivo boto recém-criado, provavelmente receber um erro como este na próxima vez que você executar a gsutil:

CommandException: You have multiple types of configured credentials (['Oauth 2.0 User Account', 'OAuth 2.0 Service Account']), which is not supported. One common way this happens is if you run gsutil config to create credentials and later run gcloud auth, and create a second set of credentials. Your boto config path is: ['/home/USER/.boto', '/home/USER/.config/gcloud/legacy_credentials/[email protected]/.boto']. For more help, see "gsutil help creds".

Isso pode ser evitado usando apenas credenciais HMAC como você mencionou acima, OU:
Criando seu arquivo boto em outro caminho via gsutil config -e -o /path/to/new/botofile , e dizendo ao boto que ele deve aparecer lá ao executar seu aplicativo, definindo a variável de ambiente BOTO_CONFIG para se referir ao local do arquivo - apenas certifique-se de desdefinir a variável de ambiente se você for executar a gsutil depois, para que ela não pegue suas configurações de autenticação adicionais. No Bash, você pode definir a variável de ambiente temporariamente para um comando como BOTO_CONFIG=/path/to/new/botofile ./gs2cl.py . Mas de acordo com este tópico , o Windows torna isso um pouco mais difícil - você precisa definir explicitamente o var, executar seu comando e desmarcar o var para realizar a mesma coisa (por exemplo set BOTO_CONFIG=/path/to/new/botofile && ./gs2cl.py && set BOTO_CONFIG= ).

... também, ponto tomado - os documentos devem ser atualizados para apontar todas essas coisas.

Obrigada pelo esclarecimento. Honestamente, parece uma lição de criptografia.

IMHO, o início rápido para iniciantes, deve permitir que o desenvolvedor use o HMAC em 2 etapas simples (sem nem mesmo baixar o gsutil!), mas também colocar "Se você quiser um mecanismo de autenticação mais avançado, continue lendo..."

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

zelon picture zelon  ·  12Comentários

tispratik picture tispratik  ·  4Comentários

dweekly picture dweekly  ·  6Comentários

marchelbling picture marchelbling  ·  5Comentários

dombarnes picture dombarnes  ·  11Comentários