本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建网络访问分析器发现的多个AWS账户入站互联网访问报告
由 Mike Virgilio 创作 () AWS
摘要
无意中入站 Internet 访问AWS资源可能会给组织的数据外围带来风险。Network Access Analyzer 是一项亚马逊虚拟私有云 (AmazonVPC) 功能,可帮助您识别对亚马逊网络服务 (AWS) 上资源的意外网络访问。您可以使用网络访问分析器指定网络访问要求并识别不满足指定要求的潜在网络路径。您可以使用网络访问分析器执行以下操作:
确定可通过互联网网关访问互联网的AWS资源。
验证您的虚拟私有云 (VPCs) 是否进行了适当的分段,例如隔离生产和开发环境以及分离事务性工作负载。
Network Access Analyzer 分析 end-to-end网络可访问性条件,而不仅仅是分析单个组件。为了确定资源是否可以访问互联网,Network Access Analyzer 会评估互联网网关、VPC路由表、网络访问控制列表 (ACLs)、弹性网络接口上的公有 IP 地址和安全组。如果这些组件中的任何一个阻止互联网访问,则网络访问分析器不会生成调查发现。例如,如果 Amazon Elastic Compute Cloud (AmazonEC2) 实例有一个开放的安全组,允许来自的流量,0/0
但该实例位于无法从任何互联网网关路由的私有子网中,则网络访问分析器将不会生成结果。这提供了高保真结果,以便您可以识别真正可从互联网访问的资源。
运行网络访问分析器时,使用网络访问作用域来指定网络访问要求。此解决方案可识别 互联网网关和弹性网络接口之间的网络路径。在这种模式下,您可以将解决方案部署到组织中由 AWS Organizations 管理的集中式AWS账户中,然后它会分析组织中任何AWS区域的所有账户。
该解决方案的设计考虑了以下内容:
这些 AWS CloudFormation 模板减少了在这种模式下部署 AWS 资源所需工作量。
您可以在部署时调整 CloudFormation 模板和 naa-script.sh 脚本中的参数,以便根据您的环境对其进行自定义。
Bash 脚本自动并行预配和分析多个账户的网络访问范围。
Python 脚本处理结果,提取数据,然后合并结果。您可以选择以CSV格式或 Sec AWS urity Hub 形式查看 Network Access Analyzer 发现结果的合并报告。此模式的 “其他信息” 部分中提供了该CSV报告的示例。
您可以修正结果,也可以通过将结果添加到 naa-exclusions.csv 文件来将其从将来的分析中排除。
先决条件和限制
先决条件
用于托管安全服务和工具的AWS帐户,作为 Organizations 中AWS组织的成员帐户进行管理。在此模式中,此账户称为安全账户。
在安全账户中,必须具有具有出站互联网访问权限的私有子网。有关说明,请参阅 Amazon VPC 文档中的创建子网。您可以使用网NAT关或接口VPC终端节点建立互联网接入。
访问 AWS Organizations 管理账户或拥有委托管理员权限的账户 CloudFormation。有关说明,请参阅 CloudFormation 文档中的注册委托管理员。
在 Organization AWS s 和 CloudFormation之间启用可信访问 有关说明,请参阅 CloudFormation 文档中的通过 Organ izat AWS ions 启用可信访问。
如果您要将调查结果上传到 Security Hub,则必须在配置EC2实例的账户和AWS区域中启用 Security Hub。有关更多信息,请参阅设置 Sec AWS urity Hub。
限制
由于网络访问分析器功能的限制,当前不会分析跨账户网络路径。
目标AWS账户必须作为AWS组织在 Organizations 中进行管理。如果你没有使用 Or AWS ganizations,你可以为你的环境更新 naa-execrole.yaml CloudFormation 模板和 naa-script.sh 脚本。相反,您可以提供要在其中运行脚本的AWS账户IDs和区域的列表。
该 CloudFormation 模板旨在将EC2实例部署在具有出站 Internet 访问权限的私有子网中。AWSSystems Manager SSM 代理(代理)需要出站访问才能访问 Systems Manager 服务端点,并且您需要出站访问权限才能克隆代码存储库和安装依赖项。如果要使用公有子网,则必须修改 naa-resources.yaml 模板以将弹性 IP 地址与实例相关联。EC2
架构
目标技术堆栈
网络访问分析器
亚马逊EC2实例
AWSIdentity and Access Managemen IAM t () 角色
Amazon Simple Storage Service (Amazon S3)桶
亚马逊简单通知服务 (亚马逊SNS) 主题
AWSSecurity Hub(仅限选项 2)
目标架构
选项 1:访问 Amazon S3 存储桶中的结果
此图显示以下流程:
如果您手动运行解决方案,则用户使用会话管理器对EC2实例进行身份验证,然后运行 naa-script.sh 脚本。此 Shell 脚本执行步骤 2-7。
如果自动运行解决方案,则 naa-script.sh 脚本将按照在 cron 表达式中定义的计划自动启动。此 Shell 脚本执行步骤 2-7。有关详细信息,请参阅本节末尾的自动化和扩缩。
该EC2实例从 S3 存储桶下载最新的 naa-exception.csv 文件。稍后在 Python 脚本处理排除项时,将在此过程中使用此文件。
该EC2实例担任该
NAAEC2Role
IAM角色,该角色授予访问 S3 存储桶和在组织中其他账户中NAAExecRole
IAM担任角色的权限。该EC2实例在组织的管理账户中
NAAExecRole
IAM扮演角色,并生成组织中的账户列表。该EC2实例在组织的成员账户(架构图中称为工作负载账户)中扮演
NAAExecRole
IAM角色,并在每个账户中执行安全评估。调查结果以JSON文件形式存储在EC2实例上。该EC2实例使用 Python 脚本来处理JSON文件、提取数据字段和创建CSV报告。
EC2实例将CSV文件上传到 S3 存储桶。
Amazon EventBridge 规则会检测文件上传,并使用亚马逊SNS主题发送一封电子邮件,通知用户报告已完成。
用户从 S3 存储桶下载CSV文件。用户将结果导入 Excel 模板,并查看结果。
选项 2:在 Sec AWS urity Hub 中访问搜索结果
此图显示以下流程:
如果您手动运行解决方案,则用户使用会话管理器对EC2实例进行身份验证,然后运行 naa-script.sh 脚本。此 Shell 脚本执行步骤 2-7。
如果自动运行解决方案,则 naa-script.sh 脚本将按照在 cron 表达式中定义的计划自动启动。此 Shell 脚本执行步骤 2-7。有关详细信息,请参阅本节末尾的自动化和扩缩。
该EC2实例从 S3 存储桶下载最新的 naa-exception.csv 文件。稍后在 Python 脚本处理排除项时,将在此过程中使用此文件。
该EC2实例担任该
NAAEC2Role
IAM角色,该角色授予访问 S3 存储桶和在组织中其他账户中NAAExecRole
IAM担任角色的权限。该EC2实例在组织的管理账户中
NAAExecRole
IAM扮演角色,并生成组织中的账户列表。该EC2实例在组织的成员账户(架构图中称为工作负载账户)中扮演
NAAExecRole
IAM角色,并在每个账户中执行安全评估。调查结果以JSON文件形式存储在EC2实例上。该EC2实例使用 Python 脚本来处理JSON文件并提取数据字段以导入 Security Hub。
该EC2实例将网络访问分析器的结果导入到 Security Hub。
Amazon EventBridge 规则会检测导入,并使用亚马逊SNS主题发送一封电子邮件,通知用户该过程已完成。
用户在 Security Hub 中查看结果。
自动化和扩缩
您可以计划此解决方案,以便按自定义计划自动运行 naa-script.sh 脚本。要设置自定义计划,请在 naa-resources.yaml CloudFormation 模板中修改参数。CronScheduleExpression
例如,默认值 0 0 * * 0
在每个星期日的午夜运行解决方案。如果值为 0 0 * 1-12 0
,则该解决方案将在每个月第一个星期日的午夜运行。有关使用 cron 表达式的更多信息,请参阅 Systems Manager 文档中的 Cron 和 rate 表达式。
如果要在部署 NAA-Resources
堆栈后调整计划,可以在 /etc/cron.d/naa-schedule
中手动编辑 cron 计划。
工具
AWS 服务
亚马逊弹性计算云 (AmazonEC2) 在AWS云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器,并快速扩展或缩减它们。
Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如,AWSLambda 函数、使用API目标的HTTP调用终端节点或其他账户中的事件总线。AWS
AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。
AWSO rganizations 是一项账户管理服务,可帮助您将多个AWS账户整合到一个由您创建和集中管理的组织中。
AWSS@@ ecurity Hub 提供了您的安全状态的全面视图AWS。它还可以帮助您根据安全行业标准和最佳实践检查您的AWS环境。
亚马逊简单通知服务 (AmazonSNS) 可帮助您协调和管理发布者与客户之间的消息交换,包括网络服务器和电子邮件地址。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
AWSSystems Manager 可帮助您管理在AWS云中运行的应用程序和基础架构。它简化了应用程序和资源管理,缩短了检测和解决操作问题的时间,并帮助您大规模安全地管理您的 AWS 资源。此模式使用会话管理器,这是 Systems Manager 的一项功能。
代码存储库
此模式的代码可在 GitHub Network Access Analyzer 多账户分析
naa-script.sh — 此 bash 脚本用于并行启动对多个AWS账户的网络访问分析器分析。按照 naa-resources.yaml CloudFormation 模板中的定义,此脚本将自动部署到实例上的文件夹。
/usr/local/naa
EC2naa-resources.yaml — 您可以使用此 CloudFormation 模板在组织的安全账户中创建堆栈。此模板部署了该账户所需所有资源,以支持此解决方案。此堆栈必须在 naa-execrole.yaml 模板之前部署。
注意:如果删除并重新部署此堆栈,则必须重新构建
NAAExecRole
堆栈集才能重建角色之间的跨账户依赖关系。IAMnaa-execrole.yaml — 您可以使用此 CloudFormation 模板创建堆栈集,该堆栈集可在组织中的所有账户(包括管理账户)中部署该
NAAExecRole
IAM角色。naa-processfindings.py — naa-script.sh 脚本会自动调用此 Python 脚本来处理网络访问分析器的JSON输出,排除 naa-exclusions.csv 文件中任何已知良好的资源,然后生成合并结果CSV文件或将结果导入 Security Hub。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
克隆代码存储库。 |
| AWS DevOps |
查看模板 |
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
在安全账户中预置资源。 | 使用 naa-resources.yaml 模板,您可以创建一个 CloudFormation 堆栈,用于在安全账户中部署所有必需的资源。有关说明,请参阅 CloudFormation 文档中的创建堆栈。部署此模板时应注意以下几点:
| AWS DevOps |
在成员账户中配置IAM角色。 | 在 AWS Organizations 管理账户或具有委托管理员权限的账户中 CloudFormation,使用 naa-execrole.yaml 模板创建堆栈集。 CloudFormation 堆栈集在组织中的所有成员账户中部署该
| AWS DevOps |
在管理账户中配置IAM角色。 | 使用 naa-execrole.yaml 模板,您可以创建一个 CloudFormation 堆栈,用于在组织的管理账户中部署
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
自定义 shell 脚本。 |
| AWS DevOps |
分析目标账户。 |
| AWS DevOps |
选项 1 - 从 S3 存储桶中检索结果。 | AWS DevOps | |
选项 2 - 在 Security Hub 中查看结果。 |
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
纠正发现的问题。 | 纠正您想要解决的任何问题。有关如何围绕AWS身份、资源和网络创建边界的更多信息和最佳实践,请参阅在AWS(AWS白皮书)上构建数据边界。 | AWS DevOps |
排除具有已知良好网络路径的资源。 | 如果网络访问分析器生成应可从互联网访问的资源的调查发现,则可以将这些资源添加到排除列表中。下次运行网络访问分析器时,它不会为该资源生成调查发现。
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
更新 naa-script.sh 脚本。 | 如果要将 naa-script.sh 脚本更新到存储库中的最新版本,请执行以下操作:
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
删除所有已部署资源。 | 您可以将资源保留在账户中。 如果要取消预配所有资源,请执行以下操作: | AWS DevOps |
故障排除
事务 | 解决方案 |
---|---|
无法使用会话管理器连接到EC2实例。 | SSM代理必须能够与 Systems Manager 端点通信。执行以下操作:
|
部署堆栈集时, CloudFormation 控制台会提示您这样做 | 这表示尚未在 Organizations 和之间AWS启用可信访问 CloudFormation。部署服务托管堆栈集需要可信访问权限。选择该按钮以启用受信任的访问。有关更多信息,请参阅 CloudFormation 文档中的启用可信访问。 |
相关资源
其他信息
控制台输出示例
以下示例显示了生成目标账户列表和分析目标账户的输出。
[root@ip-10-10-43-82 naa]# ./naa-script.sh download: s3://naa-<account ID>-us-east-1/naa-exclusions.csv to ./naa-exclusions.csv AWS Management Account: <Management account ID> AWS Accounts being processed... <Account ID 1> <Account ID 2> <Account ID 3> Assessing AWS Account: <Account ID 1>, using Role: NAAExecRole Assessing AWS Account: <Account ID 2>, using Role: NAAExecRole Assessing AWS Account: <Account ID 3>, using Role: NAAExecRole Processing account: <Account ID 1> / Region: us-east-1 Account: <Account ID 1> / Region: us-east-1 – Detecting Network Analyzer scope... Processing account: <Account ID 2> / Region: us-east-1 Account: <Account ID 2> / Region: us-east-1 – Detecting Network Analyzer scope... Processing account: <Account ID 3> / Region: us-east-1 Account: <Account ID 3> / Region: us-east-1 – Detecting Network Analyzer scope... Account: <Account ID 1> / Region: us-east-1 – Network Access Analyzer scope detected. Account: <Account ID 1> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour Account: <Account ID 2> / Region: us-east-1 – Network Access Analyzer scope detected. Account: <Account ID 2> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour Account: <Account ID 3> / Region: us-east-1 – Network Access Analyzer scope detected. Account: <Account ID 3> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
CSV报告示例
下图是CSV输出示例。