Bezpieczna łączność od publicznej do prywatnej: Przedstawiamy EC2 Instance Connect Endpoint

14 czerwca 2023

Autorami tego artykułu są Ariana Rahgozar, Solutions Architect I Kenneth Kitts, Sr. Technical Account Manager, AWS

Wyobraź sobie, że próbujesz połączyć się z instancją Amazon Elastic Compute Cloud (Amazon EC2) w ramach Amazon Virtual Private Cloud (Amazon VPC) przez Internet. Zazwyczaj musisz najpierw połączyć się z hostem bastionowym z publicznym adresem IP, skonfigurowanym przez administratora przez bramę internetową (IGW) w Twoim VPC, a następnie użyć przekierowania portów, aby dotrzeć do miejsca docelowego.

W dniu dzisiejszym twórcy AWS uruchomili Amazon EC2 Instance Connect (EIC) Endpoint, nową funkcję, która umożliwia bezpieczne łączenie się z instancjami i innymi zasobami VPC z Internetu. Dzięki EIC Endpoint nie potrzebujesz już IGW w swoim VPC, publicznego adresu IP w swoim zasobie, hosta bastionu ani żadnego agenta, aby połączyć się z Twoimi zasobami. EIC Endpoint łączy kontrolę dostępu opartą na tożsamości i sieci, zapewniając izolację, kontrolę i logowanie niezbędne do spełnienia wymagań bezpieczeństwa Twojej organizacji. Jako bonus, administrator Twojej organizacji jest również zwolniony z narzutów operacyjnych związanych z utrzymaniem i aktualizowaniem hostów bastionowych w celu zapewnienia łączności. EIC Endpoint współpracuje z konsolą zarządzania AWS i interfejsem wiersza poleceń AWS (AWS CLI). Ponadto zapewnia elastyczność dalszego korzystania z ulubionych narzędzi, takich jak PuTTY i OpenSSH.

W tym artykule autorzy przedstawiają przegląd działania punktu końcowego EIC i jego kontroli bezpieczeństwa. Przeprowadzą Cię przez proces tworzenia pierwszego punktu końcowego EIC i zademonstrują, jak nawiązać połączenie SSH z instancją z Internetu przez punkt końcowy EIC.

Przegląd produktów EIC Endpoint

EIC Endpoint to rozpoznający tożsamość serwer proxy TCP. Posiada dwa tryby: pierwszy, AWS CLI client służy do tworzenia bezpiecznego tunelu WebSocket ze stacji roboczej do punktu końcowego z poświadczeniami AWS Identity and Access Management (IAM). Po ustanowieniu tunelu wskazujesz preferowanego klienta na swój adres sprzężenia zwrotnego (127.0.0.1 lub localhost) i łączysz się jak zwykle. Po drugie, gdy nie korzystasz z AWS CLI, konsola zapewnia bezpieczny i bezproblemowy dostęp do zasobów wewnątrz VPC. Uwierzytelnianie i autoryzacja są oceniane, zanim ruch dotrze do VPC. Poniższy rysunek przedstawia ilustrację użytkownika łączącego się za pośrednictwem punktu końcowego EIC:

Przegląd produktów EIC Endpoint

Punkty końcowe EIC zapewniają wysoki stopień elastyczności. Po pierwsze, nie wymagają, aby Twój VPC miał bezpośrednią łączność z Internetem za pomocą bramki IGW lub NAT. Po drugie, żaden agent nie jest potrzebny do zasobu, z którym chcesz się połączyć, co pozwala na łatwe zdalne administrowanie zasobami, które mogą nie obsługiwać agentów, takich jak urządzenia innych firm. Po trzecie, zachowują istniejące przepływy pracy, umożliwiając dalsze korzystanie z preferowanego oprogramowania klienckiego na lokalnej stacji roboczej w celu łączenia zasobów i zarządzania nimi. I wreszcie, IAM i Security Groups mogą być używane do kontrolowania dostępu, co w bardziej szczegółowy sposób zostanie omówione w kolejnej sekcji.

