从 AWS CloudTrail 获取有价值信息的命令行工具
项目描述
TrailScraper
用于从 AWS CloudTrail 中获取有价值信息的命令行工具和用于处理 IAM 策略的通用工具箱
安装
操作系统
$ brew install trailscraper
使用 pip 安装
要求:
蟒蛇> = 3.5
点子
$ pip install trailscraper
直接使用docker运行
$ docker run --rm --env-file <(env | grep AWS_) -v $HOME/.aws:/root/.aws flosell/trailscraper:latest
用法
从 CloudTrail API 获取与过滤器匹配的 CloudTrail 事件
$ trailscraper select --use-cloudtrail-api \
--filter-assumed-role-arn some-arn \
--from 'one hour ago' \
--to 'now'
{
"Records": [
{
"eventTime": "2017-12-11T15:01:51Z",
"eventSource": "autoscaling.amazonaws.com",
"eventName": "DescribeLaunchConfigurations",
...
下载一些日志
$ trailscraper download --bucket some-bucket \
--account-id some-account-id \
--region some-other-region \
--region us-east-1 \
--from 'two days ago' \
--to 'now' \
注意:包括 us-east-1 以下载全球服务的日志。详情见下文_
下载组织轨迹中的一些日志
$ trailscraper download --bucket some-bucket \
--account-id some-account-id \
--region us-east-1 \
--org-id o-someorgid \
--from 'two days ago' \
--to 'now'
在下载的日志中查找与过滤器匹配的 CloudTrail 事件
$ trailscraper select --filter-assumed-role-arn some-arn \
--from 'one hour ago' \
--to 'now'
{
"Records": [
{
"eventTime": "2017-12-11T15:01:51Z",
"eventSource": "autoscaling.amazonaws.com",
"eventName": "DescribeLaunchConfigurations",
...
从一些 CloudTrail 记录生成策略
$ gzcat some-records.json.gz | trailscraper generate
{
"Statement": [
{
"Action": [
"ec2:DescribeInstances"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
],
"Version": "2012-10-17"
}
通过猜测匹配动作来扩展现有策略
CloudTrail 日志可能并不总是包含所有相关操作。例如,当您确实需要删除和更新权限时,您的日志可能仅包含 terraform 运行后的创建操作。TrailScraper 可以尝试猜测可能相关的其他语句:
$ cat minimal-policy.json | trailscraper guess
{
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:ListObjects"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
],
"Version": "2012-10-17"
}
$ cat minimal-policy.json | ./go trailscraper guess --only Get
{
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
],
"Version": "2012-10-17"
}
查找 CloudTrail 事件并生成 IAM 策略
$ trailscraper select | trailscraper generate
{
"Statement": [
{
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVolumes",
"ec2:DescribeVpcs",
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Action": [
"sts:AssumeRole"
],
"Effect": "Allow",
"Resource": [
"arn:aws:iam::1111111111:role/someRole"
]
}
],
"Version": "2012-10-17"
}
常问问题
如何在 CloudFormation YAML 而不是 JSON 中生成策略?
TrailScraper 不提供此功能。但是你可以使用 cfn-flip来做到这一点:
$ trailscraper select | trailscraper generate | cfn-flip
Statement:
- Action:
- ec2:DescribeInstances
Effect: Allow
Resource:
- '*'
如何在 Terraform HCL 而不是 JSON 中生成策略?
TrailScraper 不提供此功能。但是您可以使用 iam-policy-json-to-terraform 来做到这一点:
$ trailscraper select | trailscraper generate | iam-policy-json-to-terraform
data "aws_iam_policy_document" "policy" {
statement {
sid = ""
effect = "Allow"
resources = ["*"]
actions = [
"ec2:DescribeInstances",
]
}
}
为什么 TrailScraper 缺少一些事件?
确保您有us-east-1区域的日志。一些全球 AWS 服务(例如 Route53、IAM、STS、CloudFront)使用该区域。有关详细信息,请查看CloudTrail 文档
为什么某些 TrailScraper 生成的操作不是真正的 IAM 操作?
这是完全可能的。不幸的是,没有关于 CloudTrail 事件如何映射到 IAM 操作的良好的机器可读文档,因此 TrailScraper 正在使用启发式方法来找出正确的操作。这些启发式方法可能并未涵盖 AWS 世界的所有特殊情况。
这就是你进来的地方:如果你发现 TrailScraper 没有涵盖的特殊情况,请打开一个新问题,或者更好的是,提交一个拉取请求。
有关更多详细信息,请查看贡献指南
为什么 click 认为我在 ASCII 环境中?
Click 将中止进一步的执行,因为 Python 3 被配置为使用 ASCII 作为环境的编码。
设置描述您的语言环境的环境变量,例如:
export LC_ALL=de_DE.utf-8 export LANG=de_DE.utf-8
或者
LC_ALL=C.UTF-8 LANG=C.UTF-8
有关详细信息,请参阅 http://click.pocoo.org/5/python3/#python-3-surrogate-handling
发展
$ ./go setup # set up venv, dependencies and tools
$ ./go test # run some tests
$ ./go check # run some style checks
$ ./go # let's see what we can do here
变更日志
此更改日志包含每个版本中的松散更改集合,包括对 API 的重大更改。
格式基于Keep a Changelog
0.7.0
添加
支持 Python 3.9
已移除
删除了对 Python 3.5 的官方支持。TrailScraper 可能仍会运行,但我们不再主动对其进行测试
改变了
从 DockerHub 迁移到 Docker 镜像的 GitHub 容器注册表(因为 DockerHub 正在放弃对自动构建的支持并以其他方式限制它)
更新了支持依赖项
0.6.4
固定的
修复了引发 ModuleNotFoundError的 Docker 映像
改变了
性能调整
trailscraper 下载使用更智能的目录列表来提高大日期范围和少量新数据的性能
trailscraper 下载现在并行下载文件
trailscraper select的性能小幅提升
0.6.2 和 0.6.3
(由于持续的发布脚本问题而跳过)
0.6.1
(与 0.6.1 相同,只是修复了不一致的版本)
0.6.0
添加
支持 Python 3.7 和 3.8
支持组织级别的跟踪 (#101)
固定的
通过自制软件或 pip 安装时, Trailscraper 猜测不起作用(#110)
已移除
删除了对 Python 2.7 和 3.4 的官方支持。TrailScraper 可能仍会运行,但我们不再主动对其进行测试
0.5.1
添加
通过猜测匹配动作 #22 来扩展现有策略的新命令guess
固定的
修复了包含没有 ARN 的资源的解析事件(例如 s3:ListObjects)#51
0.5.0
破坏 CLI 更改:将generate-policy拆分为select 和generate (#38)
添加
新命令select以将与过滤器匹配的所有 CloudTrail 记录打印到标准输出
新命令generate用于从标准输入获取 CloudTrail 记录并为其生成策略
改变了
新命令select默认完全不过滤,而 generate-policy默认过滤最近的事件。更改为使过滤更加明确和可预测,而不是让那些想知道为什么他们的事件没有出现的用户感到惊讶
已移除
删除命令generate-policy,替换为select和 generate。使用管道产生相同的行为:
$ trailscraper select | trailscraper generate
0.4.4
固定的
使 Trailscraper 时区感知。到目前为止,trailscraper 隐含地将所有内容都视为 UTC,这意味着在过滤要下载的日志文件或要从中生成的记录时,相对时间戳(例如 现在, 两小时前)无法正常工作。(#39)
添加
新命令trailscraper last-event-timestamp以获取最后一个已知事件时间戳。
新标志trailscraper 下载--wait等到找到指定时间范围内的事件。如果您正在等待 CloudTrail 为最近的操作发送日志,这很有用。
0.4.3
由于发布问题而跳过
0.4.2
固定的
修复了将 CloudTrail 映射到 IAM 操作的各种特殊情况:
API 网关
应用程序流 2
DynamoDB 流
莱克斯
机械土耳其人
S3
STS
标记
0.4.1
固定的
忽略 Python 2.7 中无法读取的记录文件(例如无效的 GZIP)(之前仅在 Python 3.* 中工作)
为包含 API 版本日期的服务(例如 Lambda、CloudFront)生成的固定权限(#20)
0.4.0
添加
支持 CloudTrail lookup_events API,允许用户在不从 S3 存储桶下载日志的情况下生成策略。请注意,此 API 仅返回“创建、修改和删除 API 调用”
trailscraper 下载现在支持--from和--to标志来指定应该下载的时间范围。接受精确(例如“2017-10-12”)和相对(例如“-2days”)参数。
trailscraper generate-policy现在支持--from和--to 过滤事件以考虑生成策略。接受精确(例如“2017-10-12”)和相对(例如“-2days”)参数。
性能优化:generate-policy仅在请求的时间范围内读取日志文件
添加了 --version命令行参数
改变了
设置更灵活的依赖
已移除
删除了trailscraper 下载中的--past-days参数。被 --from 和 --to 取代(见上文)
固定的
忽略无法读取的记录文件(例如无效的 GZIP)
0.3.0
添加
支持 Python >= 2.7
改变了
如果目标文件夹中已存在 CloudTrail 日志,请不要从 S3 下载它们 (#9)
删除了对 awacs-library 的 fork 的依赖,以简化安装和开发
固定的
在某些情况下导致具有相同操作集的策略语句未正确组合的错误 (#7)
0.2.0
添加
生成策略时角色的基本过滤(#3)
0.1.0
初始发行
添加
从 S3 为某些帐户和时间范围下载 CloudTrail 日志的基本功能
从一组下载的 CloudTrail 日志生成 IAM 策略的基本功能
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
trailscraper -0.7.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8aade831f331d5f3b3780478473c4dbe45dc2018026df0112624cd37bbdc3605 |
|
| MD5 | 3d2b80141540d38bc57700d52b558da2 |
|
| 布莱克2-256 | f489392581eaa901f2690f5d9b0c9589f41ad03606371f16bedd9680a12413aa |
trailscraper -0.7.0-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 9144a075a8b81a010abd0d27bc63c58a6794e24a6d0bebe1939b6c14f0dc04c4 |
|
| MD5 | 6d6fddbf3f4f3fa9bea273af3ebbd667 |
|
| 布莱克2-256 | f02ddc10139a91faa05826ccba6c59fdd2b1eda2d8a6d0fc0ce61fbe8ffb6096 |