Solução de problemas

Nesta página, você verá métodos de solução de problemas para erros comuns que podem ser encontrados ao usar o Cloud Storage.

Como registrar solicitações brutas

Ao usar ferramentas como a gsutil ou as bibliotecas de cliente do Cloud Storage, grande parte das informações de solicitação e resposta é processada pela ferramenta. No entanto, às vezes é útil ver detalhes para ajudar na solução de problemas. Use as instruções a seguir para retornar cabeçalhos de solicitação e resposta da ferramenta:

Console

A visualização das informações de solicitação e resposta depende do navegador que você está usando para acessar o Console do Google Cloud. Para o navegador Google Chrome:

  1. Clique no botão Menu principal do Chrome ().

  2. Selecione Mais ferramentas.

  3. Clique em Ferramentas para Desenvolvedores.

  4. No painel exibido, clique na guia Rede.

gsutil

Use a sinalização -D de nível superior na solicitação. Exemplo:

gsutil -D ls gs://my-bucket/my-object

Bibliotecas de cliente

C++

  • Defina a variável de ambiente CLOUD_STORAGE_ENABLE_TRACING=http para receber o tráfego HTTP completo.

  • Defina a variável de ambiente CLOUD_STORAGE_ENABLE_CLOG=yes para gerar o registro de cada RPC.

C#

Adicione um registrador por meio de ApplicationContext.RegisterLogger e defina as opções de geração de registros no gerenciador de mensagens HttpClient. Para mais informações, consulte a entrada das perguntas frequentes:

Go

Defina a variável de ambiente GODEBUG=http2debug=1. Para mais informações, consulte o pacote Go/net (em inglês).

Se você também quiser registrar o corpo da solicitação, use um cliente HTTP personalizado.

Java

  1. Crie um arquivo chamado "logging.properties" com o seguinte conteúdo:

    # Properties file which configures the operation of the JDK logging facility.
    # The system will look for this config file to be specified as a system property:
    # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties
    
    # Set up the console handler (uncomment "level" to show more fine-grained messages)
    handlers = java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level = CONFIG
    
    # Set up logging of HTTP requests and responses (uncomment "level" to show)
    com.google.api.client.http.level = CONFIG
  2. Usar o logging.properties com o Maven

    mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command

Para mais informações, consulte Transporte HTTP conectável.

Node.js

Defina a variável de ambiente NODE_DEBUG=https antes de chamar o script Node.

PHP

Forneça seu próprio gerenciador HTTP ao cliente usando httpHandler e configure um middleware para registrar a solicitação e a resposta.

Python

Use o módulo de geração de registros. Exemplo:

import logging
import http.client

logging.basicConfig(level=logging.DEBUG)
http.client.HTTPConnection.debuglevel=5

Ruby

Na parte superior da .rb file depois de require "google/cloud/storage", adicione o seguinte:

ruby
Google::Apis.logger.level = Logger::DEBUG

Códigos de erro

A seguir, estão Códigos de status HTTP comuns que talvez você encontre.

301: movido permanentemente

Problema: estou configurando um site estático, e o acesso a um caminho de diretório retorna um objeto vazio e um código de resposta HTTP 301.

Solução: se seu navegador faz o download de um objeto de zero byte e você recebe um código de resposta HTTP 301 ao acessar um diretório, como http://www.example.com/dir/, seu bucket provavelmente contém um objeto vazio com esse nome. Para verificar se esse é o caso e corrigir o problema:

  1. No Console do Cloud, acesse a página Navegador do Cloud Storage.

    Acessar o navegador

  2. Clique no botão Ativar Cloud Shell na parte superior do Console do Google Cloud. Ativar o Cloud Shell
  3. Execute gsutil ls -R gs://www.example.com/dir/. Se a saída incluir http://www.example.com/dir/, você terá um objeto vazio nesse local.
  4. Remova o objeto vazio com o comando: gsutil rm gs://www.example.com/dir/

Agora é possível acessar http://www.example.com/dir/ e fazer com que ele retorne o arquivo index.html do diretório em vez do objeto vazio.

400: Solicitação inválida

Problema: ao executar um upload retomável, recebi este erro e a mensagem Failed to parse Content-Range header.

Solução: o valor usado no cabeçalho Content-Range é inválido. Por exemplo, Content-Range: */* é inválido e precisa ser especificado como Content-Range: bytes */*. Se você receber esse erro, o upload retomável atual não estará mais ativo e será necessário iniciar um novo upload recuperável.

401: não autorizado

Problema: as solicitações para um bucket público diretamente ou por meio do Cloud CDN falham com uma resposta HTTP 401: Unauthorized e Authentication Required.

