cloudtracker通过将cloudtrail日志与当前iam策略进行比较,帮助您找到特权过大的iam用户和角色。
cloudtracker的Python项目详细描述
CloudTracker通过将CloudTrail日志与当前IAM策略进行比较,帮助您找到拥有过多特权的IAM用户和角色。
简介文章:https://duo.com/blog/introducting cloudtracker an aws cloudtrail log analyzer
本文档将描述使用Athena的设置以及如何使用该工具。CloudTracker不再需要ElasticSearch,但是如果您想将CloudTracker与ElasticSearch一起使用,请参见ElasticSearch的安装和接收。
设置
步骤1:设置CloudTracker
python3 -m venv ./venv && source venv/bin/activate
pip install cloudtracker
注意:要使用ElasticSearch支持进行安装,请参见ElasticSearch文档
步骤2:下载IAM数据
使用aws cli下载帐户的iam数据副本:
mkdir -p account-data
aws iam get-account-authorization-details > account-data/demo_iam.json
步骤3:配置CloudTracker
创建一个config.yaml
文件,其内容类似于:
athena:
s3_bucket: my_log_bucket
path: my_prefix
accounts:
- name: demo
id: 111111111111
iam: account-data/demo_iam.json
这假设您的cloudtrail日志位于s3://my-log-bucket/my-prefix/awslogs/111111111/cloudtrail/
如果没有前缀,请将"我的前缀"设置为"代码"。
步骤4:运行CloudTracker
cloudtracker使用boto并假定它可以在环境变量中访问aws凭据,这可以通过使用aws vault来实现。
对于包含cloudtrail日志的s3存储桶,您需要arn:aws:iam::aws:policy/amazonathenafullaccess
以及s3:getobject
和s3:listbucket
特权。
在aws保险库环境中运行(或为aws会话设置环境变量)后,可以运行:
cloudtracker --account demo --list users
这将执行大约一分钟的所有初始设置。后续通话将更快。
清理
cloudtracker当前不会在自身之后进行清理,因此查询结果会留在默认bucket中aws-athena-query-results-account\u id-region
如果您想消除cloudtracker的所有迹象,请从该bucket中删除查询结果,并在athena中运行drop database cloudtracker cascade
示例用法
列出参与者
CloudTracker提供了命令行选项来列出帐户中的用户和角色。例如:
$ cloudtracker --account demo --list users --start 2018-01-01
alice
- bob
charlie
在本例中,从iam信息中获取用户列表,然后从cloudtrail日志中发现,用户"bob"自2018年1月1日以来没有被使用的记录,因此cloudtracker通过在用户前面加上"-"来建议用户删除。
注意,并非所有aws活动都存储在cloudtrail日志中。具体来说,数据级事件,如读取和写入s3对象、放置cloudwatch度量等等。因此,有可能"bob"已处于活动状态,但仅限于未记录在cloudtrail中的操作。还请注意,您可能仍希望保留不活动的用户或角色。例如,您可能有一个角色,在年度任务期间每年仅使用一次。因此,您应该将此输出用作指导,但不应总是用作说明。
您也可以列出角色。
$ cloudtracker --account demo --list roles --start 2018-01-01
admin
列出参与者的操作
CloudTracker的主要目的是查看参与者(用户和角色)发出的API调用。假设alice
对其用户具有securityaditor
权限,这将授予她列表和
描述资源元数据的能力,以及
关联资源的能力。我们可以看到她的行为:
cloudtracker --account demo --user alice
...
cloudwatch:describealarmhistory
cloudwatch:describealarms
- cloudwatch:describealarmsformetric
- cloudwatch:getdashboard
? cloudwatch:getmetricdata
...
+ s3:createbucket
...
将显示许多操作,其中许多是未使用的,因为有一千多个aws api,大多数人倾向于只使用少数。在上面的片段中,我们可以请注意,她已经调用了describealarmhistory
和describealarms
。即使拥有这些权限,她也从未调用过describealarmsformetric
或getdashboard
,而且由于该调用未记录在cloudtrail中,因此她是否调用过getmetricdata
。接下来我注意到她对createbucket进行了一个调用,但没有权限。如果参与者先前拥有某个操作的权限并使用了这些权限,但这些权限被剥夺,则可能发生这种情况。错误会被过滤掉,因此如果参与者打了一个电话但被拒绝,它将不会显示为已使用。
由于可能有许多未使用或未知的操作,我们可以将其筛选为:
cloudtracker --account demo --user alice --show-used
Getting info on alice, user created 2017-09-02T18:02:14Z
cloudwatch:describealarmhistory
cloudwatch:describealarms
+ s3:createbucket
sts:assumerole
我们可以为角色做同样的事情。例如:
cloudtracker --account demo --role admin --show-used
Getting info for role admin
s3:createbucket
iam:createuser
输出说明
cloudtracker显示授予与使用的权限的差异。符号的含义如下:
没有符号表示使用了此特权,请保持原样。
-
减号表示特权已被授予,但未被使用,因此您应将其删除。 <代码> >问号表示已授予特权,但由于未记录在cloudtrail中,因此无法确定是否使用了该特权。+
加号表示特权未被授予,但已被使用。唯一可能的方法是,如果以前授予、使用过该特权,然后将其删除,则您可能希望重新添加该特权。
高级功能(当前仅支持弹性搜索)
CloudTracker的Athena配置尚不支持此功能。
您可能知道alice
可以担任admin
角色,所以让我们看看她在那里使用--destrole
参数做了什么:
python3 -m venv ./venv && source venv/bin/activate
pip install cloudtracker
0
您可能还知道charlie
可以担任admin
角色,所以让我们看看他在那里做了什么:
python3 -m venv ./venv && source venv/bin/activate
pip install cloudtracker
1
在这个例子中,我们可以看到charlie
只创建了一个s3 bucket作为admin
,因此我们可能希望删除charlie
来承担这个角色,或者创建另一个不能创建iam用户的角色,我们看到了alice
使用。这是cloudtracker的关键功能,因为如果没有cloudtracker这样的工具,就很难确定哪些用户实际在使用他们可以承担的角色和他们在其中使用的操作。
使用多个帐户
亚马逊在最近的许多指导中都提倡使用多个aws账户。这有助于减少事故的爆炸半径,还有其他好处。一旦你开始使用多个帐户,你会发现你可能需要重新考虑如何访问所有这些帐户。使用多个帐户的一种方法是让用户在不同的帐户中承担角色。我们可以像以前对单个帐户一样,将用户的角色假设分析到不同的帐户中,但这次您需要确保将两个感兴趣帐户的CloudTrail日志加载到ElasticSearch中。
python3 -m venv ./venv && source venv/bin/activate
pip install cloudtracker
2
在本例中,我们使用--destcount
选项指定目标帐户。
数据文件
CloudTracker有两个长文本文件,用于了解存在哪些操作。
aws_actions.txt
这个文件包含所有可能的aws api调用。它的一个用途是在使用regex时标识iam策略授予的特权,例如展开s3:*
此文件是通过运行以下命令创建的:
python3 -m venv ./venv && source venv/bin/activate
pip install cloudtracker
3
cloudtrail_supported_events.txt
此文件包含记录在cloudtrail日志中的aws api调用。这用于确定特权的状态何时为"未知"(即不知道它是否已被使用)。
此文件正在创建通过复制aws_actions.txt并根据"C"部分中的CloudTrail用户指南(https://docs.aws.amazon.com/aws cloudtrail/latest/user guide/awscloudtrail-ug.pdf" rel="nofollow">https://docs.aws.amazon.com/awscloudtrail/latest/userguide/awscloudtrail ug.pdf)手动删除事件LoudTrail支持的服务"并跟踪到各种服务的链接,阅读哪些是支持的,哪些是不支持的。