Wie behebe ich den CNameAlreadyExists-Fehler, 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

Sie können denselben CNAME-Alias nicht für mehr als eine CloudFront-Distribution verwenden. Wenn der CNAME-Alias, den Sie hinzufügen möchten, bereits mit einer anderen CloudFront-Distribution verknüpft ist, erhalten Sie eine Fehlermeldung:

„Einer oder mehrere der von Ihnen angegebenen CNAMes sind bereits mit einer anderen Ressource verknüpft. (Service: AmazonCloudFront; Statuscode: 409; Fehlercode: CName ist bereits vorhanden; Anforderungs-ID: a123456b-c78d-90e1-23f4-gh5i67890jkl\ *"

Wenn Sie sowohl auf die Quell- als auch auf die Zieldistribution Zugriff haben, entfernen Sie die CNAME-Zuordnung manuell aus der vorhandenen CloudFront-Distribution. Ordnen Sie dann den CNAME der neuen CloudFront-Distribution zu.

**Hinweis:**Wenn Sie den CNAME manuell zuordnen möchten, müssen Sie möglicherweise warten, bis der Status der alten Distribution Deployed lautet, bevor Sie fortfahren.

Wenn Sie die Verteilungs-ID nicht kennen, verwenden Sie die ListConflictingAliases CloudFront-API. Auf diese Weise können Sie Teilinformationen über die Verteilung und die Konto-ID für den widersprüchlichen CNAME-Alias finden. Verwenden Sie dann die AssociateAlias API, um Ihren CNAME von der vorhandenen Distribution (Quelldistribution) in die neue Distribution (Zieldistribution) zu verschieben. Verwenden Sie je nach Szenario eine der folgenden Lösungen:

  • Informationen zu Quell- und Zieldistributionen, die sich im selben Konto befinden, finden Sie im Abschnitt ** Verwenden Sie die AssociateAlias-API, um Ihren CNAME-Abschnitt zu** verschieben.
  • Informationen zu kontoübergreifenden Quell- und Zieldistributionen finden Sie im Abschnitt Quelldistribution mit widersprüchlichem CNAME-Abschnitt deaktivieren.
  • Wenn Sie die Quelldistribution aufgrund von Ausfallzeiten im bestehenden Datenverkehr nicht deaktivieren können, lesen Sie den Abschnitt ** Verwenden eines Platzhalters, um den alternativen Domainnamen zu verschieben**.
    **Hinweis:**Sie können 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, wenden Sie sich an den AWS-Support, um einen alternativen Domainnamen zu verschieben.

Lösung

Verwenden Sie die AssociateAlias-API, um Ihren CNAME zu verschieben

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

1.    Fügen Sie 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:

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.

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

**Hinweis:Ersetzen Sie ** sourceAccCount durch die AWS-Kontonummer der Quelldistribution. Ersetzen Sie SourceDistroid durch die ID der Quelldistribution. Ersetzen Sie TargetAccountID durch die AWS-Kontonummer der Zieldistribution. Ersetzen Sie TargetDistroID durch die ID der Zieldistribution.

2.    Identifizieren Sie die Distribution mit dem widersprüchlichen CNAME. Wenn Sie nicht wissen, welche Distribution den widersprüchlichen CNAME hat, verwenden Sie die ListConflictingAliases API, um diese Distribution zu finden:

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

**Hinweis:**Ersetzen Sie **YourDistributionID ** durch die ID Ihrer Distribution. Ersetzen **Sie YourCName ** durch den widersprüchlichen CNAME-Alias.

3.    Um die Inhaberschaft der Domain zu überprüfen, müssen Sie Lesezugriff auf YourDistributionID. Sie müssen außerdem über ein SSL-Zertifikat verfügen, das der CloudFront-Distribution zugeordnet ist und das den widersprüchlichen CNAME schützt.

Wenn Sie bereit sind, die Inhaberschaft zu verifizieren, erstellen Sie einen DNS-TXT-Eintrag für den CNAME, der in den kanonischen Namen der Zieldistribution aufgelöst wird. Ihr 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.    Stellen Sie sicher, dass die Zieldistribution über ein gültiges SSL-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 ist eine bewährte Methode, ein gültiges Zertifikat von einer vertrauenswürdigen CA ausstellen zu lassen, die in Mozillas CA-Zertifikatsliste oder im AWS Certificate Manageraufgeführt ist.

5.    Führen Sie die AssociateAlias API-Anfrage von dem Konto aus, dem die Zieldistribution gehört:

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

Deaktivieren Sie die Quelldistribution mit dem widersprüchlichen CNAME

Wenn sich Ihre Quellverteilung und Zielverteilung in unterschiedlichen AWS-Konten befinden, deaktivieren Sie zunächst die Quellverteilung, die mit der widersprüchlichen Domain verknüpft ist. Verwenden Sie dann die AssociateAlias API, um den CNAME zu verschieben.

Sie können den Befehl associate-alias verwenden, um Apex-Domains zwischen verschiedenen AWS-Konten zu verschieben

1.    Öffnen Sie die CloudFront-Konsole.

2.    Wählen Sie im Navigationsbereich **Distributionen **

3.    Wählen Sie die Quelldistribution aus und wählen Sie dann ** Deaktivieren**.

Wenn Sie nicht wissen, welche Distribution den widersprüchlichen CNAME hat, verwenden Sie die ListConflictingAliases API, um diese Distribution zu finden. Ersetzen Sie YourDistributionID durch die ID Ihrer 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 Sie die Quelldistribution deaktiviert haben, folgen Sie den Schritten im Abschnitt ** Verwenden Sie die AssociateAlias-API, um Ihren CNAME-Code zu verschieben** .

Wenn Sie keinen Zugriff auf das AWS-Konto mit der Quelldistribution haben oder wenn Sie die Quelldistribution nicht deaktivieren können, wenden Sie sich an den AWS-Support.

Verwenden Sie einen Platzhalter, um den alternativen Domainnamen zu verschieben

Wenn sich Ihre Quelldistribution und Zieldistribution in unterschiedlichen Konten befinden, Sie die Quelldistribution jedoch nicht deaktivieren können, verschieben Sie den CNAME. Verwenden Sie dazu einen Platzhalter. Für diesen Prozess müssen Sie 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. Warten Sie, bis jede Distribution die neueste Änderung vollständig implementiert hat, bevor Sie mit dem nächsten Schritt fortfahren.

1.    Aktualisieren Sie die Zieldistribution, um einen Platzhalter-CNAME hinzuzufügen, der den alternativen Domainnamen abdeckt, den Sie verschieben möchten. Wenn Ihre Domain www.example.com ist, fügen Sie der Zieldistribution den alternativen Platzhalter-Domainnamen\ *.example.com hinzu.

**Hinweis:**Sie müssen über ein SSL/TLS-Zertifikat auf der Zieldistribution verfügen, das den Wildcard-Domainnamen sichert

2.    Aktualisieren Sie die DNS-Einstellungen für den CNAME so, dass sie auf den kanonischen Namen der Zieldistribution verweisen. Wenn Ihre Domain beispielsweise www.example.com lautet, aktualisieren Sie 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: Selbst nachdem Sie die DNS-Einstellungen aktualisiert haben, verarbeitet die Quellverteilung Anfragen, die den alternativen Domainnamen verwenden. Dies liegt daran, dass der alternative Domainname immer noch mit der Quelldistribution verknüpft ist.

3.    Aktualisieren Sie die Quelldistribution, um den alternativen Domainnamen zu entfernen.

**Hinweis:**Während dieses Schritts wird der Live-Verkehr nicht unterbrochen. Da der angeforderte Domainname mit der Wildcard-Domain übereinstimmt, die der Zielverteilung hinzugefügt wurde, verwendet Live-Traffic die Einstellungen für die Zielverteilung.

4.    Um den alternativen Domainnamen hinzuzufügen, den Sie verschieben möchten, aktualisieren Sie die Zieldistribution.

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

dig CNAME www.example.com +short
nslookup example.com

6.    (Optional) Um den alternativen Domainnamen mit Platzhaltern zu entfernen, aktualisieren Sie die Zieldistribution.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr