Aardvark adalah API Penasihat Akses AWS IAM multi-akun (dan lapisan caching).
Pastikan Anda memiliki Python 3.6 atau lebih baru. Python 2 tidak lagi didukung.
git clone https://github.com/Netflix-Skunkworks/aardvark.git
cd aardvark
python3 -m venv env
. env/bin/activate
python setup.py develop
Wizard konfigurasi Aardvark akan memandu Anda melalui pengaturan.
% 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 membutuhkan IAM Role di setiap akun yang akan ditanyakan. Selain itu, Aardvark perlu diluncurkan dengan peran atau pengguna yang dapat sts:AssumeRole
ke dalam peran akun yang berbeda.
Profil AardvarkInstance:
sts:AssumeRole
ke semua AardvarkRolePeran Aardvark:
AardvarkInstanceProfile
. iam:GenerateServiceLastAccessedDetails
iam:GetServiceLastAccessedDetails
iam:listrolepolicies
iam:listroles
iam:ListUsers
iam:ListPolicies
iam:ListGroups
Jadi jika Anda memantau n
akun, Anda akan selalu membutuhkan n+1
peran. ( n
AardvarkRoles dan 1
AardvarkInstanceProfile).
Catatan: Untuk menjalankan aardvark secara lokal, Anda tidak perlu mengurus AardvarkInstanceProfile. Sebagai gantinya, cukup lampirkan kebijakan yang berisi "sts:AssumeRole" kepada pengguna yang Anda gunakan di AWS CLI untuk mengambil Peran Aardvark. Selain itu, pengguna yang sama harus disebutkan dalam kebijakan kepercayaan Peran Aardvark untuk penetapan hak istimewa yang tepat.
Anda mungkin ingin menyegarkan data Access Advisor secara teratur. Kami merekomendasikan menjalankan perintah update
sekali sehari. Cron bekerja sangat baik untuk ini.
Jika Anda tidak memiliki SWAG, Anda dapat memberikan nomor rekening yang dipisahkan koma:
aardvark update -a 123456789012,210987654321
Aardvark dapat menggunakan SWAG untuk mencari akun, sehingga Anda dapat melawan semuanya dengan:
aardvark update
atau berdasarkan nama/tag akun dengan:
aardvark update -a dev,test,prod
aardvark start_api -b 0.0.0.0:5000
Dalam produksi, Anda mungkin ingin memiliki sesuatu seperti supervisor yang memulai API untuk Anda.
Swagger tersedia untuk API di <Aardvark_Host>/apidocs/#!
.
Aardvark merespons permintaan dapatkan/posting. Semua hasil diberi nomor halaman dan penomoran halaman dapat dikontrol dengan meneruskan argumen count
dan/atau page
. Berikut ini beberapa contoh kueri:
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 juga dapat diterapkan dengan Docker dan Docker Compose. Layanan Aardvark dibangun pada wadah bersama. Anda perlu menginstal Docker dan Docker Compose agar ini berfungsi.
Untuk mengonfigurasi kontainer untuk kumpulan akun Anda, buat file .env
di root direktori ini. Tentukan variabel lingkungan dalam file ini. Contoh ini menggunakan AWS Access Keys. Kami merekomendasikan penggunaan peran instans dalam produksi.
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>
Nama | Melayani | Keterangan |
---|---|---|
AARDVARK_ROLE | collector | Nama peran yang diambil Aardvark sehingga dapat mengumpulkan data. |
AARDVARK_ACCOUNTS | collector | Opsional jika menggunakan SWAG, jika tidak diperlukan. Atur ini ke daftar tag nama akun SWAG atau daftar nomor akun AWS untuk mengumpulkan catatan Access Advisor. |
AWS_ARN_PARTITION | collector | Diperlukan jika tidak menggunakan wilayah Komersial AWS. Misalnya, aws-us-gov . Secara default, ini adalah aws . |
AWS_DEFAULT_REGION | collector | Diperlukan jika tidak berjalan pada instans EC2 dengan Profil Instans yang sesuai. Atur ini ke kredensial pengguna AWS IAM dengan izin ke sts:AssumeRole ke peran audit Aardvark. |
AWS_ACCESS_KEY_ID | collector | Diperlukan jika tidak berjalan pada instans EC2 dengan Profil Instans yang sesuai. Atur ini ke kredensial pengguna AWS IAM dengan izin ke sts:AssumeRole ke peran audit Aardvark. |
AWS_SECRET_ACCESS_KEY | collector | Diperlukan jika tidak berjalan pada instans EC2 dengan Profil Instans yang sesuai. Atur ini ke kredensial pengguna AWS IAM dengan izin ke sts:AssumeRole ke peran audit Aardvark. |
AARDVARK_DATABASE_URI | collector dan apiserver | Tentukan URI database khusus yang didukung oleh SQL Alchemy. Secara default, ini akan menggunakan nilai AARDVARK_DATA_DIR untuk membuat Database SQLLite. Contoh: sqlite:///$AARDVARK_DATA_DIR/aardvark.db |
Setelah file ini dibuat, buat wadahnya dan mulai layanannya. Aardvark terdiri dari tiga layanan:
# build the containers
docker-compose build
# start up the containers
docker-compose up
Terakhir, membersihkan lingkungan
# bring down the containers
docker-compose down
# remove the containers
docker-compoes rm
Aardvark akan meluncurkan jumlah thread yang ditentukan dalam konfigurasi. Masing-masing thread ini akan mengambil data Access Advisor untuk sebuah akun dan kemudian menyimpan data tersebut.
Kueri regex
hanya didukung di Postgres (secara asli) dan SQLite (melalui beberapa izin ajaib dari Xion di file sqla_regex
).
Kami menyarankan untuk mengaktifkan TLS untuk layanan apa pun. Petunjuk untuk menyiapkan TLS berada di luar cakupan dokumen ini.
Baru di v0.3.1
Aardvark menggunakan Blinker sebagai sinyal dalam proses pembaruannya. Sinyal ini dapat digunakan untuk hal-hal seperti mengeluarkan metrik, logging tambahan, atau melakukan lebih banyak tindakan pada akun. Anda dapat menggunakannya dengan menulis skrip yang mendefinisikan penangan Anda dan memanggil aardvark.manage.main()
. Misalnya, buat file bernama signals_example.py
dengan konten berikut:
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 ()
File ini sekarang dapat dipanggil dengan cara yang sama seperti manage.py
:
python signals_example.py update -a cool_account
Output log akan serupa dengan berikut ini:
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
Kelas | Sinyal |
---|---|
manage.UpdateAccountThread | on_ready , on_complete , on_failure |
updater.AccountToUpdate | on_ready , on_complete , on_error , on_failure |
Lihat TODO