ElastiCache for Redis传输中加密 (TLS) - Amazon ElastiCache for Redis

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

ElastiCache for Redis传输中加密 (TLS)

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

传输中加密是可选功能,只能在创建 Redis 复制组时在复制组中启用。在创建复制组时通过将参数 TransitEncryptionEnabled 设置为 true (CLI: --transit-encryption-enabled) 可在复制组中启用传输中加密。无论您使用 AWS Management Console、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 中运行的复制组支持传输中加密。

  • 只有运行以下节点类型的复制组才支持传输中加密。

    • R6 g、R5、R4、R4

    • M6、M5、M4、M3

    • T3、T2

    有关更多信息,请参阅支持的节点类型

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

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

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

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

提示

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

启用传输中加密

在使用 AWS Management Console、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 Management Console

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

  • 选择 Redis 作为引擎。

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

  • 选择来自 的传输中加密列表。

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

 

使用启用传输中加密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—指定此复制组中的分片数(节点组)。此参数的最大值为 500。

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

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

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

 

使用启用传输中加密AWSAPI

要在使用 ElastiCache API 创建 Redis 复制组时启用传输中加密,请将参数 TransitEncryptionEnabled 设置为 true,并将 CreateReplicationGroup 用于单节点 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—指定此复制组中的分片数(节点组)。此参数的最大值为500但可以通过服务限制提高请求将最大值提高到 250。有关更多信息,请参阅 。AWS服务限制

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

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

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

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

要从中访问数据ElastiCache for Redis节点时加密会使用与安全套接字层 (SSL) 一起工作的客户端。您也可以在亚马逊 Linux 和亚马逊 Linux 2 上使用带 TLS/SSL 的 redis-cli。

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

  1. 下载并编译 redis-cli 实用工具。此实用工具包含在 Redis 软件发布版中。

  2. 在 EC2 实例的命令提示符处,键入以下命令:

    Amazon Linux 2

    $ sudo yum -y install openssl-devel gcc $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make distclean $ make redis-cli BUILD_TLS=yes $ sudo install -m 755 src/redis-cli /usr/local/bin/

    Amazon Linux

    $ sudo yum install gcc jemalloc-devel openssl-devel tcl tcl-devel clang wget $ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make redis-cli CC=clang BUILD_TLS=yes $ sudo install -m 755 src/redis-cli /usr/local/bin/

    在 Amazon Linux 上,您可能还需要运行以下附加步骤:

    sudo yum install clang CC=clang make sudo make install
  3. 之后,建议您运行可选make-test命令。

  4. 在 EC2 实例的命令提示符处,键入以下命令,并使用您的集群和端口的终端节点替换此示例中显示的相应内容。

    redis-cli -h Primary or Configuration Endpoint --tls -p 6379

    有关查找终端节点的更多信息,请参阅查找您的节点终端节点.

    以下示例连接到启用了加密和身份验证的群集:

    redis-cli -h Primary or Configuration Endpoint --tls -a 'your-password' -p 6379

要解决此问题,您可以使用 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 = primary.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。在此示例中,主端口 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

    OR

    • 将目录更改为 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

另请参阅