本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建一份包含多个 Prowler 安全调查结果的合并报告 AWS 账户
由 Mike Virgilio (AWS)、Andrea Di Fabio () 和 Jay Durga (AWS) 创作 AWS
摘要
Prowler
虽然部署和使用 Prowler 进行评测的方法有很多,但该解决方案旨在实现快速部署、全面分析组织中的所有账户或已定义的目标客户,以及安全调查发现的可访问报告。按此解决方案,当 Prowler 完成对组织中所有账户的安全评测时,它会合并结果。它还会过滤掉任何预期错误消息,例如与限制 Prowler 无法扫描通过 AWS Control Tower配置的账户中的 Amazon Simple Storage Service (Amazon S3) 存储桶相关的错误。筛选后的合并结果将在此操作说明中包含的 Microsoft Excel 模板中报告。您可以使用此报告确定组织中安全控件的潜在改进。
该解决方案的设计考虑了以下内容:
这些 AWS CloudFormation 模板减少了在这种模式下部署 AWS 资源所需的工作量。
您可以在部署时调整 CloudFormation 模板和 prowler_scan.sh 脚本中的参数,以便为您的环境自定义模板。
通过并行处理 AWS 账户、汇总结果、合并报告和建议的补救措施以及自动生成的可视化效果来优化 Prowler 的评估和报告速度。
用户不需要监控扫描进度。评估完成后,将通过亚马逊简单通知服务 (AmazonSNS) 主题通知用户,以便他们可以检索报告。
报告模板可帮助您仅阅读和评测整个组织相关结果。
先决条件和限制
先决条件
AWS 账户 用于托管安全服务和工具,作为中组织的成员帐户进行管理 AWS Organizations。在这种模式中,此账户被称为 安全账户。
在安全账户中,必须具有具有出站互联网访问权限的私有子网。有关说明,请参阅私VPC有子网中的服务器和 NAT Amazon Virtual Private Cloud (AmazonVPC) 文档。您可以使用在公有子网中配置的NAT网关来建立互联网接入。
对 AWS Organizations 管理账户或拥有委托管理员权限的账户的访问权限 CloudFormation。有关说明,请参阅 CloudFormation 文档中的注册委托管理员。
在 AWS Organizations 和之间启用可信访问 CloudFormation。有关说明,请参阅 CloudFormation 文档 AWS Organizations中的使用启用可信访问。
限制
目标 AWS 账户 必须作为一个组织在中进行管理 AWS Organizations。如果您不使用 AWS Organizations,则可以针对您的环境更新 IAM-ProwlerExecRole .yaml CloudFormation 模板和 prowler_scan.sh 脚本。相反,您可以提供要在其中运行脚本的 AWS 账户 IDs和区域的列表。
该 CloudFormation 模板旨在将亚马逊弹性计算云 (AmazonEC2) 实例部署到具有出站互联网访问权限的私有子网中。 AWS Systems Manager 代理(SSM代理)需要出站访问权限才能访问 AWS Systems Manager 服务端点,并且您需要出站访问权限才能克隆代码存储库和安装依赖项。如果要使用公有子网,则必须修改 p rowler-resources.yaml 模板以将弹性 IP 地址与实例相关联。 EC2
产品版本
Prowler 版本 4.0 或更高版本
架构
此图显示以下流程:
使用会话管理器(一种功能) AWS Systems Manager,用户对EC2实例进行身份验证并运行 prowler_scan.sh 脚本。此 Shell 脚本执行步骤 2-8。
该EC2实例担任该
ProwlerEC2Role
IAM角色,该角色授予访问 S3 存储桶和在组织中其他账户中ProwlerExecRole
IAM担任角色的权限。该EC2实例在组织的管理账户中
ProwlerExecRole
IAM扮演角色,并生成组织中的账户列表。该EC2实例在组织的成员账户(架构图中称为工作负载账户)中扮演
ProwlerExecRole
IAM角色,并在每个账户中执行安全评估。调查结果以CSV和HTML文件形式存储在EC2实例上。注意
HTML文件是 Prowler 评估的输出。由于的性质HTML,它们不会在此模式中进行串联、处理或直接使用。但是,这些可能对个人账户报告审核很有用。
该EC2实例处理所有CSV文件以删除已知的预期错误,并将剩余的发现结果合并到一个CSV文件中。
该EC2实例将个人账户结果和汇总结果打包到一个 zip 文件中。
EC2实例将 zip 文件上传到 S3 存储桶。
EventBridge 规则会检测文件上传,并使用 Amazon SNS 主题向用户发送电子邮件,通知他们评估已完成。
用户从 S3 存储桶下载 zip 文件。用户将结果导入 Excel 模板,并查看结果。
工具
AWS 服务
亚马逊弹性计算云 (AmazonEC2) 在中提供可扩展的计算容量 AWS Cloud。您可以根据需要启动任意数量的虚拟服务器,并快速扩展或缩减它们。
Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如, AWS Lambda 函数、使用API目的地的HTTP调用端点或其他 AWS 账户中的事件总线。
AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。
AWS Organizations是一项账户管理服务,可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。
亚马逊简单通知服务 (AmazonSNS) 可帮助您协调和管理发布者与客户之间的消息交换,包括网络服务器和电子邮件地址。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
AWS Systems Manager 可帮助您管理在 AWS Cloud中运行的应用程序和基础设施。它简化了应用程序和资源管理,缩短了检测和解决操作问题的时间,并帮助您大规模安全地管理 AWS 资源。此模式使用会话管理器,这是 Systems Manager 的一项功能。
其他工具
Prowler
是一款开源命令行工具,可帮助您评估、审计和监控您的账户是否符合 AWS 安全最佳实践以及其他安全框架和标准。
代码存储库
此模式的代码可通过 Prowler 存储库在 GitHub 多账户安全评估
prowler_scan.sh — 此 bash 脚本用于并行启动多个 AWS 账户 Prowler 安全评估。按照 Prowler-Resources.yaml 中的定义 CloudFormationtemplate,此脚本会自动部署到实例上的文件夹。
usr/local/prowler
EC2Prowler-resources.yaml — 您可以使用此 CloudFormation 模板在组织的安全账户中创建堆栈。此模板部署了该账户所需所有资源,以支持此解决方案。此堆栈必须在 IAM-ProwlerExecRole .yaml 模板之前部署。我们不建议您将这些资源部署至托管关键生产工作负载的账户中。
注意
如果此堆栈被删除并重新部署,则必须重建
ProwlerExecRole
堆栈集才能重建角色之间的跨账户依赖关系。IAMIAM-ProwlerExecRole .yaml — 您可以使用此 CloudFormation 模板创建堆栈集,该堆栈集可在组织中的所有账户(包括管理账户)中部署该
ProwlerExecRole
IAM角色。prowler-report-template.xlsm — 您可以使用此 Excel 模板来处理 Prowler 的调查结果。报告中的数据透视表提供搜索功能、图表与综合调查发现。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
克隆代码存储库。 |
| AWS DevOps |
审核模板。 |
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
在安全账户中预置资源。 | 使用 prowler-resources.yaml 模板,您可以创建一个 CloudFormation 堆栈,用于在安全账户中部署所有必需的资源。有关说明,请参阅 CloudFormation 文档中的创建堆栈。部署此模板时应注意以下几点:
| AWS DevOps |
在成员账户中配置IAM角色。 | 在 AWS Organizations 管理账户或具有委托管理员权限的账户中 CloudFormation,使用 IAM-ProwlerExecRole .yaml 模板创建 CloudFormation 堆栈集。堆栈集在组织中的所有成员账户中部署该
| AWS DevOps |
在管理账户中配置IAM角色。 | 使用 IAM-ProwlerExecRole .yaml 模板,您可以创建一个 CloudFormation 堆栈,用于在组织的管理账户中部署
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
运行扫描。 |
| AWS 管理员 |
检索 Prowler 调查发现。 | 将军 AWS | |
停止实EC2例。 | 为防止在实例空闲时计费,请停止运行 Prowler 的EC2实例。有关说明,请参阅 Amazon EC2 文档中的停止和启动您的实例。 | AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
导入调查发现。 |
| 将军 AWS |
完成报告。 |
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
更新 Prowler。 | 如果要将 Prowler 更新至最新版本,请执行以下操作:
| 将军 AWS |
更新 prowler_scan.sh 脚本。 | 如果要将 prowler_scan.sh 脚本更新至存储库中的最新版本,请执行以下操作:
注意您可能会收到与任何不在 GitHub 存储库中的本地生成的文件相关的警告,例如查找报告。只要 prowler_scan.sh 显示本地隐藏的更改已合并,就可以忽略这些内容。 | 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
删除所有已部署资源。 | 您可以将资源保留在账户中。如果您在EC2实例未使用时将其关闭,并保持 S3 存储桶为空,则可以降低维护资源以备将来扫描的成本。 如果要取消预配所有资源,请执行以下操作: | AWS DevOps |
故障排除
事务 | 解决方案 |
---|---|
无法使用会话管理器连接到EC2实例。 | SSM代理必须能够与 Systems Manager 端点通信。执行以下操作:
|
部署堆栈集时, CloudFormation 控制台会提示您这样做 | 这表示未在 AWS Organizations 和之间启用可信访问 CloudFormation。部署服务托管堆栈集需要可信访问权限。选择该按钮以启用受信任的访问。有关更多信息,请参阅 CloudFormation 文档中的启用可信访问。 |
相关资源
AWS 文档
其他资源
Prowler (
) GitHub
其他信息
以编程方式删除错误
如果结果包含 Access Denied
错误,则应将其从调查发现中删除。这些错误通常是由于外部影响权限导致 Prowler 无法评测特定资源造成的。例如,在查看通过配置的 S3 存储桶时,某些检查会失败。 AWS Control Tower您可通过编程方式提取这些结果,并将筛选后的结果另存为新文件。
以下命令删除包含单个文本字符串(一种模式)行,然后将结果输出至新文件中。
适用于 Linux 或 macOS (Grep)
grep -v -i "Access Denied getting bucket" myoutput.csv > myoutput_modified.csv
适用于 Windows (PowerShell)
Select-String -Path myoutput.csv -Pattern 'Access Denied getting bucket' -NotMatch > myoutput_modified.csv
以下命令删除与多个文本字符串匹配的行,然后将结果输出至新文件。
对于 Linux 或 macOS(在字符串之间使用转义管道)
grep -v -i 'Access Denied getting bucket\|Access Denied Trying to Get' myoutput.csv > myoutput_modified.csv
适用于 Windows(在字符串之间使用逗号)
Select-String -Path myoutput.csv -Pattern 'Access Denied getting bucket', 'Access Denied Trying to Get' -NotMatch > myoutput_modified.csv
报告示例
下图是 Prowler 合并调查发现报告中的调查发现工作表示例。
下图是 Prowler 合并调查发现报告中的 Pass Fail 工作表的示例。(默认情况下,输出中不包括通过结果。)
下图是 Prowler 合并调查发现报告中严重性工作表的示例。