Solução: verifique se o cliente ou qualquer proxy intermediário está adicionando um cabeçalho Authorization às solicitações ao Cloud Storage. Qualquer solicitação com um cabeçalho Authorization, ainda que vazia, é validada como se fosse uma tentativa de autenticação.

403: conta desativada

Problema: tentei criar um bucket, mas recebi um erro 403 Account Disabled.

Solução: esse erro indica que você ainda não ativou o faturamento do projeto associado. Para ver as etapas de ativação do faturamento, consulte Ativar o faturamento para um projeto.

Se o faturamento estiver ativado e você continuar recebendo essa mensagem de erro, entre em contato com o suporte informando o ID do projeto e uma descrição do problema.

403: acesso negado

Problema: tentei listar os objetos no bucket, mas recebi um erro 403 Access Denied e/ou uma mensagem semelhante a Anonymous caller does not have storage.objects.list access.

Solução: verifique se suas credenciais estão corretas. Por exemplo, se você estiver usando a ferramenta gsutil, verifique se as credenciais armazenadas no arquivo .boto estão corretas. Além disso, confirme se a gsutil está usando o arquivo .boto que você espera. Fala isso com o comando gsutil version -l e verificando a entrada config path(s).

Supondo que você esteja usando as credenciais corretas, suas solicitações estão sendo roteadas por meio de um proxy, usando HTTP (em vez de HTTPS)? Em caso afirmativo, verifique se o proxy está configurado para remover o cabeçalho Authorization de tais solicitações. Se for o caso, verifique se você está usando HTTPS em vez de HTTP nas solicitações.

403: Proibido

Problema: estou fazendo o download do meu conteúdo público de storage.cloud.google.com e recebo um erro 403: Forbidden ao usar o navegador para navegar até o objeto público:

https://storage.cloud.google.com/BUCKET_NAME/OBJECT_NAME

Solução: o uso de storage.cloud.google.com para fazer o download de objetos é conhecido como downloads em navegadores autenticados. Essa opção sempre usa a autenticação baseada em cookies, mesmo quando os objetos são disponibilizados publicamente para allUsers. Se você configurou os registros de acesso a dados nos registros de auditoria do Cloud para rastrear o acesso a objetos, uma das restrições desse recurso é não ser possível usar downloads de navegadores autenticados para acessar os objetos afetados; a tentativa de fazer isso resultará em uma resposta 403.

Para evitar esse problema, siga um destes procedimentos:

409: Conflito

Problema: tentei criar um bucket, mas recebi o seguinte erro:

409 Conflict. Sorry, that name is not available. Please try a different one.

