J'essaie de trouver un moyen de déterminer les groupes de sécurité orphelins afin que je puisse nettoyer et m'en débarrasser. Quelqu'un connaît-il un moyen de découvrir les groupes de sécurité inutilisés?
Soit via la console, soit avec les outils de ligne de commande fonctionnera (Exécution des outils de ligne de commande sur les machines Linux et OSX).
Réponses:
Remarque: cela ne prend en compte que l'utilisation de la sécurité dans EC2, pas d'autres services comme RDS. Vous devrez faire plus de travail pour inclure les groupes de sécurité utilisés en dehors d'EC2. La bonne chose est que vous ne pouvez pas facilement (peut-être même pas possible) supprimer des groupes de sécurité actifs si vous manquez un associé avec un autre service.
En utilisant le nouvel outil AWS CLI, j'ai trouvé un moyen simple d'obtenir ce dont j'ai besoin:
Tout d'abord, obtenez une liste de tous les groupes de sécurité
Ensuite, obtenez tous les groupes de sécurité liés à une instance, puis dirigés vers
sort
ensuiteuniq
:Ensuite, rassemblez-les et comparez les 2 listes et voyez ce qui n'est pas utilisé dans la liste principale:
la source
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
pour simplement décrire les interfaces réseau.Si vous sélectionnez tous vos groupes de sécurité dans la console EC2, puis appuyez sur actions -> Supprimer les groupes de sécurité, une fenêtre contextuelle apparaîtra vous indiquant que vous ne pouvez pas supprimer les groupes de sécurité attachés à des instances, à d'autres groupes de sécurité ou à des interfaces réseau. listera les groupes de sécurité que vous pouvez supprimer; c'est à dire les groupes de sécurité inutilisés :)
la source
Il s'agit de l'exemple de code écrit en boto (Python SDK for AWS) pour répertorier le groupe de sécurité par rapport au nombre d'instances auxquelles il est associé.
Vous pouvez également utiliser cette logique pour obtenir la même chose en ligne de commande
Code Boto
Production
la source
Après environ un an d'utilisation non auditée, j'ai jugé nécessaire d'auditer mes groupes de sécurité AWS EC2 et de nettoyer les groupes hérités et inutilisés.
C'était une tâche ardue à effectuer via l'interface graphique Web, alors j'ai regardé l'AWS CLI pour faciliter la tâche. J'ai trouvé un début sur la façon de faire cela chez StackOverflow, mais c'était loin d'être terminé. J'ai donc décidé d'écrire mon propre scénario. J'ai utilisé l'AWS CLI, MySQL et certains «Bash-foo» pour effectuer les opérations suivantes:
Obtenez une liste de tous les groupes de sécurité EC2. Je stocke l'identifiant du groupe, le nom du groupe et la description dans un tableau appelé «groupes» dans une base de données MySQL appelée aws_security_groups sur l'hôte local. Le nombre total de groupes trouvés est signalé à l'utilisateur.
Obtenez une liste de tous les groupes de sécurité associés à chacun des services suivants et excluez-les du tableau: EC2 Istances EC2 Elastic Load Balancers Instances AWS RDS AWS OpsWorks (ne doit pas être supprimé par Amazon) Groupes de sécurité par défaut (ne peut pas être supprimé ) ElastiCache
Pour chaque service, je signale un décompte du nombre de groupes restants dans le tableau une fois l'exclusion terminée.
REMARQUES: 1. Vous voudrez créer un fichier pour stocker votre hôte MySQL, votre nom d'utilisateur et votre mot de passe et pointer la variable $ DBCONFIG dessus. Il devrait être structuré comme ceci:
Faites-moi savoir si vous trouvez cela utile ou avez des commentaires, des correctifs ou des améliorations.
Voici le script.
Et voici le sql pour créer la base de données.
la source
Un exemple de boto imprimant uniquement les ID et les noms de groupe des groupes de sécurité qui n'ont pas d'instances actuelles.
Il montre également comment spécifier la région qui vous intéresse.
Pour confirmer quels groupes de sécurité sont encore utilisés, vous devez inverser ou supprimer le
if len(sg.instances()) == 0
test et imprimer lelen(sg.instances())
valeur.Par exemple
la source
À l'aide du kit SDK AWS node.js, je peux confirmer qu'AWS ne vous autorise pas à supprimer les groupes de sécurité en cours d'utilisation. J'ai écrit un script qui essaie simplement de supprimer tous les groupes et gère gracieusement les erreurs. Cela fonctionne pour les VPC classiques et modernes. Le message d'erreur peut être vu ci-dessous.
la source
Entre autres fonctions, ScoutSuite et Prowler signalent les groupes de sécurité EC2 inutilisés. Les deux sont open source.
la source
Aux SG connectés aux interfaces réseau:
De nom:
Par identifiant:
la source
Il existe un outil sur le marché AWS qui facilite grandement les choses. Il vous montre quels groupes sont attachés / détachés pour une suppression facile, mais il compare également vos journaux de flux VPC aux règles de groupe de sécurité et vous montre quelles règles SG sont utilisées ou inutilisées. AWS a publié une solution ELK-stack pour ce faire, mais c'était ridiculement complexe.
Voici l'outil et une clause de non-responsabilité indiquant que j'ai travaillé dessus. Mais j'espère que vous le trouverez tous pertinent: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -quelques minutes
la source
Malheureusement, la réponse choisie n'est pas aussi précise que nécessaire (j'ai essayé d'enquêter sur le pourquoi, mais j'ai préféré l'implémenter).
Si je coche TOUT
NetworkInterfaces
, à la recherche de pièces jointesSecurityGroup
, cela me donne des résultats partiels. Si je vérifie uniquementEC2Instances
, cela me récupère également des résultats partiels.Voilà donc mon approche du problème:
all_secgrp
all_instances
filter
fonction et en filtrant en utilisant cettesecurity-group-id
)all_secgrp
En pièce jointe, vous pouvez voir un extrait de code. Ne vous plaignez pas de l'efficacité, mais essayez de l'optimiser si vous le souhaitez.
la source
Il s'agit d'un problème difficile si vous avez des groupes de sécurité qui référencent d'autres groupes de sécurité dans les règles. Si tel est le cas, vous devrez résoudre DependencyErrors, ce qui n'est pas trivial.
Si vous n'utilisez que des adresses IP, cette solution fonctionnera après avoir créé un client boto3:
la source