Skonfiguruj przekierowanie adresów URL oparte na DNS w Amazon Route53 [zamknięte]

140

Próbuję skonfigurować przekazywanie w Amazon Route53. Moja ostatnia usługa DNS (Nettica) umożliwiła mi kierowanie żądań do „aws.example.com” na „https://myaccount.signin.aws.amazon.com/console/”.

Czy ta funkcja jest obsługiwana przez Route53?

Jak Nettica to osiąga? Czy wstawia specjalne rekordy A, CNAME, PTR lub TXT?

Saurav
źródło
Tworzenie dystrybucji Cloudfront z adresem URL jako źródłem również działa. Po prostu wskaż domenę do dystrybucji Cloudfront z Route53 i upewnij się, że poprawnie skonfigurowano certyfikaty TLS.
Deiwin

Odpowiedzi:

325

Miałem dokładnie ten sam problem, który opisał Saurav, ale naprawdę potrzebowałem rozwiązania, które nie wymagałoby niczego innego niż Route 53 i S3. Stworzyłem poradnik dla mojego bloga, w którym szczegółowo opisałem, co zrobiłem.

Oto co wymyśliłem.


Cel

Korzystając wyłącznie z narzędzi dostępnych w Amazon S3 i Amazon Route 53, utwórz przekierowanie adresu URL, które automatycznie przekierowuje adres http://url-redirect-example.vivekmchawla.com na stronę logowania konsoli AWS z aliasem „Moje konto”, znajdującą się pod adresem https : //myaccount.signin.aws.amazon.com/console/ .

Ten przewodnik nauczy Cię konfigurowania przekazywania adresów URL na dowolny adres URL, nie tylko na Amazon. Dowiesz się, jak skonfigurować przekierowanie do określonych folderów (takich jak „/ console” w moim przykładzie) i jak zmienić protokół przekierowania z HTTP na HTTPS (lub odwrotnie).


Krok pierwszy: utwórz wiadro S3

Otwórz konsolę zarządzania S3 i kliknij „Utwórz zasobnik”

Otwórz konsolę zarządzania S3 i kliknij „Utwórz zasobnik”.


Krok drugi: nazwij swoje wiadro S3

Nazwij swoje wiadro S3

  1. Wybierz nazwę segmentu. Ten krok jest naprawdę ważny! Musisz nazwać zasobnik DOKŁADNIE taką samą, jak adres URL, który chcesz skonfigurować do przekazywania. W tym przewodniku użyję nazwy „url-redirect-example.vivekmchawla.com”.

  2. Wybierz region, który najbardziej Ci odpowiada. Jeśli nie wiesz, zachowaj wartość domyślną.

  3. Nie martw się o konfigurowanie logowania. Gdy będziesz gotowy, po prostu kliknij przycisk „Utwórz”.


Krok 3: Włącz hosting statycznej witryny i określ reguły routingu

Włącz hosting statycznej witryny internetowej i określ reguły routingu

  1. W oknie właściwości otwórz ustawienia „Hostingu statycznej witryny internetowej”.
  2. Wybierz opcję „Włącz hosting witryn internetowych”.
  3. Wprowadź wartość dla „Dokumentu indeksu”. Ten obiekt (dokument) nigdy nie będzie obsługiwany przez S3 i nigdy nie musisz go przesyłać. Po prostu użyj dowolnej nazwy.
  4. Otwórz ustawienia „Edytuj reguły przekierowania”.
  5. Wklej w całości następujący fragment kodu XML.

    <RoutingRules>
      <RoutingRule>
        <Redirect>
          <Protocol>https</Protocol>
          <HostName>myaccount.signin.aws.amazon.com</HostName>
          <ReplaceKeyPrefixWith>console/</ReplaceKeyPrefixWith>
          <HttpRedirectCode>301</HttpRedirectCode>
        </Redirect>
      </RoutingRule>
    </RoutingRules>
    

Jeśli jesteś ciekawy, co robi powyższy XML, odwiedź dokumentację AWM dla „Składnia określania reguł routingu” . Dodatkową techniką (tutaj nie omówioną) jest na przykład przekierowanie na określone strony na hoście docelowym http://redirect-destination.com/console/special-page.html. Przeczytaj o <ReplaceKeyWith>elemencie, jeśli potrzebujesz tej funkcjonalności.


Krok 4: zanotuj „Punkt końcowy” zasobnika przekierowań

Zanotuj punkt końcowy zasobnika przekierowań

