用于 Redis 的 Amazon ElastiCache
ElastiCache for Redis 用户指南 (API 版本 2015-02-02)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

ElastiCache for Redis 传输中加密 (TLS)

为了帮助确保数据安全,Amazon ElastiCache 和 Amazon EC2 提供了禁止未经授权来访问服务器上数据的机制。通过传输中加密功能,ElastiCache 为您提供了在不同位置之间移动数据时用来保护数据的工具。例如,您可能从复制组中的主节点向只读副本节点移动数据,或在复制组与应用程序之间移动数据。

传输中加密是可选功能,只能在创建 Redis 复制组时在复制组中启用。在创建复制组时通过将参数 TransitEncryptionEnabled 设置为 true (CLI: --transit-encryption-enabled) 可在复制组中启用传输中加密。无论您使用 AWS 管理控制台、AWS CLI 还是 ElastiCache API 创建复制组,都可以这样做。如果要启用传输中加密,还必须为 CacheSubnetGroup 提供值。

重要

参数 TransitEncryptionEnabled(CLI:--transit-encryption-enabled)只可在进行 CreateReplicationGroup(CLI:create-replication-group)操作时使用。

传输中加密概述

Amazon ElastiCache 传输中加密是一种可选功能,利用该功能,您可以在数据最易受攻击时(从一个位置传输到其他位置)提高数据安全性。由于在终端节点加密和解密数据时需要进行一些处理,因此启用传输中加密会对性能产生一些影响。应对使用和不使用传输中加密的数据进行基准测试,以确定对使用案例的性能影响。

ElastiCache 传输中加密可实现以下功能:

  • 加密连接—服务器和客户端连接均采用安全套接字层 (SSL) 加密。

  • 加密复制—对在主节点与副本节点之间移动的数据进行加密。

  • 服务器身份验证—客户端可通过身份验证确定它们连接到正确的服务器。

  • 客户端身份验证—使用 Redis AUTH 功能,服务器可以对客户端进行身份验证。

传输中加密条件

在规划实现时,应记住有关 Amazon ElastiCache 传输中加密的以下约束:

  • 在运行以下 Redis 版本的复制组上支持传输中加密:3.2.6、4.0.10 和更高版本。

  • 只有在 Amazon VPC 中运行的复制组支持传输中加密。

  • 只有运行最新一代节点类型的复制组才支持传输中加密。运行上一代节点类型的复制组不支持传输中加密。有关更多信息,请参阅 受支持的节点类型

  • 通过显式将参数 TransitEncryptionEnabled 设置为 true 可启用传输中加密。

  • 只有在创建复制组时才能在复制组中启用传输中加密。无法通过修改复制组来开启和关闭传输中加密。有关在现有复制组中实现传输中加密的信息,请参阅 启用传输中加密

  • 要连接到已启用传输中加密的复制组,必须为数据库启用传输层安全性 (TLS)。要连接到未启用传输中加密的复制组,数据库不得启用 TLS。

由于在终端节点加密和解密数据时需要进行一些处理,因此实现传输中加密会降低性能。使用自己的数据,对传输中加密进行基准测试,然后与不加密情况进行比较,以确定其对实现性能的影响。

提示

因为创建新连接的成本可能非常高,可以通过保留 SSL 连接来减小传输中加密对性能的影响。

启用传输中加密

在使用 AWS 管理控制台、AWS CLI 或 ElastiCache API 创建 ElastiCache for Redis 复制组时,可以启用传输中加密。

 

在现有集群中启用传输中加密

只能在创建 Redis 复制组时启用传输中加密。如果要对现有复制组启用传输中加密,请执行以下操作。

为现有的 Redis 复制组启用传输中加密

  1. 创建复制组的手动备份。有关更多信息,请参阅进行手动备份

  2. 通过从备份中还原来创建新复制组,将引擎版本设置为 3.2.6、4.0.10 和更高版本,将参数 TransitEncryptionEnabled 设置为 true(CLI: --transit-encryption-enabled)。有关更多信息,请参阅 从备份还原并执行可选的集群规模调整

  3. 在您的应用程序中,将终端节点更新为新复制组的终端节点。有关更多信息,请参阅 查找连接终端节点

  4. 删除旧复制组。有关更多信息,请参阅下列内容:

 

使用 AWS 管理控制台 启用传输中加密

要在使用 AWS 管理控制台创建复制组时启用传输中加密,请进行以下选择:

  • 选择 Redis 作为引擎。

  • 选择引擎版本 3.2.6、4.0.10 或更高版本。

  • Encryption in-transit 列表中选择 Yes

有关这个分步过程,请参阅以下内容:

 

使用 AWS CLI 启用传输中加密

要在使用 AWS CLI 创建 Redis 复制组时启用传输中加密,请使用参数 transit-encryption-enabled

在 Redis (已禁用集群模式) 集群中启用传输中加密 (CLI)

使用 AWS CLI 操作 create-replication-group 和以下参数创建启用传输中加密的有副本 Redis 复制组:

关键参数:

  • --engine—必须是 redis

  • --engine-version—必须是 3.2.6、4.0.10 或更高版本。

  • --transit-encryption-enabled— 是必需的。如果要启用传输中加密,还必须为 --cache-subnet-group 参数提供值。

  • --num-cache-clusters—必须至少为 1。此参数的最大值为 six。

有关更多信息,请参阅下列内容:

在 Redis (已启用集群模式) 集群中启用传输中加密 (CLI)

使用 AWS CLI 操作 create-replication-group 和以下参数创建启用传输中加密的有副本 Redis (已启用集群模式) 复制组:

