Keine Ziele verfügbar, wenn versucht wird, ein Alias-Ziel von Route 53 auf S3 festzulegen

21

Ich versuche, eine einfache Amazon AWS S3-basierte Website einzurichten, wie hier erläutert .

Ich habe den S3-Bucket eingerichtet (simples3websitetest.com) und ihm die (hoffentlich) richtigen Berechtigungen erteilt:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::simples3websitetest.com/*"
            ]
        }
    ]
}

Ich habe index.html hochgeladen und den Zugriff auf die Website eingerichtet. Der Zugriff erfolgt über http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html

So weit so gut, jetzt möchte ich den Zugriff auf Amazon Route53 einrichten und hier stecke ich fest.

Ich habe eine gehostete Zone auf einer Domäne eingerichtet, die ich besitze (resourcesbox.net), und auf "Datensatz erstellen" geklickt und bin zum Schritt "Alias ​​einrichten" gelangt. Auf den Endpunkten der S3-Website wird jedoch "Keine Ziele verfügbar" angezeigt, wenn ich Versuchen Sie, das Alias-Ziel festzulegen.

Was habe ich verpasst??

Amir Zucker
quelle
Ab Oktober 2012 hat Amazon eine Funktion zur Behandlung von Weiterleitungen (HTTP 301) für S3-Buckets eingeführt. Sie können meine vorherige Antwort hier lesen. stackoverflow.com/a/24218895/1160780
Alberto Spelta

Antworten:

33

Der von Ihnen erstellte A-Record-Alias ​​muss mit dem Namen des Buckets identisch sein, da für das virtuelle Hosting von Buckets in S3 erforderlich ist, dass der Host:vom Browser gesendete Header mit dem Bucket-Namen übereinstimmt. Es gibt nicht wirklich eine andere praktische Art und Weise, wie das virtuelle Hosting von Buckets durchgeführt werden könnte ... Der Bucket muss durch einen Mechanismus identifiziert werden, und dieser Mechanismus sind die http-Header.

Um einen Alias ​​für einen Bucket in der Domain "example.com" zu erstellen, muss der Bucket-Name auch ein Hostname sein, den Sie legal in dieser Domain deklarieren können ... der Route 53 A-Record "testbucket.example .com "kann zum Beispiel nur für einen Bucket mit dem Namen" testbucket.example.com "verwendet werden ... und für keinen anderen Bucket.

In Ihrer Frage brechen Sie diese Einschränkung ... Sie können jedoch nur einen Alias ​​für einen Bucket mit dem Namen "simples3websitetest.com" innerhalb (und am Scheitelpunkt) der Domain "simples3websitetest.com" erstellen.

Dies ist beabsichtigt und weder eine Einschränkung der Route 53 noch der S3. Sie hindern dich nur daran, etwas zu tun, das unmöglich funktionieren kann. Webserver wissen nichts über Aliasing, CNAMEs oder andere Aktionen im DNS - sie erhalten nur den ursprünglichen Hostnamen, zu dem der Browser eine Verbindung herstellen möchte, in den vom Browser gesendeten http-Headern ... und S3 verwendet diesen Informationen zum Identifizieren des Namens des Buckets, für den die virtuelle gehostete Anforderung gilt.

Amazon S3 erfordert, dass Sie Ihrem Bucket denselben Namen wie Ihrer Domain geben. Auf diese Weise kann Amazon S3 die von Webbrowsern gesendeten Hostheader ordnungsgemäß auflösen, wenn ein Benutzer Inhalte von Ihrer Website anfordert. Daher empfehlen wir, dass Sie Ihre Buckets für Ihre Website in Amazon S3 erstellen, bevor Sie für die Registrierung Ihres Domainnamens bezahlen.

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-bucket.html#bucket-requirements

Beachten Sie jedoch, dass diese Einschränkung nur gilt, wenn Sie CloudFront nicht vor Ihrem Bucket verwenden.

CloudFront bietet mehr Flexibilität, da der Host:Header (von CloudFront selbst) neu geschrieben werden kann, bevor die Anforderung an S3 weitergeleitet wird. Sie konfigurieren den "Ursprungshost" in Ihrer CloudFront-Distribution so, your-bucket.s3-website-xx-yyyy-n.amazonaws.comdass xx-yyyy-n die AWS-Region von S3 ist, in der Ihr Bucket erstellt wurde. Dieser Endpunkt wird in der S3-Konsole für jeden Bucket angezeigt.

Michael - sqlbot
quelle
1
Dies war in der Tat das Problem. Ich habe einen Eimer namens resourcesbox.net erstellt und er wurde angezeigt. Vielen Dank! Schnelle Anschlussfrage: Bedeutet dies, dass ich, wenn ich verschiedene Buckets für diese Domain haben möchte, Subdomains haben muss, die zu jedem Bucket passen? Daran führt kein Weg vorbei?
Amir Zucker
Ich bin mir nicht ganz sicher, was Sie unter "Ich muss Unterdomänen haben" verstehen. Sie müssen in Route 53 einen A-Datensatz mit einem Hostnamen erstellen, der mit jedem Bucket übereinstimmt, den Sie zum Hosten einer Website in S3 verwenden möchten, ja.
Michael - sqlbot
1
@oberstet Bei dieser Frage handelt es sich um Route 53- aliasDatensätze, die auf S3-Buckets mit aktiviertem Website-Hosting verweisen, wodurch der DNS auf den Website-Endpunkt und nicht auf den REST-Endpunkt aufgelöst wird. Die Website-Endpunkte unterstützen SSL überhaupt nicht . Dies tun nur die REST-Endpunkte. Außerdem unterstützen alle Wildcard-Zertifikate nur ein Maximum * und können nur in der Hostnamen-Komponente ganz links angezeigt werden, sodass dies keine echte S3-Einschränkung darstellt.
Michael - sqlbot
1
@oberstet 6.4.3.1 Der Client DARF NICHT versuchen, eine angegebene Kennung zu finden, bei der das Platzhalterzeichen eine andere als die ganz links stehende Bezeichnung enthält. Es gibt also keine mehrstufigen Platzhalter. Auf jeden Fall Ihr Boto Problem ist eine Frage der „Aufruf - Format“ Option offenbar falsch umgesetzt. Jeder Eimer können über https mit Bucket - Namen als erstes zugegriffen werden Pfadelement unter der S3 - URL für die Buckets richtige Region zB https://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key. Falscher regionaler Endpunkt = Umleitungsfehler.
Michael - sqlbot
1
@MartinLyne danke. Ich habe einen Verweis auf die S3-Dokumentation hinzugefügt, der besagt, dass Bucket-Name und Domain-Name identisch sein müssen, und die Problemumgehung für einen bereits verwendeten Bucket-Namen mithilfe von CloudFront erwähnt. In den Regionen USA-Ost-1 und USA-West-2 und möglicherweise in anderen Regionen sind die Kosten für die Verwendung von CloudFront vernachlässigbar und können möglicherweise sogar ein wenig gespart werden, da CF-Downloads in Bezug auf die Bandbreite 0,005 USD / GB billiger sind als S3 direkt am Rande Standorte.
Michael - sqlbot
0

Angenommen, Sie haben eine gehostete Zone abc.com. und Sie erstellen einen Bucket abc.com (der in der Liste der Routen-Aliase nicht aufgeführt ist) - Sie denken vielleicht, es ist der. nach dem Namen - mit dem man die Eimer nicht benennen kann

Versuchen Sie dies auch. Weil ich den Bucket zum ersten Mal mit dem richtigen Namen erstellt habe und immer noch nicht funktioniert habe. Glauben Sie mir, ich habe eine Zwangsstörung, also habe ich weder einen Punkt noch ein Komma verpasst.

  1. Erstellen Sie eine weitere gehostete Zone mit demselben Namen abc.com
  2. Sie sehen nun 2 derselben gehosteten Zone (abc.com. Und abc.com.)
  3. Löschen Sie die neue
  4. Gehen Sie zurück zur alten gehosteten Zone abc.com
  5. Möglicherweise werden die S3-Endpunkte angezeigt. Dies ist möglicherweise ein Problem in Route53

Dies funktionierte für mich, als ich fast alles ausprobierte. Einige Vorschläge, die ich sehe, lauten, dass ich mich abmelden und für eine Art Cache-Speicher anmelden soll, sind nicht sicher

Chathushka
quelle