Ir para o conteúdo

Como soluciono os erros “SignatureDoesNotMatch” ou “403 Forbidden” nas solicitações de URL pré-assinadas do Amazon S3?

3 minuto de leitura
0

Usei uma URL pré-assinada do Amazon Simple Storage Service (Amazon S3) para fazer solicitações ao meu bucket do Amazon S3 e recebi uma mensagem de erro “SignatureDoesNotMatch” ou “403 Forbidden”.

Breve descrição

Quando você gera uma URL pré-assinada, o cliente calcula uma assinatura exclusiva para autenticar a solicitação. Em seguida, o Amazon S3 calcula uma assinatura com base nos parâmetros que o cliente envia na solicitação HTTP e compara as duas assinaturas. Se as assinaturas não corresponderem, você receberá o erro “SignatureDoesNotMatch”.

Resolução

Para solucionar esse problema, verifique as seguintes configurações para sua solicitação de URL pré-assinada do Amazon S3.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Validar o método HTTP

Ao gerar uma URL pré-assinada, você atribui uma ação HTTP à URL. Certifique-se de que a ação que o cliente envia na solicitação HTTP corresponda à ação HTTP na URL. Por exemplo, se você atribuir a ação GET ao URL, a ação HTTP na solicitação também deverá ser GET.

Verifique a chave de acesso secreta

Verifique se a chave de acesso secreta que você usou para gerar o URL pré-assinado está no estado Incorreto, Não válido ou Desativado. A chave de acesso secreta entra em um desses estados quando você adiciona caracteres incompatíveis ou espaçamento incorreto à chave de acesso secreta. Verifique se você está usando a chave de acesso correta para regenerar o URL pré-assinado.

Verifique o nome do bucket e o nome da chave na URL

Verifique se o nome do bucket e o nome do objeto estão corretos e correspondem aos que estão na geração da assinatura do URL. As letras maiúsculas e minúsculas também devem corresponder.

Verifique os cabeçalhos usados na solicitação HTTP

Certifique-se de que os cabeçalhos HTTP usados para gerar a assinatura correspondam aos cabeçalhos que o cliente envia ao S3 na solicitação HTTP.

Além disso, certifique-se de que o valor do cabeçalho corresponda ao valor gerado durante o cálculo da assinatura.

Confirme se a região da AWS está correta

Antes de enviar a URL pré-assinada para o S3, confirme se a região da AWS em que você gerou a URL corresponde à região em que o bucket existe atualmente.

Execute a solicitação da API GetBucketLocation para verificar a região de um bucket do S3. Também é possível executar o comando get-bucket-location da AWS CLI:

$ aws s3api get-bucket-location --bucket example-bucket

Exemplo de saída:

{      
"LocationConstraint": "us-west-2"  
}

Verifique o período de validade da hora do sistema

Se você definir a hora do sistema para uma data futura após o período de validade da assinatura digital, a assinatura aparecerá como expirada e falhará. Se você definir a hora do sistema como uma data anterior ao período de validade da assinatura, a assinatura não será válida e falhará.

Informações relacionadas

Lista de códigos de erro

Por que a URL pré-assinada do meu bucket Amazon S3 expira antes do prazo de expiração que eu especifiquei?

Baixe e faça upload de objetos com URLs pré-assinados

Como soluciono o erro “Request has expired” quando tento acessar um objeto do S3?

AWS OFICIALAtualizada há 10 meses