Нет доступных целей при попытке установить цель псевдонима от маршрута 53 до S3

21

Я пытаюсь настроить простой веб-сайт на основе Amazon AWS S3, как описано здесь .

Я настроил S3 bucket (simples3websitetest.com), дал ему (надеюсь) правильные разрешения:

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

Я загрузил index.html, настроил доступ к веб-сайту, и он доступен через http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html

Пока все хорошо, теперь я хочу настроить доступ к Amazon Route53, и вот тут я застрял.

Я установил размещенную зону на домене, который мне принадлежит (resourcesbox.net), и нажал «создать набор записей», и перешел к шагу «Настройка псевдонима», но я получаю «Нет доступных целей» под конечными точками веб-сайта S3, когда я попробуйте установить цель псевдонима.

Что я пропустил??

Амир Цукер
источник
Начиная с октября 2012 года Amazon представила функцию обработки перенаправлений (HTTP 301) для сегментов S3. Вы можете прочитать мой предыдущий ответ здесь. stackoverflow.com/a/24218895/1160780
Альберто Спелта

Ответы:

33

Псевдоним A-записи, который вы создаете, должен совпадать с именем сегмента, поскольку виртуальный хостинг сегментов в S3 требует, чтобы Host:заголовок, отправляемый браузером, совпадал с именем блока . На самом деле не существует другого практического способа, с помощью которого можно было бы реализовать виртуальный хостинг сегментов ... сегмент должен идентифицироваться каким-либо механизмом, и этот механизм является заголовками http.

Чтобы создать псевдоним для корзины внутри домена «example.com», имя корзины также должно быть именем хоста, которое вы можете юридически объявить в этом домене ... A-запись маршрута 53 "testbucket.example .com», например, может только быть совмещенным в ведро под названием„testbucket.example.com“... и нет другого ведра.

В вашем вопросе вы нарушаете это ограничение ... но вы можете создать псевдоним только для корзины с именем "simples3websitetest.com" внутри (и на вершине) домена "simples3websitetest.com".

Это сделано по замыслу и не является ограничением ни для маршрута 53, ни для S3. Они только мешают вам делать то, что не может работать. Веб-серверы не знают ни о псевдонимах, ни о CNAME, ни о каких-либо других действиях в DNS - они получают только оригинальное имя хоста, к которому браузер считает, что он пытается подключиться, в заголовках http, отправленных браузером ... и S3 использует это информация для определения имени сегмента, к которому применяется виртуальный размещенный запрос.

Amazon S3 требует, чтобы вы дали вашему корзине то же имя, что и ваш домен. Это сделано для того, чтобы Amazon S3 мог правильно разрешать заголовки хостов, отправляемые веб-браузерами, когда пользователь запрашивает контент с вашего сайта. Поэтому мы рекомендуем вам создать свои сегменты для своего сайта в Amazon S3, прежде чем платить за регистрацию своего доменного имени.

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

Обратите внимание, однако, что это ограничение применяется только тогда, когда вы не используете CloudFront перед вашей корзиной.

Облако CloudFront обеспечивает большую гибкость, поскольку Host:заголовок может быть переписан (самим CloudFront) до того, как запрос будет передан в S3. Вы настраиваете «исходный хост» в своем дистрибутиве CloudFront, your-bucket.s3-website-xx-yyyy-n.amazonaws.comгде xx-yyyy-n - это область AWS S3, в которой было создано ваше ведро. Эта конечная точка отображается в консоли S3 для каждого сегмента.

Майкл - sqlbot
источник
1
Это была действительно проблема, я создал корзину под названием resourcesbox.net, и она появилась. Спасибо! Быстрый вопрос: что это означает, что если я хочу иметь разные сегменты для этого домена, у меня должны быть субдомены, подходящие для каждого сегмента? Там нет пути вокруг этого?
Амир Цукер
Я не совсем уверен, что вы подразумеваете под "я должен иметь поддоменов". Вам необходимо создать запись A на маршруте 53 с именем хоста, соответствующим каждому сегменту, который вы хотите использовать для размещения веб-сайта в S3, да.
Майкл - sqlbot
1
@oberstet этот вопрос касается aliasзаписей маршрута 53, указывающих на сегменты S3 с включенным хостингом веб-сайта, что заставляет DNS разрешать конечную точку веб-сайта, а не конечную точку REST. Конечные точки веб-сайта вообще не поддерживают SSL ; делают только конечные точки REST. Кроме того, все сертификаты с подстановочными знаками поддерживают только один сертификат * и могут отображаться только в крайнем левом компоненте имени хоста, так что на самом деле это не ограничение S3.
Майкл - sqlbot
1
@oberstet 6.4.3.1 Клиент НЕ ДОЛЖЕН пытаться сопоставить представленный идентификатор, в котором подстановочный знак содержит метку, отличную от крайней левой метки. Таким образом, не существует такого понятия, как многоуровневый шаблон. Во всяком случае, ваш вопрос бото является вопросом опции «вызова в формате» быть по- видимому , реализуется неправильно. К каждому сегменту можно получить доступ через https с именем блока в качестве первого элемента пути под URL-адресом S3 для правильной области блока, например https://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key. Неправильная региональная конечная точка = ошибка перенаправления.
Майкл - sqlbot
1
@MartinLyne спасибо. Я добавил ссылку на документацию S3 о том, что имя сегмента и имя домена должны совпадать, а также упомянул обходной путь для уже принятого имени сегмента, используя CloudFront. В регионах us-east-1 и us-west-2 и, возможно, в других странах стоимость использования CloudFront незначительна и потенциально может даже немного сэкономить, поскольку загрузка CF на полосу пропускания на 0,005 долл. США / ГБ дешевле, чем S3 direct в некоторых краях. местах.
Майкл - sqlbot
0

Предположим, у вас есть размещенная зона abc.com. и вы создаете корзину abc.com (которая не отображается в списке псевдонимов маршрутов) - вы можете подумать, что это. после имени - который вы не можете назвать ведрами с

Попробуйте это тоже. Потому что в первый раз я создал ведро с правильным именем и до сих пор не работает. Поверьте мне, у меня ОКР, поэтому я не пропустил точку с запятой или запятую.

  1. Создайте еще одну размещенную зону с тем же именем abc.com.
  2. Теперь вы увидите 2 из той же размещенной зоны (abc.com. И abc.com.)
  3. Удалить новый
  4. Вернуться к старой размещенной зоне abc.com
  5. Вы можете увидеть появление конечных точек s3 - это может быть проблемой в Route53

Это помогло мне опробовать почти все - некоторые предложения, которые я вижу, - это выйти из системы и войти в систему для какого-то кеша, но не уверен

Chathushka
источник