Przed uruchomieniem EIC Endpoints, AWS oferował dwie kluczowe usługi, które pomagały dokładniej zarządzać dostępem z przestrzeni adresowej do VPC. Pierwszym z nich jest EC2 Instance Connect, który zapewnia mechanizm wykorzystujący poświadczenia IAM do wypychania efemerycznych kluczy SSH do instancji, dzięki czemu klucze o długiej żywotności stają się zbędne. Jednak do tej pory EC2 Instance Connect wymagało publicznego adresu IP na Twojej instancji podczas łączenia przez Internet. Dzięki tej premierze możesz używać EC2 Instance Connect z EIC Endpoints, łącząc te dwie możliwości, aby zapewnić SSH oparte na kluczach efemerycznych do twoich instancji bez narażania się na ujawnienienie w publicznym Internecie. Jako alternatywę dla łączności opartej na EC2 Instance Connect i EIC Endpoint, AWS oferuje również Systems Manager Session Manager (SSM), który zapewnia łączność z instancjami opartą na agentach. SSM używa IAM do uwierzytelniania i autoryzacji, i jest idealnym rozwiązaniem dla środowisk, w których można skonfigurować agenta do działania.

Biorąc pod uwagę, że EIC Endpoint umożliwia dostęp do prywatnych zasobów z publicznej przestrzeni IP, pora przyjrzeć się bardziej szczegółowo kontrolom bezpieczeństwa i możliwościom przed omówieniem tworzenia pierwszego punktu końcowego EIC.

Możliwości i kontrole bezpieczeństwa

Wielu klientów AWS zdalnie zarządzających zasobami w swoich VPC z Internetu nadal używa albo publicznych adresów IP w odpowiednich zasobach, albo w najlepszym razie wykorzystuje podejście hosta bastionu w połączeniu z długowiecznymi kluczami SSH. Korzystanie z publicznych adresów IP można nieco zablokować za pomocą tras IGW i/lub grup zabezpieczeń. Jednak w dynamicznym środowisku kontrole te mogą być trudne do zarządzania. W rezultacie staranne zarządzanie długotrwałymi kluczami SSH pozostaje jedyną warstwą ochrony, co nie jest dobre, ponieważ wszyscy wiemy, że te kontrole czasami zawodzą, dlatego ważna jest dogłębna ochrona. Chociaż hosty bastionowe mogą pomóc, znacznie zwiększają koszty operacyjne związane z zarządzaniem, instalowaniem poprawek i konserwacją infrastruktury.

Autoryzacja IAM jest wymagana do utworzenia punktu końcowego EIC, a także do ustanowienia połączenia za pośrednictwem technologii bezpiecznego tunelowania punktu końcowego. Oprócz kontroli dostępu opartej na tożsamości, określającej, kto, jak, kiedy i jak długo użytkownicy mogą się łączyć, można również stosować bardziej tradycyjne kontrole dostępu do sieci, takie jak grupy zabezpieczeń. Grupy zabezpieczeń powiązane z Twoimi zasobami VPC mogą służyć do udzielania/odmawiania dostępu. Niezależnie od tego, czy są to zasady IAM, czy grupy zabezpieczeń, domyślnym zachowaniem jest odrzucanie ruchu, chyba że jest to wyraźnie dozwolone.

