Comment résoudre l'erreur CNAMEAlreadyExists lors de la configuration d'un alias CNAME pour ma distribution CloudFront ?

Dernière mise à jour : 18/08/2021

Je reçois l'erreur CNAMEAlreadyExists lors de la configuration d'un alias CNAME pour ma distribution Amazon CloudFront.

Brève description

Lorsque j'essaie d'ajouter un alias CNAME à ma distribution CloudFront, une erreur similaire à la suivante s'affiche :

One or more of the CNAMEs you provided are already associated with a different resource. (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*

Vous recevez cette erreur car vous ne pouvez pas utiliser le même alias CNAME pour plus d'une distribution CloudFront. L'erreur CNAMEAlreadyExists se produit lorsque l'alias CNAME que vous tentez d'ajouter est déjà associé à une autre distribution CloudFront.

Pour résoudre cette erreur, vous pouvez utiliser les API CloudFront AssociateAlias ou ListConflictingAliases pour localiser et déplacer votre CNAME.

En fonction du scénario, choisissez l'une des solutions suivantes :

  • Si vos distributions source et cible sont sur le même compte, suivez les étapes de la section Use the AssociateAlias API to move your CNAME.
  • Si vos distributions source et cible se trouvent sur des comptes différents, suivez les étapes de la section Use the ListConflictingAliases API to move your CNAME.

Solution

Utiliser l'API AssociateAlias pour déplacer votre CNAME

1.    (Obligatoire) Dans la politique AWS Identity and Access Management (IAM) pour vos distributions source et cible, ajoutez les autorisations de niveau ressource suivantes à l'utilisateur ou au rôle IAM qui effectue la demande d'API :

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

Important : l'utilisateur ou le rôle IAM qui effectue la demande doit disposer des autorisations de niveau ressource précédentes dans la politique IAM pour la distribution source et la distribution cible.

2.    Identifiez la distribution avec le CNAME conflictuel.

Si vous ne savez pas quelle distribution porte le CNAME conflictuel, utilisez l'API ListConflictingAliases pour la trouver. Par exemple :

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

Remarque : pour vérifier la propriété, vous devez avoir accès en lecture à YourDistributionID. Vous devez également disposer d'un certificat SSL associé à la distribution CloudFront qui sécurise le CNAME conflictuel.

3.    Vérifiez la propriété du domaine en créant un enregistrement TXT DNS pour le CNAME qui est résolu par le nom canonique de la distribution cible. Votre enregistrement TXT doit inclure un trait de soulignement avant le CNAME, l'apex ou le caractère générique. Par exemple :

_.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 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 disposer d'un certificat valide émis à partir d'une autorité de certification de confiance répertoriée dans la liste Mozilla Included CA Certificate List ou AWS Certificate Manager.

5.    Exécutez la demande d'API AssociateAlias à partir du même compte auquel appartiennent les distributions source et cible :

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

Utilisez l'API ListConflictingAliases pour déplacer votre CNAME

Important : la distribution source ne peut être déployée en votre nom par aucun service géré AWS, tel qu'un Amazon API Gateway optimisé pour les périphériques.

Vous devez définir l'état de distribution source sur Disabled (Désactivé). Pour désactiver votre distribution :

1.    Ouvrez la console CloudFront.

2.    Dans le panneau de navigation, sélectionnez Distributions.

3.    Sélectionnez votre distribution, puis choisissez Disable (Désactiver).

Si vous ne savez pas quelle distribution porte le CNAME conflictuel, utilisez l'API ListConflictingAliases pour la trouver. Par exemple :

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributiontID --alias YourCNAMEtoAdd

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

Remarque : pour vérifier la propriété, vous devez disposer d'un accès en lecture à YourDistributionID. Vous devez également disposer d'un certificat associé qui sécurise le CNAME conflictuel.

Ensuite, procédez comme suit :

1.    (Obligatoire) Dans la politique IAM de la distribution cible, ajoutez les autorisations de niveau ressource suivantes à l'utilisateur ou au rôle IAM qui effectue la demande d'API :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudFrontCnameSwapCrossAcc",
      "Effect": "Allow",
      "Action": [
        "cloudfront:AssociateAlias",
        "cloudfront:UpdateDistribution"
      ],
      "Resource": [
        "arn:aws:cloudfront::123456789:distribution/TargetDistroID"
      ]
    }
  ]
}

2.    Vérifiez la propriété du domaine en créant un enregistrement TXT DNS pour le CNAME qui est résolu par le nom canonique de la distribution cible. Votre enregistrement TXT doit inclure un trait de soulignement avant le CNAME ou l'apex. Par exemple :

_cname.example.com.   900   IN   TXT     "dexample123456.cloudfront.net"
_.example.com.        900   IN   TXT     "dexample123456.cloudfront.net

3.    Vérifiez que la distribution cible possède un certificat 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 disposer d'un certificat valide émis à partir d'une autorité de certification de confiance répertoriée dans la liste Mozilla Included CA Certificate List ou AWS Certificate Manager.

4.    Exécutez l'API ListConflictingAliases :

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?