Jak zbudować bezpieczną stronę internetową z CloudFront Password Protect

Opublikowany: 2023-01-15

Posiadając lwią część rynku przetwarzania w chmurze na poziomie 41,5%, Amazon Web Service (AWS) jest obecnie najpopularniejszą usługą przetwarzania w chmurze. Pozwala firmom i osobom prywatnym tanio hostować swoje aplikacje i strony internetowe na serwerach Amazon.

Jednym z krytycznych komponentów AWS jest Amazon CloudFront. Jest to sieć dostarczania treści (CDN) zbudowana w celu maksymalizacji szybkości ładowania każdego odwiedzającego witrynę hostowaną przez AWS.

Ale czy wiesz, że możesz użyć CloudFront, aby zablokować swoją witrynę za monitem o podanie hasła? Ten przewodnik pokaże Ci, jak korzystać z funkcji ochrony hasłem AWS CloudFront, aby zabezpieczyć swoją witrynę.

  • Co to jest ochrona hasłem CloudFront?
  • Jak zabezpieczyć witrynę CloudFront za pomocą hasła
    • Korzystanie z [chroniony e-mailem]
    • Wykorzystanie AWS S3 i Lambda do dodania podstawowego uwierzytelniania

Co to jest ochrona hasłem CloudFront?

Amazon CloudFront przyspiesza dostęp użytkowników do Twojej aplikacji i strony internetowej, dostarczając treści za pośrednictwem różnych centrów danych na całym świecie. Gdy użytkownik uzyskuje dostęp do Twojej witryny, treść jest dostarczana z centrum znajdującego się najbliżej jego położenia geograficznego. W rezultacie przyspiesza to ładowanie.

Tak długo, jak używasz Amazon CloudFront do dystrybucji treści, możesz korzystać z funkcji ochrony hasłem systemu. System nadal działa, jeśli Twoja witryna jest hostowana w zasobniku S3 lub instancji EC2.

Oto schemat standardowego systemu CloudFront. Opisuje, w jaki sposób żądanie od odwiedzających stronę internetową (po prawej) przepływa przez CloudFront i inne podsystemy, aby dotrzeć do źródła (gdzie przechowywana jest treść). U źródła dane są pobierane i przekazywane z powrotem do odwiedzających.

ppwp-cloud-front-hasło-protect-system

Może to wyglądać zagmatwanie, szczególnie dla osób, które dopiero co usłyszały o CloudFront po raz pierwszy. Jednak zrozumienie tego wykresu i jego składników ma kluczowe znaczenie dla późniejszych sekcji.

Jak zabezpieczyć witrynę CloudFront za pomocą hasła

Możesz użyć kilku metod, aby przesłać monit o podanie hasła do witryny obsługiwanej przez CloudFront. W tym przewodniku pokażemy Ci 2 sposoby.

Korzystanie z [chroniony e-mailem]

[email protected] to funkcja CloudFront, która pozwala uruchamiać niestandardowe kody bliżej klientów. W ten sposób poprawia się wydajność ładowania. Jeśli zdecydujesz się na wdrożenie [ochrona poczty e-mail], za każdym razem, gdy odwiedzający poprosi o pobranie treści z Twojej witryny, będzie musiał najpierw przejść przez tę funkcję.

Jeśli miałbyś zmodyfikować [chroniony e-mailem], aby działał tylko wtedy, gdy użytkownik poda prawidłowe hasło, mniej więcej masz warstwę ochrony hasłem dla swojej witryny.

To jest podstawowa idea tej metody bezpieczeństwa CloudFront.

ppwp-lambda-edge

Krok 1: Wdróż funkcję [email protected].

[email protected] to funkcja Lambda wdrożona tylko w regionie us-east-1 (Północna Wirginia). Aby go wdrożyć, musisz zalogować się do odpowiedniego regionu:

  1. Zaloguj się na swoje konto AWS, a następnie kliknij Utwórz funkcję .
  2. Zostaniesz poproszony o wprowadzenie nazwy funkcji. Wybierz coś podstawowego, takiego jak BasicAuth . Jako środowisko wykonawcze wybierz Node.js 12.x .
  3. Zakończ tworzenie, naciskając przycisk Utwórz funkcję .
  4. Zobaczysz teraz plik o nazwie index.js w oknie Kod funkcji . Kliknij na niego, a zobaczysz domyślny kod Lambda. Zastąp go tym niestandardowym kodem:
 „użyj ściśle”;

