ElastiCache for Redis In-Transit Encryption (TLS) - 用于 Redis 的 Amazon ElastiCache
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

ElastiCache for Redis In-Transit Encryption (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)操作时使用。

In-Transit Encryption Overview

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

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

  • Encrypted connections—both the server and client connections are Secure Socket Layer (SSL) encrypted.

  • Encrypted replication—data moving between a primary node and replica nodes is encrypted.

  • Server authentication—clients can authenticate that they are connecting to the right server.

  • Client authentication—using the Redis AUTH feature, the server can authenticate the clients.

In-Transit Encryption Conditions

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

  • In-transit encryption is supported on replication groups running Redis versions 3.2.6, 4.0.10 and later.

  • In-transit encryption is supported only for replication groups running in an Amazon VPC.

  • In-transit encryption is only supported for replication groups running the following node types.

    • R5, R4, R3

    • M5, M4, M3

    • T3, T2

    For more information, see 受支持的节点类型.

  • In-transit encryption is enabled by explicitly setting the parameter TransitEncryptionEnabled to true.

  • You can enable in-transit encryption on a replication group only when creating the replication group. You cannot toggle in-transit encryption on and off by modifying a replication group. For information on implementing in-transit encryption on an existing replication group, see Enabling In-Transit Encryption.

  • To connect to an in-transit encryption enabled replication group, a database must be enabled for transport layer security (TLS). To connect to a replication group that is not in-transit encryption enabled, the database cannot be TLS-enabled.

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

提示

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

Enabling In-Transit Encryption

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

 

Enabling In-Transit Encryption on an Existing Cluster

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

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

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

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

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

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

 

Enabling In-Transit Encryption Using the AWS 管理控制台

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

  • Choose Redis as your engine.

  • Choose engine version 3.2.6, 4.0.10 or later.

  • Choose Yes from the Encryption in-transit list.

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

 

Enabling In-Transit Encryption Using the AWS CLI

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

Enabling In-Transit Encryption on Redis(已禁用集群模式) Cluster (CLI)

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

Key Parameters:

  • --engine—Must be redis.

  • --engine-version—Must be 3.2.6, 4.0.10 or later.

  • --transit-encryption-enabled—Required. If you enable in-transit encryption you must also provide a value for the --cache-subnet-group parameter.

  • --num-cache-clusters—Must be at least 1. The maximum value for this parameter is six.

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

Enabling In-Transit Encryption on a Cluster for Redis(已启用集群模式) (CLI)

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

Key Parameters:

  • --engine—Must be redis.

  • --engine-version—Must be 3.2.6, 4.0.10 or later.

  • --transit-encryption-enabled—Required. If you enable in-transit encryption you must also provide a value for the --cache-subnet-group parameter.

  • Use one of the following parameter sets to specify the configuration of the replication group's node groups:

    • --num-node-groups—Specifies the number of shards (node groups) in this replication group. The maximum value of this parameter is 90.

      --replicas-per-node-group—Specifies the number of replica nodes in each node group. The value specified here is applied to all shards in this replication group. The maximum value of this parameter is 5.

    • --node-group-configuration—Specifies the configuration of each shard independently.

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

 

Enabling In-Transit Encryption Using the AWS API

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

Enabling In-Transit Encryption on a Cluster for Redis(已禁用集群模式) (API)

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

Key Parameters

  • Engine—Must be redis.

  • EngineVersion—Must be 3.2.6, 4.0.10 or later.

  • TransitEncryptionEnabled—Must set to true.

    When TransitEncryptionEnabled is set to true, you must also provide a value for CacheSubnetGroup.

  • NumCacheClusters—Must be at least 1. The maximum value for this parameter is six.

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

Enabling In-Transit Encryption on a Cluster for Redis(已启用集群模式) (API)

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

Key Parameters

  • Engine—Must be redis.

  • EngineVersion—Must be 3.2.6, 4.0.10 or later.

  • TransitEncryptionEnabled—Must set to true.

    When TransitEncryptionEnabled is set to true, you must also provide a value for CacheSubnetGroup.

  • Use one of the following parameter sets to specify the configuration of the replication group's node groups:

    • NumNodeGroups—Specifies the number of shards (node groups) in this replication group. The maximum value of this parameter is 90 but can be increased to a maximum of 250 via service limit increase request. For more information, see AWS Service Limits.

      ReplicasPerNodeGroup—Specifies the number of replica nodes in each node group. The value specified here is applied to all shards in this replication group. The maximum value of this parameter is 5.

    • NodeGroupConfiguration—Specifies the configuration of each shard independently.

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

使用 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. 运行以下命令可同时创建和编辑 '/etc/stunnel/redis-cli.conf' 文件,以将一个 ElastiCache for Redis 集群终端节点添加到一个或多个连接参数,并将下面提供的输出用作模板:

    vi /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-cli 以及 redis-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 节点。

    • 如果在创建 ElastiCache for Redis 集群期间未使用 AUTH 密码,此示例将在 Amazon Linux 上使用 redis-cli 通过其完整路径连接到 ElastiCache for Redis 服务器:

      /home/ec2-user/redis-stable/src/redis-cli -h localhost -p 6379

      如果在创建 Redis 集群期间未使用 AUTH 密码,此示例将在 Amazon Linux 上使用 redis-cli 通过其完整路径连接到 Redis 服务器:

      /home/ec2-user/redis-stable/src/redis-cli -h localhost -p 6379 -a my-secret-password

    或者

    • 将目录更改为 redis-stable 并执行以下操作:

      如果在创建 ElastiCache for Redis 集群期间未使用 AUTH 密码,此示例将在 Amazon Linux 上使用 redis-cli 通过其完整路径连接到 ElastiCache for Redis 服务器:

      src/redis-cli -h localhost -p 6379

      如果在创建 Redis 集群期间未使用 AUTH 密码,此示例将在 Amazon Linux 上使用 redis-cli 通过其完整路径连接到 Redis 服务器:

      src/redis-cli -h localhost -p 6379 -a my-secret-password

    此示例使用 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

See Also