Encontré algunas preguntas similares aquí, pero ninguna que respondiera específicamente a esta pregunta. Tengo varios grupos de seguridad que tienen reglas que permiten todo el tráfico de todas las direcciones IP de origen. Me gustaría inventar un comando CLI simple que los tome por mí.
Después de buscar en algunas fuentes, pensé con seguridad que este comando funcionaría:
$ aws ec2 describe-security-groups --filters "Name=ip-permission.protocol,Values=-1" --query 'SecurityGroups[?length(IpPermissions[?IpProtocol==`-1` && contains(IpRanges[].CidrIp, `0.0.0.0/0`)]) > `0`]' []Sin embargo, esto devuelve una lista vacía. De hecho, reducirlo a solo la primera condición de la consulta devuelve una lista vacía
$ aws ec2 describe-security-groups --filters "Name=ip-permission.protocol,Values=-1" --query 'SecurityGroups[?length(IpPermissions[?IpProtocol==`-1`]) > `0`]' []aunque sacar la consulta anterior (que pensé que coincide con el filtro) devuelve varios grupos de seguridad:
aws ec2 describe-security-groups --filters "Name=ip-permission.protocol,Values=-1" [sg-1, sg-2, sg-3 ...]¿Qué no estoy entendiendo? Gracias por adelantado.
ACTUALIZAR
Esta nueva consulta está más cerca . Está recuperando cada grupo de seguridad que tiene una regla que permite todos los protocolos y una regla que permite el tráfico de todas las direcciones IP. Sin embargo, los grupos de seguridad que se están recuperando actualmente no tienen explícitamente esas dos condiciones en la misma regla que me gustaría.
aws ec2 describe-security-groups --filters "Name=ip-permission.protocol,Values=-1" --query "SecurityGroups[?IpPermissions[?IpProtocol == '-1']] | [?length(IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`)]) > `0`]"Además, creo que sería útil mostrar el objeto JSON para aquellos que no estén familiarizados con su estructura. Puede encontrarlo en esta página hacia la parte inferior.
Resulta que mi comando original en realidad estaba muy cerca. Saqué la lógica con la función length() y ahora funciona.
aws ec2 describe-security-groups --filters "Name=ip-permission.protocol,Values=-1" --query "SecurityGroups[?IpPermissions[?IpProtocol == '-1' && contains(IpRanges[].CidrIp,'0.0.0.0/0')]].GroupId"Espero que esto ayude a alguien en el futuro.
Puede hacer esto a través de aws ec2, pero ¿por qué no usar Trusted Advisor , que ya verifica si hay grupos de seguridad defectuosos?
También puede acceder a sus comprobaciones a través de la CLI mediante el comando describe-trusted-advisor-check-summaries .
Estos cheques son gratuitos para todas las cuentas.