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

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

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

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

环境:PoC 或试点

技术:安全性、标识性、合规性、数据库

AWS服务:AWSConfig;AWSKMS;Ident AWS ity and Access Management;AWSSystems Manager;亚马逊 RDS

Summary

此模式描述了如何使用AWS配置、S AWS ystems Manager 运行手册和密AWS钥管理服务 (RDS) 密钥自动修复亚马逊网络服务 (AWS) 上未加密的亚马逊关系数据库服务 (Amazon) 数据库实例和集群 (AWSKMS)。

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

此模式使用 AWS Config 规则来评估RDS数据库实例和集群。它使用 S AWS ystems Manager 运行手册应用补救措施,这些运行手册定义了要对不合规的 Amazon RDS 资源执行的操作,以及加密数据库快照的AWSKMS密钥。然后,它会强制执行服务控制策略 (SCPs),以防止在未加密的情况下创建新的数据库实例和集群。

中提供了此模式的代码GitHub

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

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

  • 用于加密RDS数据库实例和集群的现有密AWSKMS钥

  • 更新密KMS钥资源政策的权限

  • AWS您的AWS账户已启用配置(参见AWS文档中的 AWSConfig 入门

限制

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

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

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

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

  • 要将加密快照从一个AWS区域复制到另一个区域,您必须在目标AWS区域中指定KMS密钥。这是因为KMS密钥是创建密钥的AWS区域所特有的。

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

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

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

  • 如果您不选择保留自动备份,则与数据库实例位于同一AWS区域的自动备份将被删除。删除数据库实例后,无法恢复。

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

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

架构

下图说明了AWS CloudFormation 实现的架构。请注意,您也可以使用 AWS Cloud Development Kit (AWSCDK) 实现此模式。

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

工具

工具

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

  • AWSCloud Development Kit (AWSCDK) 是一个软件开发框架,用于在代码中定义云基础架构,并使用熟悉的编程语言对其进行配置。

AWS服务和功能

  • AWSConfig 会跟踪您的AWS资源配置及其与其他资源的关系。它还可以评估这些AWS资源的合规性。该服务使用可以配置的规则,根据所需的配置来评估AWS资源。您可以将一组 AWS Config 托管规则用于常见的合规场景,也可以为自定义场景创建自己的规则。当发现AWS资源不合规时,您可以通过 S AWS ystems Manager 运行手册指定补救措施,也可以选择通过亚马逊简单通知服务 (AmazonSNS) 主题发送警报。换句话说,您可以将补救操作与 AWS Config 规则相关联,并选择自动运行这些操作以解决不合规的资源,无需手动干预。如果在自动修复后资源仍然不合规,则可以设置规则以再次尝试自动修复。

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

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

  • AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。

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

代码

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

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

最佳实践

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

  • 在所有账户和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 规则。

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

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

DevOps 工程师

修复不合规的资源。

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

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

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

DevOps 工程师

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

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

DevOps 工程师

终止未加密实例。

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

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

强制执行SCPs。

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

安全工程师

相关资源

参考

工具

指南和模式

其他信息

FAQ

问:AWSConfig 是如何工作的?

答:当您打开 AWS Config 时,它会首先发现您账户中存在的支持AWS资源,然后为每个资源生成一个配置项目。AWS当资源配置发生变化时,Config 还会生成配置项目,并从您启动配置记录器之时起保留资源配置项目的历史记录。默认情况下,AWSConfig 会为AWS该区域中所有支持的资源创建配置项目。如果您不希望 AWS Config 为所有支持的资源创建配置项目,则可以指定要跟踪的资源类型。

问:AWSConfig 和 Confi AWS g 规则与 Security Hub AWS 有什么关系?

答:Sec AWS urity Hub 是一项安全与合规服务,将安全与合规状态管理作为一项服务提供。它使用 AWS Con AWS fig 和 Config 规则作为评估AWS资源配置的主要机制。AWSConfig 规则也可用于直接评估资源配置。其他AWS服务也使用配置规则,例如 Cont AWS rol Tower 和 Fi AWS rewall Manager。