Comment puis-je résoudre l'erreur « CNAMEAlreadyExists » lorsque je configure un alias CNAME pour ma distribution CloudFront ?

Lecture de 7 minute(s)
0

Lorsque je configure un alias CNAME (enregistrement de nom canonique) pour ma distribution Amazon CloudFront, le message d'erreur « CNAMEAlreadyExists » s'affiche.

Brève description

Vous ne pouvez pas utiliser le même alias CNAME pour plusieurs distributions CloudFront. Lorsque l’alias CNAME que vous souhaitez ajouter est déjà associé à une autre distribution CloudFront, le message d’erreur suivant s’affiche :

« Un ou plusieurs CNAME que vous avez fournis sont déjà associés à une autre ressource. (Service : AmazonCloudFront ; Code d'état : 409 ; Code d’erreur : CNAME existe déjà ; ID de demande : a123456b-c78d-90e1-23f4-gh5i67890jkl*"

Si vous avez accès à la fois aux distributions source et cible, supprimez manuellement l'association CNAME de la distribution CloudFront existante. Associez ensuite le CNAME à la nouvelle distribution CloudFront.

Remarque : pour associer manuellement le CNAME, vous devrez peut-être attendre que le statut de l'ancienne distribution soit Déployé avant de continuer.

Si vous ne connaissez pas l’ID de distribution, utilisez l’API CloudFront ListConflictingAliases. Cela vous permet de trouver des informations partielles sur la distribution et l’ID de compte AWS pour l’alias CNAME en conflit. Utilisez ensuite l’API AssociateAlias pour déplacer votre CNAME de la distribution existante (distribution source) vers la nouvelle distribution (distribution cible).

Utilisez l’une des résolutions suivantes en fonction de votre scénario :

  • Pour les distributions source et cible qui se trouvent dans le même compte, consultez la section Utiliser l'API AssociateAlias pour déplacer votre CNAME.
  • Pour les distributions source et cible multicomptes, consultez la section Désactiver la distribution source avec le CNAME en conflit.
  • Si vous ne pouvez pas désactiver la distribution source en raison d'une interruption du trafic existant, consultez la section Utiliser un caractère générique pour déplacer le nom de domaine alternatif.
    Remarque : Vous ne pouvez pas utiliser de caractère générique pour déplacer un domaine apex (exemple.com). Pour déplacer un domaine apex lorsque les distributions source et cible se trouvent dans des comptes différents, consultez la section Contactez AWS Support pour déplacer un autre nom de domaine.

Résolution

Utilisez l’API AssociateAlias pour déplacer votre CNAME

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.

Pour déplacer votre CNAME, procédez comme suit :

  1. Dans la politique AWS Identity and Access Management (IAM) de l’utilisateur ou du rôle à l’origine de la demande d’API, ajoutez les autorisations suivantes au niveau des ressources :
    Remarque : Remplacez SourceAccCount par le numéro de compte de la distribution source. Remplacez SourceDistroid par l’ID de la distribution source. Remplacez TargetAccountID par le numéro de compte de la distribution cible. Remplacez par l'ID de distribution cible.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "CloudFrontCnameSwapSameAcc",
          "Effect": "Allow",
          "Action": [
            "cloudfront:GetDistribution",
            "cloudfront:ListConflictingAliases",
            "cloudfront:AssociateAlias",
            "cloudfront:UpdateDistribution"
          ],
          "Resource": [
            "arn:aws:cloudfront::SourceAcccount:distribution/SourceDistroID",
            "arn:aws:cloudfront::TargetAccount:distribution/TargetDistroID"
          ]
        }
      ]
    }

    Important : L’utilisateur ou le rôle IAM qui fait la demande doit disposer de ces autorisations au niveau des ressources à la fois dans la distribution source et dans la distribution cible.

  2. Identifiez la distribution à l'aide du CNAME en conflit. Si vous ne savez pas quelle distribution possède le CNAME en conflit, utilisez l’API ListConflictingAliases pour trouver cette distribution :
    Remarque : Remplacez YourDistributionID par l’ID de votre distribution et YourCNAME par l’alias CNAME en conflit.

    $ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME
  3. Pour vérifier la propriété du domaine, vous devez disposer d'un accès en lecture à YourDistributionID. Vous devez également disposer d'un certificat SSL/TLS associé à la distribution CloudFront qui sécurise le CNAME en conflit. Lorsque vous êtes prêt à vérifier la propriété, créez un enregistrement DNS TXT pour le CNAME qui correspond au nom canonique de la distribution cible. Votre enregistrement TXT doit inclure un trait de soulignement avant le CNAME, apex ou wildcard :

    _.example.com.         900   IN   TXT     "dexample123456.cloudfront.net"_cname.example.com.    900   IN   TXT     "dexample123456.cloudfront.net"
    _*.example.com.        900   IN   TXT     "dexample123456.cloudfront.net"
  4. Vérifiez que la distribution cible possède un certificat SSL/TLS valide.
    Remarque : Le nom du sujet ou le nom alternatif du sujet doit correspondre ou se chevaucher avec l'alias CNAME. Il est recommandé de disposer d’un certificat valide émis par AWS Certificate Manager ou par une autorité de certification fiable répertoriée dans la liste des certificats CA de Mozilla. Pour plus d'informations, consultez le programme de certificats CA de Mozilla (sur le site Web de Mozilla).

  5. Exécutez la requête d'API AssociateAlias à partir du compte propriétaire de la distribution cible :

    $ aws cloudfront associate-alias --target-distribution-id YourTargeDistributiontID --alias your_cname.example.com

