O Compartilhamento de recursos de origem cruzada (CORS, na sigla em inglês) permite interações entre recursos de diferentes origens, o que normalmente é proibido para evitar comportamentos maliciosos. Neste tópico, ensinamos como configurar o CORS em um bucket do Cloud Storage.
Configurar o CORS em um bucket
Para configurar o CORS em um bucket, especifique as informações que identificam os tipos de solicitações que os buckets podem aceitar, como métodos HTTP e domínios de origem.
Siga estas etapas para definir uma configuração do CORS no bucket:
Console
Não é possível gerenciar o CORS usando o console do Google Cloud. Em vez disso, use a CLI gcloud.
Linha de comando
gcloud
Crie um arquivo JSON com a configuração do CORS que você quer aplicar. Veja exemplos de configuração para arquivos JSON de amostra.
Use o comando
gcloud storage buckets update
com a flag--cors-file
:gcloud storage buckets update gs://BUCKET_NAME --cors-file=CORS_CONFIG_FILE
Em que:
BUCKET_NAME
é o nome do bucket pertinente. Por exemplo,my-bucket
.CORS_CONFIG_FILE
é o caminho para o arquivo JSON que você criou na etapa 1.
gsutil
Crie um arquivo JSON com a configuração do CORS que você quer aplicar. Veja exemplos de configuração para arquivos JSON de amostra.
Use o comando
gsutil cors
para aplicar a configuração a um bucket:gsutil cors set CORS_CONFIG_FILE gs://BUCKET_NAME
Em que:
CORS_CONFIG_FILE
é o caminho para o arquivo JSON que você criou na etapa 1.BUCKET_NAME
é o nome do bucket pertinente. Por exemplo,my-bucket
.
Bibliotecas de cliente
C++
Para mais informações, consulte a documentação de referência da API Cloud Storage C++.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
C#
Para mais informações, consulte a documentação de referência da API Cloud Storage C#.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
Go
Para mais informações, consulte a documentação de referência da API Cloud Storage Go.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
Java
Para mais informações, consulte a documentação de referência da API Cloud Storage Java.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
Node.js
Para mais informações, consulte a documentação de referência da API Cloud Storage Node.js.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
PHP
Para mais informações, consulte a documentação de referência da API Cloud Storage PHP.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
Python
Para mais informações, consulte a documentação de referência da API Cloud Storage Python.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
Ruby
Para mais informações, consulte a documentação de referência da API Cloud Storage Ruby.
Veja no exemplo a seguir como definir uma configuração CORS em um bucket:
O exemplo a seguir remove qualquer configuração CORS em um bucket:
APIs REST
API JSON
- Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth. Para ver instruções, consulte Autenticação de APIs.
Crie um arquivo JSON com a configuração do CORS que você quer aplicar. Veja exemplos de configuração para arquivos JSON de amostra.
Use
cURL
para chamar a API JSON com uma solicitação bucketPATCH
:curl --request PATCH \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors' \ --header 'Authorization: Bearer OAUTH2_TOKEN' \ --header 'Content-Type: application/json' \ --data-binary @CORS_CONFIG_FILE
Em que:
BUCKET_NAME
é o nome do bucket. Por exemplo,my-bucket
.OAUTH2_TOKEN
é o token de acesso gerado na Etapa 1.CORS_CONFIG_FILE
é o caminho para o arquivo JSON que você criou na etapa 2.
API XML
- Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth. Para ver instruções, consulte Autenticação de APIs.
Crie um arquivo XML com a configuração do CORS que você quer aplicar. Veja exemplos de arquivos nos exemplos de configuração.
Use
cURL
(em inglês) para chamar a API XML com uma solicitaçãoSet Bucket CORS
:curl -X PUT --data-binary @CORS_CONFIG_FILE \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
Em que:
BUCKET_NAME
é o nome do bucket. Por exemplo,my-bucket
.OAUTH2_TOKEN
é o token de acesso gerado na etapa 1.PROJECT_ID
é o ID do projeto associado ao bucket. Por exemplo,my-project
.CORS_CONFIG_FILE
é o caminho para o arquivo XML criado na Etapa 2.
Visualizar a configuração do CORS para um bucket
Para ver a configuração do CORS para um bucket:
Console
Não é possível gerenciar o CORS usando o console do Google Cloud. Em vez disso, use a CLI gcloud.
Linha de comando
gcloud
Use o comando gcloud storage buckets describe
com a flag --format
:
gcloud storage buckets describe gs://BUCKET_NAME --format="default(cors)"
Em que BUCKET_NAME
é o nome do bucket
com a configuração de CORS que você quer visualizar. Por exemplo, my-bucket
.
gsutil
Use o comando gsutil cors
para obter a configuração do CORS
de um bucket:
gsutil cors get gs://BUCKET_NAME
Em que BUCKET_NAME
é o nome do bucket
com a configuração de CORS que você quer visualizar. Por exemplo, my-bucket
.
Bibliotecas de cliente
Para ver a configuração do CORS para um bucket usando as bibliotecas de cliente, siga as instruções para exibir os metadados de um bucket e procure o campo CORS na resposta.
C++
Para mais informações, consulte a documentação de referência da API Cloud Storage C++.
C#
Para mais informações, consulte a documentação de referência da API Cloud Storage C#.
Go
Para mais informações, consulte a documentação de referência da API Cloud Storage Go.
Java
Para mais informações, consulte a documentação de referência da API Cloud Storage Java.
Node.js
Para mais informações, consulte a documentação de referência da API Cloud Storage Node.js.
PHP
Para mais informações, consulte a documentação de referência da API Cloud Storage PHP.
Python
Para mais informações, consulte a documentação de referência da API Cloud Storage Python.
Ruby
Para mais informações, consulte a documentação de referência da API Cloud Storage Ruby.
APIs REST
API JSON
- Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth. Para ver instruções, consulte Autenticação de APIs.
Use
cURL
para chamar a API JSON com uma solicitação bucketGET
:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors"
Em que:
OAUTH2_TOKEN
é o nome do token de acesso que você gerou na etapa 1.BUCKET_NAME
é o nome do bucket pertinente. Por exemplo,my-bucket
.
API XML
- Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth. Para ver instruções, consulte Autenticação de APIs.
Use
cURL
para chamar a API XML com uma solicitaçãoGET
bucket:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
Em que:
OAUTH2_TOKEN
é o nome do token de acesso que você gerou na etapa 1.BUCKET_NAME
é o nome do bucket pertinente. Por exemplo,my-bucket
.
Resolver problemas de solicitações de CORS
Se você enfrentar um comportamento inesperado ao acessar buckets do Cloud Storage de uma origem diferente, siga as etapas abaixo:
Revise a configuração do CORS no bucket de destino. Se você tiver várias entradas de configuração do CORS, certifique-se de que os valores de solicitação usados para a solução de problemas sejam mapeados em uma única entrada de configuração do CORS.
Verifique se você não está fazendo uma solicitação para o endpoint
storage.cloud.google.com
, que não permite solicitações de CORS. Para mais informações sobre endpoints compatíveis com o CORS, consulte suporte ao CORS do Cloud Storage.Revise a solicitação e a resposta usando a ferramenta da sua preferência. No navegador Chrome, veja essas informações usando as ferramentas padrão para desenvolvedores:
- Clique no menu na barra de ferramentas do Chrome.
- Selecione Mais ferramentas > Ferramentas do desenvolvedor.
- Clique na guia Rede.
- No seu aplicativo ou na linha de comando, envie a solicitação.
- No painel que exibe a atividade da rede, localize a solicitação.
- Na coluna Nome, clique no nome que corresponde à solicitação.
- Clique na guia Cabeçalhos ou Resposta para ver, respectivamente, os cabeçalhos ou o conteúdo da resposta.
Se você não estiver vendo a solicitação e a resposta, é possível que o navegador tenha armazenado em cache uma tentativa de simulação de solicitação anterior que falhou. Limpar o cache de seu navegador provavelmente limpará o cache da simulação. Se isso não acontecer, defina
MaxAgeSec
na configuração do CORS para um valor mais baixo (o valor padrão é 1800, 30 minutos, se não for especificado). Aguarde o tempo doMaxAgeSec
antigo e depois faça a solicitação novamente. Assim, será executada uma nova simulação de solicitação que buscará a nova configuração do CORS e limpará as entradas do cache. Após depurar o problema, aumente novamente o valor deMaxAgeSec
para reduzir o tráfego de simulação para o bucket.Certifique-se de que a solicitação tenha um cabeçalho
Origin
e que o valor do cabeçalho corresponda a pelo menos um dos valores deOrigins
na configuração do CORS do intervalo. É necessário que o esquema, o host e a porta dos valores se correspondam exatamente. Alguns exemplos de correspondências aceitáveis:http://origin.example.com
corresponde ahttp://origin.example.com:80
(porque 80 é a porta HTTP padrão), mas não corresponde ahttps://origin.example.com
,http://origin.example.com:8080
,http://origin.example.com:5151
ouhttp://sub.origin.example.com
.https://example.com:443
corresponde ahttps://example.com
, mas não ahttp://example.com
ouhttp://example.com:443
.http://localhost:8080
corresponde somente ahttp://localhost:8080
, não ahttp://localhost:5555
ouhttp://localhost.example.com:8080
.
Verifique se o método HTTP da solicitação, no caso de uma solicitação simples, ou o método especificado em
Access-Control-Request-Method
, no caso de uma solicitação de simulação, corresponde a pelo menos um dos valores deMethods
na configuração do CORS do intervalo.Se essa for uma solicitação de simulação, veja se ela inclui um ou mais cabeçalhos
Access-Control-Request-Header
. Em caso afirmativo, certifique-se de que cada valor deAccess-Control-Request-Header
corresponda a um valorResponseHeader
na configuração do CORS do intervalo. Todos os cabeçalhos nomeados emAccess-Control-Request-Header
precisam estar presentes na configuração do CORS para que a simulação de solicitação tenha êxito e inclua cabeçalhos do CORS na resposta.
Exemplos de configuração do CORS
Os exemplos a seguir mostram configurações específicas de CORS que podem ser definidas em buckets.
Configuração básica do CORS
Digamos que você tenha um site dinâmico em execução no App Engine, que os usuários
podem acessar em your-example-website.appspot.com
. Você tem um arquivo de fontes hospedado em um
bucket do Cloud Storage chamado your-example-bucket
. Você quer usar
a fonte no seu site. Por isso, aplique uma configuração de CORS em
your-example-bucket
, que permite que os navegadores dos usuários solicitem recursos
do bucket. Com base na configuração abaixo, as solicitações simuladas são válidas por uma hora, e as solicitações de navegador bem-sucedidas retornam o Content-Type
do recurso na resposta.
Linha de comando
gcloud
[ { "origin": ["https://your-example-website.appspot.com"], "method": ["GET"], "responseHeader": ["Content-Type"], "maxAgeSeconds": 3600 } ]
É possível especificar várias origens, métodos ou cabeçalhos usando uma lista separada por vírgulas. Por exemplo, "method": ["GET", "PUT"]
.
gsutil
[ { "origin": ["https://your-example-website.appspot.com"], "method": ["GET"], "responseHeader": ["Content-Type"], "maxAgeSeconds": 3600 } ]
É possível especificar várias origens, métodos ou cabeçalhos usando uma lista separada por vírgulas. Por exemplo, "method": ["GET", "PUT"]
Para mais informações sobre como definir uma configuração da CORS, consulte a
documentação do gsutil cors
.
APIs REST
API JSON
{ "cors": [ { "origin": ["https://your-example-website.appspot.com"], "method": ["GET"], "responseHeader": ["Content-Type"], "maxAgeSeconds": 3600 } ] }
É possível especificar várias origens, métodos ou cabeçalhos usando uma lista separada por vírgulas. Por exemplo, "method": ["GET", "PUT"]
Para ver o formato geral de um arquivo de configuração de CORS, consulte a representação do recurso de intervalos para JSON.
API XML
<?xml version="1.0" encoding="UTF-8"?> <CorsConfig> <Cors> <Origins> <Origin>https://your-example-website.appspot.com</Origin> </Origins> <Methods> <Method>GET</Method> </Methods> <ResponseHeaders> <ResponseHeader>Content-Type</ResponseHeader> </ResponseHeaders> <MaxAgeSec>3600</MaxAgeSec> </Cors> </CorsConfig>
É possível especificar várias origens, métodos ou cabeçalhos usando elementos separados para cada um. Por exemplo, ter <Method>GET</Method>
e <Method>PUT</Method>
no elemento <Methods>
.
Para ver o formato geral de um arquivo de configuração do CORS, consulte o formato de configuração do CORS para XML.
Remover a configuração do CORS
Quando definida em um bucket, a configuração a seguir remove todas as configurações de CORS de um bucket:
Linha de comando
gcloud
Use o comando gcloud storage buckets update
com a flag --clear-cors
:
gcloud storage buckets update gs://BUCKET_NAME --clear-cors
Em que BUCKET_NAME é o nome do bucket com a configuração de CORS que você quer remover.
gsutil
[]
Para mais informações sobre como definir uma configuração da CORS, consulte a
documentação do gsutil cors
.
APIs REST
API JSON
{ "cors": [] }
Para ver o formato geral de um arquivo de configuração de CORS, consulte a representação do recurso de intervalos para JSON.
API XML
<CorsConfig></CorsConfig>
Para ver o formato geral de um arquivo de configuração do CORS, consulte o formato de configuração do CORS para XML.
A seguir
- Saiba mais sobre o Compartilhamento de recursos entre origens (CORS, na sigla em inglês).