Descripción del problema
Los grupos de seguridad de AWS tienen como objetivo filtrar el tráfico de entrada/salida a una instancia de EC2. Las prácticas recomendadas de seguridad requieren garantizar que los grupos de seguridad de AWS restrinjan Todo el tráfico público y no permita acceso sin restricciones (dirección IP con sufijo /0) para reducir la posibilidad de ciberataques, violaciones y riesgos de pérdida de datos.
Nuestras recomendaciones le ayudarán a encontrar todos los grupos de seguridad con acceso sin restricciones (es decir, 0.0.0.0/0) a sus instancias EC2 mediante AWS CLI. Como resultado Obtendrá una lista de grupos de seguridad con reglas que permiten acceso sin restricciones., que le ayuda a tomar medidas esenciales desde el punto de vista de la seguridad y permitir la autorización solo de hosts conocidos.
Recomendaciones
Paso 1
Si queremos encontrar todos los SG debemos recorrer todas las regiones disponibles.
Comando CLI de AWS:
aws ec2 describe-regions --query "Regions[].RegionName" --texto de salida
Puede encontrar más información aquí:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-regions.html
Paso 2
Para cada región disponible, debemos revisar todos los puertos de destino (22 y 3389 en nuestro caso) y encontrar todos los grupos de seguridad con estos puertos que están permitidos desde direcciones cero cidr, es decir, 0.0.0.0/0 para ipv4 y ::/0 para ipv6
Comando CLI de AWS:
aws ec2 describe-security-groups --region "$region" --filters Nombre=permiso-ip.desde-puerto,Valores=$port Nombre=permiso-ip.hasta-puerto,Valores=$port --query 'SecurityGroups[?((IpPermissions.IpRanges.CidrIp == "0.0.0.0/0") || (IpPermissions.Ipv6Ranges.CidrIpv6 == "::/0"))].[GroupId]' --texto de salida
Puede encontrar más información aquí:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-groups.html
Optimización gratuita de los costos de la nube. De por vida
Nota 1
Las reglas de entrada para grupos de seguridad permiten especificar rangos de puertos como [20, 25]. Lamentablemente, AWS CLI no permite la comparación para el filtrado del lado del servidor. En este caso, considere usar algo más potente que AWS CLI.
Nota 2
AWS CLI tiene un mecanismo de paginación para grandes cantidades de datos en la salida. Si tiene muchos SG en una región, el script proporcionado procesará solo la primera página. Considere usar algo más potente que AWS CLI.
Como resultado, una línea de comando:
para la región en $(aws ec2 describe-regions --query "Regions[].RegionName" --texto de salida); hacer para el puerto en 22 3389; hacer para groupId en $(aws ec2 describe-security-groups --region "$region" --filters Nombre=ip-permission.from-port,Values=$port Nombre=ip-permission.to-port,Values=$port --query 'SecurityGroups[?((IpPermissions.IpRanges.CidrIp == "0.0.0.0/0") || (IpPermissions.Ipv6Ranges.CidrIpv6 == "::/0"))].[GroupId]' --texto de salida); hacer echo "Región: $region Puerto: $port GroupId: $groupId"; hecho; hecho; hecho
Ejemplo de salida:
… Región: ap-south-1 Puerto: 3389 GroupId: sg-040f94474611b14fb Región: ap-south-1 Puerto: 3389 GroupId: sg-0a79acb4f95e1ce90 Región: eu-west-3 Puerto: 22 GroupId: sg-0e88381b1b9c5c6b4 …
La mejor práctica de seguridad es eliminar las contraseñas de la consola de administración de AWS cuando los usuarios abandonan su organización, ya no las necesitan o simplemente usan claves de acceso (una combinación de un ID de clave de acceso y una clave de acceso secreta) para acceder a la cuenta de AWS.
✔️ Encuentre la mejor manera de encontrar usuarios inactivos de IAM con acceso a la consola de administración de AWS para evitar problemas de seguridad → https://hystax.com/the-best-way-to-find-inactive-iam-users-with-aws-management-console-access-to-avoid-security-issues