Aardvark عبارة عن واجهة برمجة تطبيقات AWS IAM Access Advisor متعددة الحسابات (وطبقة التخزين المؤقت).
تأكد من أن لديك Python 3.6 أو الأحدث. لم يعد Python 2 مدعومًا.
git clone https://github.com/Netflix-Skunkworks/aardvark.git
cd aardvark
python3 -m venv env
. env/bin/activate
python setup.py develop
سيرشدك معالج تكوين Aardvark خلال عملية الإعداد.
% aardvark config
Aardvark can use SWAG to look up accounts. https://github.com/Netflix-Skunkworks/swag-client
Do you use SWAG to track accounts? [yN]: no
ROLENAME: Aardvark
DATABASE [sqlite:////home/github/aardvark/aardvark.db]:
# Threads [5]:
>> Writing to config.py
aardvark create_db
يحتاج Aardvark إلى دور IAM في كل حساب سيتم الاستعلام عنه. بالإضافة إلى ذلك، يجب تشغيل Aardvark بدور أو مستخدم يمكنه استخدام sts:AssumeRole
في أدوار الحساب المختلفة.
ملف تعريف AardvarkInstance:
sts:AssumeRole
في جميع AardvarkRoleدور خنزير الأرض:
AardvarkInstanceProfile
. iam:GenerateServiceLastAccessedDetails
iam:GetServiceLastAccessedDetails
iam:listrolepolicies
iam:listroles
iam:ListUsers
iam:ListPolicies
iam:ListGroups
لذا، إذا كنت تراقب حسابات n
، فستحتاج دائمًا إلى أدوار n+1
. ( n
AardvarkRoles و 1
AardvarkInstanceProfile).
ملاحظة: لتشغيل aardvark محليًا، لا يتعين عليك الاهتمام بملف AardvarkInstanceProfile. بدلاً من ذلك، ما عليك سوى إرفاق سياسة تحتوي على "sts:AssumeRole" بالمستخدم الذي تستخدمه في AWS CLI لتولي دور Aardvark. وأيضًا، يجب ذكر نفس المستخدم في سياسة الثقة الخاصة بدور Aardvark لتعيين الامتيازات بشكل صحيح.
من المحتمل أنك ستحتاج إلى تحديث بيانات Access Advisor بانتظام. نوصي بتشغيل أمر update
مرة واحدة يوميًا. كرون يعمل بشكل رائع لهذا الغرض.
إذا لم يكن لديك SWAG، فيمكنك تمرير أرقام حسابات مفصولة بفواصل:
aardvark update -a 123456789012,210987654321
يمكن لـ Aardvark استخدام SWAG للبحث عن الحسابات، بحيث يمكنك مواجهة الجميع باستخدام:
aardvark update
أو عن طريق اسم الحساب/العلامة مع:
aardvark update -a dev,test,prod
aardvark start_api -b 0.0.0.0:5000
في مرحلة الإنتاج، من المحتمل أن ترغب في أن يكون لديك شيء مثل المشرف الذي يبدأ واجهة برمجة التطبيقات نيابةً عنك.
Swagger متاح لواجهة برمجة التطبيقات على <Aardvark_Host>/apidocs/#!
.
يستجيب خنزير الأرض لطلبات الحصول/النشر. يتم ترقيم جميع النتائج ويمكن التحكم في ترقيم الصفحات عن طريق تمرير وسيطات count
و/أو page
. فيما يلي بعض الأمثلة على الاستعلامات:
curl localhost:5000/api/1/advisors
curl localhost:5000/api/1/advisors ? phrase=SecurityMonkey
curl localhost:5000/api/1/advisors ? arn=arn:aws:iam::000000000000:role/SecurityMonkey & arn=arn:aws:iam::111111111111:role/SecurityMonkey
curl localhost:5000/api/1/advisors ? regex=^. * Monkey$
يمكن أيضًا نشر Aardvark مع Docker وDocker Compose. تم إنشاء خدمات Aardvark على حاوية مشتركة. ستحتاج إلى تثبيت Docker وDocker Compose حتى يعمل هذا.
لتكوين الحاويات لمجموعة الحسابات الخاصة بك، قم بإنشاء ملف .env
في جذر هذا الدليل. تحديد متغيرات البيئة داخل هذا الملف. يستخدم هذا المثال مفاتيح وصول AWS. نوصي باستخدام أدوار المثيل في الإنتاج.
AARDVARK_ROLE=Aardvark
AARDVARK_ACCOUNTS=<account id>
AWS_DEFAULT_REGION=<aws region>
AWS_ACCESS_KEY_ID=<your access key>
AWS_SECRET_ACCESS_KEY=<you secret key>
اسم | خدمة | وصف |
---|---|---|
AARDVARK_ROLE | collector | اسم الدور الذي سيتولىه Aardvark حتى يتمكن من جمع البيانات. |
AARDVARK_ACCOUNTS | collector | اختياري في حالة استخدام SWAG، وإلا فإنه مطلوب. قم بتعيين هذا على قائمة علامات أسماء حساب SWAG أو قائمة أرقام حسابات AWS التي يمكنك من خلالها جمع سجلات Access Advisor. |
AWS_ARN_PARTITION | collector | مطلوب في حالة عدم استخدام منطقة AWS التجارية. على سبيل المثال، aws-us-gov . بشكل افتراضي، هذا هو aws . |
AWS_DEFAULT_REGION | collector | مطلوب إذا لم يكن قيد التشغيل على مثيل EC2 مع ملف تعريف المثيل المناسب. قم بتعيينها على بيانات اعتماد مستخدم AWS IAM الذي لديه إذن sts:AssumeRole لدور تدقيق Aardvark. |
AWS_ACCESS_KEY_ID | collector | مطلوب إذا لم يكن قيد التشغيل على مثيل EC2 مع ملف تعريف المثيل المناسب. قم بتعيينها على بيانات اعتماد مستخدم AWS IAM الذي لديه إذن sts:AssumeRole لدور تدقيق Aardvark. |
AWS_SECRET_ACCESS_KEY | collector | مطلوب إذا لم يكن قيد التشغيل على مثيل EC2 مع ملف تعريف المثيل المناسب. قم بتعيينها على بيانات اعتماد مستخدم AWS IAM الذي لديه إذن sts:AssumeRole لدور تدقيق Aardvark. |
AARDVARK_DATABASE_URI | collector apiserver | حدد URI لقاعدة البيانات المخصصة التي يدعمها SQL Alchemy. افتراضيًا، سيستخدم هذا القيمة AARDVARK_DATA_DIR لإنشاء قاعدة بيانات SQLLite. مثال: sqlite:///$AARDVARK_DATA_DIR/aardvark.db |
بمجرد إنشاء هذا الملف، قم ببناء الحاويات وابدأ الخدمات. يتكون Aardvark من ثلاث خدمات:
# build the containers
docker-compose build
# start up the containers
docker-compose up
وأخيرا، لتنظيف البيئة
# bring down the containers
docker-compose down
# remove the containers
docker-compoes rm
سيطلق Aardvark عدد المواضيع المحددة في التكوين. سيقوم كل من هذه المواضيع باسترداد بيانات Access Advisor لحساب ثم الاحتفاظ بالبيانات.
استعلام regex
مدعوم فقط في Postgres (محليًا) وSQLite (عبر بعض المزايا السحرية من Xion في ملف sqla_regex
).
نوصي بتمكين TLS لأي خدمة. تعليمات إعداد TLS خارج نطاق هذا المستند.
الجديد في الإصدار 0.3.1
يستخدم Aardvark Blinker للإشارات في عملية التحديث الخاصة به. يمكن استخدام هذه الإشارات لأشياء مثل إصدار المقاييس أو التسجيل الإضافي أو اتخاذ المزيد من الإجراءات على الحسابات. يمكنك استخدامها عن طريق كتابة برنامج نصي يحدد معالجاتك ويستدعي aardvark.manage.main()
. على سبيل المثال، قم بإنشاء ملف يسمى signals_example.py
بالمحتويات التالية:
import logging
from aardvark . manage import main
from aardvark . updater import AccountToUpdate
logger = logging . getLogger ( 'aardvark_signals' )
@ AccountToUpdate . on_ready . connect
def handle_on_ready ( sender ):
logger . info ( f"got on_ready from { sender } " )
@ AccountToUpdate . on_complete . connect
def handle_on_complete ( sender ):
logger . info ( f"got on_complete from { sender } " )
if __name__ == "__main__" :
main ()
يمكن الآن استدعاء هذا الملف بنفس طريقة manage.py
:
python signals_example.py update -a cool_account
سيكون إخراج السجل مشابهًا لما يلي:
INFO: getting bucket swag-bucket
INFO: Thread #1 updating account 123456789012 with all arns
INFO: got on_ready from <aardvark.updater.AccountToUpdate object at 0x10c379b50>
INFO: got on_complete from <aardvark.updater.AccountToUpdate object at 0x10c379b50>
INFO: Thread #1 persisting data for account 123456789012
INFO: Thread #1 FINISHED persisting data for account 123456789012
فصل | إشارات |
---|---|
manage.UpdateAccountThread | on_ready ، on_complete ، on_failure |
updater.AccountToUpdate | on_ready ، on_complete ، on_error ، on_failure |
انظر المهام