监控 Amazon ElastiCache 集群的静态加密 - AWS 规范指引

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

监控 Amazon ElastiCache 集群的静态加密

Abhishek Agawane,Amazon Web Services

Summary

Amazon ElastiCache 是一项 Amazon Web Services (AWS) 服务,它为在云中分配内存数据存储或缓存环境提供了高性能、可扩展且经济实惠的缓存解决方案。它从高吞吐量和低延迟的内存数据存储中检索数据。此功能使其成为缓存、会话存储、游戏、地理空间服务、实时分析和队列等实时用例的热门选择。 ElastiCache 提供 Redis 和 Memcached 数据存储,两者都提供亚毫秒级的响应时间。

数据加密有助于防止未经授权的用户在 Redis 集群及其关联数据存储系统中读取敏感数据。这包括保存在持久性介质中的数据(称为静态数据),以及在客户端和高速缓存服务器之间的网络传输过程中可能被拦截的数据(称为传输中数据)。

通过将AtRestEncryptionEnabled参数设置为,可以在创建复制组时为 ElastiCache (Redis OSS) 启用静态加密。true启用此参数后,它将在同步、备份和交换操作期间加密磁盘,并加密存储在 Amazon Simple Storage Service(Amazon S3)中的备份。不能对现有复制组启用静态加密。创建复制组时,可以通过以下两种方式启用静态加密:

  • 通过选择默认选项,该选项使用服务托管的静态加密。

  • 使用客户托管密钥并提供 () 中的密钥 ID 或 Amazon 资源名称 (ARN)。 AWS Key Management Service AWS KMS

此模式提供了一种安全控制,用于监控 API 调用并生成有关CreateReplicationGroup操作的 Amazon Events EventBridge 事件。此事件调用一个 AWS Lambda 函数,该函数运行 Python 脚本。该函数从事件 JSON 输入中获取复制组 ID,并执行以下检查以确定是否存在未加密的集群:

  • 检查AtRestEncryptionEnabled密钥是否存在。

  • 如果AtRestEncryptionEnabled存在,则检查该值以查看是否存在true

  • 如果该AtRestEncryptionEnabled值设置为false,则使用亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 通知设置一个变量,该变量用于跟踪违规行为并向您提供的电子邮件地址发送违规消息。

先决条件和限制

先决条件

  • 活跃 AWS 账户的.

  • 用于上传提供的 Lambda 代码的 S3 存储桶。

  • 您希望接收违规通知的电子邮件地址。

  • ElastiCache 已启用日志记录,用于访问所有 API 日志。

限制

  • 这种侦探控制是区域性的,必须部署在你 AWS 区域 要监控的每个地方。

  • 该控件支持在虚拟私有云(VPC)中运行的复制组。

  • 该控件支持运行以下节点类型的复制组:

    • R7g、R6gd、R6g、R5、R4、R3

    • M7g、M6g、M5、M4、M3

    • T4g、T3、T2

    • C7gn

产品版本

  • 支持 ElastiCache (Redis OSS) 3.2.6 或更高版本,以及 Valkey 7.2 或更高版本

架构

工作流程架构

监控集 ElastiCache 群的工作流程。
  1. 用户通过 AWS 管理控制台、 AWS Command Line Interface (AWS CLI) 或 API 调用启动 ElastiCache 复制组。

  2. ElastiCache 在CreateReplicationGroup 调用 API 时生成 EventBridge 事件。

  3. EventBridge 规则会触发并调用 Lambda 函数进行合规性检查。

  4. Lambda 函数处理事件并检查集群上是否启用了静态加密。 ElastiCache

  5. 如果检测到加密违规,Lambda 函数会向 SNS 主题发布通知消息。

  6. Amazon SNS 会向管理员发送有关加密合规违规行为的电子邮件通知。

自动化和扩展

工具

AWS 服务

  • 借 ElastiCache助 Amazon,您可以轻松地在中设置、管理和扩展分布式内存缓存环境。 AWS Cloud它提供了高性能、可调整大小且经济实惠的内存缓存,同时消除了与部署和管理分布式缓存环境相关的复杂性。 ElastiCache 可与 Redis 和 Memcached 引擎一起使用。

  • AWS CloudFormation帮助您对资源进行建模和设置,快速一致地配置 AWS 资源,并在资源的整个生命周期中对其进行管理。您可以使用模板来描述资源及其依赖关系,然后将它们作为堆栈一起启动和配置,而不必单独管理资源。您可以跨多个 AWS 账户 和 AWS 区域管理和配置堆栈。

  • Amazon EventBridge 提供了描述 AWS 资源变化的近乎实时的系统事件流。 EventBridge 通过发送消息以响应环境、激活功能、进行更改和捕获状态信息,在操作变化发生时意识到这些变化,并在必要时采取纠正措施。

  • AWS Lambda 是一项计算服务,无需预调配或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 - 代码未运行时不产生费用。 

  • Amazon SNS 协调和管理发布者与客户之间的消息发送,包括网络服务器和电子邮件地址。订阅用户接收所有发布至他们所订阅主题的消息,并且一个主题的所有订阅用户收到的消息都相同。

代码

此模式的代码可在 GitHub 监控静态加密存储库的 Amazon ElastiCache 集群中找到。有关如何使用存储库中文件的信息,请参阅 Epics 部分

最佳实践

部署

  • 在部署此控件之前,请确保 AWS CloudTrail 它正在记录 ElastiCache API 调用。

  • 这是一个区域控件;在您使用的每个 AWS 区域 位置部署该控件 ElastiCache。

  • 在将解决方案部署到生产 dev/test 环境之前,先在环境中对其进行验证。

安全性

  • 要增强对加密密钥的控制,请使用客户托管的 KMS 密钥。

  • 审查 AWS Identity and Access Management (IAM) 权限以确保 Lambda 执行角色的最低权限访问权限。

  • 为死信队列中的消息设置警报。

操作

  • 设置适当的日志保留期,以平衡合规性需求和成本。

  • 调整 Lambda 的预留并发度,以根据 ElastiCache 您的创建频率进行调整。

  • 向 Amazon SNS 订阅多个电子邮件地址以接收团队通知。

监控

  • 查看 Amazon CloudWatch 警报,确保警报阈值符合您的运营需求。

  • 定期监控 Lambda 指标的执行持续时间和错误率。

  • 定期审计违规行为以审查加密合规性通知。

操作说明

Task说明所需技能

从中下载代码 GitHub。

从中克隆或下载代码存储库 GitHub。存储库包含文件index.pyelasticache_encryption_at_rest.yml

云架构师

创建 Lambda 部署包。

使用 Python 代码创建两个.zip 文件:

  • 创建ElastiCache-EncryptionAtRest.zip,其中包含index.py

  • 使用以下命令:

    zip ElastiCache-EncryptionAtRest.zip index.py
云架构师

将代码上传到 S3 存储桶。

  1. 创建新的 S3 存储桶或使用现有的 S3 存储桶上传 Lambda 代码。

  2. 压缩 Lambda 代码 (index.py) 并将其命名。ElastiCache-EncryptionAtRest.zip

  3. 将.zip 文件上传到 S3 存储桶。此存储桶必须与您要评估 AWS 区域 的资源位于同一存储桶中。

云架构师

部署 CloudFormation 模板。

在 S3 存储桶中打开CloudFormation 控制台,然后部署代码存储库中提供的elasticache_encryption_at_rest.yml文件。 AWS 区域 在下一个操作说明中,提供模板参数的值。

云架构师
Task说明所需技能

提供 S3 存储桶名称。

输入您在第一篇操作说明中创建或选择的 S3 存储桶的名称。此 S3 存储桶包含 Lambda 代码的.zip 文件,并且必须与要评估 CloudFormation 的模板和资源 AWS 区域 相同。 

云架构师

提供 S3 密钥。

提供 Lambda 代码 .zip 文件在 S3 存储桶中的位置,不带前导斜杠(例如,ElasticCache-EncryptionAtRest.zipcontrols/ElasticCache-EncryptionAtRest.zip)。

云架构师

提供电子邮箱地址。

提供要接收违规通知的活动电子邮件地址。 

云架构师

指定日志记录级别。

指定日志级别和详细程度。

  • Info指定有关应用程序进度的详细信息消息,应仅用于调试。

  • Error指定仍可能允许应用程序继续运行的错误事件。

  • Warning指明潜在的有害情况。

云架构师
Task说明所需技能

确认电子邮件订阅。

成功部署 CloudFormation 模板后,它会向您提供的电子邮件地址发送订阅消息。要接收通知,您必须确认此电子邮件订阅。

云架构师

故障排除

问题解决方案

未触发 Lambda 函数

症状:创建或修改 ElastiCache 集群 CloudWatch 后没有登录。

解决方案

  • 验证 EventBridge 规则状态: 

    aws events describe-rule --name <rule-name>
  • 确认基于 Lambda 资源的策略是否允许调用。 EventBridge

  • 确认 EventBridge 事件模式与 ElastiCache API 调用匹配。

没有电子邮件通知

症状:Lambda 函数成功运行,但您没有收到任何电子邮件通知。

解决方案

  • 通过电子邮件确认链接确认您的 Amazon SNS 订阅。

  • 检查垃圾邮件或垃圾文件夹中是否有 Amazon SNS 电子邮件。

  • 在 Lambda 环境变量中验证亚马逊 SNS 主题的亚马逊资源名称 (ARN):OUTBOUND_TOPIC_ARN

  • 手动测试 Amazon SNS: 

    aws sns publish --topic-arn <arn> --message "Test"

权限问题

症状:Lambda 函数 CloudWatch 日志中出现访问被拒绝错误。

解决方案

  • 验证 Lambda 执行角色是否具有所需的 ElastiCache 读取权限。

  • 确认 AWS KMS 密钥策略包含 Lambda 执行角色。

  • 确保亚马逊 SNS 主题政策允许 Lambda 发布。

相关资源