Wie behebe ich den Fehler „CNAMEAlreadyExists“, wenn ich einen CNAME-Alias für meine CloudFront-Distribution einrichte?

Lesedauer: 6 Minute
0

Wenn ich einen Canonical Name Record (CNAME)-Alias für meine Amazon CloudFront-Distribution einrichte, erhalte ich die Fehlermeldung „CNAMEAlreadyExists“.

Kurzbeschreibung

Du kannst denselben CNAME-Alias nicht für mehr als eine CloudFront-Distribution verwenden. Wenn der CNAME-Alias, den du hinzufügen möchtest, bereits mit einer anderen CloudFront-Distribution verknüpft ist, erhältst du eine Fehlermeldung:

„Einer oder mehrere der von dir angegebenen CNAMEs sind bereits mit einer anderen Ressource verknüpft. (Service: AmazonCloudFront; Statuscode: 409; Fehlercode: CNAMEAlreadyExists; Anforderungs-ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*“

Wenn du sowohl auf die Quell- als auch auf die Zieldistribution Zugriff hast, entferne die CNAME-Zuordnung manuell aus der vorhandenen CloudFront-Distribution. Ordne dann den CNAME der neuen CloudFront-Distribution zu.

Hinweis: Wenn du den CNAME manuell zuordnen möchtest, musst du möglicherweise warten, bis der Status der alten Distribution Eingesetzt lautet, bevor du fortfährst.

Wenn du die Distributions-ID nicht kennst, verwende die CloudFront-API ListConflictingAliases. Auf diese Weise kannst du Teilinformationen über die Verteilung und die Konto-ID für den widersprüchlichen CNAME-Alias finden. Verwende dann die AssociateAlias API, um deinen CNAME von der vorhandenen Distribution (Quelldistribution) in die neue Distribution (Zieldistribution) zu verschieben.

Verwende je nach Szenario eine der folgenden Lösungen:

  • Informationen zu Quell- und Zieldistributionen, die sich im selben Konto befinden, findest du im Abschnitt ** Verwende die AssociateAlias-API, um deinen CNAME-Abschnitt zu** verschieben.
  • Informationen zu kontoübergreifenden Quell- und Zieldistributionen findest du im Abschnitt Quelldistribution mit widersprüchlichem CNAME-Abschnitt deaktivieren.
  • Wenn du die Quelldistribution aufgrund von Ausfallzeiten im bestehenden Datenverkehr nicht deaktivieren kannst, lies den Abschnitt Verwenden eines Platzhalters, um den alternativen Domain-Namen zu verschieben.
    Hinweis: Du kannst keinen Platzhalter verwenden, um eine Apex-Domain (example.com) zu verschieben. Um eine Apex-Domain zu verschieben, wenn sich die Quell- und Zieldistribution in unterschiedlichen AWS-Konten befinden, wende dich an den AWS Support, um einen alternativen Domain-Namen zu verschieben.

Lösung

Verwende die AssociateAlias-API, um deinen CNAME zu verschieben

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Gehe wie folgt vor, um deinen CNAME zu verschieben:

  1. Füge in der AWS-Richtlinie für Identity and Access Management (IAM) des Benutzers oder der Rolle, die die API-Anfrage stellt, die folgenden Berechtigungen auf Ressourcenebene hinzu:
    Hinweis: Ersetze SourceAccount durch die AWS-Kontonummer der Quelldistribution. Ersetze SourceDistroID durch die ID der Quelldistribution. Ersetze TargetAccountID durch die Kontonummer der Zieldistribution. Ersetze sie durch die Zieldistributions-ID.

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

    Wichtig: Der IAM-Benutzer oder die IAM-Rolle, der die Anfrage stellt, muss über diese Berechtigungen auf Ressourcenebene sowohl in der Quellverteilung als auch in der Zielverteilung verfügen.

  2. Identifiziere die Distribution mit dem widersprüchlichen CNAME. Wenn du nicht weißt, welche Distribution den widersprüchlichen CNAME hat, verwende die ListConflictingAliases API, um diese Distribution zu finden.
    Hinweis: Ersetze YourDistributionID durch die ID deiner Distribution und YourCNAME durch den widersprüchlichen CNAME-Alias.

    $ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME
  3. Um die Inhaberschaft der Domain zu überprüfen, musst du Lesezugriff auf YourDistributionID haben. Du musst außerdem über ein SSL-/TLS-Zertifikat verfügen, das der CloudFront-Distribution zugeordnet ist und das den widersprüchlichen CNAME schützt. Wenn du bereit bist, die Inhaberschaft zu verifizieren, erstelle einen DNS-TXT-Datensatz für den CNAME, der in den kanonischen Namen der Zieldistribution aufgelöst wird. Dein TXT-Eintrag muss vor dem CNAME, Apex oder Wildcard einen Unterstrich enthalten:

    _.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. Stelle sicher, dass die Zieldistribution über ein gültiges SSL-/TLS-Zertifikat verfügt.
    Hinweis: Der Betreffname oder der alternative Name des Betreffs muss mit dem angegebenen CNAME-Alias übereinstimmen oder sich mit diesem überschneiden. Es hat sich bewährt, ein gültiges Zertifikat von einer vertrauenswürdigen CA ausstellen zu lassen, die in Mozillas CA-Zertifikatsliste oder im AWS Certificate Manager aufgeführt ist. Weitere Informationen findest du im CA-Zertifikatsprogramm von Mozilla (auf der Mozilla-Website).

  5. Führe die API-Anforderung AssociateAlias von dem Konto aus, dem die Zieldistribution gehört:

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

Deaktiviere die Quelldistribution mit dem widersprüchlichen CNAME

Schalte für Quell- und Zieldistributionen, die sich in unterschiedlichen Konten befinden, die Quelldistribution aus, die der widersprüchlichen Domain zugeordnet ist. Verwende dann die API AssociateAlias, um den CNAME zu verschieben.

Du kannst den Befehl associate-alias verwenden, um Apex-Domains zwischen verschiedenen Konten zu verschieben:

  1. Öffne die CloudFront-Konsole.
  2. Wähle im Navigationsbereich Distributionen.
  3. Wähle die Quelldistribution aus und wähle dann Deaktivieren.
    **Hinweis:**Wenn du nicht weißt, welche Distribution den widersprüchlichen CNAME hat, verwende die ListConflictingAliases API, um diese Distribution zu finden. Ersetze YourDistributionID durch die ID deiner Distribution und YourCNAME durch den Namen des widersprüchlichen CNAME:
    $ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

Hinweis: Die ListConflictingAliases API erfordert die Berechtigungen GetDistribution und ListConflictingAliases.

Nachdem du die Quelldistribution deaktiviert hast, befolge die Schritte im Abschnitt Verwendung der AssociateAlias-API, um deinen CNAME-Code zu verschieben.

Wenn du keinen Zugriff auf das Konto mit der Quelldistribution hast oder wenn du die Quelldistribution nicht deaktivieren kannst, wende dich an den AWS Support.

Verwendung eines Platzhalters, um den alternativen Domain-Namen zu verschieben

Wenn sich deine Quelldistribution und Zieldistribution in unterschiedlichen Konten befinden, du die Quelldistribution jedoch nicht deaktivieren kannst, verschiebe den CNAME mithilfe eines Platzhalters. Um CNAME zu verschieben, musst du sowohl auf die Quelldistribution als auch auf die Zieldistribution zugreifen können.

Dieser Prozess beinhaltet mehrere Updates sowohl für die Quell- als auch für die Zieldistribution. Warte, bis jede Distribution die neueste Änderung vollständig implementiert hat, bevor du mit dem nächsten Schritt fortfährst.

Gehe wie folgt vor, um den alternativen Domain-Namen zu verschieben:

  1. Aktualisiere die Zieldistribution, um einen Platzhalter-CNAME hinzuzufügen, der den alternativen Domain-Namen abdeckt, den du verschieben möchtest. Wenn deine Domain www.example.com ist, füge der Zieldistribution den alternativen Platzhalter-Domain-Namen *.example.com hinzu.
    Hinweis: Du musst über ein SSL/TLS-Zertifikat auf der Zieldistribution verfügen, das den Wildcard-Domain-Namen sichert

  2. Aktualisiere die DNS-Einstellungen für den CNAME so, dass sie auf den kanonischen Namen der Zieldistribution verweisen. Wenn deine Domain beispielsweise www.example.com lautet, aktualisiere den DNS-Eintrag für www.example.com, um den Traffic an den kanonischen Namen der Zieldistribution weiterzuleiten:

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

    Hinweis: Da der alternative Domain-Name immer noch mit der Quelldistribution verknüpft ist, erhält die Quelldistribution immer noch die Anforderungen, die den alternativen Domain-Namen verwenden. Die Zieldistribution erhält die Anforderungen (cut-over) erst, wenn du in Schritt 3 den alternativen Domain-Namen aus der Quelldistribution entfernst.

  3. Aktualisiere die Quelldistribution, um den alternativen Domain-Namen zu entfernen.
    Hinweis: Während dieses Schritts wird der Live-Verkehr nicht unterbrochen. Da der angeforderte Domain-Name mit der Platzhalter-Domain übereinstimmt, die der Zielverteilung hinzugefügt wurde, verwendet Live-Traffic die Einstellungen für die Zielverteilung.

  4. Um den alternativen Domain-Namen hinzuzufügen, den du verschieben möchtest, aktualisiere die Zieldistribution.

  5. Verwende dig oder ein ähnliches DNS-Abfragetool, um den DNS-Eintrag für den CNAME zu überprüfen:

    dig CNAME www.example.com +shortnslookup example.com
  6. (Optional) Um den alternativen Domain-Namen mit Platzhaltern zu entfernen, aktualisiere die Zieldistribution.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten