Ich versuche einen Weg zu finden, um verwaiste Sicherheitsgruppen zu bestimmen, damit ich sie bereinigen und loswerden kann. Kennt jemand eine Möglichkeit, nicht verwendete Sicherheitsgruppen zu erkennen?
Entweder über die Konsole oder mit den Befehlszeilentools funktionieren (Ausführen von Befehlszeilentools auf Linux- und OSX-Computern).
amazon-web-services
amazon-ec2
Strahl
quelle
quelle
Antworten:
Hinweis: Dies berücksichtigt nur die Sicherheitsnutzung in EC2, nicht andere Dienste wie RDS. Sie müssen mehr Arbeit leisten, um Sicherheitsgruppen einzubeziehen, die außerhalb von EC2 verwendet werden. Das Gute ist, dass Sie aktive Sicherheitsgruppen nicht einfach (möglicherweise sogar nicht möglich) löschen können, wenn Sie einen zugeordneten Dienst verpassen.
Mit dem neueren AWS CLI-Tool habe ich einen einfachen Weg gefunden, um das zu bekommen, was ich brauche:
Holen Sie sich zunächst eine Liste aller Sicherheitsgruppen
Dann bekommen alle Sicherheitsgruppen gebunden an eine Instanz, geleitet dann
sort
dannuniq
:Setzen Sie es dann zusammen und vergleichen Sie die 2 Listen und sehen Sie, was nicht aus der Masterliste verwendet wird:
quelle
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
nur die Netzwerkschnittstellen beschreiben.Wenn Sie alle Ihre Sicherheitsgruppen in der EC2-Konsole auswählen und dann auf Aktionen -> Sicherheitsgruppen löschen klicken, wird ein Popup angezeigt, in dem Sie darauf hingewiesen werden, dass Sie keine Sicherheitsgruppen löschen können, die an Instanzen, andere Sicherheitsgruppen oder Netzwerkschnittstellen angeschlossen sind listet die Sicherheitsgruppen auf, die Sie löschen können; dh die nicht verwendeten Sicherheitsgruppen :)
quelle
Dies ist der in boto (Python SDK für AWS) geschriebene Beispielcode, um die Sicherheitsgruppe anhand der Anzahl der Instanzen aufzulisten, denen sie zugeordnet ist.
Sie können diese Logik verwenden, um dasselbe auch in der Befehlszeile zu erhalten
Boto-Code
Ausgabe
quelle
Nach etwa einem Jahr ungeprüfter Verwendung war es für mich erforderlich, meine AWS EC2-Sicherheitsgruppen zu überprüfen und ältere, nicht verwendete Gruppen zu bereinigen.
Dies war eine entmutigende Aufgabe, die über die Web-GUI ausgeführt werden musste. Daher habe ich mich an die AWS-CLI gewandt, um die Aufgabe zu vereinfachen. Ich habe bei StackOverflow einen Anfang gefunden, aber es war noch lange nicht abgeschlossen. Also habe ich beschlossen, mein eigenes Skript zu schreiben. Ich habe die AWS CLI, MySQL und einige "Bash-foo" verwendet, um Folgendes auszuführen:
Holen Sie sich eine Liste aller EC2-Sicherheitsgruppen. Ich speichere die Gruppen-ID, den Gruppennamen und die Beschreibung in einer Tabelle mit dem Namen "groups" in einer MySQL-Datenbank mit dem Namen aws_security_groups auf dem lokalen Host. Die Gesamtzahl der gefundenen Gruppen wird dem Benutzer gemeldet.
Rufen Sie eine Liste aller Sicherheitsgruppen ab, die den folgenden Diensten zugeordnet sind, und schließen Sie sie aus der Tabelle aus: EC2 Istances EC2 Elastic Load Balancers AWS RDS-Instanzen AWS OpsWorks (sollte nicht pro Amazon entfernt werden) Standardsicherheitsgruppen (Kann nicht gelöscht werden ) ElastiCache
Für jeden Dienst gebe ich eine Anzahl der Gruppen an, die nach Abschluss des Ausschlusses in der Tabelle verbleiben.
HINWEISE: 1. Sie möchten eine Datei erstellen, in der Sie Ihren MySQL-Host, Ihren Benutzernamen und Ihr Kennwort speichern und die Variable $ DBCONFIG darauf verweisen. Es sollte so aufgebaut sein:
Lassen Sie mich wissen, wenn Sie dies nützlich finden oder Kommentare, Korrekturen oder Verbesserungen haben.
Hier ist das Skript.
Und hier ist die SQL zum Erstellen der Datenbank.
quelle
Ein Boto-Beispiel zum Drucken der Gruppen-IDs und -Namen nur der Sicherheitsgruppen, die keine aktuellen Instanzen haben.
Außerdem wird gezeigt, wie Sie angeben, um welche Region es sich handelt.
Um zu bestätigen , welche Sicherheitsgruppen sind noch verwendet wird , sollten Sie die rückgängig zu machen oder entfernen
if len(sg.instances()) == 0
Test und drucken Sie denlen(sg.instances())
Wert aus.Z.B
quelle
Mit dem AWS SDK von node.js kann ich bestätigen, dass Sie mit AWS keine verwendeten Sicherheitsgruppen löschen können. Ich habe ein Skript geschrieben, das einfach versucht, alle Gruppen zu löschen und die Fehler ordnungsgemäß zu behandeln. Dies funktioniert für klassische und moderne VPC. Die Fehlermeldung ist unten zu sehen.
quelle
Unter anderem melden sowohl ScoutSuite als auch Prowler nicht verwendete EC2-Sicherheitsgruppen. Beide sind Open Source.
quelle
An die an die Netzwerkschnittstellen angeschlossenen SGs:
Namentlich:
Nach ID:
quelle
Auf dem AWS-Marktplatz gibt es ein Tool, das dies erheblich vereinfacht. Es zeigt Ihnen, welche Gruppen zum einfachen Löschen angehängt / getrennt sind, vergleicht aber auch Ihre VPC-Flussprotokolle mit den Sicherheitsgruppenregeln und zeigt Ihnen, welche SG-Regeln verwendet oder nicht verwendet werden. AWS hat dazu eine ELK-Stack-Lösung veröffentlicht, die jedoch lächerlich komplex war.
Hier ist das Tool und ein Haftungsausschluss, an dem ich gearbeitet habe. Aber ich hoffe, Sie alle finden es relevant: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -ein paar Minuten
quelle
Leider ist die gewählte Antwort nicht so genau wie ich brauche (ich habe versucht, das Warum zu untersuchen, aber ich habe es vorgezogen, sie zu implementieren).
Wenn ich ALLE überprüfe
NetworkInterfaces
und nach Anhängen zu irgendwelchen sucheSecurityGroup
, erhalte ich teilweise Ergebnisse. Wenn ich nur eincheckeEC2Instances
, bekomme ich auch Teilergebnisse zurück.Das ist also meine Herangehensweise an das Problem:
all_secgrp
all_instances
filter
Funktion und Filterung damitsecurity-group-id
).all_secgrp
Im Anhang sehen Sie einen Codeausschnitt. Beschweren Sie sich nicht über die Effizienz, sondern versuchen Sie, sie zu optimieren, wenn Sie möchten.
quelle
Dies ist ein schwieriges Problem, wenn Sie Sicherheitsgruppen haben, die in den Regeln auf andere Sicherheitsgruppen verweisen. In diesem Fall müssen Sie DependencyErrors auflösen, was nicht trivial ist.
Wenn Sie nur IP-Adressen verwenden, funktioniert diese Lösung nach dem Erstellen eines Boto3-Clients:
quelle