该工具旨在发现账户中创建的所有 AWS 资源。AWS 拥有许多产品(即服务),并且不断有新产品加入,现有产品也在不断扩展新功能。该生态系统允许用户将许多不同的服务组合起来,形成定制的云体验。即时按需大规模启动服务的能力会带来管理成本。要审计 AWS 账户中正在使用的资源很快就会变得困难。这不仅对计费很重要,对安全也很重要。休眠资源和未知资源更容易出现安全配置弱点。此外,具有意外依赖关系的资源会引发可用性、访问控制和授权问题。
它使用 botocore 来发现 AWS 服务 及其运行的区域,也用于调用服务 API。所调用的 API 是那些应列出或描述资源的 API。结果可以 JSON 格式打印到 stdout,也可以写入多个文件:
首先,安装 Python2.7。
有一个用于显示进度的小型 GUI,它使用标准的 Python Tkinter 模块。但是,Tcl/Tk 的底层原生库代码可能需要额外步骤才能安装。然后,
pip install -r requirements.txt
使用 Python 安装程序安装 Tkinter/Tcl/Tk。
使用您的操作系统包管理器:
sudo apt-get install python-tk
您可以在不带任何参数的情况下运行该脚本。它会依次在您的 shell 环境、实例元数据、配置文件及凭据文件中查找您的 AWS 凭据。您也可以在命令行中提供一个包含您的凭据的 CSV 文件。您需要一个具有类似 AWS 托管策略 ViewOnlyAccess 权限的用户。如果您想碰碰运气,可以直接将工具的输出通过管道传递给 jq 之类的 JSON 解析器。
如果不限制每个区域中每个服务要调用的操作,该工具可能需要很长时间(几十分钟)才能完成。可以在命令行中按服务和区域进行过滤,而按服务操作进行过滤则可以通过配置文件完成。一个预配置文件已被创建并签入到仓库中,默认情况下会使用它。
除了命令行输出之外,您还可以在本地通过 React 单页应用 查看结果。无需 Web 服务器。只需在浏览器中打开 HTML 文件,并在提示时选择生成的 JSON 文件即可。
该应用使用 jsTree 以分层树状结构显示数据,还提供搜索功能。
注意: 调用 API 时,凡是引发异常的 API 无论区域如何都不会再次使用。已知的异常原因包括:
$ python aws_inventory.py
$ python aws_inventory.py --list-svcs
acm
apigateway
application-autoscaling
appstream
autoscaling
batch
budgets
clouddirectory
cloudformation
cloudfront
.
.
.
$ python aws_inventory.py --list-operations
[shield]
DescribeSubscription
ListAttacks
ListProtections
[datapipeline]
ListPipelines
[firehose]
ListDeliveryStreams
.
.
.
[glacier]
# NONE
[stepfunctions]
ListActivities
ListStateMachines
Total operations to invoke: 4045
$ python aws_inventory.py --debug --dry-run

