自动审核允许从公有 IP 地址进行访问 AWS 的安全组 - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自动审核允许从公有 IP 地址进行访问 AWS 的安全组

尤金·希弗和斯蒂芬 DiCato,亚马逊 Web Services

Summary

作为一种安全最佳实践,至关重要的是要最大限度地减少 AWS 资源暴露于绝对必要的资源。例如,为公众提供服务的 Web 服务器需要允许从 Internet 进行入站访问,但应将对其他工作负载的访问限制于特定网络,以减少不必要的暴露。Amazon Virtual Private Cloud(Amazon VPC)中的安全组是一种有效的控制措施,可帮助您限制资源访问。但是,评估安全组可能是一项繁琐的任务,尤其是在多账户架构中。AWS Config 规则AWS Security Hub CSPM 控制项可以帮助您识别允许从公共互联网(0.0.0.0/0)访问特定网络通信协议(例如 Secure Shell(SSH)、HTTP、HTTPS 和 Windows 远程桌面协议(RDP))的安全组。但是,如果服务在非标准端口上运行或者仅限访问某些公有 IP 地址,则这些规则和控制项不适用。例如,当 Web 服务与 TCP 端口 8443 而非标准 TCP 端口 443 关联时,可能会发生这种情况。当开发人员可以从其家庭网络访问服务器时(例如出于测试目的),也可能发生这种情况。

要解决这个问题,您可以使用此模式中提供的基础设施即代码 (IaC) 解决方案来识别允许从任何非私有(RFC 1918 不合规)IP 地址访问您或组织中的任何工作负载的安全组。 AWS 账户 AWS 该AWS CloudFormation模板提供了自定义 AWS Config 规则、AWS Lambda函数和必要的权限。您可以将其作为堆栈部署到单个账户中,也可以将其作为堆栈集部署到整个组织中,通过进行管理 AWS Organizations。

先决条件和限制

先决条件

  • 活跃的 AWS 账户

  • 使用经验 GitHub

  • 如果您要部署到单个 AWS 账户:

    • 创建 CloudFormation 堆栈的@@ 权限

    • AWS Config 在目标账户中设置

    • (可选)在目标账户中设置的 Security Hub CSPM

  • 如果您要部署到 AWS 组织中:

限制

  • 如果您要部署到未启用 Security Hub CSPM 的个人账户,则可以使用 AWS Config 来评估结果。

  • 如果您要部署到的组织没有为 Security Hub CSPM 委派管理员,则必须登录个人成员账户才能查看调查结果。 AWS Config

  • 如果您使用 AWS Control Tower 管理和治理组织中的账户,请使用定制 AWS Control Tower (cfc T) 按此模式部署 IaC。使用 CloudFormation 控制台会导致配置偏离 AWS Control Tower 防护栏,并要求您重新注册组织单位 (OUs) 或托管账户。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按区域划分的AWS 服务。有关特定端点,请参阅服务端点和配额页面,然后选择相应服务的链接。

架构

部署到个人中 AWS 账户

以下架构图显示了 AWS 资源在单个架构中的部署 AWS 账户。您可以直接通过 CloudFormation 控制台使用 CloudFormation 模板来配置资源。如果启用了 Security Hub CSPM,则可以在 AWS Config 或 Security Hub CSPM 中查看结果。如果未启用 Security Hub CSPM,则只能在中查看结果。 AWS Config

将 IaC 模板作为 CloudFormation 堆栈部署到单个 AWS 账户中。

下图显示了如下工作流:

  1. 你创建了一个 CloudFormation 堆栈。这将部署一个 Lambda 函数和 AWS Config 一条规则。规则和函数均使用在中发布资源评估 AWS Config 和日志所需的 AWS Identity and Access Management (IAM) 权限进行设置。

  2. 该 AWS Config 规则在侦探评估模式下运行,每 24 小时调用一次 Lambda 函数。

  3. Lambda 函数对安全组进行评估并将更新发送到。 AWS Config

  4. Security Hub CSPM 会收到所有调查结果。 AWS Config

  5. 您可以在 Security Hub CSPM 中或中查看调查结果 AWS Config,具体取决于您在账户中设置的服务。

部署到 AWS 组织中

下图显示了通过 AWS Organizations 和管理的多个账户部署该模式 AWS Control Tower。您可以通过 cfCT 部署 CloudFormation 模板。评估结果集中在委派管理员账户的 Security Hub CSPM 中。图中的 AWS CodePipeline 工作流程部分显示了 cfCT 部署期间发生的背景步骤。

在 AWS 组织中将 IaC 模板部署为 CloudFormation 堆栈集。

下图显示了如下工作流:

  1. 在管理账户中,将 IaC 模板的压缩(ZIP)文件上传至 CfCT 部署的 Amazon Simple Storage Service(Amazon S3)存储桶。

  2. cfcT 管道解压缩文件,运行 cfn-nag (GitHub) 检查,并将模板部署为堆栈集。 CloudFormation

  3. 根据您在 cfcT 清单文件中指定的配置,将堆栈 CloudFormation StackSets 部署到单个账户或指定账户。 OUs这将在目标账户中部署一个 Lambda 函数和 AWS Config 一条规则。规则和函数均使用在中发布资源评估 AWS Config 和日志所需的 IAM 权限进行设置。

  4. 该 AWS Config 规则在侦探评估模式下运行,每 24 小时调用一次 Lambda 函数。

  5. Lambda 函数对安全组进行评估并将更新发送到。 AWS Config

  6. AWS Config 将所有调查结果转发给 Security Hub CSPM。

  7. Security Hub CSPM 的调查结果汇总到委派的管理员账户中。

  8. 你可以使用委派管理员账户在 Security Hub CSPM 中查看汇总的调查结果。

