Ir para o conteúdo

Como soluciono problemas relacionados a um URL assinado ou cookies assinados no CloudFront?

8 minuto de leitura
0

Estou usando o Amazon CloudFront e um URL assinado ou cookies assinados para proteger o conteúdo privado. Recebo um erro 403 Acesso negado.

Resolução

Se o Amazon CloudFront encontrar um problema com um URL assinado ou cookies assinados, você poderá receber um erro 403 Acesso negado.

Um URL assinado ou um cookie assinado não inclui o signatário correto

Ao ativar a opção Restringir acesso do visualizador em um comportamento, você deve determinar um signatário. Um signatário é um grupo de chaves confiável que você cria no CloudFront ou uma conta da AWS que contém um par de chaves do CloudFront. As mensagens de erro 403 a seguir indicam que as informações do signatário estão ausentes ou incorretas:

O erro inclui a mensagem “Falta o parâmetro de consulta Key-Pair-Id ou o valor do cookie”.

Essa mensagem indica um parâmetro de consulta Key-Pair-Id ausente ou vazio com um URL assinado. Ou indica que falta um parâmetro de string de consulta CloudFront-Key-Pair-ID em um cookie assinado.

O erro inclui a mensagem “Chave desconhecida”.

Essa mensagem indica que o CloudFront não pode verificar as informações do signatário por meio do Key-Pair-ID para URLs assinados ou do CloudFront-Key-Pair-ID para cookies assinados.

Para resolver esse problema, confirme se o valor correto de Key-Pair-ID é usado para um URL assinado ou o de CloudFront-Key-Pair-ID, para cookies assinados:

Se você usar um URL assinado, localize e anote o valor de Key-Pair-ID.
-ou-
Se você usa cookies assinados, encontre e anote o valor de CloudFront-Key-Pair-ID.

Em seguida, encontre o ID da chave e confirme se ele corresponde ao Key-Pair-ID ou ao CloudFront-Key-Pair-ID:

  1. Abra o console do CloudFront. No menu de navegação, escolha Distribuições.
  2. Selecione sua distribuição. Em seguida, selecione a guia Comportamentos.
  3. Selecione o nome do comportamento e escolha Editar.
  4. Encontre a configuração Restringir acesso do espectador.
    Observação: se estiver definido como Sim, as solicitações de arquivos que correspondam ao padrão de caminho do comportamento do cache devem usar o URL assinado ou o cookie assinado.
  5. Verifique o campo Tipo de autorização confiável.
  6. Se a configuração do valor de Tipo de autorização confiável for Grupos de chaves confiáveis, anote o nome do grupo de chaves confiável. Encontre os IDs de chave pública para o grupo de chaves confiável:
    Abra o console do CloudFront.
    Escolha Grupos de chaves. Escolha o nome do grupo de chaves confiável que você anotou.
    Confirme se o valor de Key-Pair-Id ou de CloudFront-Key-Pair-ID corresponde a um dos IDs de chave pública no grupo de chaves confiável.
  7. Se o valor do tipo Autorização confiável for Signatário confiável, o CloudFront usará as credenciais geradas pela AWS. Nesse caso, o valor de Key-Pair-Id ou de CloudFront-Key-Pair-Id deve corresponder ao ID da chave de acesso das credenciais do CloudFront.
    Observação: para encontrar o ID da chave de acesso das credenciais do CloudFront, consulte Criar pares de chaves para os assinantes.

Um URL assinado ou um cookie assinado não são enviados em um momento válido

Quando você cria um URL assinado ou um cookie assinado, uma declaração de política no formato JSON especifica as restrições no URL assinado. Essa declaração determina por quanto tempo o URL é válido. O CloudFront retorna um erro 403 Acesso negado nos seguintes cenários:

Observação: os valores de Expires, CloudFront-Expires, DateLessThan e DateGreaterThan estão no formato de hora Unix em segundos e no Tempo Universal Coordenado (UTC). Por exemplo, 1º de janeiro de 2013, às 10:00 UTC, é convertido em 1357034400 no formato de hora Unix. Se você usar o horário epoch, ou Unix, use um inteiro de 32 bits para uma data que não seja posterior a 2147483647 (19 de janeiro de 2038 às 03:14:07 UTC).

O parâmetro Policy em um URL assinado ou o atributo CloudFront-Policy em um cookie assinado indica que você usa uma política personalizada. A declaração de política está no formato JSON e é codificada em base64. Para descobrir o valor de DateLessThan ou de DateGreaterThan, use um comando de decodificação 64base.

