aws-cidr-finder AWS VPCSで使用されていないCIDRブロック(IPv4またはIPv6)を見つけるPython CLIツールとライブラリです。これは非常にシンプルなツールですが、1つ以上のVPCで多くのサブネットを管理し、AWS IPAMのようなソリューションを使用するために必要なお金を使いたくないユーザーにとって非常に役立ちます。
このツールの価値を例から見るのが最も簡単です。 AWSで次のセットアップがあると想像してください。
172.31.0.0/16であるVPC、 Hello WorldのNameタグ付き172.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 CLIプロファイルaws-cidr-finder使用すると、多くの迷惑/退屈なオクテット数学を行うことなく、VPCでまだ利用できるCIDRをすばやく計算できます。このコマンドを発行する場合:
aws-cidr-finder --profile myprofileこの出力が表示されるはずです。
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
デフォルトでは、 aws-cidr-finderが隣接するフリーCIDRブロックをマージしてCIDRを自動的に「簡素化」し、結果のテーブルがCIDRあたりの最大連続空間を表示するようにすることに注意する必要があります(言い換えれば、結果のテーブルには可能な限り最も少ない列があります)。これが、コマンドの結果が2つのCIDRのみを表示した理由です。A /19とA /17です。
/18CIDRは数学的にIPアドレス172.31.64.0で開始する必要があり、IPアドレスはすでにサブネットによって取得されているため、最初のCIDRは //18ではなく/19です。
ただし、 --prefix CLIフラグを指定することにより、この「単純化」動作を変更できます。
aws-cidr-finder --profile myprofile --prefix 20これで、予想される出力は次のようになります。
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
--prefix引数を使用すると、利用可能なネットワークスペースを希望するレベルの詳細に照会できるようになりました。利用可能なCIDRSリストのどのプレフィックスよりも低い値を持つ--prefix指定すると、それらのCIDRがスキップされることに注意してください。たとえば、以下を実行する場合:
aws-cidr-finder --profile myprofile --prefix 18この出力が表示されるはずです。
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
スキップされたCIDRは、 172.31.96.0/19 19 CIDRでした。これは、A /19 CIDRを1つ以上の/18 CIDRに変換することが不可能だからです。
Python> = 3.10と<4.0がインストールされている場合、 aws-cidr-finderこのようなものを使用してPypiからインストールできます。
pip install aws-cidr-finderこのCLIを使用するために構成する必要があるのは、AWS CLIプロファイルまたはキーペイアです。前者は、CLIの--profile引数を使用して指定される場合がありますが、キーペイアは環境変数で指定する必要があります。両方が同時に利用可能な場合、 aws-cidr-finderプロファイルを好みます。
Keypairアプローチの環境変数は、 AWS_ACCESS_KEY_ID 、 AWS_SECRET_ACCESS_KEY 、およびオプションでAWS_SESSION_TOKEN (セッションで認証されている場合)です。これらは、ボトが使用するのと同じ環境変数です。
また、使用しているプロファイル/keypairに、Botoを介して基礎となるAPI呼び出しを行うために必要なAWS IAMアクセスがあることを確認する必要があります。この要件を満たす最小限のIAMポリシー文書は次のとおりです。
{
"Effect" : " Allow " ,
"Action" : [
" ec2:DescribeVpcs " ,
" ec2:DescribeSubnets "
],
"Resource" : " * "
}上記のアクションの詳細については、こちらをご覧ください。
このツールのCLIインターフェイスの詳細なデモについては、上記の例を参照してください。また、 aws-cidr-finder --helpを使用してコマンドラインオプションを表示することもできます。
設定:
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 onCIDRデータへのアクセス:
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 } " )開発者指向の情報については、converting.mdを参照してください。