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
進入不同帳號角色的角色或使用者來啟動。
Aardvark實例設定檔:
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
命令。 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 可用於位於<Aardvark_Host>/apidocs/#!
。
Aardvark 回應 get/post 請求。所有結果均已分頁,並且可以透過傳遞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 帳戶名稱標籤清單或從中收集 Access Advisor 記錄的 AWS 帳號清單。 |
AWS_ARN_PARTITION | collector | 如果不使用 AWS 商業區域,則為必需。例如, aws-us-gov 。預設情況下,這是aws 。 |
AWS_DEFAULT_REGION | collector | 如果未在具有適當執行個體設定檔的 EC2 執行個體上執行,則為必要。將這些設定為具有 Aardvark 審核角色sts:AssumeRole 權限的 AWS IAM 使用者的憑證。 |
AWS_ACCESS_KEY_ID | collector | 如果未在具有適當執行個體設定檔的 EC2 執行個體上執行,則為必要。將這些設定為具有 Aardvark 審核角色sts:AssumeRole 權限的 AWS IAM 使用者的憑證。 |
AWS_SECRET_ACCESS_KEY | collector | 如果未在具有適當執行個體設定檔的 EC2 執行個體上執行,則為必要。將這些設定為具有 Aardvark 審核角色sts:AssumeRole 權限的 AWS IAM 使用者的憑證。 |
AARDVARK_DATABASE_URI | collector 和apiserver | 指定 SQL Alchemy 支援的自訂資料庫 URI。預設情況下,這將使用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 中支援(透過sqla_regex
檔案中 Xion 的一些魔法)。
我們建議為任何服務啟用 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 |
請參閱待辦事項