Zautomatyzuj izolację instancji Amazon EC2, korzystając z tagów
Powstrzymywanie jest kluczową częścią ogólnej strategii reagowania na incydenty (Incident Response Strategy), ponieważ praktyka ta daje ratownikom czas na przeprowadzenie analizy kryminalistycznej, eliminację oraz odzyskanie danych podczas incydentu.
Istnieje wiele różnych podejść powstrzymywania. W tym artykule autorzy skupili się na izolacji – zdolności oddzielenia wielu celów, tak aby każdy z nich widział tylko siebie i wpływał na siebie – jako strategii powstrzymywania.
Dowiesz się, w jaki sposób zautomatyzować izolację instancji Amazon Elastic Compute Cloud (Amazon EC2), korzystając z funkcji AWS Lambda, która jest wyzwalana przez zmiany tagów w instancji zgodnie z raportem Amazon CloudWarch Events.
CloudWatch Event Rules dostarcza strumień zdarzeń systemowych w czasie niemal rzeczywistym, które opisują zmiany w zasobach Amazon Web Services (AWS). Sprawdź także Amazon EventBridge.
Przygotowanie do zdarzenia jest ważne, tak jak opisano to w filarach bezpieczeństwa w ramach AWS Well-Architected Framework.
Spośród 7 Zasad Projektowania dla Bezpieczeństwa w Chmurze, zgodnie z dobrze zaplanowaną strukturą, rozwiązanie to obejmuje następujące elementy:
- Włącz wykrywalność: Monitoruj, ostrzegaj i kontroluj działania oraz zmiany w środowisku w czasie rzeczywistym. Zintegruj gromadzenie dzienników i pomiarów z systemami, aby automatycznie badać i podejmować działania.
- Zautomatyzuj najlepsze praktyki w zakresie bezpieczeństwa: Zautomatyzowane, oparte na oprogramowaniu mechanizmy zabezpieczeń mogą poprawić zdolność do bezpiecznego skalowania w sposób tańszy i szybszy. Twórz bezpieczną architekturę, w tym poprzez wdrażanie mechanizmów kontrolnych, które mogą być definiowane i zarządzane przez AWS jako kod w szablonach z kontrolą wersji.
- Przygotuj się na zdarzenia związane z bezpieczeństwem: Przygotuj się na incydenty poprzez wdrażanie zasad i procesów zarządzania incydentami i dochodzenia, które są zgodne z wymogami organizacji. Przeprowadzaj symulacje reagowania na incydenty i korzystaj z narzędzi z automatyzacją, aby przyspieszyć wykrywanie, badanie i odzyskiwanie danych.
Po wykryciu zdarzenia w fazie Wykrywania i przeanalizowaniu w fazie Analizy, możesz zautomatyzować proces logicznej izolacji instancji z Virtual Private Cloud (VPC) w Amazon Web Services (AWS).
W tym artykule zostanie przedstawione, w jaki sposób zautomatyzować izolację instancji EC2 poprzez wykorzystanie funkcji tagowania, której respondent może użyć do zidentyfikowania instancji, które muszą zostać odizolowane. Następnie funkcja Lambda używa wywołań API AWS w celu odizolowania instancji, wykonując czynności opisane w poniższych sekcjach.
Przypadki użycia
Twoja organizacja może użyć zautomatyzowanych izolacji instancji ECS w następujących sytuacjach:
- Analityk bezpieczeństwa chce zautomatyzować izolację instancji EC2 w celu szybkiego reagowania na zdarzenia związane z bezpieczeństwem;
- Manager bezpieczeństwa chce zapewnić swoim służbom ratowniczym możliwość szybkiego reagowania na incydenty bez nadmiernego dostępu do funkcji o wyższym poziomie bezpieczeństwa.
Architektura i projektowanie wysokiego poziomu
Przykładowe rozwiązanie w tym artykule wykorzystuje regułę CloudWatch Events w celu wyzwolenia funkcji Lambda. Zasada CloudWatch Events zostaje wywołana, kiedy tag zostanie zastosowany do instancji EC2. Kod Lambdy wyzwala dalsze akcje na podstawie treści zdarzenia. Zwróć uwagę, że szablon CloudFormation zawiera odpowiednie uprawnienia do uruchamiania funkcji.
Przebieg zdarzenia został przedstawiony na rysunku nr 1 i działa w następujący sposób:
- Instancja EC2 jest oznaczona
- Reguła CloudWatch Events filtruje zdarzenie
- Funkcja Lambda zostaje wywołana
- Jeśli kryteria są spełnione, rozpoczyna się przepływ pracy izolacji
Kiedy funkcja Lambda zostaje wywołana a kryteria spełnione, wykonywane są następujące czynności:
- Sprawdza powiązania profile instancji uprawnień
- Jeśli instancja jest przypisana do roli, funkcja Lambda odłącza tę rolę
- Stosuje rolę izolacji zdefiniowaną podczas tworzenia stosu CloudFormation
- Sprawdza VPC, w którym znajduje się instancja EC2
- Jeśli w środowisku VPC nie ma izolowanej grupy zabezpieczeń (na przykład jeśli VPC jest nowa), funkcja ją tworzy
- Stosuje grupę zabezpieczeń izolacji
Uwaga: Jeśli posiadasz grupę zabezpieczeń z otwartą regułą ruchu wychodzącego (0.0.0.0/0) i zastosujesz tę grupę zabezpieczeń izolacji, istniejące połączenie SSH z instancją zostaną natychmiast porzucone. Z drugiej strony, jeśli posiadasz węższą regułę przychodzącą, która początkowo zezwala na połączenie SSH, istniejące połączenie nie zostanie przerwane przez zmianę grupy. Nazywa się to śledzeniem połączeń.
Rysunek nr 1: Wysokopoziomowy diagram przedstawiający przepływ zdarzeń
W przypadku metody wdrażania będzie używany szablon AWS CloudFormation. AWS CloudFormation umożliwia Ci łatwe modelowanie zbioru powiązanych zasobów AWS i zewnętrznych, ich szybkie i spójne udostępnianie oraz zarządzanie nimi przez cały cykl życia, traktując infrastrukturę jako kod.
Przedstawiony tutaj szablon AWS CloudFormation wdraża następujące zasoby:
- Rola instancji EC2 dla izolacji – jest ona dołączona do instancji EC2, aby zapobiec dalszej komunikacji z innymi usługami AWS, ograniczając tym samym powierzchnię ataku do całej infrastruktury
- Reguła Amazon CloudWatch Events – służy do wykrywania zmian w zasobie AWS EC2, w tym przypadku „zdarzenie zmiany tagu”. Zostanie to użyte jako wyzwalacz dla funkcji Lambda.
- Rola AWS Identity and Access Management (IAM) dla funkcji Lambdy – właśnie tego funkcja Lambdy użyje do wykonania pracy
- Funkcja Lambda do automatyzacji – w tej funkcji znajduje się cała logika decyzyjna, po uruchomieniu będzie postępować zgodnie z zestawem kroków opisanych w następnej sekcji
- Uprawnienia funkcji Lambda – są wykorzystywane przez funkcję Lambda do uruchamiania/wykonywania
- Profil instancji IAM – to kontener na role IAM, których możesz używać do przekazania informacji do instancji EC2.
Funkcje wspierające w ramach funkcji Lambda
Pora na to, aby zanurzyć się głębiej w każdą funkcję wspierającą w kodzie Lambda.
Poniższa funkcja identyfikuje ID wirtualnej chmury prywatnej (VPC) dla danej instancji. Jest to niezbędne do określenia, które grupy zabezpieczeń są obecne w VPC.
def identifyInstanceVpcId(instanceId):
instanceReservations = ec2Client.describe_instances(InstanceIds=[instanceId])['Reservations']
for instanceReservation in instanceReservations:
instancesDescription = instanceReservation['Instances']
for instance in instancesDescription:
return instance['VpcId']
Następna funkcja modyfikuje grupę zabezpieczeń instancji EC2.
def modifyInstanceAttribute(instanceId,securityGroupId):
response = ec2Client.modify_instance_attribute(
Groups=[securityGroupId],
InstanceId=instanceId)
Poniższa funkcja tworzy grupę bezpieczeństwa w VPC, która blokuje cały dostęp wychodzący do grupy zabezpieczeń.
def createSecurityGroup(groupName, descriptionString, vpcId):
resource = boto3.resource('ec2')
securityGroupId = resource.create_security_group(GroupName=groupName, Description=descriptionString, VpcId=vpcId)
securityGroupId.revoke_egress(IpPermissions= [{'IpProtocol': '-1','IpRanges': [{'CidrIp': '0.0.0.0/0'}],'Ipv6Ranges': [],'PrefixListIds': [],'UserIdGroupPairs': []}])
Wdróż rozwiązanie
Aby wdrożyć rozwiązanie przedstawione w tym artykule, najpierw pobierz szablony CloudFormation, a następnie skonfiguruj stos CloudFormation, który określa tagi wykorzystywane do wyzwalania automatycznego procesu.
Pobierz szablon CloudFormation
Aby rozpocząć, pobierz szablon CloudFormation z Amazon S3. Ewentualnie możesz uruchomić szablon CloudFormation, wybierając przycisk Launch Stack.
Wdróż stos CloudFormation
Zacznij od przesłania szablonu CloudFormation do swojego konta AWS.
Aby przesłać szablon(Rysunek nr 2):
- Z konsoli zarządzania AWS otwórz konsolę CloudFormation
- Wybierz Utwórz Stos
- Wybierz Z nowymi zasobami (standard)
- Wybierz Prześlij plik szablonu
- Wybierz Wybierz plik, a następnie wybierz plik YAML, który właśnie pobrałeś
Rysunek nr 2: Tworzenie stosu CloudFormation
Określ szczegóły stosu
Możesz pozostawić wartości domyślne dla stosu, o ile nie ma już udostępnionych zasobów o tej samej nazwie, jak rola IAM. Na przykład, jeśli pozostawisz wartości domyślne, zostanie utworzona rola IAM o nazwie „SecurityIsolation-IAMRole”. W przeciwnym razie konwencję nazewnictwa można w pełni dostosować na tym ekranie i możesz także wprowadzić wybraną nazwę dla stosu CloudFormation i modyfikować parametry według własnego uznania. Rysunek nr 3 przedstawia parametry, które można ustalić.
Sekcja Evaluation Parameters (Parametry Oceny) określa klucz i wartości tagu, które zainicjują automatyczną odpowiedź. Pamiętaj, że w tym wartościach uwzględniana jest wielkość liter.
Rysunek nr 3. Parametry stosu
Wybierz Dalej, aż dojdziesz do ostatniego ekranu, przedstawionego na rysunku nr 4, na którym potwierdzasz, że została utworzona rola IAM i ufasz źródłu tego szablonu. Zaznacz pole wyboru obok oświadczenia „Przyjmuję do wiadomości, że AWS CloudFormation może tworzyć zasoby IAM wraz z niestandardowymi nazwami”, a następnie wybierz Utwórz Stos.
Rysunek nr 4. CloudFormation IAM notyfikacja
Po wykonaniu tych czynności zostaną udostępnione następujące zasoby, tak jak przedstawiono na rysunku nr 5:
- EC2IsolationRole
- EC2TagChangeEvent
- IAMRoleForLambdaFunction
- IsolationLambdaFunction
- IsolationLambdaFunctionInvokePermissions
- RootInstanceProfile
Rysunek nr 5. Zasoby utworzone w CloudFormation
Testowanie
Aby rozpocząć automatyzację, otaguj instancję EC2 za pomocą tagu zdefiniowanego podczas konfiguracji CloudFormation. Jeśli korzystasz z konsoli Amazon EC2, możesz zastosować tagi do zasobów, korzystając z zakładki Tagi na odpowiednim ekranie zasobów lub możesz użyć ekranu Tagi, interfejsu wiersza polecenia AWS bądź zestawu AWS SDK. Szczegółowy opis każdego podejścia można znaleźć na stronie dokumentacji Amazon EC2.
Cofanie zmian
Jeśli musisz usunąć ograniczenia zastosowane przez ten przepływ pracy, wykonaj następujące kroki.
- Na pulpicie nawigacyjnym EC2 w sekcji Instances zaznacz pole obok instancji, którą chcesz zmodyfikować
- W prawym górnym rogu wybierz Działania, następnie Ustawienia instancji, a potem Modify IAM role (modyfikuj rolę IAM)
- Pod IAM role należy wybrać IAM role, aby dołączyć ją do instancji, a następnie wybrać Zapisz
- Wybierz Akcje > Sieć, a następnie wybierz Zmień grupy zabezpieczeń
- W obszarze grup bezpieczeństwa wybierz Usuń i dodaj inną grupę zabezpieczeń z dostępem, który chcesz nadać tej instancji.
Podsumowanie
Korzystając z szablonu CloudFormation przedstawionego w tym artykule, analityk Security Operations Center może mieć tylko uprawnienia do oznaczania i izolowania instancji EC2 na podstawie tego znacznika. Usługa bezpieczeństwa taka jak Amazon GuardDuty może wyzwolić lambdę, aby zastosować tag jako część przepływu pracy. Oznacza to, że analityk Security Operations Center nie potrzebowałby uprawnień administracyjnych w stosunku do usługi EC2.
To rozwiązanie tworzy izolacyjną grupę zabezpieczeń dla wszystkich nowych VPC, które jeszcze jej nie mają. Grupa zabezpieczeń nadal będzie postępować zgodnie z konwencją nazewnictwa zdefiniowaną podczas uruchamiania stosu CloudFormation, ale nie będzie częścią udostępnionych zasobów. Jeśli zdecydujesz się na usunięcie stosu, konieczne będzie czyszczenie ręczne w celu usunięcia tych grup zabezpieczeń.
To rozwiązanie przerywa ustanowione przychodzące sesje Secure Shell (SSH), które są skojarzone z instancją i izoluje instancję od nowych połączeń przychodzących lub wychodzących. W przypadku połączeń wychodzących, które zostały już ustanowione (na przykład odwrotna powłoka), musisz albo wyłączyć kartę sieciową (NIC) na poziomie systemu operacyjnego (OS), zrestartować stos sieciowy instancji na poziomie systemu operacyjnego, zakończyć ustanowione połączenia lub zastosować listę kontroli dostępu do sieci (ACL sieci).
W celu uzyskania szczegółowych informacji, zapoznaj się z poniższą dokumentacją:
- Security Pillar in AWS Well-Architected Framework
- Boto3 EC2 documentation
- Well Architected Framework – Security Design Principles
- Incident Response Guidelines AWS
- Reverse SSH connection example
- Security group connection tracking
źródło: AWS