aws-cidr-finder هي أداة ومكتبة Python CLI التي تجد كتل CIDR غير المستخدمة (إما IPv4 أو IPv6) في AWS VPCs. إنها أداة بسيطة للغاية ، ولكن يمكن أن تكون ذات مساعدة كبيرة للمستخدمين الذين يديرون العديد من الشبكات الفرعية عبر واحد أو أكثر من VPCs ولا يرغبون في إنفاق الأموال اللازمة لاستخدام حل مثل 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 دون الحاجة إلى القيام بالكثير من الرياضيات المزعجة/الشاقة. إذا أصدرنا هذا الأمر:
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 تلقائيًا على "تبسيط" CIDRs عن طريق دمج كتل CIDR المجاورة المجاورة بحيث يوضح الجدول الناتج الحد الأقصى للمساحة المتجاورة لكل CIDR (بمعنى آخر ، يحتوي الجدول الناتج على عدد أقل من الصفوف الممكنة). هذا هو السبب في أن نتيجة الأمر عرض اثنين فقط من CIDRs: A /19 و A /17 .
لاحظ أن CIDR الأول هو
/19بدلاً من ، على سبيل المثال ،/18، لأن/18CIDR سيتعين على رياضيا أن تبدأ من عنوان IP172.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 ، يمكننا الآن الاستعلام عن مساحة الشبكات المتاحة لدينا إلى مستوى التفاصيل المطلوب. لاحظ أنه إذا حددنا A --prefix بقيمة أقل من أي من البادئات في قائمة CIDRs المتاحة ، فسيتم تخطي تلك CIDRs. على سبيل المثال ، إذا قمنا بتشغيل ما يلي:
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 أو keypair. قد يتم تحديد السابق باستخدام الوسيطة --profile على CLI ، بينما يجب تحديد keypair في متغيرات البيئة. إذا كان كلاهما متاحًا في نفس الوقت ، aws-cidr-finder تفضل الملف الشخصي.
متغيرات البيئة لنهج KEYPAIR هي AWS_ACCESS_KEY_ID و AWS_SECRET_ACCESS_KEY و AWS_SESSION_TOKEN اختياريًا (إذا كانت المصادقة مع جلسة). هذه هي نفس متغيرات البيئة التي يستخدمها Boto.
يجب عليك أيضًا التأكد من أن الملف الشخصي/Keypair الذي تستخدمه لديه AWS IAM Access اللازمة لإجراء مكالمات 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 للمعلومات الموجهة للمطور.