Exemplo de uma política personalizada codificada em base64:

eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__

Para decodificar para o formato JSON uma política personalizada no formato codificado em base64, execute o seguinte comando Linux. Substitua o valor da política pelo valor da política personalizada:

echo "eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__" | tr -- '-_~' '+=/' | base64 -d

Você recebe uma saída semelhante à seguinte:

{ "Statement": [{ "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1426500000 } } }] }

Um URL assinado ou um cookie assinado tem mais de uma declaração na política

Se mais de uma declaração for incluída em uma política predefinida ou em uma política personalizada, o CloudFront retornará um erro 403 Acesso negado.

Para solucionar esse problema, execute o comando Linux na seção anterior para verificar a declaração de política personalizada. Verifique os detalhes do seu código e, em seguida, confirme se apenas uma declaração está incluída na política predefinida ou na política personalizada.

Um URL assinado ou um cookie assinado tem um URL base incorreto na política

O CloudFront retorna um erro 403 Acesso negado quando o URL base na política está incorreto:

  • É abreviado (www.exemplo.com) na chave Resource. Use um URL completo (http://www.exemplo.com).
  • Não há codificação de caracteres UTF-8.
  • Ele não inclui todos os nomes de pontuação e parâmetros.
  • O protocolo HTTP ou HTTPS não corresponde ao protocolo usado em uma solicitação que está enviando um URL assinado ou cookies assinados.
  • O nome do domínio não corresponde ao cabeçalho do host que o agente do usuário usa para enviar um URL assinado ou cookies assinados.
  • A cadeia de caracteres de consulta inclui caracteres que não são válidos.

Um URL assinado ou um cookie assinado tem uma assinatura incorreta na política

O CloudFront retorna um erro 403 Acesso negado nos seguintes cenários:

  • A declaração de política inclui espaços em branco, incluindo tabulações e caracteres de nova linha.
  • A política predefinida ou a política personalizada não é formatada como string antes de ser transformada em hash. Isso acontece quando você cria um URL assinado ou um cookie assinado sem um SDK da AWS.
  • A política não é criptografada antes de gerar a assinatura. Isso acontece quando você cria o URL assinado ou o cookie assinado sem um SDK da AWS.

Para ver as melhores práticas de assinatura ao usar um URL assinado ou cookies assinados, consulte Exemplos de código para criar uma assinatura para um URL assinado.

Um URL assinado ou um cookie assinado foi enviado de um endereço IP ou intervalo de IP não aceito

O CloudFront retorna um erro 403 Acesso negado quando um URL assinado ou um cookie assinado é enviado de um endereço IPv6. Ou é enviado de um endereço IPv4 ou intervalo IPv4 que não é permitido na política personalizada.

A chave IpAddress está disponível somente na política personalizada que está em um URL assinado ou em um cookie assinado. Endereços IP no formato IPv6 não são aceitos. Se você usa uma política personalizada que inclui IpAddress, não ative o IPv6 para a distribuição.

Um cookie assinado não inclui os atributos Domain e Path nos cabeçalhos de resposta Set-cookie

O CloudFront retorna um erro 403 Acesso negado quando os cookies retornam do CloudFront, mas não são incluídos em solicitações posteriores para o mesmo domínio. Nesse caso, verifique os atributos de cookie Domain e Path no cabeçalho de resposta Set-Cookie.

O valor de Domain é o nome de domínio do arquivo solicitado. Se você não especificar um atributo Domain, o valor padrão será o nome do domínio no URL. Isso se aplica somente ao nome de domínio especificado, não aos subdomínios. Se você especificar um atributo Domain, ele também se aplicará aos subdomínios.

Se você especificar um atributo Domain, o nome do domínio no URL e o valor do atributo Domain deverão corresponder. Você pode especificar o nome de domínio que o CloudFront atribui à sua distribuição, por exemplo, d111111abcdef8.cloudfront.net. Mas você não pode especificar *.cloudfront.net como o nome de domínio. Para usar um nome de domínio alternativo, como exemplo.com, adicione um nome de domínio alternativo à sua distribuição em seus URLs.

O atributo Path é o caminho para o arquivo solicitado. Se você não especificar um atributo Path, o valor padrão será o caminho no URL.

AWS OFICIALAtualizada há 2 anos