Estoy tratando de encontrar una manera de determinar los grupos de seguridad huérfanos para poder limpiarlos y deshacerme de ellos. ¿Alguien conoce alguna forma de descubrir grupos de seguridad no utilizados?
Ya sea a través de la consola o con las herramientas de línea de comando funcionará (Ejecutar herramientas de línea de comando en máquinas Linux y OSX).
Respuestas:
Nota: esto solo considera el uso de seguridad en EC2, no otros servicios como RDS. Deberá trabajar más para incluir los grupos de seguridad que se utilizan fuera de EC2. Lo bueno es que no puede fácilmente (puede que ni siquiera sea posible) eliminar grupos de seguridad activos si pierde uno asociado con otro servicio.
Con la herramienta AWS CLI más reciente, encontré una manera fácil de obtener lo que necesito:
Primero, obtenga una lista de todos los grupos de seguridad
A continuación, obtener todos los grupos de seguridad atadas a una instancia, y luego entubada a
sort
continuaciónuniq
:Luego júntelo y compare las 2 listas y vea lo que no se está utilizando de la lista maestra:
fuente
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
para describir simplemente las interfaces de red.Si selecciona todos sus grupos de seguridad en la consola de EC2, luego presiona acciones -> Eliminar grupos de seguridad, aparecerá una ventana emergente que le indica que no puede eliminar los grupos de seguridad que están adjuntos a instancias, otros grupos de seguridad o interfaces de red, y enumerará los grupos de seguridad que puede eliminar; es decir, los grupos de seguridad no utilizados :)
fuente
Este es el código de muestra escrito en boto (Python SDK para AWS) para enumerar el grupo de seguridad con la cantidad de instancias con las que está asociado.
Puede usar esta lógica para obtener lo mismo en la línea de comando también
Código Boto
Salida
fuente
Después de aproximadamente un año de uso sin auditar, me pareció necesario auditar mis grupos de seguridad de AWS EC2 y limpiar los grupos heredados no utilizados.
Esta fue una tarea desalentadora de realizar a través de la GUI web, por lo que busqué la AWS CLI para facilitar la tarea. Encontré un comienzo sobre cómo hacer esto en StackOverflow, pero estaba lejos de ser completo. Así que decidí escribir mi propio guión. Usé AWS CLI, MySQL y algo de "Bash-foo" para realizar lo siguiente:
Obtenga una lista de todos los grupos de seguridad de EC2. Guardo la identificación del grupo, el nombre del grupo y la descripción en una tabla llamada "grupos" en una base de datos MySQL llamada aws_security_groups en el localhost. El número total de grupos encontrados se informa al usuario.
Obtenga una lista de todos los grupos de seguridad asociados con cada uno de los siguientes servicios y exclúyalos de la tabla: EC2 Istances EC2 Elastic Load Balancers AWS RDS Instances AWS OpsWorks (no debe eliminarse por Amazon) Grupos de seguridad predeterminados (no se puede eliminar ) ElastiCache
Para cada servicio, informo un recuento del número de grupos que quedan en la tabla después de que se completa la exclusión.
NOTAS: 1. Querrá crear un archivo para almacenar su host MySQL, nombre de usuario y contraseña y apuntar la variable $ DBCONFIG hacia él. Debería estar estructurado así:
Avíseme si lo encuentra útil o si tiene algún comentario, corrección o mejora.
Aquí está el guión.
Y aquí está el sql para crear la base de datos.
fuente
Un ejemplo de boto que imprime los ID de grupo y los nombres solo de los grupos de seguridad que no tienen instancias actuales.
También muestra cómo especificar qué región le preocupa.
Para confirmar los grupos de seguridad están todavía siendo utilizados debe revertir o eliminar la
if len(sg.instances()) == 0
prueba e imprimir ellen(sg.instances())
valor de salida.P.ej
fuente
Con el SDK de AWS de node.js, puedo confirmar que AWS no le permite eliminar los grupos de seguridad que están en uso. Escribí un script que simplemente intenta eliminar todos los grupos y maneja con gracia los errores. Esto funciona para VPC clásicas y modernas. El mensaje de error se puede ver a continuación.
fuente
Entre otras funciones, tanto ScoutSuite como Prowler informan sobre grupos de seguridad EC2 no utilizados. Ambos son de código abierto.
fuente
A los SG conectados a las interfaces de red:
Por nombre:
Por id:
fuente
Hay una herramienta en el mercado de AWS que hace que esto sea mucho más fácil. Le muestra qué grupos están adjuntos / desconectados para una fácil eliminación, pero también compara sus registros de flujo de VPC con las reglas del grupo de seguridad y le muestra qué reglas SG están en uso o no. AWS publicó una solución ELK-stack para hacer esto, pero era ridículamente compleja.
Aquí está la herramienta y un descargo de responsabilidad de que trabajé en ella. Pero espero que todos lo encuentren pertinente: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -unos minutos
fuente
Desafortunadamente, la respuesta elegida no es tan precisa como necesito (he intentado investigar el por qué, pero he preferido implementarlo).
Si reviso TODOS
NetworkInterfaces
, buscando adjuntos a algunoSecurityGroup
, obtengo resultados parciales. Si solo verificoEC2Instances
, también obtengo resultados parciales.Así que ese es mi enfoque del problema:
all_secgrp
all_instances
filter
función y filtrando usando esosecurity-group-id
)all_secgrp
Adjunto puede ver un fragmento de código. No te quejes por la eficiencia, pero trata de optimizarla si quieres.
fuente
Este es un problema difícil si tiene grupos de seguridad que hacen referencia a otros grupos de seguridad en las reglas. Si es así, tendrá que resolver DependencyErrors, que no es trivial.
Si solo usa direcciones IP, esta solución funcionará después de crear un cliente boto3:
fuente