Comment puis-je résoudre les problèmes liés à une URL signée ou à des cookies signés dans CloudFront ?
J’utilise Amazon CloudFront et une URL signée ou des cookies signés pour sécuriser le contenu privé. Je reçois un message d’erreur 403 Accès refusé.
Résolution
Si Amazon CloudFront rencontre un problème avec une URL signée ou des témoins de connexion (cookies) signés, il est possible que vous receviez le message d’erreur 403 Accès refusé.
Une URL signée ou un cookie signé n’inclut pas le bon signataire
Lorsque vous activez Restreindre l’accès au lecteur dans un comportement, vous devez identifier un signataire. Un signataire est soit un groupe de clés autorisé que vous créez dans CloudFront, soit un compte AWS qui contient une paire de clés CloudFront. Les messages d’erreur 403 suivants indiquent que les informations du signataire sont manquantes ou incorrectes :
L’erreur inclut le message « Paramètre de requête Key-Pair-Id manquant ou valeur de cookie manquante ».
Ce message indique un paramètre de requête Key-Pair-Id manquant ou vide lors de l’utilisation d’une URL signée. Cela peut également indiquer qu’un paramètre de chaîne de requête CloudFront-Key-Pair-ID est manquant dans un cookie signé.
L’erreur inclut le message « Clé inconnue ».
Ce message indique que CloudFront ne peut pas vérifier les informations du signataire via Key-Pair-ID (pour les URL signées) ou CloudFront-Key-Pair-ID (pour les cookies signés).
Pour résoudre ce problème, vérifiez que la valeur Key-Pair-ID correcte est utilisée pour une URL signée ou CloudFront-Key-Pair-ID pour les témoins de connexion (cookies) signés :
Si vous utilisez une URL signée, recherchez et notez la valeur de Key-Pair-ID.
-ou-
Si vous utilisez des témoins de connexion (cookies) signés, recherchez et notez la valeur de CloudFront-Key-Pair-ID.
Recherchez ensuite la valeur de ID de clé et vérifiez qu’elle correspond à celle de Key-Pair-ID ou de CloudFront-Key-Pair-ID :
- Ouvrez la console CloudFront. Dans le menu de navigation, choisissez Distributions.
- Sélectionnez une distribution. Choisissez ensuite l’onglet Comportements.
- Sélectionnez le nom du comportement, puis choisissez Modifier.
- Trouvez le paramètre Restreindre l’accès au lecteur.
Remarque : S’il est défini sur Oui, les demandes de fichiers qui correspondent au modèle de chemin de ce comportement de cache doivent utiliser l’URL signée ou le cookie signé. - Vérifiez le champ Type d’autorisation de confiance.
- Si la valeur du champ Type d'autorisation de confiance indique Groupes de clés autorisés, notez le nom du groupe de clés autorisé. Trouvez les identifiants de clé publique du groupe de clés autorisé :
Ouvrez la console CloudFront.
Choisissez Groupes de clés. Choisissez le nom du groupe de clés de confiance que vous avez noté.
Vérifiez que la valeur de Key-Pair-Id ou de CloudFront-Key-Pair-ID correspond à l’un des ID de clé publique du groupe de clés autorisé. - Si la valeur du champ Type d’autorisation de confiance indique Signataire autorisé, CloudFront utilise les informations d’identification générées par AWS. Dans ce cas, la valeur de Key-Pair-Id ou de CloudFront-Key-Pair-ID doit correspondre à l’ID de clé d’accès des informations d’identification CloudFront.
Remarque : Pour trouver l’ID de clé d'accès des informations d’identification CloudFront, consultez la section Création de paires de clés pour les signataires.
Une URL signée ou un témoin de connexion (cookie) signé n’est pas envoyé à une heure valide
Lorsque vous créez une URL signée ou un cookie signé, une déclaration de politique au format JSON précise les restrictions relatives à l'URL signée. Cette stratégie détermine la durée de validité de l’URL. CloudFront renvoie une erreur 403 Accès refusé dans l’un des scénarios suivants :
- Une URL signée est envoyée à une heure dont la valeur est supérieure à la valeur du champExpiration d’une URL signée utilisant une politique prédéfinie.
- Un cookie signé est envoyé à une heure dont la valeur est supérieure à la valeur CloudFront-Expires d’un cookie signé utilisant une politique prédéfinie.
- Une URL signée ou un cookie signé est envoyé à une heure dont la valeur est supérieure à la valeur DateLessThan spécifiée dans une politique personnalisée. Ou bien, ils sont envoyés à une heure dont la valeur est inférieure à la valeur DateGreaterThan.
Remarque : Les valeurs Expiration, CloudFront-Expires, DateLessThan et DateGreaterThan sont au format horaire Unix (en secondes) et en temps universel coordonné (UTC). Par exemple, le 1er janvier 2013 à 10h00 UTC est converti en 1357034400 au format horaire Unix. Si vous utilisez l’heure d’époque, utilisez un entier de 32 bits pour une date ne dépassant pas 2147483647 (19 janvier 2038 à 03:14:07 UTC).
Le paramètre Politique dans une URL signée ou l’attribut CloudFront-Policy dans un cookie signé indique que vous utilisez une politique personnalisée. L’instruction de la politique est au format JSON et encodée en base64. Pour connaître la valeur DateLessThan ou DateGreaterThan, utilisez une commande de décodage base64.
Exemple de politique personnalisée codée en base64 :
eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__
Pour décoder une politique personnalisée au format base64 au format JSON, exécutez la commande Linux suivante. Remplacez la valeur de la politique par la valeur de votre politique personnalisée :
echo "eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__" | tr -- '-_~' '+=/' | base64 -d
Vous recevez un résultat qui ressemble au message suivant :
{ "Statement": [{ "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1426500000 } } }] }
Une URL signée ou un cookie signé comporte plusieurs instructions dans la politique
Si plusieurs instructions sont incluses dans une politique prédéfinie ou personnalisée, CloudFront renvoie une erreur 403 Access Denied.
Pour résoudre ce problème, exécutez la commande Linux de la section précédente pour vérifier la déclaration de politique personnalisée. Vérifiez les détails de votre code, puis confirmez qu'une seule instruction est incluse dans la politique prédéfinie ou la politique personnalisée.
Une URL signée ou un cookie signé contient une URL de base incorrecte dans la politique
CloudFront renvoie une erreur 403 Accès refusé lorsque l’URL de base de la politique est incorrecte :
- Elle est abrégée (www.example.com) dans la clé Resource. Utilisez une URL complète (http://www.example.com).
- Il n’y a pas de codage de caractères UTF-8.
- L’URL de base n’inclut pas tous les noms de ponctuation et de paramètres.
- Le protocole HTTP ou HTTPS de l’URL de base ne correspond pas au protocole utilisé dans une demande qui envoie une URL signée ou des cookies signés.
- Le nom de domaine de l’URL de base ne correspond pas à l’en-tête de l’hôte que l’agent utilisateur utilise pour envoyer une URL signée ou des cookies signés.
- La chaîne de requête URL de base contient des caractères qui ne sont pas valides.
La signature d'une URL ou d’un cookie signé est incorrecte dans la politique
CloudFront renvoie une erreur 403 Accès refusé dans l’un des scénarios suivants :
- L’instruction de la politique inclut des espaces blancs (y compris des tabulations et des caractères de saut de ligne).
- La politique prédéfinie ou personnalisée n’est pas mise en forme de chaîne avant d’être hachée. Cela se produit si vous créez une URL signée ou des cookies signés sans utiliser de kit SDK AWS.
- La politique n’est pas hachée avant de générer la signature. Cela se produit si vous créez l’URL signée ou des cookies signés sans utiliser de kit SDK AWS.
Pour connaître les meilleures pratiques en matière de signature lors de l’utilisation d’une URL signée ou de cookies signés, consultez la section Exemples de codes pour créer une signature pour une URL signée.
Une URL signée ou un cookie signé a été envoyé depuis une adresse IP ou une plage d’adresses IP non prise en charge
CloudFront renvoie une erreur 403 Accès refusé lorsqu’une URL signée ou un cookie signé est envoyé depuis une adresse IPv6. Ou bien, ils sont envoyés à partir d’une adresse IPv4 ou d’une plage IPv4 qui n’est pas autorisée dans la politique personnalisée.
La clé IpAddress est disponible uniquement dans la politique personnalisée qui se trouve dans une URL signée ou un cookie signé. Les adresses IP au format IPv6 ne sont pas prises en charge. Si vous utilisez une politique personnalisée qui inclut IpAddress, n’activez pas le protocole IPv6 pour la distribution.
Un cookie signé n’inclut pas les attributs Domain et Path dans les en-têtes de réponse Set-Cookie
CloudFront renvoie une erreur 403 Accès refusé si des cookies sont renvoyés depuis CloudFront mais ne sont pas inclus dans les demandes ultérieures adressées au même domaine. Dans ce cas, vérifiez les attributs Domain et Path des cookies dans l’en-tête de réponse Set-Cookie.
La valeur Domain est le nom de domaine du fichier demandé. Si vous ne spécifiez pas d'attribut Domain, la valeur par défaut est le nom de domaine dans l'URL. Cela s'applique uniquement au nom de domaine spécifié, pas aux sous-domaines. Si vous spécifiez un attribut Domain, il s'applique également aux sous-domaines.
Si vous spécifiez un attribut Domain, le nom de domaine dans l’URL et la valeur de l’attribut Domain doivent correspondre. Vous pouvez spécifier le nom de domaine que CloudFront attribue à votre distribution, par exemple, d111111abcdef8.cloudfront.net. Cependant, vous ne pouvez pas spécifier *.cloudfront.net pour le nom de domaine. Pour utiliser un autre nom de domaine, tel que exemple.com, dans les URL, ajoutez un nom de domaine alternatif à votre distribution.
L’attribut Path est le chemin du fichier demandé. Si vous ne spécifiez pas d'attribut Path, la valeur par défaut est le chemin dans l'URL.
Contenus pertinents
- demandé il y a 6 moislg...
- demandé il y a 23 jourslg...
- Réponse acceptéedemandé il y a un anlg...
- demandé il y a 7 moislg...
- demandé il y a 2 moislg...
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans