自动修复未加密的 Amazon RDS 数据库实例和集群 - AWS Prescriptive Guidance

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

自动修复未加密的 Amazon RDS 数据库实例和集群

由 Ajay Rawat (AWS) 和 Josh Joy (AWS) 创建

环境:PoC 或试点

技术:安全性、身份、合规性;数据库

Amazon Web Services: AWS Config;AWS KMS;AWS Identity and Access Management;AWS Systems Manager;Amazon RDS

Summary

此模式描述了如何使用 AWS Config、AWS Systems Manager 运行手册和 AWS Key Management Service (AWS KMS) 密钥自动修复 Amazon Web Services (AWS) 上未加密的Amazon Relational Database Service (Amazon RDS) 数据库实例和集群。

RDS 加密的数据库实例通过保护您的数据免受未经授权的访问来为基础存储提供额外一层数据保护。您可以使用 Amazon RDS 加密来增强对Amazon Web Services Cloud 中部署的应用程序的数据保护,并满足静态数据加密的合规性要求。您可以在创建 RDS 数据库实例时为其启用加密,而不能在创建数据库实例之后启用加密。但是,您可以对未加密的 RDS 数据库实例添加加密,方法是创建数据库实例快照,然后创建此快照的加密副本。然后,您可以从加密快照还原数据库实例,从而获得原始数据库实例的加密副本。

此模式使用了 AWS Config 规则评估 RDS 数据库实例和集群。其使用 AWS Systems Manager 运行手册 (定义了要对不合规 Amazon RDS 资源执行的操作) 和用于加密数据库快照的 AWS KMS 密钥进行了修复。然后,其将强制执行服务控制策略(SCP),以防止未经加密的新数据库实例和集群的创建。

