Aardvark เป็น AWS IAM Access Advisor API แบบหลายบัญชี (และเลเยอร์แคช)
ตรวจสอบให้แน่ใจว่าคุณมี 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's ทั้งหมดมดวาร์กบทบาท:
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
ประมาณวันละครั้ง Cron ใช้งานได้ดีสำหรับสิ่งนี้
หากคุณไม่มี 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
ในการผลิต คุณอาจต้องการให้หัวหน้างานเริ่ม API ให้กับคุณ
Swagger พร้อมใช้งานสำหรับ API ที่ <Aardvark_Host>/apidocs/#!
-
Aardvark ตอบสนองต่อคำขอรับ/โพสต์ ผลลัพธ์ทั้งหมดมีการแบ่งหน้าและสามารถควบคุมการแบ่งหน้าได้โดยการนับ 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 Commercial ตัวอย่างเช่น 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 อยู่นอกขอบเขตสำหรับเอกสารนี้
ใหม่ใน v0.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 |
ดูสิ่งที่ต้องทำ