exports.handler = (zdarzenie, kontekst, wywołanie zwrotne) => {

// dane uwierzytelniające
var i = 0, authStrings = [], authCredentials = [
'użytkownik1:hasło użytkownika',
];

// konstruuje łańcuchy Basic Auth
authCredentials.forEach(element => {
authStrings[i] = "Podstawowy" + nowy Buffer(element).toString('base64');
i++;
}
);

// pobiera żądanie i nagłówki żądań
const żądanie = zdarzenie.Rekordy[0].cf.żądanie;
const headers = request.headers;

// wymaga uwierzytelnienia podstawowego
if (typeof headers.authorization == 'undefined' ||
!authStrings.includes(headers.authorization[0].value)) {

stała odpowiedź = {
stan: '401',
statusOpis: 'Nieautoryzowany',
treść: „Nieautoryzowany”,
nagłówki: {
'www-uwierzytelnij': [ {klucz: 'WWW-uwierzytelnij',
wartość: 'Dziedzina podstawowa="Uwierzytelnianie"'} ]
},
};

wywołanie zwrotne(null, odpowiedź);
}

// kontynuuj przetwarzanie żądania, jeśli uwierzytelnianie się powiodło
wywołanie zwrotne (null, żądanie);
};

Domyślne dane logowania są przechowywane w tej funkcji w wierszu:

 'użytkownik1:hasło użytkownika',

Format to „konto:hasło” . Możesz to zmienić na cokolwiek chcesz. Ponadto możesz dodać więcej danych logowania, powielając ten wiersz.

5. Po zastąpieniu niestandardowego kodu kliknij opcję Wdrażaj , aby wypchnąć kod.

6. Przejdź do menu Czynności u góry, kliknij Opublikuj nową wersję , a następnie wybierz Opublikuj . Nie zmieniaj tam żadnych ustawień.

7. Znajdź ciąg znaków ARN w prawym górnym rogu ekranu i skopiuj go. Ten krok jest kluczowy. Ciąg znaków ARN wygląda następująco:

 arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:basicAuth:1

Krok 2: Skonfiguruj relację zaufania

  1. Przejdź do konsoli IAM i zaloguj się.
  2. Wprowadź nazwę funkcji [chronionej przez e-mail] ( BasicAuth w poprzednim kroku).
  3. Znajdź zakładkę Relacje zaufania i kliknij Edytuj . Zastąp kod w środku tym:
 {
"Wersja": "2012-10-17",
"Oświadczenie": [
{
„Efekt”: „Zezwól”,
"Główny": {
"Usługa": [
"lambda.amazonaws.com",
„edgelambda.amazonaws.com”
]
},
„Akcja”: „sts:Przyjmij rolę”
}
]
}

4. Zakończ proces, klikając Aktualizuj zasady zaufania .

Krok 3: Skonfiguruj zachowanie pamięci podręcznej

  1. Przejdź do CloudFront i zaloguj się. Kliknij witrynę obsługiwaną przez CloudFront, którą chcesz zablokować hasłem.
  2. Wybierz opcję Zachowania , znajdź pole wyboru Wzór ścieżki adresu URL i zaznacz je. Kontynuuj klikanie Edytuj .
  3. Znajdź sekcję o nazwie Powiązania funkcji lambda . Znajdź menu przewijane w dół i wyszukaj Wybierz typ zdarzenia , a następnie Żądanie widza . Wklej ciąg ARN skopiowany wcześniej w kroku 1.
  4. Kliknij Tak, edytuj . Następnie CloudFront potrzebuje około 5 minut na ponowne uruchomienie i ponowne załadowanie nowych ustawień.

Krok 4: Ponownie sprawdź witrynę

Odwiedź swoją witrynę po ponownym uruchomieniu CloudFront. Jeśli powita Cię monit o zalogowanie, udało Ci się.

Powinno to wyglądać mniej więcej tak:

ppwp-lambda-cloudfront-hasło-ochrona

Wykorzystanie AWS S3 i Lambda do dodania podstawowego uwierzytelniania

W tej metodzie użyjemy połączonego podejścia AWS S3 i Lambda, aby osiągnąć to samo, co powyżej: utworzyć podstawowy formularz uwierzytelniający dla witryny.

Krok 1: Utwórz wiadro S3

AWS S3 (Simple Storage Service) to rozwiązanie do przechowywania w chmurze AWS. Daje możliwość przechowywania wszelkiego rodzaju danych na serwerach Amazon. W S3 „wiadro” zawiera i kontroluje dostęp do obiektów (danych treści).

  1. Możesz utworzyć wiadro za pomocą konsoli zarządzania AWS. Kliknij kartę S3 , a następnie Utwórz zasobnik.
  2. Wprowadź nazwę i region hostingu (wybierz ten najbliższy, aby ułatwić testowanie). Kliknij Utwórz i to wszystko!