工具

AWS 服务

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。

  • AWS Config提供了您的资源 AWS 账户 及其配置方式的详细视图。它可以帮助您确定资源之间的相互关系,以及它们的配置如何随时间变化。 AWS Config 规则定义了您理想的资源配置设置,并 AWS Config 可以评估您的 AWS 资源是否符合规则中的条件。

  • AWS Control Tower按照规范性最佳实践,帮助您设置和管理 AWS 多账户环境。AWS Control Tower (cfcT) 的自定义可帮助您自定义 AWS Control Tower 着陆区并与 AWS 最佳实践保持一致。此解决方案的定制是通过 CloudFormation 模板和 AWS Organizations 服务控制策略 (SCPs) 实现的。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预调配或管理服务器。它只在需要时运行您的代码,并自动进行扩展,因此您只需为使用的计算时间付费。

  • AWS Organizations是一项账户管理服务,可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。

  • AWS Security Hub CSPM提供了中您的安全状态的全面视图 AWS。它还可以帮助您根据安全行业标准和最佳实践检查您的 AWS 环境。

其他工具

  • Python 是通用的计算机编程语言。

代码存储库

此模式的代码可在 GitHub 检测易受攻击的安全组存储库中找到。

最佳实践

建议遵守以下资源中的最佳实践:

操作说明

Task说明所需技能

确定您的部署策略。

查看解决方案和代码以确定您的 AWS 环境的部署策略。确定您是部署到单个账户还是 AWS 组织中。

应用程序所有者、常规 AWS

克隆存储库。

输入以下命令以克隆检测易受攻击的安全组存储库:

git clone https://github.com/aws-samples/detect-public-security-groups.git
应用程序开发人员、应用程序所有者

验证 Python 版本。

  1. 导航至克隆的存储库中的顶级目录:

    cd detect-public-security-groups
  2. 打开 Security-Group-Public-Assessment.yaml

  3. SgPublicAccessCheckLambdaFunction 资源中,确认 Python 版本与您的目标 AWS 区域兼容。默认情况下,此函数使用 Python 3.12。有关更多信息,请参阅 AWS Lambda 添加对 Python 3.12 的支持。如有必要,更新 Python 版本。

  4. 保存并关闭 Security-Group-Public-Assessment.yaml

AWS 管理员、应用程序开发人员
Task说明所需技能

部署 CloudFormation 模板。

将 CloudFormation 模板部署到您的 AWS 环境中。请执行以下操作之一:

  • 如果您要部署到单个堆栈 AWS 账户,请按照创建堆栈中的说明进行操作。

  • 如果您要部署到不受管理的组织 AWS Control Tower,请按照创建堆栈集中的说明进行操作。

  • 如果您要部署到由管理的组织 AWS Control Tower,请参阅构建自己的自定义项中的说明。

应用程序开发人员、AWS 管理员、常规 AWS

验证部署。

CloudFormation 控制台中,验证堆栈或堆栈集是否已成功部署。

AWS 管理员、应用程序所有者
Task说明所需技能

查看 AWS Config 规则调查结果。

在 Security Hub CSPM 中,执行以下操作以查看单个发现结果的列表:

  1. 打开 S ecurity Hub CSPM 控制台

  2. 在导航窗格中,选择 调查发现

  3. 添加筛选条件框中,添加以下筛选条件:

    • 合规性状态FAILED

    • 标题SgPublicAccessCheck

  4. 选择应用

在 Security Hub CSPM 中,执行以下操作以查看按以下分组的全部发现结果列表: AWS 账户

  1. 打开 S ecurity Hub CSPM 控制台

  2. 在导航窗格中,选择 Insights

  3. 选择创建见解

  4. 要为见解选择分组属性,请执行以下操作:

    1. 选择搜索框以显示筛选选项。

    2. 选择分组依据

    3. 选择 AwsAccountId

    4. 选择应用

  5. 添加筛选条件框中,添加以下筛选条件:

    • 标题SgPublicAccessCheck

    • 合规性状态FAILED

  6. 选择创建见解

  7. 输入洞察名称,然后选择创建洞察

在中 AWS Config,要查看调查结果列表,请按照 AWS Config 文档中查看合规信息和评估结果中的说明进行操作。

AWS 管理员、AWS 系统管理员、云管理员

问题排查

问题解决方案

创建或删除 CloudFormation 堆栈集失败。

部署后 AWS Control Tower ,它会强制执行必要的护栏,并控制 AWS Config 聚合器和规则。这包括防止通过 CloudFormation进行任何直接更改。要正确部署或删除此 CloudFormation 模板(包括所有相关资源),必须使用 cfcT。

cfcT 无法删除 CloudFormation 模板。

如果即使在清单文件中进行了必要的更改并删除了 CloudFormation 模板文件之后,模板仍然存在,请确认清单文件中是否包含enable_stack_set_deletion参数并且该值已设置为false。有关更多信息,请参阅 CfCT 文档中的删除堆栈集

相关资源