中提供了此模式的代码GitHub

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 此模式的GitHub 源代码存储库中的文件已下载到您的计算机

  • 未加密 RDS 数据库实例或集群

  • 用于加密 RDS 数据库实例和集群的当前 AWS KMS 密钥

  • 访问以更新 KMS 密钥资源策略

  • AWS Config 已在您的 Amazon Web Services Account 中启用(请参阅 AWS 文档中的 AWS Config 入门

限制

  • 您只能在创建 RDS 数据库实例时为其启用加密,而不能在创建数据库实例之后启用加密。

  • 您无法拥有未加密数据库实例的加密只读副本或加密数据库实例的未加密只读副本。

  • 您不能将未加密的备份或快照还原到加密的数据库实例。

  • Amazon RDS 加密适用于大多数数据库实例类。有关例外情况列表,请参阅 Amazon RDS 文档中的加密 Amazon RDS 资源

  • 若要将已加密快照从一个 Amazon Web Sercies Region 复制到其他区域,则必须指定目标 Amazon Web Sercies Region 区域的 KMS 密钥。这是因为 KMS 密钥特定于在其中创建它们的 AWS 区域。

  • 源快照在复制过程中保持加密状态。Amazon RDS 使用信封加密在复制过程中保护数据。有关更多信息,请参阅 AWS KMS 文档中的信封加密

  • 您无法对加密数据库实例取消加密。但是,您可以从加密的数据库实例中导出数据,然后将数据导入未加密的数据库实例。

  • 只有当您确定不再需要使用 KMS 密钥时,才能将其删除。如果不确定,请考虑禁用 KMS 密钥,而不是将其删除。如果您稍后需要再次使用已禁用的 KMS 密钥,您可以重新启用,但您无法恢复已删除的 KMS 密钥。 

  • 如果选择不保留自动备份,则存储在数据库实例所在 Amazon Web Service Region 中的自动备份将被删除。删除数据库实例后,无法恢复。

  • 您的自动备份将保留您在删除数据库实例时对其设定的保留期。无论您是否选择创建最终数据库快照,都会出现此设置的保留期。

  • 如果启用了自动修复,则此解决方案将加密所有具有相同 KMS 密钥的数据库。

架构

下图说明了 AWS CloudFormation 实施的架构。请注意,亦可使用 AWS Cloud Development Kit (AWS CDK) 实施此模式。

用于修复未加密的 Amazon RDS 实例的 AWS CloudFormation 实施。

工具

工具

  • AWS CloudFormation 可帮助您自动设置您的 AWS 资源。其允许您使用模板文件创建并删除资源集合作为单一单元(堆栈)。

  • AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可用于在代码中定义您的云基础设施,并使用熟悉的编程语言对其进行预置。

Amazon Web Services 和特征

  • AWS Config 可追踪您的 AWS 资源配置及其与您的其他资源的关系。其亦评估此类 AWS 资源的合规性。此服务使用可配置规则根据所需配置评估 AWS 资源。您可以将一组 AWS Config 托管规则用于常见合规场景,还可以为自定义场景创建自己的规则。当发现某个 AWS 资源不合规时,您可以通过 AWS Systems Manager 运行手册指定修复操作,也可以选择通过 Amazon Simple Notification Service (Amazon SNS) 主题发送警报。换句话说,您可以将修复操作与 AWS Config 规则关联,并选择自动运行修复操作与 AWS Config 规则,以处理不合规资源,无需人工干预。如果在自动修复后资源仍然不合规,则可以设置规则以再次尝试自动修复。

  • Amazon Relational Database Service (Amazon RDS) 让您可以轻松地在云中设置、操作和扩展关系数据库。Amazon RDS 的基本构建块是数据库实例,它是 Amazon Web Services Cloud 中的独立数据库环境。Amazon RDS 提供不同的实例类型,这些实例类型经过优化,适合不同的关系数据库用例。实例类型包括 CPU、内存、存储和网络容量的不同组合,便于您灵活选择适合数据库的资源组合。每种实例类型都包含多个实例大小,您可以根据目标工作负载的要求扩展数据库。

  • AWS Key Management Service (AWS KMS) 是一项托管服务,可让您轻松创建和控制用于加密您的数据的 AWS KMS 密钥。KMS 密钥是根密钥的逻辑表示形式。KMS 密钥包含元数据,如密钥 ID、创建日期、描述和密钥状态。

  • AWS Identity and Access Management (AWS IAM) 通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。

  • 服务控制策略(SCP) 为您组织的所有账户提供对最大可用权限的集中控制。SCP 可帮助确保您的账户符合组织的访问控制准则。SCP 不会影响管理账户中的用户或角色。它们仅影响组织中的成员账户。强烈建议您不要在没有彻底测试策略对账户的影响的情况下将 SCP 附加到组织的根。您可以改为创建一个组织单位 (OU),并将您的账户一次移入一个,或至少每次以少量移入,以确保您不会无意中阻止用户使用关键服务。

代码

此模式的源代码和模板可在GitHub 存储库中找到。该模式提供了两个实现选项:您可以部署 AWS CloudFormation 模板来创建用于加密 RDS 数据库实例和集群的修复角色,或者使用 AWS CDK。存储库为这两个选项设置了单独文件夹。

Epics 部分提供了部署 CloudFormation 模板的 step-by-step 说明。如果您想使用 AWS CDK,请按照存储库中 README.md 文件中的说明进行操作。 GitHub

最佳实践

  • 启用静态数据加密和传输中数据加密。

  • 在所有账户与 AWS 区域 中启用 AWS Config。

  • 记录所有资源类型的配置更改。

  • 定期交替 IAM 凭据。

  • 利用 AWS Config 标记,以便管理、搜索和筛选资源。

操作说明

任务描述所需技能

下载 CloudFormation 模板。

GitHub 存储库下载unencrypted-to-encrypted-rds.template.json文件。

DevOps 工程师

创建 CloudFormation 堆栈。

  1. 登录 AWS 管理控制台并打开控制 CloudFormation 台,网址为 https://console.aws.amazon.com/cloudformation/。 

  2. 启动 unencrypted-to-encrypted-rds.template.json 模板以创建新堆栈。

有关部署模板的更多信息,请参阅 AWS CloudFormation 文档

DevOps 工程师

查看 CloudFormation 参数和值。

  1. 查看堆栈详细信息并根据您的环境要求更新值。

  2. 选择创建堆栈,以部署模板。

DevOps 工程师

查看资源。

创建堆栈后,状态将变为 CREATE_COMPLETE。在 CloudFormation 控制台中查看创建的资源(IAM 角色、AWS Systems Manager 运行手册)。

DevOps 工程师
任务描述所需技能

更新 KMS 密钥政策。

  1. 确保密钥别名 alias/RDSEncryptionAtRestKMSAlias 存在。 

  2. 密钥政策声明应包含 IAM 修复角色。(请查看您在上一篇长篇故事中部署的 CloudFormation 模板创建的资源。) 

  3. 在以下密钥政策中,更新以粗体显示的部分,以使其与您的账户和创建的 IAM 角色相匹配。

{ "Sid": "Allow access through RDS for all principals in the account that are authorized to use RDS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:: <your-AWS-account-ID>”:role/<your-IAM-remediation-role>" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "rds.us-east-1.amazonaws.com", "kms:CallerAccount": "<your-AWS-account-ID>" } } }
DevOps 工程师
任务描述所需技能

