Como configuro o CORS no Amazon S3 e confirmo as regras do CORS usando cURL?

6 minuto de leitura
0

Quero permitir o acesso entre origens aos recursos do meu bucket no Amazon Simple Storage Service (Amazon S3), mas estou recebendo um erro.

Resolução

Você pode aplicar as regras de compartilhamento de recursos de origem cruzada (CORS) ao seu bucket usando o console do Amazon S3 ou a AWS Command Line Interface (AWS CLI). Para testar as regras do CORS no seu bucket do Amazon S3, use o comando cURL. O CORS é um recurso do HTTP que usa cabeçalhos para permitir que os navegadores exibam o conteúdo que um servidor Web solicitou de uma origem diferente. Se você fizer uma solicitação entre origens para um bucket do Amazon S3 que não esteja definido por uma regra CORS, o cabeçalho CORS não será retornado.

Por exemplo:

curl -i http://mycorsbucket.s3.amazonaws.com/cors-test.html -H "Origin: http://www.example.com"

HTTP/1.1 200 OK
x-amz-id-2: Va106gWx1uUDGbouopXfpjvjHW0VXydI8/VGlraf/62f2vvxtI+iAnmu7lF4MK2B6CxuzReyfRI=
x-amz-request-id: QWNNX1Y0MWFM152H
Date: Thu, 04 Nov 2021 18:52:55 GMT
Last-Modified: Thu, 04 Nov 2021 16:03:50 GMT
ETag: "cd4276d2cd5a2dc8ebcc1e04746680f6"
Accept-Ranges: bytes
Content-Type: text/html
Server: AmazonS3
Content-Length: 55

Se um servidor Web tiver feito uma solicitação semelhante a um site, o conteúdo recuperado do seu bucket não aparecerá no navegador. Para permitir que o conteúdo apareça, configure uma política do CORS no bucket do Amazon S3. A devida configuração da política do CORS garante que os cabeçalhos apropriados sejam retornados. Você pode configurar uma regra do CORS no seu bucket usando o console do Amazon S3 ou a AWS CLI.

Configurar uma regra do CORS usando o console do Amazon S3

Para configurar uma regra do CORS em seu bucket usando o console do Amazon S3, execute as seguintes etapas:

  1. Faça login no Console de Gerenciamento da AWS.

2.    Abra o console do Amazon S3.

3.    Selecione seu bucket.

4.    Escolha a guia Permissões.

5.    No painel de Compartilhamento de recursos entre origens, escolhaEditar.

6.    Na caixa de texto, insira a regra JSON do CORS que você deseja ativar:

Example:

[
  {
    "AllowedHeaders": [
      "Authorization"
    ],
    "AllowedMethods": [
      "GET",
      "HEAD"
    ],
    "AllowedOrigins": [
      "http://www.example.com"
    ],
    "ExposeHeaders": [
      "Access-Control-Allow-Origin"
    ]
  }
]

Para obter mais informações sobre cada um dos elementos de regras do CORS ou regras de exemplo, consulte Configuração do CORS.

7.    Escolha Salvar.

Configurar uma regra do CORS usando a AWS CLI

Para configurar uma regra do CORS no seu bucket usando a AWS CLI, execute o seguinte comando:

aws s3api put-bucket-cors --bucket mycorsbucket --cors-configuration '{"CORSRules" : [{"AllowedHeaders":["Authorization"],"AllowedMethods":["GET","HEAD"],"AllowedOrigins":["http://www.example.com"],"ExposeHeaders":["Access-Control-Allow-Origin"]}]}'

**Observação:**Se você receber erros ao executar comandos da AWS CLI, verifique se está usando a versão mais recente da AWS CLI.

Testar a regra do CORS

Para testar a regra do CORS, use o comando cURL, assim:

curl -i http://mycorsbucket.s3.amazonaws.com/index.html -H "Origin: http://www.example.com"

HTTP/1.1 200 OK
x-amz-id-2: d5Jsw1vCf8tR3cMdXrtcTKYgczU/1pjxahnrw7C6jU1fLo8py2Nv2kpeFs8pYPruVZg6Y3JuRUA=
x-amz-request-id: BMCCY18E58B3GBWV
Date: Thu, 04 Nov 2021 19:12:26 GMT
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Expose-Headers: Access-Control-Allow-Origin
Access-Control-Allow-Credentials: true
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Last-Modified: Thu, 04 Nov 2021 16:03:50 GMT
ETag: "cd4276d2cd5a2dc8ebcc1e04746680f6"
Accept-Ranges: bytes
Content-Type: text/html
Server: AmazonS3
Content-Length: 55

Se a regra do CORS estiver configurada corretamente, você receberá uma resposta 200 OK.

Solução de problemas com métodos do CORS

