跳转到主要内容

CloudTracker通过比较CloudTrail日志与当前IAM策略,帮助您查找过授权的IAM用户和角色。

项目描述

CloudTracker通过比较CloudTrail日志与当前IAM策略,帮助您查找过授权的IAM用户和角色。

简介文章:https://duo.com/blog/introducing-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/111111111111/CloudTrail/。如果没有前缀,将my_prefix设置为''

步骤4:运行CloudTracker

CloudTracker使用boto,并假设它可以访问环境变量中的AWS凭证,可以通过使用aws-vault来实现。

您需要权限arn:aws:iam::aws:policy/AmazonAthenaFullAccess以及S3桶中包含CloudTrail日志的s3:GetObjects3:ListBucket

一旦您在aws-vault环境中运行(或以其他方式设置了AWS会话的环境变量),您可以运行

cloudtracker --account demo --list users

这将执行所有初始设置,大约需要一分钟。后续调用将更快。

清理

CloudTracker目前不会清理自身,因此查询结果将保留在默认桶aws-athena-query-results-ACCOUNT_ID-REGION中。

如果您想完全消除CloudTracker的痕迹,请从该桶中删除查询结果,并在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权限具有ListDescribe资源元数据的权限,以及AssumeRoleadmin角色的权限。我们可以查看她的操作

cloudtracker --account demo --user alice
...
  cloudwatch:describealarmhistory
  cloudwatch:describealarms
- cloudwatch:describealarmsformetric
- cloudwatch:getdashboard
? cloudwatch:getmetricdata
...
+ s3:createbucket
...

将显示许多操作,其中许多是未使用的,因为AWS有超过一千个API,大多数人只使用其中的一小部分。在上面的片段中,我们可以看到她调用了DescribeAlarmHistoryDescribeAlarms。她从未调用过DescribeAlarmsForMetricGetDashboard,尽管她有这些权限,并且不知道她是否调用过GetMetricData,因为该调用未记录在CloudTrail中。然后我注意到下面有一个她调用的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中记录,所以不清楚是否被使用。
  • + 一个加号表示权限未被授予,但已使用。这种情况只有当权限先前被授予、使用然后移除时才会发生,因此您可能需要再次添加该权限。

高级功能(目前仅支持ElasticSearch)

此功能目前不支持与CloudTracker的Athena配置。

您可能知道alice可以假定admin角色,因此让我们看看她使用--destrole参数做了什么。

cloudtracker --account demo --user alice --destrole admin --show-used
Getting info on alice, user created 2017-09-02T18:02:14Z
Getting info for AssumeRole into admin
  s3:createbucket
  iam:createuser

您可能也知道charlie可以假定admin角色,所以让我们看看他在那里做了什么。

cloudtracker --account demo --user charlie --destrole admin --show-used
Getting info on charlie, user created 2017-10-01T01:01:01Z
Getting info for AssumeRole into admin
  s3:createbucket

在这个例子中,我们可以看到charlie作为admin仅创建了一个S3存储桶,因此我们可能希望移除charlie的假定此角色的权限,或者创建一个没有创建IAM用户能力的另一个角色。这是CloudTracker的关键特性,因为在不使用像CloudTracker这样的工具的情况下,很难确定哪些用户正在实际使用他们可以假定的角色以及他们在那里的操作。

与多个账户一起工作

亚马逊在其最近的许多指南中都提倡使用多个AWS账户。这有助于减少事件的影响范围,以及其他好处。但是一旦开始使用多个账户,您可能会发现需要重新思考如何访问所有这些账户。处理多个账户的一种方法是将用户假定为不同账户的角色。我们可以像之前为单个账户做的那样分析用户对另一个账户的角色假定,只是这次您需要确保您有兴趣的两个账户的CloudTrail日志都已加载到ElasticSearch中。

cloudtracker --account demo --user charlie --destaccount backup --destrole admin --show-used
Getting info on charlie, user created 2017-10-01T01:01:01Z
Getting info for AssumeRole into admin
  s3:createbucket

在这个例子中,我们使用了--destaccount选项来指定目标账户。

数据文件

CloudTracker使用两个长文本文件来了解存在哪些操作。

aws_actions.txt

此文件包含所有可能的AWS API调用。其中一个用途是在使用正则表达式时,如展开s3:*时,识别IAM策略授予的权限。

此文件是通过以下命令创建的:

git clone --depth 1 -b master https://github.com/boto/botocore.git
find botocore/botocore/data -name *.json | xargs cat | jq -r 'select(.operations != null) as $parent | .operations | keys | .[] | $parent.metadata.endpointPrefix +":"+.' | sort | uniq > aws_actions.txt

cloudtrail_supported_events.txt

此文件包含在CloudTrail日志中记录的AWS API调用。这用于确定权限状态为“未知”时(即,不知道是否已使用)。

此文件是通过复制aws_actions.txt,并根据CloudTrail用户指南(《https://docs.aws.amazon.com/awscloudtrail/latest/userguide/awscloudtrail-ug.pdf》)中“CloudTrail支持的服务”部分手动删除事件创建的,并遵循链接到各种服务,阅读支持和不支持的内容。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

cloudtracker-2.1.5.tar.gz (80.5 kB 查看哈希)

上传时间

构建分发

cloudtracker-2.1.5-py3-none-any.whl (80.4 kB 查看哈希)

上传于 Python 3

由以下支持