查看不合规资源。

  1. 若要查看不合规资源列表,请在以下网址打开 AWS Config 控制台:https://console.aws.amazon.com/config/。 

  2. 在导航窗格中,选择规则,然后选择 rds-storage-encrypted 规则。

AWS Config 控制台中列出的不合规资源将为实例,而非集群。修复自动化可加密实例与集群,并创建新加密实例或新建集群。但是,请务必不要同时修复属于同一集群的多个实例。

在修复任何 RDS 数据库实例或卷前,请确保 RDS 数据库实例未在使用中。确认创建快照时未进行写入操作,以确保快照包含原始数据。考虑强制执行维护时段,在此期间进行修复。

DevOps 工程师

修复不合规的资源。

  1. 准备就绪且维护时段生效后,选择要修复的资源,然后选择修复

    现在操作状态列应显示操作执行已排队

  2. 在 Systems Manager 中查看修复进度和状态。通过以下网址打开 AWS Systems Manager 控制台:https://console.aws.amazon.com/systems-manager/。在导航窗格中,选择自动化,然后选择相应的自动化的执行 ID,以查看更多详细信息。

DevOps 工程师

验证 RDS 数据库实例是否可用。

自动化完成后,新加密的 RDS 数据库实例将变为可用。加密 RDS 数据库实例将具有前缀 encrypted ,其后其原始名称。例如,如果未加密的 RDS 数据库实例名称为 database-1,则新加密的 RDS 数据库实例将为 encrypted-database-1

DevOps 工程师

终止未加密实例。

修复完成且新加密的资源经过验证后,您可以终止未加密的实例。确保终止任何资源之前已确认新加密资源与未加密资源相匹配。

DevOps 工程师
任务描述所需技能

强制执行 SCP。

强制执行 SCP,以防止将来未经加密创建数据库实例和集群。使用GitHub 存储库中提供的rds_encrypted.json文件来实现此目的,并按照 AWS 文档中的说明进行操作。 

安全工程师

相关资源

参考

工具

指南和模式

其他信息

常见问题解答

问:AWS Config 是如何运行的?

答:打开 AWS Config 之后,它会先查找您账户中受支持的 AWS 资源,并为每个资源生成一个配置项。AWS Config 还会在某个资源的配置更改时生成配置项,并在您启动配置记录器后,保留配置项的历史记录。默认情况下,AWS Config 会为 AWS 区域 内每个支持的资源创建配置项。如果不希望 AWS Config 为所有支持的资源都创建配置项,您可以指定希望其跟踪的资源类型。

问:AWS Config 和 AWS Config 规则与 AWS Security Hub 有何关系?

答:AWS Security Hub 是一项安全与合规服务,可提供安全与合规状态管理服务。其将 AWS Config 和 AWS Config 规则作为评估 AWS 资源配置的主要机制。AWS Config 规则还可以用于直接评估资源配置。配置规则也适用于其他 Amazon Web Services,例如 AWS Control Tower 和 AWS Firewall Manager。