aws-cidr-finder AWS VPC에서 사용하지 않는 CIDR 블록 (IPv4 또는 IPv6)을 찾는 파이썬 CLI 도구 및 라이브러리입니다. 매우 간단한 도구이지만 하나 이상의 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 블록을 병합하여 CIDRS를 자동으로 "단순화"하여 결과 테이블이 CIDR 당 최대 함유 된 공간을 표시하도록합니다 (즉, 결과 테이블에 가능한 최대 행이 가장 적습니다). 그렇기 때문에 명령의 결과에 A /19 와 A /17 두 개의 CIDR 만 표시됩니다.
/18CIDR은 IP 주소172.31.64.0에서 수학적으로 시작해야하며 IP 주소는 이미 서브넷에서 가져 왔기 때문에 첫 번째 CIDR은/19대신/18입니다.
그러나 --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
/18 172.31.96.0/19 /19
Python> = 3.10 및 <4.0이 설치된 경우 aws-cidr-finder 다음과 같은 것을 사용하여 PYPI에서 설치할 수 있습니다.
pip install aws-cidr-finder 이 CLI를 사용하기 위해 구성 해야하는 모든 것은 AWS CLI 프로파일 또는 키패어입니다. 전자는 CLI의 --profile 인수를 사용하여 지정 될 수 있으며, KeyPair는 환경 변수에 지정되어야합니다. 둘 다 동시에 사용할 수 있으면 aws-cidr-finder 프로파일을 선호합니다.
Keypair 접근 방식의 환경 변수는 AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY 이며 선택적으로 AWS_SESSION_TOKEN (세션으로 인증하는 경우)입니다. 이것들은 Boto가 사용하는 것과 동일한 환경 변수입니다.
또한 사용중인 프로파일/키어 에이 프로파일이 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 } " )개발자 중심 정보는 Contributing.md를 참조하십시오.