Zanotuj „punkt końcowy” hostowania witryny statycznej, który Amazon automatycznie utworzył dla tego zasobnika. Będziesz tego potrzebować później, więc zaznacz cały adres URL, a następnie skopiuj go i wklej do notatnika.

UWAGA! W tym momencie możesz kliknąć ten link, aby sprawdzić, czy Twoje reguły przekierowania zostały wprowadzone poprawnie, ale bądź ostrożny! Dlatego...

Załóżmy, że wpisałeś nieprawidłową wartość w <Hostname>tagach w zasadach przekierowania. Może przypadkowo wpisałeś myaccount.amazon.comzamiast myaccount.signin.aws.amazon.com. Jeśli klikniesz link, aby przetestować adres URL punktu końcowego, AWS z radością przekieruje Twoją przeglądarkę na niewłaściwy adres!

Po zauważeniu błędu prawdopodobnie dokonasz edycji <Hostname>w swoich regułach przekierowania, aby naprawić błąd. Niestety, gdy spróbujesz ponownie kliknąć link, najprawdopodobniej zostaniesz przekierowany z powrotem na zły adres! Nawet jeśli poprawiłeś <Hostname>wpis, Twoja przeglądarka buforuje poprzedni (nieprawidłowy!) Wpis. Dzieje się tak, ponieważ używamy przekierowania HTTP 301 (stałego), które przeglądarki, takie jak Chrome i Firefox, będą domyślnie buforować.

Jeśli skopiujesz i wkleisz adres URL punktu końcowego do innej przeglądarki (lub wyczyścisz pamięć podręczną w bieżącej), otrzymasz kolejną szansę, aby sprawdzić, czy zaktualizowany <Hostname>wpis jest ostatecznie prawidłowy.

Aby być bezpiecznym, jeśli chcesz przetestować adres URL punktu końcowego i reguły przekierowania, otwórz sesję przeglądania prywatnego, np. „Tryb incognito” w Chrome. Skopiuj, wklej i przetestuj adres URL punktu końcowego w trybie incognito, a wszystko, co jest zapisane w pamięci podręcznej, zniknie po zamknięciu sesji.


Krok 5: Otwórz konsolę zarządzania Route53 i przejdź do zestawów rekordów dla swojej strefy hostowanej (nazwa domeny)

Otwórz konsolę zarządzania Route 53, aby dodać zestawy rekordów do strefy hostowanej

  1. Wybierz strefę hostowaną (nazwę domeny), której użyłeś podczas tworzenia swojego zasobnika. Ponieważ nazwałem swój zasobnik „url-redirect-example.vivekmchawla.com”, mam zamiar wybrać strefę hostowaną vivekmchawla.com.
  2. Kliknij przycisk „Przejdź do zestawów nagrań”.

Krok 6: Kliknij przycisk „Utwórz zestaw rekordów”

Kliknij przycisk Utwórz zestaw rekordów

Kliknięcie „Utwórz zestaw rekordów” otworzy okno Utwórz zestaw rekordów po prawej stronie konsoli zarządzania Route53.


Krok 7: Utwórz zestaw rekordów CNAME

Utwórz zestaw rekordów CNAME

  1. W polu Nazwa wprowadź część adresu URL zawierającą nazwę hosta, której użyłeś podczas nadawania nazwy zasobnikowi S3. „Część adresu URL zawierająca nazwę hosta” to wszystko na lewo od nazwy Twojej strefy hostowanej. Nazwałem mój zasobnik S3 „url-redirect-example.vivekmchawla.com”, a moja strefa hostowana to „vivekmchawla.com”, więc część nazwy hosta, którą muszę wpisać, to „url-redirect-example”.

  2. Wybierz „CNAME - nazwa kanoniczna” jako typ tego zestawu rekordów.

  3. Jako wartość wklej adres URL punktu końcowego zasobnika S3, który utworzyliśmy w kroku 3.

  4. Kliknij przycisk „Utwórz zestaw rekordów”. Zakładając, że nie ma błędów, będziesz mógł teraz zobaczyć nowy rekord CNAME na liście zestawów rekordów strefy hostowanej.


Krok 8: Przetestuj nowe przekierowanie adresu URL

Otwórz nową kartę przeglądarki i wpisz adres URL, który właśnie skonfigurowaliśmy. Dla mnie to http://url-redirect-example.vivekmchawla.com . Jeśli wszystko działało poprawnie, powinieneś zostać wysłany bezpośrednio na stronę logowania AWS.

