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?