aws-cidr-finder es una herramienta y biblioteca de Python CLI que encuentra bloques CIDR no utilizados (ya sea IPv4 o IPv6) en AWS VPCS. Es una herramienta muy simple, pero puede ser de gran ayuda para los usuarios que administran muchas subredes en una o más VPC y no quieren gastar el dinero requerido para usar una solución como AWS IPAM.
Es más fácil ver el valor de esta herramienta a través de un ejemplo. Imagina que tenemos la siguiente configuración en AWS:
172.31.0.0/16 , con una etiqueta Name de Hello World172.31.0.0/20172.31.16.0/20172.31.32.0/20172.31.48.0/20172.31.64.0/20172.31.80.0/20myprofile aws-cidr-finder le permite calcular rápidamente los CIDR que aún tiene disponibles en el VPC sin tener que hacer muchas matemáticas de octetos molestas/tediosas. Si emitimos este comando:
aws-cidr-finder --profile myprofileDeberíamos ver esta salida:
Here are the available CIDR blocks in the 'Hello World' VPC (VPC CIDR block '172.31.0.0/16'):
CIDR IP Count
--------------- ----------
172.31.96.0/19 8192
172.31.128.0/17 32768
Total 40960
Debe notar que, por defecto, aws-cidr-finder "simplificará" automáticamente los CIDR fusionando bloques CIDR libres adyacentes para que la tabla resultante muestre el espacio contiguo máximo por CIDR (en otras palabras, la tabla resultante tiene la menor cantidad de filas posibles). Es por eso que el resultado del comando mostró solo dos CIDR: A /19 y A /17 .
Tenga en cuenta que el primer CIDR es
/19en lugar de, por ejemplo,/18, porque el CIDR/18tendría que comenzar matemáticamente en la dirección IP172.31.64.0, ¡y esa dirección IP ya está tomada por una subred!
Sin embargo, podemos cambiar este comportamiento de "simplificación" especificando el indicador CLI --prefix :
aws-cidr-finder --profile myprofile --prefix 20Ahora, la salida esperada debería verse algo así:
Here are the available CIDR blocks in the 'Hello World' VPC (VPC CIDR block '172.31.0.0/16'):
CIDR IP Count
--------------- ----------
172.31.96.0/20 4096
172.31.112.0/20 4096
172.31.128.0/20 4096
172.31.144.0/20 4096
172.31.160.0/20 4096
172.31.176.0/20 4096
172.31.192.0/20 4096
172.31.208.0/20 4096
172.31.224.0/20 4096
172.31.240.0/20 4096
Total 40960
Con el argumento --prefix , ahora podemos consultar nuestro espacio de red disponible para nuestro nivel de detalle deseado. Tenga en cuenta que si especificamos un --prefix con un valor más bajo que cualquiera de los prefijos en la lista CIDRS disponible, esos CIDR serán omitidos. Por ejemplo, si ejecutamos lo siguiente:
aws-cidr-finder --profile myprofile --prefix 18Deberíamos ver esta salida:
Note: skipping CIDR '172.31.96.0/19' because its prefix (19) is numerically greater than the requested prefix (18)
Here are the available CIDR blocks in the 'Hello World' VPC (VPC CIDR block '172.31.0.0/16'):
CIDR IP Count
--------------- ----------
172.31.128.0/18 16384
172.31.192.0/18 16384
Total 32768
El CIDR que se saltó fue el 172.31.96.0/19 CIDR porque es imposible convertir A /19 CIDR en uno o más /18 CIDR.
Si tiene Python> = 3.10 y <4.0 instalado, aws-cidr-finder se puede instalar desde Pypi usando algo como esto:
pip install aws-cidr-finder Todo lo que debe configurarse para usar esta CLI es un perfil AWS CLI o un KeyPair. El primero puede especificarse utilizando el argumento --profile en la CLI, mientras que el KeyPair debe especificarse en las variables de entorno. Si ambos están disponibles al mismo tiempo, aws-cidr-finder preferirá el perfil.
Las variables de entorno para el enfoque KEYPAIR son AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY , y opcionalmente AWS_SESSION_TOKEN (si se autentica con una sesión). Estas son las mismas variables de entorno que Boto usa.
También debe asegurarse de que el perfil/keypair que esté utilizando tenga el acceso AWS IAM necesario para realizar las llamadas API subyacentes a través de Boto. Aquí hay un documento mínimo de Política IAM que llena este requisito:
{
"Effect" : " Allow " ,
"Action" : [
" ec2:DescribeVpcs " ,
" ec2:DescribeSubnets "
],
"Resource" : " * "
}Lea más sobre las acciones que se muestran arriba aquí.
Vea un ejemplo anterior para una demostración detallada de la interfaz CLI de esta herramienta. También puede usar aws-cidr-finder --help para ver las opciones de línea de comandos.
Configuración:
from aws_cidr_finder import JSONOutput , find_available_cidrs
# All arguments
output : JSONOutput = find_available_cidrs ( profile_name = "" , region = "" , ipv6 = False , desired_prefix = 20 )
# Minimal arguments (profile-based authentication)
output : JSONOutput = find_available_cidrs ( profile_name = "" )
# Minimal arguments (environment variable-based authentication)
output : JSONOutput = find_available_cidrs ()
# Other miscellaneous combinations
output : JSONOutput = find_available_cidrs ( profile_name = "" , ipv6 = True )
output : JSONOutput = find_available_cidrs ( profile_name = "" , desired_prefix = 16 )
output : JSONOutput = find_available_cidrs ( region = "" )
# ...and so onAcceder a los datos de CIDR:
output : JSONOutput = find_available_cidrs (...) # See above
for message in output [ "messages" ]:
# Print the messages that would have been written to STDOUT when using the CLI
print ( message )
for cidr in output [ "cidrs_not_converted_to_prefix" ]:
# If aws-cidr-finder could not convert a given available CIDR block into one or more CIDR blocks
# with the requested desired_prefix, it will be returned in this list
# Note: this list is only populated if you passed desired_prefix to find_available_cidrs
print ( f"aws-cidr-finder did not convert the following CIDR block to the desired prefix: { cidr } " )
for vpc in output [ "data" ]:
# Print all the information that is available in the VPC dict
print ( f'VPC ID: { vpc [ "id" ] } ' )
print ( f'VPC Name: { vpc [ "name" ] } ' )
print ( f'VPC CIDR: { vpc [ "cidr" ] } ' )
for cidr in vpc [ "available_cidr_blocks" ]:
print ( f"Available CIDR block: { cidr } " )Consulte Contriping.MD para información orientada al desarrollador.