Ponieważ użyliśmy myaccount.signin.aws.amazon.comaliasu jako docelowego adresu URL naszego przekierowania, Amazon dokładnie wie, do którego konta próbujemy uzyskać dostęp, i prowadzi nas bezpośrednio tam. Może to być bardzo przydatne, jeśli chcesz podać pracownikom lub kontrahentom krótki, przejrzysty link do logowania do AWS.

Gotowe!  Przekierowanie adresu URL powinno prowadzić do strony logowania AWS.


Wnioski

Osobiście uwielbiam różne usługi AWS, ale jeśli zdecydujesz się przenieść zarządzanie DNS do Amazon Route 53, brak łatwego przekazywania adresów URL może być frustrujący. Mam nadzieję, że ten przewodnik pomógł nieco ułatwić konfigurowanie przekazywania adresów URL dla stref hostowanych.

Jeśli chcesz dowiedzieć się więcej, zajrzyj na następujące strony w witrynie dokumentacji AWS.

Twoje zdrowie!

Vivek M. Chawla
źródło
15
+1 za to całkowicie inteligentne rozwiązanie - dziękuję bardzo za poświęcenie czasu na skompilowanie tak epickiego przewodnika krok po kroku, zaktualizowałem swoją odpowiedź, aby odpowiednio skierować przyszłych czytelników do Twojej!
Steffen Opel
23
Uwaga: Dla tych, którzy chcą przekierować domenę główną: example.org -> example.com - zrób wszystko to samo, z wyjątkiem używania rekordu z włączoną opcją „Alias: Yes”. Następnie wybierz łyżkę jako cel.
JaredBroad
10
Świetne rozwiązanie. Ale napotkałem problem przy używaniu https jako oryginalnego adresu URL. Jeśli zasobnikiem, który przekierowuję, jest dev.example.com, przekierowanie działa doskonale w przypadku adresu http: // dev.example.com, ale kończy się niepowodzeniem w przypadku https: // dev.example.com. Nie znalazłem rozwiązania tego problemu.
Greg,
4
@Greg Myślę, że może to mieć coś wspólnego z tym, jak Amazon obsługuje HTTPS dla S3. Niestety, gdy używasz CNAME do uzyskania dostępu do zasobnika S3, nie możesz wymusić SSL, dodając „https”, ponieważ Amazon nie udostępnia certyfikatu dla „* .example.com”. Ponieważ S3 nie pozwala na połączenie, nigdy nie przechodzimy do logiki przekierowania. Niestety nie widzę rozwiązania tego problemu.
Vivek M. Chawla
17
W opcjach zasobnika dostępna jest nowa opcja „Przekieruj wszystkie żądania do innej nazwy hosta”. Umieściłem tam adres URL logowania IAM i działał jak urok, bez potrzeby XML.
Dan Milon
145

Wsparcie AWS wskazało prostsze rozwiązanie. Zasadniczo jest to ten sam pomysł, który zaproponował @Vivek M. Chawla, z prostszą implementacją.

AWS S3:

  1. Utwórz Bucket nazwany pełną domeną, na przykład aws.example.com
  2. We właściwościach zasobnika wybierz Redirect all requests to another host namei wprowadź swój adres URL: https://myaccount.signin.aws.amazon.com/console/

AWS Route53:

  1. Utwórz zestaw rekordów typu A. Zmień alias na Yes. Kliknij Alias Targetpole i wybierz zasobnik S3 utworzony w poprzednim kroku.

Odniesienie: Jak przekierować domeny za pomocą Amazon Web Services

Oficjalna dokumentacja AWS: Czy istnieje sposób na przekierowanie domeny do innej domeny za pomocą Amazon Route 53?