EIC Endpoint spełnia ważne wymagania bezpieczeństwa w zakresie separacji uprawnień dla płaszczyzny kontroli i płaszczyzny danych. Administrator z pełnymi uprawnieniami EC2 IAM może tworzyć i kontrolować punkty końcowe EIC (płaszczyzna kontroli). Nie mogą jednak korzystać z tych punktów końcowych bez posiadania uprawnień EC2 Instance Connect IAM (płaszczyzna danych). I odwrotnie, inżynierowie DevOps, którzy mogą potrzebować użyć EIC Endpoint do tunelowania do zasobów VPC, nie potrzebują do tego uprawnień płaszczyzny kontrolnej. We wszystkich przypadkach zleceniodawca IAM korzystający z punktu końcowego EIC musi należeć do tego samego konta AWS (bezpośrednio lub poprzez założenie roli międzykontowej). Administratorzy bezpieczeństwa i audytorzy mają scentralizowany wgląd w aktywność punktów końcowych, ponieważ wszystkie wywołania API do konfigurowania i łączenia za pośrednictwem EIC Endpoint API są rejestrowane w AWS CloudTrail. Rekordy połączeń płaszczyzny danych obejmują podmiot IAM wysyłający żądanie, jego źródłowy adres IP, żądany docelowy adres IP i port docelowy. Zapoznaj się z poniższym rysunkiem, aby zobaczyć przykładowy wpis CloudTrail.

Partial CloudTrail entry for an SSH data-plane connection

EIC Endpoint obsługuje opcjonalne korzystanie z funkcji Client IP Preservation (inaczej Source IP Preservation), która stanowi ważny element bezpieczeństwa dla niektórych organizacji. Załóżmy na przykład, że zasób, z którym się łączysz, ma kontrolę dostępu do sieci, która jest ograniczona do określonego publicznego adresu IP lub dzienniki dostępu do instancji muszą zawierać „prawdziwy” adres IP klienta. Chociaż możesz włączyć tę funkcję podczas tworzenia punktu końcowego, ustawienie domyślne jest wyłączone. Gdy ta opcja jest wyłączona, połączenia przesyłane przez serwer proxy poprzez punkt końcowy używają prywatnego adresu IP punktu końcowego w polu źródłowego adresu IP pakietów sieciowych. To domyślne zachowanie umożliwia połączeniom przesyłanym przez serwer proxy za pośrednictwem punktu końcowego tak daleki zasięg, jak pozwalają na to tabele tras. Pamiętaj, bez względu na to, jak skonfigurujesz to ustawienie, CloudTrail rejestruje prawdziwy adres IP klienta.

Punkty końcowe EIC wzmacniają bezpieczeństwo, łącząc uwierzytelnianie i autoryzację w oparciu o tożsamość z tradycyjnymi kontrolami obwodowymi sieci i zapewniają szczegółową kontrolę dostępu, rejestrowanie, monitorowanie i bardziej dogłębną ochronę. Co więcej, robią to wszystko bez konieczności posiadania infrastruktury umożliwiającej dostęp do Internetu w twoim VPC, minimalizując możliwość niezamierzonego dostępu do prywatnych zasobów VPC.

Rozpoczynanie

Tworzenie Twojego EIC Endpoint

Wymagany jest tylko jeden punkt końcowy na VPC. Aby utworzyć lub zmodyfikować punkt końcowy i połączyć się z zasobem, użytkownik musi mieć wymagane uprawnienia IAM, a wszystkie grupy zabezpieczeń powiązane z Twoimi zasobami VPC muszą mieć regułę zezwalającą na łączność. Zapoznaj się z poniższymi zasobami, aby uzyskać więcej informacji na temat konfigurowania grup zabezpieczeń i przykładowych uprawnień IAM.

Interfejs AWS CLI lub konsola mogą służyć do tworzenia punktu końcowego EIC, a poniżej autorzy demonstrują interfejs AWS CLI. Aby utworzyć punkt końcowy EIC za pomocą konsoli, zapoznaj się z dokumentacją.

Tworzenie punktu końcowego EIC za pomocą AWS CLI

Aby utworzyć punkt końcowy EIC za pomocą AWS CLI, uruchom następujące polecenie, zastępując [SUBNET] swoim identyfikatorem podsieci i [SG-ID] swoim identyfikatorem grupy zabezpieczeń:

aws ec2 create-instance-connect-endpoint \
    --subnet-id [SUBNET] \
    --security-group-id [SG-ID]

