Compartilhamento de recursos de origem cruzada (CORS) - AWS SDK for JavaScript

O Guia de referência da API do AWS SDK for JavaScript V3 descreve em detalhes todas as operações da API para o AWS SDK for JavaScript versão 3 (V3).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Compartilhamento de recursos de origem cruzada (CORS)

O compartilhamento de recursos de origem cruzada, ou CORS, é um recurso de segurança de navegadores da web modernos. Isso permite que navegadores da web negociem quais domínios podem fazer solicitações de sites ou serviços externos.

CORS é uma consideração importante durante o desenvolvimento de aplicativos de navegador com o AWS SDK for JavaScript porque a maioria das solicitações de recursos é enviada para um domínio externo, como o endpoint de um serviço da web. Se seu JavaScript ambiente impõe a segurança do CORS, você deve configurar o CORS com o serviço.

O CORS determina se é necessário permitir o compartilhamento de recursos em uma solicitação entre origens com base em:

  • O domínio específico que faz a solicitação

  • O tipo de solicitação HTTP feita (GET, PUT, POST, DELETE etc.)

Como funciona o CORS

No caso mais simples, o script de navegador faz uma solicitação GET para um recurso de um servidor em outro domínio. Dependendo da configuração CORS desse servidor, se a solicitação for de um domínio autorizado para enviar solicitações GET, o servidor de origem cruzada responderá retornando o recurso solicitado.

Se o domínio solicitante ou o tipo de solicitação HTTP não estiver autorizado, a solicitação será negada. No entanto, CORS possibilita simular a solicitação antes de enviá-la efetivamente. Neste caso, uma solicitação de simulação é feita em que a operação de solicitação de acesso OPTIONS é enviada. Se o servidor de origem cruzada da configuração CORS conceder acesso ao domínio solicitante, o servidor reenviará uma resposta de simulação que lista todos os tipos de solicitação HTTP que o domínio solicitante pode fazer no recurso solicitado.


                Fluxo do processo de solicitações CORS

A configuração do CORS é necessária?

Os buckets do Amazon S3 exigem a configuração de CORS para realizar operações neles. Em alguns JavaScript ambientes, o CORS pode não ser aplicado e, portanto, a configuração do CORS é desnecessária. Por exemplo, se você hospedar o aplicativo de um bucket do e acessar recursos de *.s3.amazonaws.com ou algum outro endpoint específico, as solicitações não acessarão um domínio externo. Por isso, essa configuração não exige CORS. Nesse caso, CORS continua sendo usado em serviços que não sejam o Amazon S3.

Configurar o CORS para um bucket do Amazon S3

Você pode configurar um bucket do Amazon S3 para usar o CORS no console do Amazon S3.

Se você estiver configurando o CORS no AWS Web Services Management Console, deverá usar o JSON para criar uma configuração CORS. O novo console de gerenciamento de serviços AWS Web só oferece suporte a configurações JSON CORS.

Importante

No novo console de gerenciamento de serviços AWS Web, a configuração do CORS deve ser JSON.

  1. No AWS Web Services Management Console, abra o console do Amazon S3, encontre o bucket que você deseja configurar e marque sua caixa de seleção.

  2. No painel que é aberto, escolha Permissões.

  3. Na guia Permissão, escolha Configuração de CORS.

  4. Digite a configuração de CORS no Editor de configuração de CORS e escolha Salvar.

A configuração do CORS é um arquivo XML que contém uma série de regras dentro de um <CORSRule>. Uma configuração pode ter até 100 regras. Uma regra é definida por uma das seguintes tags:

  • <AllowedOrigin>: especifica as origens de domínio permitidas para fazer solicitações entre domínios.

  • <AllowedMethod>: especifica um tipo de solicitação permitida (GET, PUT, POST, DELETE, HEAD) em solicitações entre domínios.

  • <AllowedHeader>: especifica os cabeçalhos permitidos em uma solicitação de comprovação.

Para exemplos de configuração, consulte Como configurar CORS no meu bucket? no Guia do usuário do Amazon Simple Storage Service.

Exemplo de configuração do CORS

O exemplo de configuração do CORS a seguir permite que um usuário visualize, adicione, remova ou atualize objetos dentro de um bucket do domínio example.org. No entanto, recomendamos definir como escopo <AllowedOrigin> para o domínio do seu site. Especifique "*" para permitir qualquer origem.

Importante

No novo console do S3, a configuração CORS deve ser JSON.

XML
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>https://example.org</AllowedOrigin> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> <ExposeHeader>ETag</ExposeHeader> <ExposeHeader>x-amz-meta-custom-header</ExposeHeader> </CORSRule> </CORSConfiguration>
JSON
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "HEAD", "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "https://www.example.org" ], "ExposeHeaders": [ "ETag", "x-amz-meta-custom-header"] } ]

Essa configuração não autoriza o usuário para executar ações no bucket. Ele permite que o modelo de segurança do navegador faça uma solicitação ao Amazon S3. As permissões devem ser configuradas por meio de permissões do bucket ou permissões da função do IAM.

Use ExposeHeader para permitir que os cabeçalhos de resposta de leitura do SDK sejam retornados do Amazon S3. Por exemplo, para ler o cabeçalho ETag de um PUT ou de um upload de várias partes, você precisará incluir a tag ExposeHeader na configuração, conforme mostrado no exemplo anterior. O SDK só pode acessar cabeçalhos expostos por meio da configuração do CORS. Se você definir metadados no objeto, os valores serão retornados como cabeçalhos com o prefixo x-amz-meta-, como x-amz-meta-my-custom-header, e também deverão ser expostos da mesma maneira.