

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

# Amazon ElastiCache Well-Architected 镜头安全支柱
<a name="SecurityPillar"></a>

安全支柱侧重于保护信息和系统。关键主题包括数据的机密性和完整性、识别和管理谁能通过基于权限的管理做什么、保护系统以及建立用以检测安全事件的控制措施。

**Topics**
+ [SEC 1：您正在采取哪些措施来控制对 ElastiCache 数据的授权访问？](#SecurityPillarSEC1)
+ [SEC 2：除了基于网络的 ElastiCache 控制之外，您的应用程序是否需要额外的授权？](#SecurityPillarSEC2)
+ [SEC 3：是否存在无意中执行命令从而导致数据丢失或故障的风险？](#SecurityPillarSEC3)
+ [SEC 4：如何确保静态数据加密 ElastiCache](#SecurityPillarSEC4)
+ [SEC 5：如何加密传输中的数据？ ElastiCache](#SecurityPillarSEC5)
+ [SEC 6：如何限制对控制面板资源的访问？](#SecurityPillarSEC6)
+ [SEC 7：如何检测和响应安全事件？](#SecurityPillarSEC7)

## SEC 1：您正在采取哪些措施来控制对 ElastiCache 数据的授权访问？
<a name="SecurityPillarSEC1"></a>

**Question-level 简介：**所有 ElastiCache集群均设计为可从 VPC 中的亚马逊弹性计算云实例、无服务器函数 (AWS Lambda) 或容器（亚马逊弹性容器服务）进行访问。最常遇到的情况是从同一个亚马逊虚拟私有云（Amazon Virtual Private Cloud）中的亚马逊弹性计算云实例访问 ElastiCache 集群。必须先授权 Amazon EC2 实例对集群的访问权限，然后您才能从 Amazon EC2 实例连接到集群。要访问在 VPC 中运行的 ElastiCache 集群，必须向该集群授予网络入口。

**Question-level 好处：**通过 VPC 安全组控制进入集群的网络。安全组充当 Amazon EC2 实例的虚拟防火墙，用于控制传入和传出流量。入站规则控制传入到实例的流量，出站规则控制从实例传出的流量。如果是 ElastiCache，启动集群时，需要关联安全组。这样可以确保组成集群的所有节点都有入站和出站流量规则。此外，还配置为 ElastiCache 仅在私有子网上部署，因此只能通过 VPC 的私有网络访问私有子网。
+ **[必需] **与您的集群关联的安全组控制进入集群的网络入口以及对集群的访问权限。默认情况下，安全组不会定义任何入站规则，因此也不会定义任何入站路径 ElastiCache。要启用此功能，请在安全组上配置入站规则，指定 ElastiCache 集群的源 IP address/range、TCP 类型流量和端口（ ElastiCache 例如 Valkey 和 Redis OSS 的默认端口 6379）。虽然可以允许非常广泛的入口来源，比如 VPC 中的所有资源 (0.0.0. 0/0），建议在定义入站规则时尽可能精细，例如仅授权在与特定安全组关联的 Amazon EC2 实例上运行的 Valkey 或 Redis OSS 客户端进行入站访问。

  **[资源]：**
  + [子网和子网组](SubnetGroups.md)
  + [访问您的集群或复制组](accessing-elasticache.md)
  + [使用安全组控制到资源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html#DefaultSecurityGroupdefault%20security%20group)
  + [适用于 Linux 实例的 Amazon Elastic Compute Cloud 安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html#creating-your-own-security-groups)
+ **[必需]**AWS Identity and Access Management 策略可以分配给允许其访问 ElastiCache 数据的 AWS Lambda 职能。要启用此功能，请创建具有该`AWSLambdaVPCAccessExecutionRole`权限的 IAM 执行角色，然后将该角色分配给该 AWS Lambda 函数。

  **[资源]：**配置 Lambda 函数以在亚马逊 VPC ElastiCache 中访问亚马逊：[教程：配置 Lambda 函数以在亚马逊 VPC 中 ElastiCache 访问亚马逊](https://docs.aws.amazon.com/lambda/latest/dg/services-elasticache-tutorial.html)

## SEC 2：除了基于网络的 ElastiCache 控制之外，您的应用程序是否需要额外的授权？
<a name="SecurityPillarSEC2"></a>

**Question-level 简介：**在需要在单个客户端级别限制或控制对集群的访问的情况下，建议通过 AUTH 命令进行身份验证。 ElastiCache 身份验证令牌以及可选的用户和用户组管理， ElastiCache 允许客户端在运行命令和访问密钥之前要求输入密码，从而提高数据平面安全性。

**Question-level 好处：**为了帮助保护您的数据安全， ElastiCache 提供了防止未经授权访问您的数据的机制。这包括在执行授权命令 ElastiCache 之前，强制客户端使用 Role-Based 访问控制 (RBAC) AUTH 或 AUTH 令牌（密码）进行连接。
+ **[最佳]** 对于 ElastiCache Redis OSS 的 6.x 及更高 ElastiCache 版本以及 Valkey 的 7.2 及更高版本，通过定义用户组、用户和访问字符串来定义身份验证和授权控制。将用户分配给用户组，然后将用户组分配给集群。要使用 RBAC，必须在创建集群时将其选中，并且必须启用传输中加密。确保您使用的是支持 TLS 的 Valkey 或 Redis OSS 客户端，以便能够利用 RBAC。

  **[资源]：**
  + [将 RBAC 应用于的复制组 ElastiCache](Clusters.RBAC.md#rbac-using)
  + [使用访问字符串指定权限](Clusters.RBAC.md#Access-string)
  + [ACL](https://valkey.io/topics/acl/)
  + [支持的 ElastiCache 版本](VersionManagement.md#supported-engine-versions)
+ **[最佳]** 对于 Redis OSS 6.x 之前的 ElastiCache 版本，除了为 AUTH 设置强密码策略 token/password 并维护严格的密码策略外，最佳做法是轮换. password/token ElastiCache 在任何给定时间最多可以管理两 (2) 个身份验证令牌。您也可以修改集群以明确要求使用身份验证令牌。

  **[资源]：**[修改现有 ElastiCache集群上的身份验证令牌](auth.md#auth-modifyng-token)

## SEC 3：是否存在无意中执行命令从而导致数据丢失或故障的风险？
<a name="SecurityPillarSEC3"></a>

**Question-level 简介：**有许多 Valkey 或 Redis OSS 命令如果错误执行或由恶意行为者执行，可能会对操作产生不利影响。从性能和数据安全的角度来看，这些命令可能会产生意想不到的后果。例如，开发人员可能会在开发环境中定期调用 FLUSHALL 命令，并且由于错误，可能会无意中尝试在生产系统上调用此命令，从而导致数据意外丢失。

**Question-level 好处：**从 Redis OSS 的 5.0.3 ElastiCache 版本开始，您可以重命名某些可能会干扰工作负载的命令。重命名命令有助于防止无意中在集群上执行这些命令。
+ **[必需]**

  **[资源]：**
  + [ElastiCache 适用于 Redis OSS 的 5.0.3 版（已弃用，使用版本 5.0.6）](engine-versions.md#redis-version-5-0.3)
  + [ElastiCache 适用于 Redis 的 5.0.3 版本 OSS 参数发生了变化](ParameterGroups.Engine.md#ParameterGroups.Redis.5-0-3)
  + [Redis OSS 安全](https://redis.io/docs/management/security/)

## SEC 4：如何确保静态数据加密 ElastiCache
<a name="SecurityPillarSEC4"></a>

**Question-level 简介：**虽然 ElastiCache 是内存中的数据存储，但可以加密作为集群标准操作的一部分可能保存（存储中）的任何数据。这包括写入 Amazon S3 的计划备份和手动备份，以及在执行同步和交换操作后保存到磁盘存储中的数据。m6g 和 R6g 系列中的实例类型还会始终开启内存加密。

**Question-level 好处：**ElastiCache提供可选的静态加密以提高数据安全性。
+ **[必需]** 只有在群集（复制组）创建后才能在 ElastiCache 群集（复制组）上启用At-rest 加密。无法修改现有集群以开始加密静态数据。默认情况下， ElastiCache 将提供和管理静态加密中使用的密钥。

  **[资源]：**
  + [At-Rest 加密限制](at-rest-encryption.md#at-rest-encryption-constraints)
  + [启用 At-Rest 加密](at-rest-encryption.md#at-rest-encryption-enable)
+ **[最佳]** 利用当数据在内存中时对数据进行加密的 Amazon EC2 实例类型（例如 m6g 或 R6g）。如果可能，请考虑管理自己的静态加密密钥。对于更严格的数据安全环境，可以使用 AWS Key Management Service (KMS) 来自行管理客户主密钥 (CMK)。通过与 ElastiCache 集成 AWS Key Management Service，您可以创建、拥有和管理用于加密 ElastiCache 集群静态数据的密钥。

  **[资源]：**
  + [使用来自的客户托管密钥 AWS Key Management Service](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)
  + [AWS 密钥管理服务](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)
  + [AWS KMS 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)

## SEC 5：如何加密传输中的数据？ ElastiCache
<a name="SecurityPillarSEC5"></a>

**Question-level 简介：**常见的要求是防止数据在传输过程中被泄露。它表示分布式系统组件内的数据，以及应用程序客户端和群集节点之间的数据。 ElastiCache 通过允许加密客户端和集群之间以及群集节点本身之间传输的数据来支持这一要求。m6g 和 R6g 系列中的实例类型还会始终开启内存加密。

**Question-level 好处：**Amazon ElastiCache 传输中加密是一项可选功能，当数据从一个位置传输到另一个位置时，它允许您在最脆弱的地方提高数据的安全性。
+ **[必需]** 只有在群集（复制组）创建后才能启用In-transit 加密。请注意，由于需要对encrypting/decrypting 数据进行额外处理，实施传输中加密会对性能产生一些影响。要了解具体会有什么影响，建议在启用传输中加密之前和之后分别对您的工作负载进行基准测试。

  **[资源]：**
  + [In-transit 加密概述](in-transit-encryption.md#in-transit-encryption-overview)

## SEC 6：如何限制对控制面板资源的访问？
<a name="SecurityPillarSEC6"></a>

**Question-level 简介：**IAM 策略和 ARN 为 Valkey 和 Redis OSS 启用了精细的访问控制，从而允许更严格的控制来管理集群的创建、修改和删除。 ElastiCache 

**Question-level 好处：**Amazon ElastiCache 资源（例如复制组、节点等）的管理可以仅限于基于 IAM 策略的具有特定权限的 AWS 账户，从而提高了资源的安全性和可靠性。
+ **[必需]** 通过向 AWS 用户分配特定 AWS Identity and Access Management策略来管理对 Amazon ElastiCache 资源的访问权限，从而可以更精细地控制哪些账户可以对集群执行哪些操作。

  **[资源]：**
  + [管理 ElastiCache资源访问权限概述](IAM.Overview.md)
  + [使用适用于亚马逊的基于身份的政策（IAM 策略）ElastiCache](IAM.IdentityBasedPolicies.md)

## SEC 7：如何检测和响应安全事件？
<a name="SecurityPillarSEC7"></a>

**Question-level 简介：**ElastiCache在启用 RBAC 的情况下部署时，会导出 CloudWatch 指标以通知用户安全事件。这些指标有助于识别连接的 RBAC 用户未获授权进行身份验证、访问密钥或运行命令的失败尝试。

此外， AWS 产品和服务资源通过自动部署和记录所有操作和修改以备日后review/audit使用，从而帮助保护您的总体工作负载。

**Question-level 好处：**通过监控事件，您可以使您的组织能够根据您的要求、策略和程序做出响应。自动监控和响应这些安全事件可增强您的整体安全态势。
+ **[必需]** 熟悉已发布的与 RBAC 身份验证和授权失败相关的CloudWatch 指标。
  + AuthenticationFailures = 尝试向 Valkey 或 Redis OSS 进行身份验证失败
  + KeyAuthorizationFailures = 用户未经许可尝试访问密钥失败
  + CommandAuthorizationFailures = 用户在未经许可的情况下尝试运行命令失败

  **[资源]：**
  + [Valkey 或 Redis OSS 的指标](CacheMetrics.Redis.md)
+ **[最佳] **建议针对这些指标设置提示和通知，并在必要时做出响应。

  **[资源]：**
  + [使用亚马逊 CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)
+ **[最佳] **使用 Valkey 或 Redis OSS ACL LOG 命令收集进一步的详细信息

  **[资源]：**
  + [ACL LOG](https://valkey.io/commands/acl-log/)
+ **[最佳]** 熟悉与监控、记录和分析 ElastiCache 部署和事件相关的 AWS 产品和服务功能

  **[资源]：**
  + [使用记录亚马逊 ElastiCache API 调用 AWS CloudTrail](logging-using-cloudtrail.md)
  + [elasticache-redis-cluster-automatic-backup-check](https://docs.aws.amazon.com/config/latest/developerguide/elasticache-redis-cluster-automatic-backup-check.html)
  + [使用 CloudWatch 指标监控使用情况](CacheMetrics.md)