

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

# 自动审核允许从公有 IP 地址进行访问 AWS 的安全组
<a name="audit-security-groups-access-public-ip"></a>

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

## Summary
<a name="audit-security-groups-access-public-ip-summary"></a>

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

要解决这个问题，您可以使用此模式中提供的基础设施即代码 (IaC) 解决方案来识别允许从任何非私有（[RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) 不合规）IP 地址访问您或组织中的任何工作负载的安全组。 AWS 账户 AWS 该[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)模板提供了自定义 AWS Config 规则、[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)函数和必要的权限。您可以将其作为[堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)部署到单个账户中，也可以将其作为[堆栈集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)部署到整个组织中，通过进行管理 AWS Organizations。

## 先决条件和限制
<a name="audit-security-groups-access-public-ip-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 使用经验 [GitHub](https://github.com/skills/introduction-to-github?tab=readme-ov-file)
+ 如果您要部署到单个 AWS 账户：
  + 创建 CloudFormation 堆栈的@@ [权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)
  + AWS Config [在目标](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html)账户中设置
  + （可选）在目标账户中[设置](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html#securityhub-manual-setup-overview)的 Security Hub CSPM
+ 如果您要部署到 AWS 组织中：
  + 创建 CloudFormation 堆栈集的@@ [权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)
  + Security Hub CSPM [设置为集成](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html#securityhub-orgs-setup-overview) AWS Organizations 
  + AWS Config [在您要部署此解决方案的账户中设置](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html)
  + 指定一个作 AWS 账户 为 Security Hub CSP AWS Config M 的委托管理员

**限制**
+ 如果您要部署到未启用 Security Hub CSPM 的个人账户，则可以使用 AWS Config 来评估结果。
+ 如果您要部署到的组织没有为 Security Hub CSPM 委派管理员，则必须登录个人成员账户才能查看调查结果。 AWS Config 
+ 如果您使用 AWS Control Tower 管理和治理组织中的账户，请使用[定制 AWS Control Tower (cfc](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-overview.html) T) 按此模式部署 IaC。使用 CloudFormation 控制台会导致配置偏离 AWS Control Tower 防护栏，并要求您重新注册组织单位 (OUs) 或托管账户。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

## 架构
<a name="audit-security-groups-access-public-ip-architecture"></a>

**部署到个人中 AWS 账户**

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

![\[将 IaC 模板作为 CloudFormation 堆栈部署到单个 AWS 账户中。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/caa8013b-3578-434b-b2c0-5ca7faf45d2d/images/01318e4c-49b5-415f-ac7a-e45451c374cf.png)


下图显示了如下工作流：

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

1. 该 AWS Config 规则在[侦探评估模式下运行，每](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config-rules.html#aws-config-rules-evaluation-modes) 24 小时调用一次 Lambda 函数。

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

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

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

**部署到 AWS 组织中**

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

![\[在 AWS 组织中将 IaC 模板部署为 CloudFormation 堆栈集。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/caa8013b-3578-434b-b2c0-5ca7faf45d2d/images/f4500347-a481-4cd3-ba14-25a034af7531.png)


下图显示了如下工作流：

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

1. cfcT 管道解压缩文件，运行 [cfn-nag](https://github.com/stelligent/cfn_nag) (GitHub) 检查，并将模板部署为堆栈集。 CloudFormation 

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

1. 该 AWS Config 规则在[侦探评估模式下运行，每](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config-rules.html#aws-config-rules-evaluation-modes) 24 小时调用一次 Lambda 函数。

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

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

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

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

## 工具
<a name="audit-security-groups-access-public-ip-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)提供了您的资源 AWS 账户 及其配置方式的详细视图。它可以帮助您确定资源之间的相互关系，以及它们的配置如何随时间变化。 AWS Config [规则](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)定义了您理想的资源配置设置，并 AWS Config 可以评估您的 AWS 资源是否符合规则中的条件。
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)按照规范性最佳实践，帮助您设置和管理 AWS 多账户环境。[AWS Control Tower (cfcT) 的自定义](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-overview.html)可帮助您自定义 AWS Control Tower 着陆区并与 AWS 最佳实践保持一致。此解决方案的定制是通过 CloudFormation 模板和 AWS Organizations [服务控制策略 (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) 实现的。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)是一项账户管理服务，可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)提供了中您的安全状态的全面视图 AWS。它还可以帮助您根据安全行业标准和最佳实践检查您的 AWS 环境。

**其他工具**
+ [Python](https://www.python.org/) 是通用的计算机编程语言。

**代码存储库**

此模式的代码可在 GitHub [检测易受攻击的安全组](https://github.com/aws-samples/detect-public-security-groups/tree/main)存储库中找到。

## 最佳实践
<a name="audit-security-groups-access-public-ip-best-practices"></a>

建议遵守以下资源中的最佳实践：
+ [组织单位的最佳实践 AWS Organizations](https://aws.amazon.com/blogs/mt/best-practices-for-organizational-units-with-aws-organizations/)（AWS 云运营和迁移博客）
+ [使用 AWS Control Tower on AWS（AWS 解决方案库）建立初始基础的指南](https://aws.amazon.com/solutions/guidance/establishing-an-initial-foundation-using-control-tower-on-aws/)
+ [创建和修改 AWS Control Tower 资源的指南](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-guidance.html)（AWS Control Tower 文档）
+ [cfCT 部署注意事项](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-considerations.html)（AWS Control Tower 文档）
+ [应用最低权限许可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)（IAM 文档）

## 操作说明
<a name="audit-security-groups-access-public-ip-epics"></a>

### 查看 CloudFormation 模板
<a name="review-the-cfnshort-template"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定您的部署策略。 | 查看解决方案和代码以确定您的 AWS 环境的部署策略。确定您是部署到单个账户还是 AWS 组织中。 | 应用程序所有者、常规 AWS | 
| 克隆存储库。 | 输入以下命令以克隆[检测易受攻击的安全组](https://github.com/aws-samples/detect-public-security-groups.git)存储库：<pre>git clone https://github.com/aws-samples/detect-public-security-groups.git</pre> | 应用程序开发人员、应用程序所有者 | 
| 验证 Python 版本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/audit-security-groups-access-public-ip.html) | AWS 管理员、应用程序开发人员 | 

### 部署 CloudFormation 模板
<a name="deploy-the-cfnshort-template"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署 CloudFormation 模板。 | 将 CloudFormation 模板部署到您的 AWS 环境中。请执行以下操作之一：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/audit-security-groups-access-public-ip.html) | 应用程序开发人员、AWS 管理员、常规 AWS | 
| 验证部署。 | 在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)中，验证堆栈或堆栈集是否已成功部署。 | AWS 管理员、应用程序所有者 | 

### 查看调查发现
<a name="review-the-findings"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看 AWS Config 规则调查结果。 | 在 Security Hub CSPM 中，执行以下操作以查看单个发现结果的列表：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/audit-security-groups-access-public-ip.html)在 Security Hub CSPM 中，执行以下操作以查看按以下分组的全部发现结果列表： AWS 账户[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/audit-security-groups-access-public-ip.html)在中 AWS Config，要查看调查结果列表，请按照 AWS Config 文档中[查看合规信息和评估结果](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_view-compliance.html)中的说明进行操作。 | AWS 管理员、AWS 系统管理员、云管理员 | 

## 问题排查
<a name="audit-security-groups-access-public-ip-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 创建或删除 CloudFormation 堆栈集失败。 | 部署后 AWS Control Tower ，它会强制执行必要的护栏，并控制 AWS Config 聚合器和规则。这包括防止通过 CloudFormation进行任何直接更改。要正确部署或删除此 CloudFormation 模板（包括所有相关资源），必须使用 cfcT。 | 
| cfcT 无法删除 CloudFormation 模板。 | 如果即使在清单文件中进行了必要的更改并删除了 CloudFormation 模板文件之后，模板仍然存在，请确认清单文件中是否包含`enable_stack_set_deletion`参数并且该值已设置为`false`。有关更多信息，请参阅 CfCT 文档中的[删除堆栈集](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-delete-stack.html)。 | 

## 相关资源
<a name="audit-security-groups-access-public-ip-resources"></a>
+ [AWS Config 自定义规则](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html)（AWS Config 文档）