aws-cidr-finder est un outil CLI Python et une bibliothèque qui trouve des blocs CIDR inutilisés (IPv4 ou IPv6) dans AWS VPCS. C'est un outil très simple, mais il peut être d'une grande aide aux utilisateurs qui gèrent de nombreux sous-réseaux sur un ou plusieurs VPC et ne souhaitent pas dépenser l'argent requis pour utiliser une solution comme AWS IPAM.
Il est plus facile de voir la valeur de cet outil à travers un exemple. Imaginez que nous avons la configuration suivante dans AWS:
172.31.0.0/16 , avec une étiquette 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 vous permet de calculer rapidement les CIDR que vous disposez toujours dans le VPC sans avoir à faire beaucoup de mathématiques d'octet ennuyeux / fastidieux. Si nous émettez cette commande:
aws-cidr-finder --profile myprofileNous devrions voir cette sortie:
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
Vous devez remarquer que, par défaut, aws-cidr-finder "simplifiera automatiquement" les CIDRS en fusionnant les blocs CIDR libres adjacents afin que le tableau résultant montre l'espace contigu maximum par CIDR (en d'autres termes, le tableau résultant a le moins de lignes possible). C'est pourquoi le résultat de la commande n'a affiché que deux CIDRS: A /19 et A /17 .
Notez que le premier CIDR est
/19au lieu de, par exemple,/18, car le CIDR/18devrait mathématiquement commencer à l'adresse IP172.31.64.0, et que l'adresse IP est déjà prise par un sous-réseau!
Cependant, nous pouvons modifier ce comportement de "simplification" en spécifiant l'indicateur CLI --prefix :
aws-cidr-finder --profile myprofile --prefix 20Maintenant, la sortie attendue devrait ressembler à ceci:
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
Avec l'argument --prefix , nous pouvons désormais interroger notre espace de réseau disponible à notre niveau de détail souhaité. Notez que si nous spécifions un --prefix avec une valeur inférieure à tous les préfixes de la liste CIDRS disponible, ces CIDR seront ignorés. Par exemple, si nous exécutons ce qui suit:
aws-cidr-finder --profile myprofile --prefix 18Nous devrions voir cette sortie:
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
Le CIDR qui a été sauté était le CIDR 172.31.96.0/19 car il est impossible de convertir A /19 CIDR en un ou plusieurs CIDRS /18 .
Si vous avez installé Python> = 3.10 et <4.0, aws-cidr-finder peut être installé à partir de PYPI en utilisant quelque chose comme ceci:
pip install aws-cidr-finder Tout ce qui doit être configuré pour utiliser ce CLI est un profil CLI AWS ou une clés. Le premier peut être spécifié à l'aide de l'argument --profile sur la CLI, tandis que la clés doit être spécifiée dans les variables d'environnement. Si les deux sont disponibles en même temps, aws-cidr-finder préférera le profil.
Les variables d'environnement pour l'approche des clés sont AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY , et éventuellement AWS_SESSION_TOKEN (si vous authentifiez avec une session). Ce sont les mêmes variables d'environnement que Boto utilise.
Vous devez également vous assurer que le profil / clés que vous utilisez a l'accès AWS IAM nécessaire pour passer les appels API sous-jacents via Boto. Voici un document de politique IAM minimal qui remplit cette exigence:
{
"Effect" : " Allow " ,
"Action" : [
" ec2:DescribeVpcs " ,
" ec2:DescribeSubnets "
],
"Resource" : " * "
}En savoir plus sur les actions ci-dessus ici.
Voir un exemple ci-dessus pour une démonstration détaillée de l'interface CLI de cet outil. Vous pouvez également utiliser aws-cidr-finder --help pour voir les options de ligne de commande.
Installation:
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 onAccéder aux données 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 } " )Voir contribution.md pour les informations axées sur les développeurs.