Krok 2: Utwórz plik testowy

  1. Utwórz plik testowy, taki jak prosty plik index.html , zawierający kod startowy.
 <h2>Witaj, świecie</h2>

2. Możesz przesłać ten plik do nowo utworzonego zasobnika za pomocą menu Obiekty .

Krok 3: Wygeneruj dystrybucję CloudFront

  1. Przejdź do pulpitu nawigacyjnego CloudFront i naciśnij Utwórz dystrybucję .
  2. Wybierz domenę Origin jako zasobnik S3, który właśnie utworzyłeś. Zaktualizuj zasady zasobnika i ustawienie OAI (Origin Access Identity) zgodnie z własnymi upodobaniami.
  3. Wprowadź nazwę pliku, który chcesz chronić ( index.html ) w opcjonalnym polu Domyślny obiekt główny .
  4. Stwórz dystrybucję CloudFront i voila! Masz teraz punkt końcowy CloudFront.

Krok 4: Utwórz niestandardową funkcję Lambda

  1. Teraz z konsoli zarządzania AWS przejdź do zakładki Lambda i naciśnij Utwórz funkcję .
  2. Wybierz opcję Użyj planu i wyszukaj CloudFront , a następnie wybierz szablon CloudFront-response-generation . Kliknij Konfiguruj po wybraniu.
  3. Na kolejnym ekranie wprowadź nazwę funkcji (AuthenticationTest) oraz nazwę roli (S3-Auth). Wybierz rolę wykonawczą jako Utwórz nową rolę z szablonów zasad AWS .
  4. Następnie wklej szczegóły właśnie utworzonego punktu końcowego CloudFront w polu Dystrybucja . W Zachowaniu pamięci podręcznej pozostaw jako * . I na koniec w CloudFront event wybierz Viewer request .
  5. Kliknij opcję Wdróż , aby utworzyć nową funkcję.

Krok 5: Zmodyfikuj funkcję Lambda

  1. Zastąp domyślny kod Lambda tym niestandardowym kodem.
 „użyj ściśle”;
exports.handler = (zdarzenie, kontekst, wywołanie zwrotne) => {

// Pobierz żądanie i nagłówki żądań
const żądanie = zdarzenie.Rekordy[0].cf.żądanie;
const headers = request.headers;

// Skonfiguruj uwierzytelnianie
const authUser = 'nazwa użytkownika';
const authPass = 'hasło';

// Skonstruuj łańcuch Basic Auth
const authString = 'Basic ' + new Buffer(authUser + ':' + authPass).toString('base64');

// Wymagaj uwierzytelnienia podstawowego
if (typeof headers.authorization == 'undefined' || headers.authorization[0].value != authString) {
const body = 'Brak autoryzacji';
stała odpowiedź = {
stan: '401',
statusOpis: 'Nieautoryzowany',
ciało: ciało,
nagłówki: {
'www-uwierzytelnij': [{klucz: 'WWW-uwierzytelnij', wartość:'Podstawowy'}]
},
};
wywołanie zwrotne(null, odpowiedź);
}

// Kontynuuj przetwarzanie żądania, jeśli uwierzytelnianie przebiegło pomyślnie
wywołanie zwrotne (null, żądanie);
};

Możesz zmienić nazwę użytkownika i hasło według własnych upodobań.

2. Kliknij opcję Wdróż u góry, aby zapisać kod. Następnie przejdź do Actions and Deploy to [chroniony e-mailem] , aby wypchnąć kod.

3. Wklej adres punktu końcowego CloudFront w polu Dystrybucja , pozostaw Zachowanie pamięci podręcznej jako * i wybierz Zdarzenie CloudFront jako Żądanie przeglądarki . Po zakończeniu zostanie utworzony nowy wyzwalacz CloudFront.

4. Następnie rozłóż go i poczekaj 5 minut.

5. Odwiedź ponownie swoją witrynę. Powinien teraz wyświetlić monit o zalogowanie, dzięki uprzejmości systemu uwierzytelniania CloudFront.

W pełni wykorzystaj funkcję ochrony hasłem CloudFront

Istnieje wiele powodów, dla których administrator sieci chciałby zablokować swoją witrynę. Może to być spowodowane tym, że ich witryna wymaga konserwacji, zwiększenia bezpieczeństwa lub ochrony przed nieautoryzowanym dostępem.

Niezależnie od przypadku, mam nadzieję, że ten przewodnik pomoże Ci pomyślnie wdrożyć schemat haseł przy użyciu ochrony hasłem CloudFront.

Istnieje inny sposób zabezpieczenia strony internetowej hasłem: użycie PPWP Pro. Sprawdź to!