Nessun target disponibile quando si tenta di impostare un target alias da Route 53 a S3


21

Sto cercando di configurare un semplice sito Web basato su Amazon AWS S3, come spiegato qui .

Ho installato il bucket S3 (simples3websitetest.com), gli ho dato le (giuste) autorizzazioni giuste:

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

Ho caricato index.html, impostato l'accesso al sito Web ed è accessibile tramite http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html

Fin qui tutto bene, ora voglio configurare l'accesso Amazon Route53 ed è qui che mi sono bloccato.

Ho impostato una zona ospitata su un dominio di mia proprietà (resourcesbox.net), ho fatto clic su "Crea set di record" e sono arrivato al passaggio "Imposta alias", ma ottengo "Nessuna destinazione disponibile" sotto gli endpoint del sito Web S3 quando prova a impostare il target alias.

Cosa mi sono perso??


A partire da ottobre 2012 Amazon ha introdotto una funzione per gestire i reindirizzamenti (HTTP 301) per i bucket S3. Puoi leggere la mia risposta precedente qui. stackoverflow.com/a/24218895/1160780
Alberto Spelta,

Risposte:


33

L'alias del record A che crei deve essere uguale al nome del bucket, poiché l'hosting virtuale dei bucket in S3 richiede che l' Host:intestazione inviata dal browser corrisponda al nome del bucket. Non c'è davvero un altro modo pratico in cui si possa realizzare l'hosting virtuale dei bucket ... il bucket deve essere identificato da un meccanismo, e quel meccanismo sono le intestazioni http.

Per creare un alias in un bucket all'interno del dominio "example.com", il nome del bucket deve essere anche un nome host che è possibile dichiarare legalmente all'interno di quel dominio ... il record 53 della Route 53 "testbucket.example .com, "ad esempio, può essere modificato solo in un bucket chiamato" testbucket.example.com "... e nessun altro bucket.

Nella tua domanda, stai rompendo questo vincolo ... ma puoi solo creare un alias in un bucket chiamato "simples3websitetest.com" all'interno (e all'apice del) dominio "simples3websitetest.com".

Questo è di progettazione e non esattamente una limitazione di Route 53 né di S3. Ti stanno solo impedendo di fare qualcosa che non può funzionare. I server Web non sono a conoscenza di alcun alias o CNAME o di qualsiasi altra cosa eseguita nel DNS: ricevono solo il nome host originale a cui il browser crede stia provando a connettersi, nelle intestazioni http inviate dal browser ... e S3 lo utilizza informazioni per identificare il nome del bucket a cui si applica la richiesta ospitata virtuale.

Amazon S3 richiede che tu dia al tuo bucket lo stesso nome del tuo dominio. Questo in modo che Amazon S3 possa risolvere correttamente le intestazioni host inviate dai browser Web quando un utente richiede contenuti dal tuo sito Web. Pertanto, ti consigliamo di creare i bucket per il tuo sito Web in Amazon S3 prima di pagare per registrare il tuo nome di dominio.

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

Si noti, tuttavia, che questa limitazione si applica solo quando non si utilizza CloudFront davanti al bucket.

Con CloudFront, c'è maggiore flessibilità, perché l' Host:intestazione può essere riscritta (dallo stesso CloudFront) prima che la richiesta venga passata a S3. Configura "host di origine" nella tua distribuzione CloudFront come your-bucket.s3-website-xx-yyyy-n.amazonaws.comdove xx-yyyy-n è la regione AWS di S3 in cui è stato creato il bucket. Questo endpoint è mostrato nella console S3 per ogni bucket.


1
Questo era davvero il problema, ho creato un bucket chiamato resourcesbox.net e si è fatto vedere. Grazie! Domanda di follow-up rapido: cosa significa che se desidero avere bucket diversi per quel dominio, devo avere i sottodomini per soddisfare ogni bucket, giusto? Non c'è modo di aggirarlo?
Amir Zucker,

Non sono esattamente sicuro di cosa intendi con "Devo avere sottodomini". È necessario creare un record A in Route 53 con un nome host corrispondente a ogni bucket che si desidera utilizzare per ospitare un sito Web in S3, sì.
Michael - sqlbot,

1
@oberstet questa domanda riguarda i aliasrecord della Route 53 indirizzati a bucket S3 con l'hosting del sito Web abilitato, che causa la risoluzione del DNS nell'endpoint del sito Web, non nell'endpoint REST. Gli endpoint del sito Web non supportano affatto SSL ; fanno solo gli endpoint REST. Inoltre, tutti i certificati jolly supportano solo un massimo di uno * e possono apparire solo nel componente hostname più a sinistra, quindi non è in realtà una limitazione S3.
Michael - sqlbot,

1
@oberstet 6.4.3.1 Il client NON DOVREBBE tentare di abbinare un identificatore presentato in cui il carattere jolly comprende un'etichetta diversa dall'etichetta più a sinistra. Quindi, non esiste un carattere jolly a più livelli. Ad ogni modo, il tuo problema di boto dipende dall'opzione "formato di chiamata" apparentemente implementata in modo errato. È possibile accedere a ogni bucket tramite https con il nome del bucket come primo elemento del percorso nell'URL S3 per la regione corretta del bucket, ad es https://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key. Endpoint regionale errato = errore di reindirizzamento.
Michael - sqlbot,

1
@MartinLyne grazie. Ho aggiunto un riferimento alla documentazione S3, sul nome del bucket e sul nome di dominio che deve essere lo stesso, nonché menzionando la soluzione alternativa per un nome del bucket già utilizzato, utilizzando CloudFront. Nelle regioni us-east-1 e us-west-2, e possibilmente in altre, il costo dell'uso di CloudFront è trascurabile e può anche potenzialmente risparmiare un po ', dal momento che i download di CF sono più economici di $ 0,005 / GB sulla larghezza di banda rispetto a S3 diretti da qualche parte posizioni.
Michael - sqlbot,

0

Supponiamo di avere una zona ospitata abc.com. e crei un bucket abc.com (che non compare nell'elenco negli alias dei percorsi) - potresti pensare che sia il. dopo il nome - con il quale non puoi nominare i secchi

Prova anche questo. Perché la prima volta che ho creato il bucket con il nome corretto e ancora non ha funzionato. Credetemi, ho un disturbo ossessivo compulsivo, quindi non ho perso un punto intero o una virgola.

  1. Crea un'altra zona ospitata con lo stesso nome abc.com
  2. Ora vedrai 2 della stessa zona ospitata (abc.com. E abc.com.)
  3. Elimina quello nuovo
  4. Torna alla vecchia zona ospitata abc.com
  5. Potresti riuscire a vedere gli endpoint s3 in arrivo - questo potrebbe essere un problema in Route53

Questo ha funzionato per me provando quasi tutto - Alcuni suggerimenti che vedo sono di disconnettersi e accedere per una sorta di cache pulita - non sono sicuro

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.