Se você encontrar um comportamento inesperado ao acessar buckets com a configuração do CORS, tente o seguinte:

1.    Use o comando cURL para fazer solicitações usando métodos do CORS específicos, adicionando o -H “Access-Control-Request-Method: <Method>“ sinalizador. Esse sinalizador especifica o método do CORS a ser testado. Use o sinalizador --request OPTIONS para realizar uma verificação de comprovação de solicitação.

**Observação:**O Amazon S3 oferece suporte os métodos GET, HEAD, PUT, POST e DELETE.

curl -i http://mycorsbucket.s3.amazonaws.com/cors-test.html -H "Access-Control-Request-Method: POST" --request OPTIONS -H "Origin: http://www.example.com"
HTTP/1.1 403 Forbidden
x-amz-request-id: 190J4Q6222HA2KZ5
x-amz-id-2: 6oEci3qg88OeoLvBGwkN8K9AGdxyVela8ZKxftXMqyWrtZFfiKMrBwpTAeRiOth8amovJMtAAdA=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Fri, 19 Nov 2021 18:43:38 GMT
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessForbidden</Code><Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message><Method>POST</Method><ResourceType>OBJECT</ResourceType><RequestId>190J4Q6222HA2KZ5</RequestId><HostId>6oEci3qg88OeoLvBGwkN8K9AGdxyVela8ZKxftXMqyWrtZFfiKMrBwpTAeRiOth8amovJMtAAdA=</HostId></Error>

2.    Se a solicitação retornar um erro, verifique se a configuração do CORS está definida no bucket. Verifique se você adicionou o método necessário à regra do CORS em seu bucket. Se a configuração do CORS estiver definida, você verá a opção para editar a configuração do CORS na seção Permissões do bucket no console do S3.

aws s3api put-bucket-cors --bucket mycorsbucket --cors-configuration '{"CORSRules" : [{"AllowedHeaders":["Authorization"],"AllowedMethods":["GET","HEAD","POST"],"AllowedOrigins":["http://www.example.com"],"ExposeHeaders":["Access-Control-Allow-Origin"]}]}'

3.    Teste a regra do CORS atualizada. Se seu método funcionar conforme o esperado, você receberá a seguinte resposta:

curl -i http://mycorsbucket.s3.amazonaws.com/index.html -H "Access-Control-Request-Method: POST" -X OPTIONS -H "Origin: http://www.example.com"
HTTP/1.1 200 OK
x-amz-id-2: Cx4kuM31KPVE19woEPRRYxF+85vEWkLk8+M0p6BIb72T550njMnmLtjqRgYzuxKelR0f+cxhFqI=
x-amz-request-id: QBSHV46QK43HGW15
Date: Fri, 19 Nov 2021 18:48:21 GMT
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: GET, HEAD, POST
Access-Control-Expose-Headers: Access-Control-Allow-Origin
Access-Control-Allow-Credentials: true
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Server: AmazonS3
Content-Length: 0

4.    Faça uma captura de tela da solicitação e da resposta completa usando uma ferramenta de sua escolha. Para cada solicitação que o Amazon S3 recebe, você deve ter uma regra do CORS que corresponda aos dados em sua solicitação.

  • Verifique se a solicitação tem o cabeçalho Origin. Se o cabeçalho estiver ausente, o Amazon S3 não trata a solicitação como uma solicitação entre origens e não envia cabeçalhos de resposta do CORS na resposta.
  • Verifique se o cabeçalho Origin em sua solicitação corresponde a pelo menos um dos elementos AllowedOrigins na regra do CORS especificada. Os valores do esquema, do host e da porta no cabeçalho da solicitação do Origin devem corresponder aos elementos AllowedOrigins na regra do CORS. Por exemplo, suponha que você defina a regra do CORS para permitir a origem http://www.example.com. Quando você faz isso, as origens https://www.example.com e http://www.example.com:80 na sua solicitação não correspondem à origem permitida na sua configuração.
  • Verifique se o método em sua solicitação ou solicitação de comprovação (método especificado no Access-Control-Request-Method) é um dos elementos no AllowedMethods na mesma regra do CORS.
  • Se uma solicitação de comprovação incluir um cabeçalho ** Access-Control-Request-Headers**, verifique se a regra do CORS inclui as entradas AllowedHeader para cada valor no cabeçalho Access-Control-Request-Headers.

Informações relacionadas

Adicionar cabeçalhos HTTP às respostas do Amazon CloudFront

Como resolvo o erro "No 'Access-Control-Allow-Origin' header is present on the requested resource" do CloudFront?

Como o Amazon S3 avalia a configuração do CORS em um bucket?

Solucionar problemas do CORS

AWS OFICIAL
AWS OFICIALAtualizada há um ano