Désactivez la distribution source avec le CNAME en conflit

Pour les distributions source et cible qui se trouvent dans des comptes différents, désactivez la distribution source associée au domaine en conflit. Puis, utilisez l'API AssociateAlias pour déplacer le CNAME.

Utilisez la commande associate-alias pour déplacer des domaines apex entre différents comptes :

  1. Ouvrez la console CloudFront.
  2. Dans le volet de navigation, sélectionnez Distributions.
  3. Sélectionnez la distribution source, puis Désactiver.
    Remarque : si vous ne savez pas quelle distribution possède le CNAME en conflit, utilisez l’API ListConflictingAliases pour trouver cette distribution. Remplacez YourDistributionID par l’ID de votre distribution et YourCName par le nom du CNAME en conflit :
    $ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

Remarque : L'API ListConflictingAliases nécessite les autorisations GetDistribution et ListConflictingAliases.

Après avoir désactivé la distribution source, suivez les étapes décrites dans la section Utiliser l’API AssociateAlias pour déplacer votre CNAME.

Si vous n’avez pas accès au compte qui contient la distribution source, ou si vous ne pouvez pas désactiver la distribution source, contactez AWS Support.

Utilisez un caractère générique pour déplacer le nom de domaine alternatif

Si vos distributions source et cible se trouvent dans des comptes différents mais que vous ne pouvez pas désactiver la distribution source, utilisez un caractère générique pour déplacer le CNAME. Vous devez avoir accès à la fois à la distribution source et à la distribution cible pour déplacer le CNAME.

Ce processus implique plusieurs mises à jour des distributions source et cible. Attendez que chaque distribution déploie complètement la dernière modification avant de passer à l'étape suivante.

Pour déplacer le nom de domaine alternatif, procédez comme suit :

  1. Mettez à jour la distribution cible pour ajouter un CNAME générique qui couvre le nom de domaine alternatif que vous souhaitez déplacer. Si votre domaine est www.example.com, ajoutez le nom de domaine alternatif générique *.example.com à la distribution cible.
    Remarque : vous devez disposer d'un certificat SSL/TLS sur la distribution cible qui sécurise le nom de domaine générique.

  2. Mettez à jour les paramètres DNS du CNAME pour qu'ils pointent vers le nom canonique de la distribution cible. Par exemple, si votre domaine est www.example.com, mettez à jour l’enregistrement DNS pour www.example.com afin d’acheminer le trafic vers le nom canonique de la distribution cible :

    www.example.com.         86400   IN   CNAME     "dexample123456.cloudfront.net"

    Remarque : Étant donné que le nom de domaine alternatif est toujours associé à la distribution source, celle-ci reçoit toujours les requêtes qui utilisent le nom de domaine alternatif. La distribution cible ne recevra pas les requêtes (coupure) tant que vous n'aurez pas supprimé le nom de domaine alternatif de la distribution source à l'étape 3.

  3. Mettez à jour la distribution source pour supprimer le nom de domaine alternatif.
    Remarque : à cette étape, le trafic en direct n'est pas interrompu. Comme le nom de domaine demandé correspond au domaine générique ajouté à la distribution cible, le trafic en direct utilise les paramètres de distribution cible.

  4. Pour ajouter le nom de domaine alternatif que vous souhaitez déplacer, mettez à jour la distribution cible.

  5. Pour valider l’enregistrement DNS pour le CNAME, utilisez dig ou un outil de requête DNS similaire :

    dig CNAME www.example.com +shortnslookup example.com
  6. (Facultatif) Pour supprimer le nom de domaine alternatif générique, mettez à jour la distribution cible.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois