J'utilise une URL présignée Amazon Simple Storage Service (Amazon S3) pour envoyer des demandes à mon compartiment Amazon S3 et je reçois le message d'erreur SignatureDoesNotMatch.
Brève description
Cette erreur s'affiche lorsque la valeur de signature calculée à partir de votre requête HTTP à AWS ne correspond pas à la valeur calculée par Amazon S3. Pour plus d'informations, consultez la section Liste des codes d'erreur.
Lorsque vous générez une URL prédéfinie, le client calcule une signature unique pour la demande afin d'authentifier la demande. Amazon S3 calcule ensuite une signature en fonction des paramètres envoyés dans la requête HTTP et compare les deux signatures. Si les signatures ne correspondent pas, vous recevez l'erreur SignatureDoesNotMatch.
Pour résoudre cette erreur, vérifiez les points suivants :
- Validez la méthode HTTP : Vérifiez que les requêtes HTTP que vous avez envoyées à S3 pour les requêtes GET, PUT et DELETE correspondent à la méthode HTTP pour laquelle la demande a été générée.
- Vérifiez la clé d'accès secrète : Assurez-vous d'utiliser la clé d'accès secrète correcte pour générer l'URL présignée. Si la clé d'accès secrète a été modifiée ou est incorrecte, utilisez la bonne clé d'accès pour régénérer l'URL présignée.
- Vérifiez le nom du compartiment et le nom de la clé dans l'URL : Assurez-vous que le nom du compartiment et le nom de clé de l'objet sont corrects et correspondent à ceux de l'objet auquel vous essayez d'accéder.
- Validez les en-têtes utilisés dans la requête HTTP : Vérifiez que les en-têtes ont été calculés dans la signature. Assurez-vous que les en-têtes HTTP utilisés pour générer la signature correspondent à ceux qui ont été envoyés à S3 dans la requête HTTP.
- Assurez-vous que la région AWS est correcte : Vérifiez que la signature est générée pour la région dans laquelle le compartiment existe actuellement.
Résolution
Méthode HTTP incorrecte
Lorsque vous générez une URL présignée, vous attribuez une action HTTP à l'URL. Cette erreur s'affiche lorsque l'action envoyée par le client dans la requête HTTP ne correspond pas à l'action HTTP utilisée dans l'URL. Par exemple, si la demande est signée pour GET, mais que l'action HTTP utilisée dans la demande est PUT, vous obtenez l'erreur. Pour que l'URL fonctionne, vérifiez que vous générez et utilisez l'URL correspondant à la méthode HTTP souhaitée.
Clé d'accès secrète incorrecte
Cette erreur s'affiche lorsque la clé d'accès ou la clé d'accès secrète que vous utilisez pour générer l'URL présignée présente l'un des états suivants :
- Incorrect
- Non valide
- Éteint
Vérifiez que vous n'avez pas ajouté de caractères incompatibles ou d'espacement incorrect à la clé d'accès.
Assurez-vous que la clé d'accès et la clé secrète que vous avez fournies lors de la génération de la signature correspondent à celles fournies par AWS.
Nom de clé ou de compartiment incorrect
Cette erreur s'affiche lorsque vous utilisez une URL présignée que vous avez générée pour un compartiment ou une clé afin d'accéder à un compartiment ou à une clé différent.
Vérifiez que le nom du compartiment et le nom de l'objet sont corrects et correspondent à ceux qui ont été inclus dans la génération de signature de l'URL. Notez qu'un cas non apparié entraîne également une discordance entre les signatures.
Non signé pour des en-têtes ou des valeurs d'en-tête incorrectes
Assurez-vous de ne pas avoir transmis les en-têtes qui n'étaient pas signés lors de la génération de signature de votre URL présignée. Si vous avez l'intention d'envoyer des en-têtes avec votre URL S3 présignée, ils doivent être pris en compte lors de la génération de la signature de l'URL.
Assurez-vous également que la valeur de l'en-tête que vous avez transmis correspond à celle qui a été générée lors du calcul de la signature. Toute différence entre les valeurs d'en-tête, y compris les incohérences entre majuscules et minuscules, entraîne l'erreur SignatureDoesNotMatch.
Incompatibilité entre la région de signature et la région du compartiment
Avant d'envoyer l'URL présignée à S3, vérifiez que la région dans laquelle l'URL a été générée correspond à la région dans laquelle le compartiment existe actuellement.
Utilisez la requête d'API GetBucketLocation pour vérifier la région d'un compartiment S3. Vous pouvez également exécuter la commande AWS Command Line Interface (AWS CLI) suivante :
$ aws s3api get-bucket-location --bucket example-bucket
Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'AWS CLI,assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.
La sortie ressemble au message suivant :
{
"LocationConstraint": "us-west-2"
}
Informations connexes
Utilisation d'URL présignées
Lorsque j'essaie d'accéder à un objet S3, le message d'erreur « La demande a expiré ». Pourquoi ?