aws-cidr-finder -это инструмент и библиотека Python CLI, который находит неиспользованные блоки CIDR (либо IPv4, либо IPv6) в VPCS AWS. Это очень простой инструмент, но он может оказать большую помощь пользователям, которые управляют многими подсетями в одной или нескольких VPC и не хотят тратить деньги, необходимые для использования решения, такого как AWS IPAM.
Проще всего увидеть ценность этого инструмента через пример. Представьте, что у нас есть следующая установка в AWS:
172.31.0.0/16 , с Name 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 позволяет вам быстро вычислить CIDR, которые у вас все еще есть в VPC, не выполняя много раздражающей/утомительной октета математики. Если мы выпустим эту команду:
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 (другими словами, полученная таблица имеет наименьшее количество возможных рядов). Вот почему результат команды отображала только два CIDR: A /19 и A /17 .
Обратите внимание, что первый CIDR составляет
/19вместо, например,/18, потому что/18CIDR будет математически начинаться с IP -адреса172.31.64.0, и что IP -адрес уже взят подсети!
Тем не менее, мы можем изменить это поведение «упрощения», указав флаг --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 мы теперь можем запросить наше доступное сетевое пространство на нашем желаемом уровне детализации. Обратите внимание, что если мы укажем --prefix со значением, ниже любого из префиксов в доступном списке CIDR, эти 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 CIDR, потому что невозможно преобразовать A /19 CIDR в один или более /18 CIDR.
Если у вас установлен Python> = 3,10 и <4.0, aws-cidr-finder может быть установлен из PYPI, используя что-то вроде этого:
pip install aws-cidr-finder Все, что нужно настроить для использования этого CLI, - это профиль AWS CLI или клавиатура. Первый может быть указан с использованием аргумента --profile на CLI, в то время как клавиатура должна быть указана в переменных окружающей среды. Если оба доступны одновременно, aws-cidr-finder предпочтет профиль.
Переменные среды для подхода клавиш - это AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY и, необязательно, AWS_SESSION_TOKEN (если аутентификация с сеансом). Это те же переменные среды, которые использует Бото.
Вы также должны убедиться, что используемый вами профиль/клавиатура имеет доступ к AWS IAM, необходимый для выполнения базовых вызовов API через BOTO. Вот минимальный документ политики 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 onДоступ к данным 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 } " )См. Appling.md для информации, ориентированной на разработчика.