aws-cidr-finder เป็นเครื่องมือและไลบรารี Python CLI ที่พบบล็อก CIDR ที่ไม่ได้ใช้ (IPv4 หรือ IPv6) ใน AWS VPCS มันเป็นเครื่องมือที่ง่ายมาก แต่มันสามารถช่วยได้อย่างดีสำหรับผู้ใช้ที่จัดการเครือข่ายย่อยจำนวนมากใน 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 ช่วยให้คุณสามารถคำนวณ CIDRs ที่คุณยังคงมีอยู่ใน VPC ได้อย่างรวดเร็วโดยไม่ต้องทำคณิตศาสตร์ Octet ที่น่ารำคาญ/น่าเบื่อมากมาย หากเราออกคำสั่งนี้:
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 (กล่าวอีกนัยหนึ่งตารางผลลัพธ์มีจำนวนแถวที่เป็นไปได้น้อยที่สุด) นี่คือเหตุผลที่ผลลัพธ์ของคำสั่งแสดงเพียงสอง CIDRS: A /19 และ A /17
โปรดทราบว่า CIDR แรกคือ
/19แทนที่จะเป็นตัวอย่างเช่น/18เนื่องจาก/18CIDR จะต้องเริ่มต้นที่ที่อยู่ IP172.31.64.0และที่อยู่ IP นั้นถูกนำมาใช้โดยซับเน็ตแล้ว!
อย่างไรก็ตามเราสามารถเปลี่ยนพฤติกรรม "การทำให้เข้าใจง่าย" นี้โดยการระบุ --prefix CLI Flag:
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 ที่มีค่าต่ำกว่าคำนำหน้าใด ๆ ในรายการ CIDRS ที่มีอยู่ 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 CIDRs
หากคุณมี 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 (ถ้าตรวจสอบด้วยเซสชัน) เหล่านี้เป็นตัวแปรสภาพแวดล้อมเดียวกันกับที่ Boto ใช้
คุณควรตรวจสอบให้แน่ใจว่าโปรไฟล์/แป้นพิมพ์ที่คุณใช้มีการเข้าถึง 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 } " )ดูการสนับสนุน. MD สำหรับข้อมูลที่มุ่งเน้นนักพัฒนา