Próbuję znaleźć sposób na określenie osieroconych grup zabezpieczeń, abym mógł je posprzątać i się ich pozbyć. Czy ktoś zna sposób na znalezienie nieużywanych grup zabezpieczeń.
Albo przez konsolę, albo za pomocą narzędzi wiersza poleceń będą działać (Uruchamianie narzędzi wiersza poleceń na komputerach z systemem Linux i OSX).
amazon-web-services
amazon-ec2
Promień
źródło
źródło
Odpowiedzi:
Uwaga: dotyczy to tylko bezpieczeństwa w EC2, a nie innych usług, takich jak RDS. Będziesz musiał wykonać więcej pracy, aby uwzględnić grupy zabezpieczeń używane poza EC2. Dobrą rzeczą jest to, że nie można łatwo (może nawet nie być możliwe) usunięcia aktywnych grup zabezpieczeń, jeśli przegapisz jedną powiązaną z inną usługą.
Korzystając z nowszego narzędzia AWS CLI, znalazłem łatwy sposób na uzyskanie tego, czego potrzebuję:
Najpierw pobierz listę wszystkich grup zabezpieczeń
Następnie uzyskać wszystkie grupy zabezpieczeń związane z wystąpieniem, a następnie rurami do
sort
następnieuniq
:Następnie złóż to razem i porównaj 2 listy i zobacz, co nie jest używane z listy głównej:
źródło
aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].SecurityGroups[*]' --output text | tr '\t' '\n' | sort | uniq
aws rds describe-db-security-groups --query 'DBSecurityGroups[*].EC2SecurityGroups[*].EC2SecurityGroupId' --output text | tr '\t' '\n' | sort | uniq
aws ec2 describe-network-interfaces --query 'NetworkInterfaces[*].Groups[*].GroupId' --output text| tr '\t' '\n' | sort | uniq
tylko do opisania interfejsów sieciowych.Jeśli wybierzesz wszystkie swoje grupy bezpieczeństwa w konsoli EC2, a następnie naciśnij akcje -> Usuń grupy zabezpieczeń, pojawi się wyskakujące okienko z informacją, że nie możesz usunąć grup zabezpieczeń, które są dołączone do instancji, innych grup zabezpieczeń lub interfejsów sieciowych i wyświetli listę grup zabezpieczeń, które możesz usunąć; czyli nieużywane grupy zabezpieczeń :)
źródło
To jest przykładowy kod napisany w boto (Python SDK for AWS) w celu zestawienia grupy zabezpieczeń z liczbą wystąpień, z którymi jest powiązana.
Możesz użyć tej logiki, aby uzyskać to samo również w wierszu poleceń
Kod Boto
Wynik
źródło
Po około roku nieaudytowanego użytkowania stwierdziłem, że konieczne jest przeprowadzenie audytu moich grup bezpieczeństwa AWS EC2 i wyczyszczenie starszych, nieużywanych grup.
To było trudne zadanie do wykonania przez web GUI, więc spojrzałem na AWS CLI, aby to zadanie było łatwiejsze. Znalazłem wskazówki, jak to zrobić, w StackOverflow, ale było to dalekie od ukończenia. Postanowiłem więc napisać własny scenariusz. Użyłem interfejsu wiersza polecenia AWS, MySQL i jakiegoś „Bash-foo”, aby wykonać następujące czynności:
Uzyskaj listę wszystkich grup zabezpieczeń EC2. Przechowuję identyfikator grupy, nazwę grupy i opis w tabeli o nazwie „grupy” w bazie danych MySQL o nazwie aws_security_groups na hoście lokalnym. Całkowita liczba znalezionych grup jest raportowana użytkownikowi.
Uzyskaj listę wszystkich grup zabezpieczeń powiązanych z każdą z następujących usług i wyklucz je z tabeli: EC2 Istances EC2 Elastic Load Balancers AWS RDS Instances AWS OpsWorks (nie powinno być usuwane przez Amazon) Domyślne grupy zabezpieczeń (nie można usunąć ) ElastiCache
Dla każdej usługi podaję liczbę grup pozostawionych w tabeli po zakończeniu wykluczenia.
UWAGI: 1. Będziesz chciał utworzyć plik do przechowywania twojego hosta MySQL, nazwy użytkownika i hasła i wskazać mu zmienną $ DBCONFIG. Powinien mieć następującą strukturę:
Daj mi znać, jeśli uznasz to za przydatne lub masz jakieś uwagi, poprawki lub ulepszenia.
Oto skrypt.
A oto sql do stworzenia bazy danych.
źródło
Przykład boto drukujący identyfikatory i nazwy grup tylko tych grup zabezpieczeń, które nie mają bieżących wystąpień.
Pokazuje również, jak określić, który region Cię interesuje.
Aby potwierdzić, które grupy zabezpieczeń są nadal używane, należy cofnąć lub usunąć
if len(sg.instances()) == 0
test i wydrukowaćlen(sg.instances())
wartość.Na przykład
źródło
Korzystając z node.js AWS SDK mogę potwierdzić, że AWS nie pozwala na usuwanie grup zabezpieczeń, które są w użyciu. Napisałem skrypt, który po prostu próbuje usunąć wszystkie grupy iz wdziękiem obsługuje błędy. Działa to w przypadku klasycznego i nowoczesnego VPC. Komunikat o błędzie można zobaczyć poniżej.
źródło
Wśród innych funkcji zarówno ScoutSuite , jak i Prowler zgłaszają nieużywane grupy zabezpieczeń EC2. Oba są open source.
źródło
Do SG podłączonych do interfejsów sieciowych:
Wg nazwy:
Według identyfikatora:
źródło
Na rynku AWS jest narzędzie, które znacznie to ułatwia. Pokazuje, które grupy są dołączone / odłączone w celu łatwego usunięcia, ale także porównuje dzienniki przepływu VPC z regułami grup bezpieczeństwa i pokazuje, które reguły SG są używane lub nie. AWS opublikował rozwiązanie stosu ELK, aby to zrobić, ale było to absurdalnie złożone.
Oto narzędzie i zastrzeżenie, nad którym pracowałem. Ale mam nadzieję, że wszyscy uznacie to za stosowne: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -kilka minut
źródło
Niestety wybrana odpowiedź nie jest tak dokładna, jak potrzebuję (próbowałem zbadać przyczynę, ale wolałem ją wdrożyć).
Jeśli zaznaczę WSZYSTKIE
NetworkInterfaces
, szukając załączników do jakichkolwiekSecurityGroup
, dostaję częściowe wyniki. Jeśli sprawdzę tylko włączoneEC2Instances
, otrzymam również częściowe wyniki.Oto moje podejście do problemu:
all_secgrp
all_instances
filter
funkcji i filtrując jąsecurity-group-id
)all_secgrp
W załączeniu możesz zobaczyć fragment kodu. Nie narzekaj na wydajność, ale spróbuj ją zoptymalizować, jeśli chcesz.
źródło
Jest to trudny problem, jeśli masz grupy zabezpieczeń, które odwołują się do innych grup zabezpieczeń w regułach. Jeśli tak, będziesz musiał rozwiązać DependencyErrors, co nie jest trywialne.
Jeśli korzystasz tylko z adresów IP, to rozwiązanie zadziała po utworzeniu klienta boto3:
źródło