Aucune cible disponible lors de la tentative de définition de la cible d'alias de la Route 53 à S3

21

J'essaie de configurer un simple site Web basé sur Amazon AWS S3, comme expliqué ici .

J'ai installé le compartiment S3 (simples3websitetest.com), je lui ai donné les autorisations (espérons-le):

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

J'ai téléchargé index.html, configuré l'accès au site Web et il est accessible via http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html

Jusqu'ici tout va bien, maintenant je veux configurer l'accès à Amazon Route53 et c'est là que je suis resté coincé.

J'ai configuré une zone hébergée sur un domaine que je possède (resourcesbox.net), et j'ai cliqué sur "créer un jeu d'enregistrements", et je suis passé à l'étape "configurer un alias", mais j'obtiens "Aucune cible disponible" sous les points de terminaison du site Web S3 lorsque je essayez de définir la cible d'alias.

Qu'est-ce que j'ai raté??

Amir Zucker
la source
À partir d'octobre 2012, Amazon a introduit une fonction pour gérer les redirections (HTTP 301) pour les compartiments S3. Vous pouvez lire ma réponse précédente ici. stackoverflow.com/a/24218895/1160780
Alberto Spelta

Réponses:

33

L'alias d'enregistrement A que vous créez doit être le même que le nom du compartiment, car l'hébergement virtuel des compartiments dans S3 nécessite que l'en- Host:tête envoyé par le navigateur corresponde au nom du compartiment. Il n'y a pas vraiment d'autre moyen pratique d'accueillir virtuellement des compartiments ... le compartiment doit être identifié par un mécanisme, et ce mécanisme est les en-têtes http.

Afin de créer un alias pour un compartiment à l'intérieur du domaine "example.com", le nom du compartiment devra également être un nom d'hôte que vous pouvez déclarer légalement dans ce domaine ... le Route 53 A-Record "testbucket.example .com, "par exemple, ne peut être aliasé que vers un compartiment appelé" testbucket.example.com "... et aucun autre compartiment.

Dans votre question, vous brisez cette contrainte ... mais vous ne pouvez créer un alias que pour un compartiment nommé "simples3websitetest.com" à l'intérieur (et au sommet de) le domaine "simples3websitetest.com".

C'est par conception, et pas exactement une limitation de Route 53 ni de S3. Ils vous empêchent seulement de faire quelque chose qui ne peut pas fonctionner. Les serveurs Web ne connaissent aucun alias ou CNAME ou toute autre opération effectuée dans le DNS - ils ne reçoivent que le nom d'hôte d'origine auquel le navigateur pense qu'il tente de se connecter, dans les en-têtes http envoyés par le navigateur ... et S3 l'utilise informations permettant d'identifier le nom du compartiment auquel s'applique la demande hébergée virtuelle.

Amazon S3 requiert que vous donniez à votre compartiment le même nom que votre domaine. Cela permet à Amazon S3 de résoudre correctement les en-têtes d'hôte envoyés par les navigateurs Web lorsqu'un utilisateur demande du contenu à partir de votre site Web. Par conséquent, nous vous recommandons de créer vos compartiments pour votre site Web dans Amazon S3 avant de payer pour enregistrer votre nom de domaine.

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

Notez cependant que cette restriction ne s'applique que lorsque vous n'utilisez pas CloudFront devant votre compartiment.

Avec CloudFront, il y a plus de flexibilité, car l'en- Host:tête peut être réécrit (par CloudFront lui-même) avant que la demande ne soit transmise à S3. Vous configurez «l'hôte d'origine» dans votre distribution CloudFront comme your-bucket.s3-website-xx-yyyy-n.amazonaws.comoù xx-yyyy-n est la région AWS de S3 où votre compartiment a été créé. Ce point de terminaison est affiché dans la console S3 pour chaque compartiment.

Michael - sqlbot
la source
1
C'était en effet le problème, j'ai créé un seau appelé resourcesbox.net et il est apparu. Merci! Question de suivi rapide: Qu'est-ce que cela signifie, c'est que si je veux avoir des compartiments différents pour ce domaine, je dois avoir des sous-domaines adaptés à chaque compartiment? Il n'y a aucun moyen de contourner cela?
Amir Zucker
Je ne sais pas exactement ce que vous entendez par «je dois avoir des sous-domaines». Vous devez créer un enregistrement A dans Route 53 avec un nom d'hôte correspondant à chaque compartiment que vous souhaitez utiliser pour héberger un site Web dans S3, oui.
Michael - sqlbot
1
@oberstet, cette question concerne les aliasenregistrements Route 53 pointant vers des compartiments S3 avec l'hébergement de site Web activé, ce qui entraîne la résolution du DNS vers le point de terminaison du site Web, pas le point de terminaison REST. Les points de terminaison du site Web ne prennent pas du tout en charge SSL ; seuls les points de terminaison REST le font. De plus, tous les certificats génériques ne prennent en charge qu'un maximum * et ils ne peuvent apparaître que dans le composant de nom d'hôte le plus à gauche, ce qui n'est pas vraiment une limitation S3.
Michael - sqlbot
1
@oberstet 6.4.3.1 Le client NE DEVRAIT PAS tenter de faire correspondre un identifiant présenté dans lequel le caractère générique comprend une étiquette autre que l'étiquette la plus à gauche. Donc, il n'y a rien de tel qu'un caractère générique à plusieurs niveaux. Quoi qu'il en soit, votre problème de boto est dû au fait que l'option "format d'appel" n'est apparemment pas correctement mise en œuvre. Chaque bucket est accessible via https avec le nom du bucket comme premier élément de chemin sous l'URL S3 pour la région correcte du bucket par exemple https://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key. Point de terminaison régional incorrect = erreur de redirection.
Michael - sqlbot
1
@MartinLyne merci. J'ai ajouté une référence à la documentation S3, à propos du nom de compartiment et du nom de domaine devant être identiques, ainsi que la mention de la solution de contournement pour un nom de compartiment déjà utilisé, à l'aide de CloudFront. Dans les régions us-east-1 et us-west-2, et peut-être dans d'autres, le coût d'utilisation de CloudFront est négligeable et peut même économiser un peu, car les téléchargements CF sont moins chers sur la bande passante que 0,005 $ / Go que S3 direct à un certain bord Emplacements.
Michael - sqlbot
0

Supposons que vous ayez une zone hébergée abc.com. et vous créez un compartiment abc.com (qui n'apparaît pas dans la liste dans les alias de routes) - vous pensez peut-être que c'est le. après le nom - avec lequel vous ne pouvez pas nommer les seaux

Essayez cela aussi. Parce que la première fois, j'ai créé le seau avec le nom correct et je n'ai toujours pas fonctionné. Croyez-moi, j'ai un trouble obsessionnel-compulsif, donc je n'ai pas raté un point ou une virgule.

  1. Créez une autre zone hébergée du même nom abc.com
  2. Vous verrez maintenant 2 de la même zone hébergée (abc.com. Et abc.com.)
  3. Supprimer le nouveau
  4. Retournez à l'ancienne zone hébergée abc.com
  5. Vous pourrez peut-être voir les points de terminaison s3 à venir - cela peut être un problème dans Route53

Cela a fonctionné pour moi en essayant presque tout - certaines suggestions que je vois est de se déconnecter et de se connecter pour une sorte de cache vide - pas sûr

Chathushka
la source