aws-cidr-finder ist ein Python-CLI-Tool und eine Bibliothek, die nicht verwendete CIDR-Blöcke (entweder IPv4 oder IPv6) in AWS VPCs findet. Es ist ein sehr einfaches Tool, aber es kann für Benutzer, die viele Subnetze in einem oder mehreren VPCs verwalten, von großer Hilfe sein und das Geld nicht ausgeben möchten, um eine Lösung wie AWS IPAM zu verwenden.
Es ist am einfachsten, den Wert dieses Tools durch ein Beispiel zu erkennen. Stellen Sie sich vor, wir haben das folgende Setup in AWS:
172.31.0.0/16 ist, mit einem Name von 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 können Sie die CIDRs, die Sie noch im VPC zur Verfügung haben, schnell berechnen, ohne eine Menge nerviger/langwieriger Oktettmathematik ausführen zu müssen. Wenn wir diesen Befehl ausgeben:
aws-cidr-finder --profile myprofileWir sollten diese Ausgabe sehen:
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
Sie sollten feststellen, dass aws-cidr-finder standardmäßig die CIDRs automatisch "vereinfachen", indem benachbarte freie CIDR-Blöcke zusammengeführt werden, sodass die resultierende Tabelle den maximalen zusammenhängenden Raum pro CIDR zeigt (mit anderen Worten, die resultierende Tabelle hat die wenige mögliche Anzahl von Reihen möglich). Aus diesem Grund wurde das Ergebnis des Befehls nur zwei CIDRs angezeigt: A /19 und A /17 .
Beachten Sie, dass das erste CIDR
/19anstelle von beispielsweise/18ist, da der/18-CIDR mathematisch an der IP -Adresse172.31.64.0beginnen muss und diese IP -Adresse bereits von einem Subnetz übernommen wird!
Wir können dieses Verhalten "Vereinfachung" jedoch ändern, indem wir die Flag --prefix -CLI -Flagge angeben:
aws-cidr-finder --profile myprofile --prefix 20Jetzt sollte die erwartete Ausgabe ungefähr so aussehen:
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
Mit dem Argument --prefix können wir jetzt unseren verfügbaren Netzwerkraum nach unserem gewünschten Detailniveau abfragen. Beachten Sie, dass diese CIDRs übersprungen werden, wenn wir eine --prefix mit einem Wert niedriger als eines der Präfixe in der verfügbaren CIDRS -Liste angeben. Zum Beispiel, wenn wir Folgendes ausführen:
aws-cidr-finder --profile myprofile --prefix 18Wir sollten diese Ausgabe sehen:
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
Das CIDR, das übersprungen wurde, war das CIDR 172.31.96.0/19 da es unmöglich ist, A /19 -CIDR in einen oder mehrere /18 -CIDRs umzuwandeln.
Wenn Sie Python> = 3.10 und <4.0 installiert haben, kann aws-cidr-finder von PYPI mit so etwas installiert werden:
pip install aws-cidr-finder Alles, was konfiguriert werden muss, um diese CLI zu verwenden, ist ein AWS -CLI -Profil oder ein Tastar. Ersteres kann unter Verwendung des Arguments --profile auf der CLI angegeben werden, während der Tastatur in Umgebungsvariablen angegeben werden muss. Wenn beide gleichzeitig verfügbar sind, bevorzugt aws-cidr-finder das Profil.
Die Umgebungsvariablen für den Tastaturansatz sind AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY und optional AWS_SESSION_TOKEN (wenn sich mit einer Sitzung authentifiziert). Dies sind die gleichen Umgebungsvariablen, die Boto verwendet.
Sie sollten auch sicherstellen, dass das von Ihnen verwendete Profil/Tastatur den AWS -Zugriff aufweist, um die zugrunde liegenden API -Anrufe über Boto zu tätigen. Hier ist ein minimales IAM -Richtliniendokument, das diese Anforderung erfüllt:
{
"Effect" : " Allow " ,
"Action" : [
" ec2:DescribeVpcs " ,
" ec2:DescribeSubnets "
],
"Resource" : " * "
}Lesen Sie mehr über die oben gezeigten Aktionen.
Ein Beispiel oben finden Sie eine detaillierte Demonstration der CLI -Schnittstelle dieses Tools. Sie können auch aws-cidr-finder --help verwenden, um Befehlszeilenoptionen anzuzeigen.
Aufstellen:
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 onZugriff auf die CIDR -Daten:
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 } " )Siehe Mitwirkende.md für Entwickler-orientierte Informationen.