J'ai utilisé une URL présignée Amazon Simple Storage Service (Amazon S3) pour envoyer des requêtes à mon compartiment Amazon S3, et j'ai reçu un message d'erreur « SignatureDoesNotMatch » ou « 403 Forbidden ».
Brève description
Lorsque vous générez une URL prédéfinie, le client calcule une signature unique afin d'authentifier la requête. 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 ».
Résolution
Pour résoudre ce problème, vérifiez les paramètres de configuration suivants pour votre requête d'URL présignée Amazon S3.
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Valider la méthode HTTP
Lorsque vous générez une URL présignée, vous attribuez une action HTTP à l'URL. Assurez-vous que l'action que le client envoie dans la requête HTTP correspond à l'action HTTP indiquée dans l'URL. Par exemple, si vous attribuez l'action GET à l'URL, l'action HTTP de la requête doit également être GET.
Vérifier la clé d'accès secrète
Vérifiez si la clé d'accès secrète que vous avez utilisée pour générer l'URL présignée est à l'état Incorrect, Non valide ou Désactivé. La clé d'accès secrète passe à l'un de ces états lorsque vous ajoutez des caractères incompatibles ou un espacement incorrect à la clé d'accès secrète. Vérifiez que vous utilisez la bonne clé d'accès pour régénérer l'URL présignée.
Vérifier le nom du compartiment et le nom de la clé dans l'URL
Vérifiez que le nom du compartiment et le nom de l'objet sont corrects et correspondent à ceux qui figurent dans la génération de signature de l'URL. La casse du nom doit également correspondre.
Vérifier les en-têtes utilisés dans la requête HTTP
Assurez-vous que les en-têtes HTTP que vous utilisez pour générer la signature correspondent aux en-têtes que le client envoie à S3 dans la requête HTTP.
Assurez-vous également que la valeur de l'en-tête correspond à la valeur générée lors du calcul de la signature.
Confirmer que la région AWS est correcte
Avant d'envoyer l'URL présignée à S3, vérifiez que la région AWS dans laquelle vous avez généré l'URL correspond à la région dans laquelle le compartiment existe actuellement.
Exécutez la requête d'API GetBucketLocation pour vérifier la région d'un compartiment S3. Vous pouvez également exécuter la commande get-bucket-location de l'interface de ligne de commande AWS :
$ aws s3api get-bucket-location --bucket example-bucket
Exemple de sortie :
{
"LocationConstraint": "us-west-2"
}
Vérifier la période de validité du système
Si vous réglez l'heure système à une date ultérieure après la période de validité de la signature numérique, celle-ci apparaît comme expirée et échoue. Si vous réglez l'heure système à une date antérieure à la période de validité de la signature, celle-ci n'est pas valide et échoue.
Informations connexes
Liste des codes d'erreur
Pourquoi l'URL présignée de mon compartiment Amazon S3 expire-t-elle avant la date d'expiration que j'ai spécifiée ?
Télécharger et charger des objets avec des URL présignées
Comment résoudre l'erreur « La demande a expiré » lorsque j'essaie d'accéder à un objet S3 ?