Roberto Schneiders
źródło
16
Działa to świetnie w przypadku protokołu HTTP, ale nie HTTPS.
mythofechelon
@mythofechelon Co masz na myśli? Jak dotąd nie miałem żadnego problemu z https. Jeśli chcesz używać protokołu https ze swoją domeną (np. Https: // aws.example.com), jest to zupełnie inny problem, ponieważ będziesz potrzebować serwera z certyfikatem ssl, aby to zrobić.
Roberto Schneiders
1
Oficjalna dokumentacja jest tutaj: aws.amazon.com/premiumsupport/knowledge-center/…
Mario Olivio Flores
2
Czy ta Redirect all requests to another host nameopcja nadal istnieje? Nie widzę tego, kiedy przechodzę do właściwości wiadra.
aidan
1
To powinna być prawidłowa odpowiedź, lepiej jest odwoływać się do komponentów wewnątrz AWS przy użyciu aliasu do celów wydajnościowych zamiast CNAME (to działa, ale nie jest to najlepsze podejście).
Douglas Figueroa
11

Udało mi się użyć nginx do obsługi przekierowania 301 do strony logowania aws.

Przejdź do folderu conf nginx (w moim przypadku jest to miejsce, /etc/nginx/sites-availablew którym tworzę dowiązanie symboliczne do /etc/nginx/sites-enabledwłączonych plików conf).

Następnie dodaj ścieżkę przekierowania

server {
  listen 80;
  server_name aws.example.com;
  return 301 https://myaccount.signin.aws.amazon.com/console;
}

Jeśli używasz nginx, najprawdopodobniej będziesz mieć dodatkowe bloki serwera (virtualhosts w terminologii apache) do obsługi apeksu strefy (example.com) lub jakkolwiek masz to skonfigurowane. Upewnij się, że jeden z nich jest ustawiony jako serwer domyślny.

server {
  listen 80 default_server;
  server_name example.com;
  # rest of config ...
}

W Route 53 dodaj A recordfor aws.example.comi ustaw wartość na ten sam adres IP używany dla wierzchołka strefy.

Vincent Mac
źródło
Jeszcze lepiej byłoby użyć rekordu aliasu do wskazania elastycznego modułu równoważenia obciążenia znajdującego się przed tą maszyną.
maletor
9

Aktualizacja

Chociaż moja pierwotna odpowiedź poniżej jest nadal aktualna i może być pomocna w zrozumieniu przyczyny, dla której przekazywanie adresów URL oparte na DNS nie jest dostępne za pośrednictwem Amazon Route 53 po wyjęciu z pudełka, zdecydowanie polecam sprawdzenie całkowicie inteligentnego rozwiązania pośredniego Vivek M.Chawla za pośrednictwem tymczasowo wprowadzonego Wsparcie Amazon S3 dla przekierowań stron internetowych i mniej samodzielnego serwera, a tym samym darmowe rozwiązanie w ramach AWS.

  • Wdrożenie zautomatyzowanego rozwiązania do generowania takich przekierowań pozostaje ćwiczeniem dla czytelnika, ale proszę oddać hołd epickiej odpowiedzi Vivek, publikując swoje rozwiązanie;)

Oryginalna odpowiedź

W tym celu Nettica musi uruchamiać niestandardowe rozwiązanie do przekierowywania. Oto problem:

Możesz utworzyć alias CNAME, taki jak aws.example.comdla myaccount.signin.aws.amazon.com, jednak DNS nie zapewnia oficjalnej obsługi aliasów podkatalogu, jak consolew tym przykładzie.

  • Szkoda, że ​​AWS nie wydaje się po prostu robić tego domyślnie po uderzeniu https://myaccount.signin.aws.amazon.com/(właśnie próbowałem), ponieważ rozwiązałoby to problem od razu i miałoby dużo sensu; poza tym powinno być całkiem łatwe do skonfigurowania na ich końcu.

Z tego powodu kilku dostawców DNS najwyraźniej wdrożyło niestandardowe rozwiązanie umożliwiające przekierowania do podkatalogów; Zaryzykuję przypuszczenie, że w zasadzie ułatwiają alias CNAME dla własnej domeny i ponownie przekierowują stamtąd do miejsca docelowego poprzez natychmiastowe przekierowanie HTTP 3xx .

Aby osiągnąć ten sam wynik, potrzebna byłaby usługa HTTP działająca i wykonująca te przekierowania, co oczywiście nie jest prostym rozwiązaniem, na które można by mieć nadzieję. Może / miejmy nadzieję, że ktoś może jednak wymyślić mądrzejsze podejście.

Steffen Opel
źródło
3
CNAME to aliasy i nie przekierowują.
ejain
@ejain - oczywiście masz rację, odpowiednio to naprawiłem (musiałem wtedy przegapić powiadomienie); dziękuję za wskazanie tego potencjalnie mylącego sformułowania!
Steffen Opel
0

Jeśli nadal masz problemy z prostym podejściem, utwórz pusty zasobnik, a następnie w Redirect all requests to another host namesekcji Statyczny hosting WWW we właściwościach za pośrednictwem konsoli. Upewnij się, że ustawiłeś 2 rekordy A w route53, jeden dla final-destination.comi jeden dla redirect-to.final-destination.com. Ustawienia każdego z nich będą identyczne, ale nazwa będzie inna, więc pasuje do nazw, które ustawisz dla swoich zasobników / adresów URL.

DanV
źródło