FOSS 项目聚焦:CloudMapper,一款 AWS 可视化工具
Duo Security 发布了 CloudMapper,这是一款用于可视化 Amazon Web Services (AWS) 云环境的开源工具。
在使用 AWS 时,通常会有多个由不同团队为不同项目运行的独立账户。为了更好地理解这些账户的配置方式,最好的方法是以可视化的方式展示账户的资源以及这些资源如何通信。这可以补充传统的资产清单。
Duo 构建 CloudMapper 以生成 AWS 账户的交互式网络图,并在 Github 上以开源形式发布。
查看演示 此处。
图 1. CloudMapper 可视化演示账户的屏幕截图
使用 CloudMapper,您可以快速回答许多问题,例如
- 哪些资源是公开暴露的?
- 哪些资源可以在内部与其他哪些资源通信?
- 在可用区故障的情况下,您是否拥有稳健的架构?
- 此账户正在使用多少个区域?这个账户有多“大”?它有多复杂?
CloudMapper 允许工程师再次检查他们对自己构建内容的理解,快速了解其他环境,并将这些信息呈现给其他利益相关者。
工作原理启动并运行 CloudMapper 需要三个步骤
- 通过使用 AWS CLI 的 shell 脚本收集有关 AWS 账户的信息。
- 将该数据转换为 Web 浏览器可用的格式。
- 运行一个简单的 Web 服务器以在浏览器中查看收集的数据。
收集信息的第一个步骤仅需要描述和列出账户信息的权限。这可以使用 AWS SecurityAudit
策略来完成。如果您没有直接访问账户的权限,拥有权限的人可以运行此脚本并将它创建的文件包发送给您。
将这些缓存文件转换为 Web 浏览器显示内容是逻辑最多的第二步。在此步骤中,将分析安全组以确定存在的网络路径,并在节点(例如 EC2 实例)和复合节点结构(例如子网、可用区、VPC、区域和账户)之间创建父/子关系。
在浏览器中可视化数据的最后一步大量使用了 cytoscape.js 来执行图形布局并允许与资源进行交互。从历史上看,这个问题本可以使用 graphviz 解决,但该解决方案更适合生成静态图像作为输出。Cytoscape 最初是为可视化分子相互作用网络而创建的,但人们发现它非常适合各种其他网络可视化。
通过使用 cytoscape.js 并在 Web 浏览器中向用户呈现图表,您可以单击节点以获取有关它们的更多信息、移动它们、删除它们等等。这仅用于可视化数据,因此您执行的任何操作都不会影响您实际的 AWS 环境。
您可以放大和缩小、平移、保存高清图像,或者在移动节点后保存和加载布局。您可以单击复合节点(例如 VPC)并将其压缩为单个节点,以简化可视化。您可以轻松找到并选择邻居节点、同级节点、子节点或父节点。您可以单击边以获取有关允许该通信发生的安全组的详细信息。
图 2. 高亮显示的邻居节点
图 3. 压缩的节点
改进布局可视化大型网络是一个难题。CloudMapper 使用了由 Bilkent 大学 i-Vis 实验室开发的 Cytoscape.js 的 CoSE(复合弹簧嵌入器)布局,该布局被认为是布局具有复合节点的图形的最佳算法之一。然而,任何具有大量节点和边的图形本质上都是复杂的。为了管理这个问题,CloudMapper 提供了许多过滤选项,可以在准备用于可视化的数据时使用。
用于减少显示数据量的选项包括
- 仅显示指定的区域。
- 如果您只想查看哪些资源是公开暴露的,请忽略内部边。
- 基于标签名称将相似的 EC2 实例聚合到单个节点。
即使使用了这些技术和先进的布局算法,仍然要准备好花一些时间重新排列节点。