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 |
参见待办事项