关键参数:

  • --engine—必须是 redis

  • --engine-version—必须是 3.2.6、4.0.10 或更高版本。

  • --transit-encryption-enabled— 是必需的。如果要启用传输中加密,还必须为 --cache-subnet-group 参数提供值。

  • 使用以下参数集之一指定复制组的节点组配置:

    • --num-node-groups—指定此复制组中的分片数(节点组)。此参数的最大值为 15。

      --replicas-per-node-group—指定每个节点组中的副本节点数。此处指定的值适用于此复制组中的所有分片。此参数的最大值为 5。

    • --node-group-configuration—分别指定每个分片的配置。

有关更多信息,请参阅下列内容:

 

使用 AWS API 启用传输中加密

要在使用 ElastiCache API 创建 Redis 复制组时启用传输中加密,请将参数 TransitEncryptionEnabled 设置为 true,并将 CreateCacheCluster 用于单节点 Redis 复制组,将 CreateReplicationGroup 用于具有只读副本的复制组。

在 Redis (已禁用集群模式) 集群中启用传输中加密 (API)

使用 ElastiCache API 操作 CreateReplicationGroup 和以下参数创建启用传输中加密的有副本 Redis (已禁用集群模式) 复制组:

关键参数

  • Engine—必须是 redis

  • EngineVersion—必须是 3.2.6、4.0.10 或更高版本。

  • TransitEncryptionEnabled—必须设置为 true

    如果 TransitEncryptionEnabled 设置为 true,则还必须提供 CacheSubnetGroup 的值。

  • NumCacheClusters—必须至少为 1。此参数的最大值为 six。

有关更多信息,请参阅下列内容:

在 Redis (已启用集群模式) 集群中启用传输中加密 (API)

使用 ElastiCache API 操作 CreateReplicationGroup 和以下参数创建启用传输中加密的有副本 Redis (已启用集群模式) 复制组:

关键参数

  • Engine—必须是 redis

  • EngineVersion—必须是 3.2.6、4.0.10 或更高版本。

  • TransitEncryptionEnabled—必须设置为 true

    如果 TransitEncryptionEnabled 设置为 true,则还必须提供 CacheSubnetGroup 的值。

  • 使用以下参数集之一指定复制组的节点组配置:

    • NumNodeGroups—指定此复制组中的分片数(节点组)。此参数的最大值为 15,但可以通过服务限制提高请求将最大值增至 250。有关更多信息,请参阅 AWS 服务限制

      ReplicasPerNodeGroup—指定每个节点组中的副本节点数。此处指定的值适用于此复制组中的所有分片。此参数的最大值为 5。

    • NodeGroupConfiguration—分别指定每个分片的配置。

有关更多信息,请参阅下列内容:

使用 redis-cli 连接到启用了传输中加密的 用于 Redis 的 Amazon ElastiCache 节点

要从启用了传输中加密的适用于 Redis 的 ElastiCache 中访问数据,您可以使用与安全套接字层 (SSL) 一起工作的客户端。但是,redis-cli 不支持 SSL 或传输层安全性 (TLS)。

要解决此问题,您可以使用 stunnel 命令创建到 redis 节点的 SSL 隧道。然后,您可以使用 redis-cli 连接到从隧道,以便从加密的 Redis 节点访问数据。

使用 redis-cli 连接到启用了传输中加密的 Redis 集群

  1. 从 SSH 客户端,安装 stunnel

    $ sudo yum install stunnel
  2. redis-cli.conf 文件中,将 Redis 集群终端节点添加到一个或多个连接参数。

    $ cat /etc/stunnel/redis-cli.conf fips = no setuid = root setgid = root pid = /var/run/stunnel.pid debug = 7 delay = yes options = NO_SSLv2 options = NO_SSLv3 [redis-cli] client = yes accept = 127.0.0.1:6379 connect = master.ssltest.wif01h.use1.cache.amazonaws.com:6379 [redis-cli-replica] client = yes accept = 127.0.0.1:6380 connect = ssltest-02.ssltest.wif01h.use1.cache.amazonaws.com:6379

    在此示例中,配置文件具有两个连接,即 redis-cliredis-cli-replica。参数设置如下所示:

    • client设置为 yes 以指定此 stunnel 实例是客户端。

    • accept 设置为客户端 IP。在此示例中,主 IP 设置为端口 6379 上的 Redis 默认 127.0.0.1。副本必须调用另一个端口并设置为 6380。您可以使用临时端口 1024–65535。有关更多信息,请参阅 Amazon VPC 用户指南 中的临时端口

    • connect 设置为 Redis 服务器终端节点。有关更多信息,请参阅查找连接终端节点

  3. 启动 stunnel

    $ sudo stunnel /etc/stunnel/redis-cli.conf

    使用 netstat 命令确认隧道已启动。

    $ sudo netstat -tulnp | grep -i stunnel tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 3189/stunnel tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 3189/stunnel
  4. 使用隧道的本地终端节点连接到加密的 Redis 节点。

    此示例使用 redis-cli 连接到 Redis 服务器。

    $ redis-cli -h localhost -p 6379 -a my-secret-password localhost:6379>set foo "bar" OK localhost:6379>get foo "bar"

    此示例使用 Telnet 连接到 Redis 服务器。

    $ telnet localhost 6379 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. auth MySecretPassword +OK get foo $3 bar
  5. 要停止并关闭 SSL 隧道,请对 stunnel 过程执行 pkill 操作。

    $ sudo pkill stunnel

另请参阅