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 (Canonical Name Record) 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 essayez d'ajouter est déjà associé à une autre distribution CloudFront, vous recevez un message d'erreur :

« 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 :**Si vous souhaitez 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 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 AWS différents, contactez AWS Support pour déplacer un autre nom de domaine.

Résolution

Utilisez l'API AssociateAlias pour déplacer votre CNAME

Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous que vous utilisez la version la plus récente de l'interface de ligne de commande AWS CLI.

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 :

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.

{
  "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"
      ]
    }
  ]
}

Remarque : Remplacez SourceAccCount par le numéro de compte AWS de la distribution source. Remplacez SourceDistroid par l’ID de la distribution source. Remplacez TargetAccountID par le numéro de compte AWS de la distribution cible. Remplacez TargetDistroidpar l'ID de 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'APIListConflictingAliases pour trouver cette distribution :

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

**Remarque :**Remplacez YourDistributionID par l'ID de votre distribution. Remplacez votre CNAME par l'alias CNAME en conflit.

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 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"
  1. Vérifiez que la distribution cible possède un certificat SSL valide.

Remarque : Le nom du sujet ou le nom alternatif du sujet doit correspondre ou se chevaucher avec l'alias CNAME donné. Il est recommandé de faire émettre un certificat valide par une autorité de certification approuvée répertoriée dans la liste des certificats des autorités de certification de Mozilla ou dans le gestionnaire de certificats AWS.

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

Si votre distribution source et votre distribution cible se trouvent dans des comptes AWS différents, désactivez d'abord la distribution source associée au domaine en conflit. Utilisez ensuite l'API AssociateAlias pour déplacer le CNAME.

Vous pouvez utiliser la commande associate-alias pour déplacer des domaines Apex entre différents comptes AWS

1.     Ouvrez la console CloudFront.

2.     Dans le volet de navigation, choisissez Distributions

3.     Sélectionnez la distribution source, puis choisissez Désactiver.

Si vous ne savez pas quelle distribution possède le CNAME en conflit, utilisez l'API ListConflictingAliasespour 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 AWS associé à 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 votre distribution source et votre distribution cible se trouvent dans des comptes différents mais que vous ne pouvez pas désactiver la distribution source, déplacez le CNAME. Pour ce faire, utilisez un caractère générique. Vous devez avoir accès à la fois à la distribution source et à la distribution cible pour ce processus.

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.

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 : Même après la mise à jour des paramètres DNS, la distribution source traite les demandes qui utilisent le nom de domaine alternatif. Cela est dû au fait que le nom de domaine alternatif est toujours associé à la distribution source.

  1. Mettez à jour la distribution source pour supprimer le nom de domaine alternatif.

**Remarque :**Au cours de 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.

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

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

dig CNAME www.example.com +short
nslookup example.com
  1. (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 un an