cópia da gsutil retornando “AccessDeniedException: 403 Insufficient Permission” do GCE


90

Estou conectado a uma instância do GCE via SSH. A partir daí, gostaria de acessar o armazenamento com a ajuda de uma conta de serviço:

GCE> gcloud auth list
Credentialed accounts:
 - 1234567890-compute@developer.gserviceaccount.com (active)

Primeiro, certifiquei-me de que esta conta de serviço estava sinalizada como "Pode editar" nas permissões do projeto em que estou trabalhando. Também me certifiquei de dar a ele a ACL de gravação no intervalo que gostaria que ele copiasse um arquivo:

local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket

Mas então o seguinte comando falha:

GCE> gsutil cp test.txt gs://mybucket/logs

(Eu também me certifiquei de que "logs" foi criado em "mybucket").

A mensagem de erro que recebo é:

Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission               0 B  

o que estou perdendo?


7
A VM GCE foi criada com controle total ou escopo de leitura / gravação do GCS?
jterrace

1
Obrigado por apontar isso. Eu não estava ciente dessa opção de fato. Recriei a instância com a opção habilitada e funcionou. Se você pudesse sugerir ligar o sinalizador como uma resposta, eu ficaria feliz em sinalizá-lo.
Christophe

Respostas:


131

Outra coisa a se observar é certificar-se de configurar os escopos apropriados ao criar a VM do GCE. Mesmo se uma VM tiver uma conta de serviço anexada, ela deve ser atribuída a escopos de devstorage para acessar o GCS.

Por exemplo, se você tiver criado sua VM com devstorage.read_onlyescopo, tentar gravar em um intervalo falhará, mesmo se sua conta de serviço tiver permissão para gravar no intervalo. Você precisaria de devstorage.full_controloudevstorage.read_write .

Consulte a seção sobre como preparar uma instância para usar contas de serviço para obter detalhes.

Observação: a conta de serviço de computação padrão tem escopos muito limitados (incluindo ter somente leitura para GCS). Isso é feito porque a conta de serviço padrão tem permissões de Editor de projeto IAM. Se você usar qualquer conta de serviço do usuário, isso normalmente não é um problema, pois as contas de serviço criadas pelo usuário obtêm todo o acesso ao escopo por padrão.

Depois de adicionar escopos necessários à VM, gsutilainda pode estar usando credenciais em cache que não têm os novos escopos. Exclua ~/.gsutilantes de tentar os comandos gsutil novamente. (Obrigado a @mndrix por apontar isso nos comentários.)


1
Recriei minha instância com as permissões e tudo funciona agora. Obrigado
Syclone

33
A partir de agora, você pode editar os escopos. Pare a máquina - edite - e altere os escopos de acesso da API Cloud. Eu acredito que isso só está disponível por cerca de um mês.
Warren

143
Depois de adicionar escopos necessários à VM, gsutilainda pode estar usando credenciais em cache que não têm os novos escopos. Exclua ~ / .gsutil antes de tentar os gsutilcomandos novamente.
mndrix

2
Muito obrigado, mndrix!
Guillermo

2
@mndrix salva o dia
Ben Guild

50

Você deve fazer login com uma conta que tenha as permissões necessárias para esse projeto:

gcloud auth login

1
Não se esqueça de emitir gcloud auth revoke <email-account>depois de terminar.
ssasa

50

gsutil config -b

Em seguida, navegue até o URL fornecido, [CLIQUE em Permitir]

Em seguida, copie o código de verificação e cole no terminal.


Observe que isso não funciona se você correr gsutilde ssh.
bfontaine

3
Ele "não funciona" na medida em que não abre seu navegador. Em vez disso, ele fornece um url para você copiar e colar manualmente.
BuvinJ

6
Isso também funciona bem para todos os outros, se você descartar o-b . Isso não abrirá um navegador, mas simplesmente exibirá um url que pode ser aberto fora do shell.
oligofren

8

Eu escrevi uma resposta a esta pergunta, pois não posso postar comentários:

Este erro também pode ocorrer se você estiver executando o gsutilcomando com um sudoprefixo em alguns casos.


3
Este é realmente um comentário, não uma resposta. Com um pouco mais de reputação, você poderá postar comentários .
Lece

1
Eu dei a resposta (+1) para que @TheLoneDeranger tenha a reputação mais próxima do privilégio 'Postar comentário'.
Rann Lifshitz de

8
  1. Parar VM
  2. obtido -> detalhes da instância VM.
  3. em "Cloud API access scopes" selecione "Allow full access to all Cloud APIs" e clique em "save".
  4. reinicie a VM e exclua ~ / .gsutil.



2

Então, tentei várias coisas tentando copiar do intervalo GCS para minha VM. Espero que este post ajude alguém.

Via conexão SSHed: insira a descrição da imagem aqui

e seguindo este script:

sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]

Recebi este erro:

AccessDeniedException: 403 Acesso não configurado. Acesse o console do Google Cloud Platform ( https://cloud.google.com/console#/project ) para o seu projeto, selecione APIs e autenticação e ative a API JSON do Google Cloud Storage.

O que corrigiu isso foi seguir a seção "Ativando a API" mencionada neste link - https://cloud.google.com/storage/docs/json_api/

insira a descrição da imagem aqui

Depois de ativar a API, me autentiquei na janela SSHed via

gcloud auth login

Seguindo o procedimento de autenticação, finalmente consegui baixar do Google Storage Bucket para minha VM.

PS

Eu me certifiquei de:

  1. Certifique-se de que os gsutils estejam instalados na minha instância de VM.
  2. Vá para o meu intervalo, vá para a guia de permissões, adicione as contas de serviço desejadas e defina a permissão / função do Administrador de armazenamento. insira a descrição da imagem aqui

    3. Certifique-se de que minha VM tenha escopos de acesso à Cloud API adequados: insira a descrição da imagem aqui

insira a descrição da imagem aqui


1

Dos documentos: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

Você precisa primeiro parar a instância -> vá para a página de edição -> vá para "Escopos de acesso à API em nuvem" e escolha "acesso total de armazenamento ou leitura / gravação ou o que for necessário para"

Alterando a conta de serviço e os escopos de acesso para uma instância Se você deseja executar a VM com uma identidade diferente ou determinar que a instância precisa de um conjunto diferente de escopos para chamar as APIs necessárias, você pode alterar a conta de serviço e os escopos de acesso de uma instância existente. Por exemplo, você pode alterar os escopos de acesso para conceder acesso a uma nova API ou alterar uma instância para que seja executada como uma conta de serviço criada por você, em vez da conta de serviço padrão do Compute Engine.

Para alterar a conta de serviço e os escopos de acesso de uma instância, a instância deve ser interrompida temporariamente. Para interromper sua instância, leia a documentação para interromper uma instância. Depois de alterar a conta de serviço ou escopos de acesso, lembre-se de reiniciar a instância. Use um dos seguintes métodos para alterar a conta de serviço ou acessar os escopos da instância interrompida.


0

Altere as permissões do balde.

Adicione um usuário para "Todos os usuários" e conceda acesso de "Administrador de armazenamento".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.