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:getobjects3: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,大多数人倾向于只使用少数。在上面的片段中,我们可以请注意,她已经调用了describealarmhistorydescribealarms。即使拥有这些权限,她也从未调用过describealarmsformetricgetdashboard,而且由于该调用未记录在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支持的服务"并跟踪到各种服务的链接,阅读哪些是支持的,哪些是不支持的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用运行时从JAVA运行openssl命令?   不使用线程安全类(如AtomicInteger和SynchronizedList)的java ProducerConsumer问题   匹配字符串的java模式   在java中使用泛型接口作为返回类型   java将可能具有序列化JSON值的hashmap作为节点添加到JSON字符串中   Eclipse无法从Java8流推断正确的类型   java无法了解标准JButton的大小   java我能用一个循环优化这个函数吗(在第一种方法中)?   Apache CXF中基于WebSocket的java SOAP?   java想要运行奇偶和求和三步   矩阵上随机元素的java集值   java布尔相等:0==a,操作数顺序重要吗?   java Eclipse不会退出我的插件   java如何在spring的SOAP拦截器中获取HttpServletRequest和HttpServletResponse