检测具有即将过期的 CA 证书的 Amazon RDS 和 Aurora 数据库实例 - AWS Prescriptive Guidance

检测具有即将过期的 CA 证书的 Amazon RDS 和 Aurora 数据库实例

Stephen DiCato 和 Eugene Shifer,Amazon Web Services

摘要

作为安全最佳实践,建议您对应用程序服务器和关系数据库之间的传输中数据进行加密。您可以使用 SSL 或 TLS 加密与数据库(DB)实例或集群的连接。这些协议有助于确保应用程序和数据库之间的机密性、完整性和真实性。数据库使用服务器证书,而该证书由证书颁发机构(CA)颁发,可用于执行服务器身份验证。SSL 或 TLS 通过验证证书的数字签名并确保其未过期来验证证书的真实性。

在 AWS 管理控制台 中,Amazon Relational Database Service(Amazon RDS)Amazon Aurora 提供有关需要证书更新的数据库实例的通知。但是,要查看这些通知,您必须登录每个 AWS 账户,并导航到每个 AWS 区域 中的服务控制台。如果您需要评测在 AWS Organizations 中作为组织进行管理的多个 AWS 账户 的证书有效性,那么此任务会变得更加复杂。

通过预调配此模式中提供的基础设施即代码(IaC),您可以检测 AWS 账户 或AWS 组织中所有 Amazon RDS 和 Aurora 数据库实例的 CA 证书即将过期。AWS CloudFormation 模板提供了 AWS Config 规则、AWS Lambda 函数和必要的权限。您可以将其作为堆栈部署到单个账户中,也可以将其作为堆栈集部署到整个 AWS 组织中。

先决条件和限制

先决条件

  • 一个活跃的 AWS 账户

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

    • 确保您有权创建 CloudFormation 堆栈。

    • 在目标账户中,启用 AWS Config。

    • (可选)在目标账户中,启用 AWS Security Hub CSPM。

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

    • 确保您有权创建 CloudFormation 堆栈集。

    • 启用 Security Hub 与 AWS Organizations 集成

    • 在部署此解决方案的账户中,启用 AWS Config

    • 指定一个 AWS 账户 作为 AWS Config 和 Security Hub 的委托管理员。

限制

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

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

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

  • 部分 ‭AWS 服务在有些 ‭AWS 区域不可用。有关区域可用性,请参阅服务端点和配额页面,然后选择相应服务的链接。

架构

部署到单个 AWS 账户 中

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

在单个账户中部署提供的 CloudFormation 模板。

图中显示以下步骤:

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

  2. AWS Config 规则在检测评估模式下运行,每 24 小时运行一次。

  3. Security Hub 会接收所有 AWS Config 调查发现。

  4. 您可以在 Security Hub 中或 AWS Config 中查看调查发现,具体取决于账户的配置。

部署到 AWS 组织

下图显示了通过 AWS Organizations 和 AWS Control Tower 管理的多个账户的证书过期情况评测。您通过 CfCT 部署 CloudFormation 模板。评测结果集中在委托管理员账户的 Security Hub 中。图中描述的 AWS CodePipeline 工作流显示了 CfCT 部署期间发生的背景步骤。

将提供的 CloudFormation 模板部署到 AWS Organizations 中的多个账户。

图中显示以下步骤:

  1. 根据 CfCT 的配置,您可以在管理账户中将 IaC 推送到 AWS CodeCommit 存储库,或者将 IaC 的压缩(ZIP)文件上传到 Amazon Simple Storage Service(Amazon S3)存储桶。

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

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

  4. AWS Config 规则在检测评估模式下运行,每 24 小时运行一次。

  5. AWS Config 将所有调查发现转发到 Security Hub。

  6. Security Hub 结果汇总至委托管理员账户。

  7. 您可以在委托管理员账户的 Security Hub 中查看调查发现。

工具

AWS 服务

  • AWS CloudFormation 可帮助您跨 AWS 账户 和区域设置 AWS 资源,快速一致地预置这些资源,并在资源的整个生命周期管理资源。

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

  • AWS Control Tower 可帮您按照规范性最佳实践设置和管理 AWS 多账户环境。Customizations for AWS Control Tower(CfCT)可帮助您自定义 AWS Control Tower 登录区,并与 AWS 最佳实践保持一致。这些自定义项通过 CloudFormation 模板和服务控制策略(SCP)来实施。

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

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

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

其他工具

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

代码存储库

此模式的代码可在 GitHub 检测 CA 证书即将过期的 Amazon RDS 实例存储库中找到。

最佳实践

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

操作说明

任务描述所需技能

确定您的部署策略。

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

应用程序所有者、常规 AWS

克隆存储库。

输入以下命令,以克隆检测具有即将过期的 CA 证书的 Amazon RDS 实例存储库。

git clone https://github.com/aws-samples/config-rds-ca-expiry.git
应用程序开发人员、应用程序所有者

验证 Python 版本。

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

    cd config-rds-ca-expiry
  2. 打开 config-rds-ca-expiry.yaml

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

  4. 保存并关闭 config-rds-ca-expiry.yaml

应用程序开发人员、应用程序所有者
任务描述所需技能

部署 CloudFormation 模板。

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

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

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

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

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

验证部署。

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

AWS 管理员、应用程序所有者
任务描述所需技能

查看 AWS Config 规则调查发现。

在 Security Hub 中,执行以下操作以查看单独调查发现的列表:

  1. 打开 Security Hub 控制台

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

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

    • 合规性状态FAILED

    • 标题rds-has-expiring-ca

  4. 选择应用

在 Security Hub 中,执行以下操作以查看按 AWS 账户 分组的调查发现总数的列表:

  1. 打开 Security Hub 控制台

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

  3. 选择 Create insight (创建见解)

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

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

    2. 选择 Group by (分组依据)

    3. 选择 AwsAccountId

    4. 选择应用

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

    • 标题rds-has-expiring-ca

    • 合规性状态FAILED

  6. 选择 Create insight (创建见解)

  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 文档中的删除堆栈集

相关资源