Solução: o nome do bucket que você tentou usar (por exemplo, gs://cats ou gs://dogs) já está em uso. O Cloud Storage tem um namespace global, portanto, não é possível nomear um bucket com o mesmo nome de um atual. Escolha um nome que não esteja sendo usado.

Como diagnosticar erros no Console do Google Cloud

Problema: ao usar o Console do Google Cloud para executar uma operação, recebo uma mensagem de erro genérica. Por exemplo, a mensagem de erro é exibida quando tento excluir um bucket, mas não vejo detalhes sobre o motivo da falha na operação.

Solução: use as notificações do Console do Google Cloud para ver informações detalhadas sobre a operação com falha:

  1. Clique no botão Notificações no cabeçalho do Console do Google Cloud.

    Notificações

    Uma lista suspensa exibe as operações mais recentes realizadas pelo Console do Google Cloud.

  2. Clique no item que você quer saber mais sobre.

    Uma página é aberta e exibe informações detalhadas sobre a operação.

  3. Clique em cada linha para mostrar as informações detalhadas do erro.

    Veja abaixo um exemplo de informações de erro para uma operação de exclusão de bucket com falha. Os detalhes do erro indicam que uma política de retenção de bucket impediu a exclusão dele.

    Detalhes do erro de exclusão de bucket

Erros da gsutil

Veja a seguir erros comuns da gsutil que podem ocorrer.

gsutil stat

Problema: tentei usar o comando gsutil stat para exibir o status do objeto de um subdiretório e recebi um erro.

Solução: o Cloud Storage usa um namespace simples para armazenar objetos em buckets. É possível usar barras (“/”) em nomes de objetos para parecer que eles estão em uma estrutura hierárquica, mas o comando gsutil stat trata uma barra à direita como parte do nome do objeto.

Por exemplo, se você executar o comando gsutil -q stat gs://my-bucket/my-object/, a gsutil procurará informações sobre o objeto my-object/ (com uma barra à direita), em vez de operar em objetos aninhados em my-bucket/my-object/. A menos que você realmente tenha um objeto com esse nome, a operação falhará.

Para a listagem de subdiretórios, use gsutil ls.

gcloud auth

Problema: tentei autenticar a gsutil usando o comando gcloud auth, mas ainda não consigo acessar meus buckets ou objetos.

Solução: seu sistema pode ter as versões da gsutil autônoma e do SDK do Cloud instaladas. Execute o comando gsutil version -l e verifique o valor de using cloud sdk. Se for False, seu sistema estará usando a versão autônoma da gsutil ao executar comandos. É possível remover essa versão da gsutil do seu sistema ou autenticar usando o comando gsutil config.

Erros de sites estáticos

Veja a seguir problemas comuns ao configurar um bucket para hospedar um site estático.

Veiculação HTTPS

Problema: quero veicular meu conteúdo por HTTPS sem usar um balanceador de carga.

Solução: é possível exibir conteúdo estático por HTTPS usando URIs diretos, como https://storage.googleapis.com/my-bucket/my-object. Para conhecer outras opções para veicular seu conteúdo por meio de um domínio personalizado usando SSL, faça isto:

Confirmação de domínio

Problema: não consigo confirmar meu domínio.

Solução: normalmente, o processo de confirmação no Search Console direciona você para fazer o upload de um arquivo no seu domínio. No entanto, talvez não seja possível fazer isso sem antes ter um bucket associado, que só pode ser criado depois de realizar a confirmação de domínio.

Nesse caso, verifique a propriedade usando o método de verificação do provedor de nome de domínio. Consulte Confirmação de propriedade para conhecer as etapas e executar o processo. Ela pode ser feita antes da criação do bucket.

Página inacessível

Problema: recebo uma mensagem de erro Access denied em uma página da Web exibida pelo meu site.

Solução: verifique se o objeto está compartilhado publicamente. Se não estiver, consulte Como tornar públicos os dados para ver instruções sobre como fazer isso.

Se você fez o upload e compartilhou um objeto anteriormente, mas depois fez upload de uma nova versão dele, será necessário compartilhar o objeto publicamente. Isso ocorre porque a permissão pública é substituída pelo novo upload.

Falha ao atualizar as permissões

Problema: recebo uma mensagem de erro quando tento tornar meus dados públicos.

Solução: verifique se você tem a permissão setIamPolicy para o objeto ou bucket. Essa permissão é concedida, por exemplo, no papel Storage Admin. Se você tiver a permissão setIamPolicy e ainda receber um erro, o bucket pode estar sujeito à prevenção de acesso público, que não permite o acesso a allUsers ou allAuthenticatedUsers. A prevenção de acesso público pode ser definida diretamente no bucket ou aplicada usando uma política da organização definida em um nível superior.

Download de conteúdo

Problema: recebo uma solicitação para fazer o download do conteúdo da minha página em vez de visualizá-lo no navegador.

Solução: se você especificar um MainPageSuffix como um objeto que não tenha um tipo de conteúdo da Web, em vez de ver a página, os visitantes do site receberão uma solicitação de download do conteúdo. Para resolver esse problema, atualize a entrada de metadados content-type com um valor adequado, como text/html. Consulte Como editar metadados de objeto para ver instruções sobre como executar a atualização.

Servidores proxy

Problema: estou me conectando por meio de um servidor proxy, o que preciso fazer?

Solução: para acessar o Cloud Storage por meio de um servidor proxy, permita o acesso a estes domínios:

  • accounts.google.com para criar tokens de autenticação OAuth2 por meio de gsutil config
  • oauth2.googleapis.com para realizar trocas de token OAuth2
  • *.googleapis.com para solicitações de armazenamento

Se o servidor proxy ou a política de segurança não for compatível com a lista de permissões por domínio e, em vez disso, exigir a lista de permissões por bloqueio de rede IP, recomendamos que você configure o servidor proxy para todos os intervalos de endereços IP do Google. É possível encontrar os intervalos de endereços consultando os dados WHOIS no site da ARIN (em inglês). Como prática recomendada, analise periodicamente suas configurações de proxy para garantir que elas correspondam aos endereços IP do Google.

Não recomendamos configurar seu proxy com endereços IP individuais que você recebe de consultas únicas de oauth2.googleapis.com e storage.googleapis.com. Como os serviços do Google são expostos por meio de nomes DNS que mapeiam um grande número de endereços IP que podem mudar com o tempo, configurar seu proxy com base em uma consulta única pode levar a falhas na conexão com o Cloud Storage.

Se suas solicitações estiverem sendo roteadas por um servidor proxy, talvez seja necessário falar com o administrador da rede para garantir que o cabeçalho Authorization que contém suas credenciais não seja removido pelo proxy. Sem o cabeçalho Authorization, suas solicitações serão rejeitadas e você receberá uma erro MissingSecurityHeader.

A seguir