Po utworzeniu punktu końcowego EIC za pomocą interfejsu AWS CLI lub konsoli i przyznaniu użytkownikowi uprawnienia IAM do utworzenia tunelu można nawiązać połączenie. Teraz autorzy omówią, jak połączyć się z instancjami Linuksa za pomocą SSH. Należy jednak pamiętać, że do łączenia się z instancjami za pośrednictwem protokołu RDP można również używać interfejsu OpenTunnel API.

Łączenie się z instancją systemu Linux za pomocą protokołu SSH

Po skonfigurowaniu punktu końcowego EIC w podsieci VPC możesz łączyć się za pomocą SSH. Tradycyjnie dostęp do instancji EC2 za pomocą SSH był kontrolowany przez pary kluczy i kontrolę dostępu do sieci. EIC Endpoint zapewnia dodatkową warstwę kontroli poprzez zasady IAM, co prowadzi do zwiększonego poziomu bezpieczeństwa zdalnego dostępu. Poniżej twórcy opisują dwie metody łączenia przez SSH.

One-click command

Aby jeszcze bardziej zmniejszyć obciążenie operacyjne związane z tworzeniem i rotacją kluczy SSH, możesz użyć nowego polecenia ec2-instance-connect ssh z interfejsu AWS CLI. Dzięki temu nowemu poleceniu generujemy klucze efemeryczne, dzięki którym możesz połączyć się z instancją. Pamiętaj, że to polecenie wymaga użycia klienta OpenSSH. Aby użyć tego polecenia i połączyć się, potrzebujesz uprawnień IAM, jak opisano tutaj.

Po skonfigurowaniu możesz połączyć się za pomocą nowego polecenia AWS CLI, przedstawionego na poniższym rysunku:

AWS CLI view upon successful SSH connection to your instance

Aby przetestować połączenie z Twoją instancją z AWS CLI, możesz uruchomić następujące polecenie, gdzie [INSTANCE] to identyfikator Twojej instancji EC2:

Pamiętaj, że nadal możesz używać długotrwałych poświadczeń SSH do łączenia, jeśli musisz zachować istniejące przepływy pracy, które twórcy pokażą poniżej. Należy jednak pamiętać, że dynamiczne, często rotowane poświadczenia generalnie są bezpieczniejsze.

Open-tunnel command

Możesz także połączyć się za pomocą SSH ze standardowymi narzędziami lub za pomocą polecenia proxy. Aby ustanowić tunel prywatny (TCP proxy) do instancji, należy uruchomić jedną komendę AWS CLI, co widać na poniższym rysunku:

AWS CLI view after running new SSH open-tunnel command, creating a private tunnel to connect to our EC2 instance

Możesz uruchomić następujące polecenie, aby przetestować łączność, gdzie [INSTANCE] to identyfikator instancji EC2, a [SSH-KEY] to lokalizacja i nazwa klucza SSH. Aby uzyskać wskazówki dotyczące korzystania z kluczy SSH, zapoznaj się z naszą dokumentacją dotyczącą par kluczy Amazon EC2 i instancji systemu Linux.

ssh ec2-user@[INSTANCE] \
    -i [SSH-KEY] \
    -o ProxyCommand='aws ec2-instance-connect open-tunnel \
    --instance-id %h'

Po skonfigurowaniu swojego punktu końcowego EIC możesz połączyć się przez SSH ze swoimi instancjami EC2 bez publicznego adresu IP lub IGW za pomocą AWS CLI.

Wnioski

EIC Endpoint zapewnia bezpieczne rozwiązanie do łączenia się z Twoimi instancjami przez SSH lub RDP w prywatnych podsieciach bez IGW, publicznych adresów IP, agentów i hostów bastionowych. Konfigurując punkt końcowy EIC dla swojego VPC, możesz bezpiecznie łączyć się za pomocą istniejących narzędzi klienckich lub konsoli/AWS CLI. Aby dowiedzieć się więcej, odwiedź dokumentację punktu końcowego EIC.

źródło: AWS

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.