
أداة متعددة الخيوط لجمع مخزون AWS مع التركيز على الموارد والبيانات الوصفية ذات الصلة بالأمان.
أداة متعددة الخيوط لجمع قوائم جرد AWS موجهة للأمان، مكتوبة بلغة Ruby.
تم إنشاء هذه الأداة لتسهيل الجمع الفعّال لعدد كبير من سمات وبيانات وصف موارد AWS. تهدف إلى جمع كل ما هو تقريبًا ذو صلة بتكوين الأمان ووضعية بيئة AWS.
الأدوات الحالية (مثل AWS Config) التي تقوم بجمع الموارد تفتقر إلى التغطية والدقة اللازمة لقياس وضعية الأمان بدقة (مثل بيانات سمات الموارد المفصلة، ووثائق السياسات المحللة بالكامل، وعلاقات الموارد المتداخلة).
تتعامل AWS Recon مع الجمع من الحسابات الكبيرة من خلال الاستفادة من إعادة المحاولة التلقائية (سواء بسبب موثوقية الشبكة أو تقييد API)، والترحيل التلقائي للاستجابات الكبيرة (> 100 مورد لكل استدعاء API)، وطلبات متوازية متعددة الخيوط لتسريع الجمع.
** الاستخدام لا يعني المصادقة
تحتاج AWS Recon إلى دور أو بيانات اعتماد لحساب AWS مع صلاحية ReadOnlyAccess. صلاحية AdministratorAccess الكاملة هي صلاحية مفرطة، ولكنها ستعمل أيضًا. سياسة SecurityAudit ليست كافية لأنها تفتقر إلى الوصول إلى العديد من الخدمات.
استخدم إصدار Docker 19.x أو أعلى لتشغيل الصورة المبنية مسبقًا دون الحاجة إلى تثبيت أي شيء.
إذا كان لديك Ruby مثبتًا بالفعل (2.6.x أو 2.7.x)، فقد ترغب في تثبيت الـ gem.
يمكن تشغيل AWS Recon محليًا عبر حاوية Docker أو عن طريق تثبيت الـ gem الخاص بـ Ruby.
للتشغيل عبر حاوية Docker، قم بتمرير بيانات اعتماد AWS اللازمة إلى أمر run الخاص بـ Docker. على سبيل المثال:
$ docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -v -s EC2 -r global,us-east-1,us-east-2
للتشغيل محليًا، قم أولاً بتثبيت الـ gem:
$ gem install aws_recon
Fetching aws_recon-0.5.17.gem
Fetching aws-sdk-3.0.1.gem
Fetching parallel-1.20.1.gem
...
Successfully installed aws-sdk-3.0.1
Successfully installed parallel-1.20.1
Successfully installed aws_recon-0.5.17
أو أضفه إلى ملف Gemfile الخاص بك باستخدام bundle:
$ bundle add aws_recon
Fetching gem metadata from https://rubygems.org/
Resolving dependencies...
...
Using aws-sdk 3.0.1
Using parallel-1.20.1
Using aws_recon 0.5.17
ستستفيد AWS Recon من أي بيانات اعتماد AWS (انظر المتطلبات) المتاحة حاليًا للبيئة التي تعمل فيها. إذا كنت تجمع من حسابات متعددة، فقد ترغب في استخدام شيء مثل aws-vault لإدارة بيانات الاعتماد المختلفة.
$ aws-vault exec profile -- aws_recon
المتغيرات البيئية العادية ستعمل أيضًا بشكل جيد.
$ AWS_PROFILE=<profile> aws_recon
للتشغيل من حاوية Docker باستخدام بيانات اعتماد مُدارة بواسطة aws-vault (المخرجات إلى stdout):
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
darkbitio/aws_recon:latest \
aws_recon -j -s EC2 -r global,us-east-1,us-east-2
للتشغيل من حاوية Docker باستخدام بيانات اعتماد مُدارة بواسطة aws-vault والمخرجات إلى ملف، ستحتاج إلى تلبية شرطين. أولاً، يحتاج Docker إلى صلاحية الوصول إلى ربط المسار الذي تحدده (أو مسار رئيسي فوقه). ثانيًا، تحتاج إلى إنشاء ملف فارغ لحفظ المخرجات فيه (مثل output.json). وذلك لأن هذا الملف فقط هو الذي يتم تركيبه داخل حاوية Docker وقت التشغيل. على سبيل المثال:
أنشئ ملفًا فارغًا.
$ touch output.json
شغّل حاوية aws_recon، مع تحديد ملف المخرجات.
$ aws-vault exec <vault_profile> -- docker run -t --rm \
-e AWS_REGION \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN \
-v $(pwd)/output.json:/recon/output.json \
darkbitio/aws_recon:latest \
aws_recon -s EC2 -v -r global,us-east-1,us-east-2
قد ترغب في استخدام العلامة -v أو --verbose في البداية لرؤية الحالة والنشاط أثناء تشغيل الجمع.
في الوضع المفصّل، ستعرض مخرجات وحدة التحكم ما يلي:
<thread>.<region>.<service>.<operation>
البادئة t تشير إلى أي خيط يتم تشغيل طلب معين تحته. تشير المنطقة والخدمة والعملية إلى طلب العملية الجاري حالياً وأين.
$ aws_recon -v
t0.global.EC2.describe_account_attributes
t2.global.S3.list_buckets
t3.global.Support.describe_trusted_advisor_checks
t2.global.S3.list_buckets.acl
t5.ap-southeast-1.WorkSpaces.describe_workspaces
t6.ap-northeast-1.Lightsail.get_instances
...
t2.us-west-2.WorkSpaces.describe_workspaces
t1.us-east-2.Lightsail.get_instances
t4.ap-southeast-1.Firehose.list_delivery_streams
t7.ap-southeast-1.Lightsail.get_instances
t0.ap-south-1.Lightsail.get_instances
t1.us-east-2.Lightsail.get_load_balancers
t7.ap-southeast-2.WorkSpaces.describe_workspaces
t2.eu-west-3.SageMaker.list_notebook_instances
t3.eu-west-2.SageMaker.list_notebook_instances
Finished in 46 seconds. Saving resources to output.json.
# جمع موارد S3 و EC2 العالمية، بالإضافة إلى us-east-1 و us-east-2
$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
# جمع موارد S3 و EC2 العالمية، بالإضافة إلى us-east-1 و us-east-2
$ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
# حفظ المخرجات إلى حاوية S3
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket
# حفظ المخرجات إلى حاوية S3 مع منطقة رئيسية غير us-east-1
$ AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose \
--s3-bucket my-recon-bucket:us-west-2
مثال على مخرجات بتنسيق OpenCSPM (NDJSON).
$ AWS_PROFILE=<profile> aws_recon -l \
-s S3,EC2 \
-r global,us-east-1,us-east-2 \
-f custom
أو
$ AWS_PROFILE=<profile> aws_recon -j \
-s S3,EC2 \
-r global,us-east-1,us-east-2 \
-f custom > output.json
يتم تجاهل استثناءات API المتعلقة بالأذونات بصمت في معظم الحالات. ترجع هذه الأخطاء عادةً إلى إحدى هذه الحالات: