aws-cidr-finder é uma ferramenta e biblioteca Python CLI que encontra blocos CIDR não utilizados (IPv4 ou IPv6) nos VPCs da AWS. É uma ferramenta muito simples, mas pode ser de grande ajuda para os usuários que gerenciam muitas sub -redes em um ou mais VPCs e não desejam gastar o dinheiro necessário para usar uma solução como o AWS IPAM.
É mais fácil ver o valor dessa ferramenta através de um exemplo. Imagine que temos a seguinte configuração na AWS:
172.31.0.0/16 , com uma etiqueta Name do 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 permite calcular rapidamente os CIDRs que você ainda tem disponível no VPC sem ter que fazer muito matemática de octeto irritante/tediosa. Se emitirmos este comando:
aws-cidr-finder --profile myprofileDevemos ver esta saída:
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
Você deve observar que, por padrão, aws-cidr-finder "simplificará" os CIDRs automaticamente, mesclando blocos CIDR gratuitos adjacentes, para que a tabela resultante mostre o espaço máximo contíguo por CIDR (em outras palavras, a tabela resultante tem o menor número de linhas possíveis). É por isso que o resultado do comando exibiu apenas dois Cidrs: A /19 e A /17 .
Observe que o primeiro CIDR é
/19em vez de, por exemplo,/18, porque o/18CIDR teria que começar matematicamente no endereço IP172.31.64.0, e esse endereço IP já foi adotado por uma sub -rede!
No entanto, podemos alterar esse comportamento de "simplificação" especificando a bandeira da cli --prefix :
aws-cidr-finder --profile myprofile --prefix 20Agora, a saída esperada deve parecer algo assim:
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
Com o argumento --prefix , agora podemos consultar nosso espaço de rede disponível para o nível de detalhe desejado. Observe que, se especificarmos um --prefix com um valor menor que qualquer um dos prefixos na lista CIDRS disponível, esses CIDRs serão ignorados. Por exemplo, se executarmos o seguinte:
aws-cidr-finder --profile myprofile --prefix 18Devemos ver esta saída:
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
O CIDR que foi ignorado foi o 172.31.96.0/19 CIDR porque é impossível converter A /19 CIDR em um ou mais /18 CIDRs.
Se você possui python> = 3.10 e <4,0 instalado, aws-cidr-finder pode ser instalado a partir da Pypi usando algo assim:
pip install aws-cidr-finder Tudo o que precisa ser configurado para usar essa CLI é um perfil da CLI da AWS ou um teclado. O primeiro pode ser especificado usando o argumento --profile na CLI, enquanto o teclado deve ser especificado em variáveis de ambiente. Se ambos estiverem disponíveis ao mesmo tempo, aws-cidr-finder preferirá o perfil.
As variáveis de ambiente para a abordagem do teclado são AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY e opcionalmente AWS_SESSION_TOKEN (se autenticar com uma sessão). Essas são as mesmas variáveis de ambiente que o BOTO usa.
Você também deve garantir que o perfil/teclado que você está usando tenha o acesso do AWS IAM necessário para fazer as chamadas da API subjacente via BOTO. Aqui está um documento de política mínima do IAM que preenche este requisito:
{
"Effect" : " Allow " ,
"Action" : [
" ec2:DescribeVpcs " ,
" ec2:DescribeSubnets "
],
"Resource" : " * "
}Leia mais sobre as ações mostradas acima aqui.
Veja um exemplo acima para uma demonstração detalhada da interface da CLI desta ferramenta. Você também pode usar aws-cidr-finder --help para ver as opções da linha de comando.
Configurar:
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 onAcessando os dados do 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 Contribuindo.md para obter informações orientadas para o desenvolvedor.