本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ElastiCache 传输中加密 () TLS
为了帮助保护您的数据安全,Amazon ElastiCache 和 Amazon EC2 提供了防止未经授权访问您在服务器上的数据的机制。通过提供传输中加密功能, ElastiCache 为您提供一种工具,用于在数据从一个位置移动到另一个位置时帮助保护数据。
所有 Valkey 或 Redis OSS 无服务器缓存都启用了传输中加密。对于自行设计的集群,您可以在创建复制组时TransitEncryptionEnabled
将参数设置为 true
(CLI:--transit-encryption-enabled
),从而在复制组上启用传输中加密。无论您是使用、还是创建复制组 AWS Management Console,都可以执行此操作 ElastiCache API。 AWS CLI
所有无服务器缓存均启用了传输中加密。对于自行设计的集群,您可以在使用 (:) 操作创建缓存集群时TransitEncryptionEnabled
将参数设置为 true
(CLI:--transit-encryption-enabled
),从而在缓存集群上启用传输中CreateCacheCluster
加密。CLI create-cache-cluster
主题
- 传输中加密概览
- 传输中的加密条件(Valkey 和 Redis)OSS
- 传输中的加密条件(Memcached)
- 传输中加密最佳实践
- 更多 Valkey 和 Redis 选项 OSS
- 为 Memcached 启用传输中加密
- 启用传输中加密
- 使用 valkey-cli 通过传输加密连接到 ElastiCache (ValkeyOSS) 或亚马逊 (Redis) ElastiCache
- 使用 Python 在自己设计的 Redis OSS 集群上启用传输中加密
- 启用传输中加密时的最佳实践
- 使用 Openssl (Memcached) 连接到启用传输中加密的节点
- 使用 Java 创建 TLS Memcached 客户端
- 使用创建 TLS Memcached 客户端 PHP
传输中加密概览
Amazon ElastiCache 传输中加密是一项功能,可让您在数据从一个位置传输到另一个地点时,在最脆弱的地方提高数据的安全性。由于在端点加密和解密数据时需要进行一些处理,因此启用传输中加密会对性能产生一些影响。应对使用和不使用传输中加密的数据进行基准测试,以确定对使用案例的性能影响。
ElastiCache 传输中加密实现了以下功能:
-
加密的客户端连接-对客户端与缓存节点的连接进行TLS加密。
-
加密服务器连接:对集群中在节点之间移动的数据进行了加密。
-
服务器身份验证 – 客户端可通过身份验证确定它们连接到正确的服务器。
-
客户端身份验证-使用 Valkey 和 Redis OSS AUTH 功能,服务器可以对客户端进行身份验证。
传输中的加密条件(Valkey 和 Redis)OSS
在规划自己设计的集群实施时,应牢记以下对 Amazon ElastiCache 传输中加密的限制:
-
运行 Valkey 7.2 及更高版本以及 Redis OSS 版本 3.2.6、4.0.10 及更高版本的复制组支持传输中加密。
-
运行 Valkey 7.2 及更高版本以及 Redis OSS 版本 7 及更高版本的复制组支持修改现有集群的传输中加密设置。
-
只有在 Amazon VPC 中运行的复制组才支持传输中加密。
-
运行以下节点类型的复制组不支持传输中加密:M1、M2。
有关更多信息,请参阅 受支持的节点类型。
-
通过显式将参数
TransitEncryptionEnabled
设置为true
可启用传输中加密。 -
确保您的缓存客户端支持TLS连接,并且您已在客户端配置中启用了连接。
-
对于 ElastiCache 版本 6 及更高版本,所有 AWS 区域都不建议使用旧的 TLS 1. TLS 0 和 1.1。ElastiCache 将继续支持 TLS 1.0 和 1.1,直到 2025 年 5 月 8 日。客户必须在该日期之前更新其客户端软件。
传输中的加密条件(Memcached)
在规划自己设计的集群实施时,应牢记以下对 Amazon ElastiCache 传输中加密的限制:
-
在运行 Memcached 1.6.12 及更高版本的集群上支持传输中加密。
-
传输中加密支持传输层安全 (TLS) 版本 1.2 和 1.3。
-
只有在 Amazon VPC 中运行的集群才支持传输中加密。
-
运行以下节点类型的复制组不支持传输中加密:M1、M2、M3、R3、T2。
有关更多信息,请参阅 受支持的节点类型。
-
通过显式将参数
TransitEncryptionEnabled
设置为true
可启用传输中加密。 -
只有在创建集群时,才能在集群上启用传输中加密。无法通过修改集群来开启和关闭传输中加密。
-
确保您的缓存客户端支持TLS连接,并且您已在客户端配置中启用了连接。
传输中加密最佳实践
-
由于在端点加密和解密数据时需要进行一些处理,因此实现传输中加密会降低性能。使用自己的数据,对传输中加密进行基准测试,然后与不加密情况进行比较,以确定其对实现性能的影响。
-
由于创建新连接可能很昂贵,因此您可以通过保留连接来减少传输中加密对性能的影响。TLS
更多 Valkey 和 Redis 选项 OSS
有关 Valkey 和 Redis 可用选项的更多信息OSS,请参阅以下链接。
为 Memcached 启用传输中加密
要在使用 AWS 管理控制台创建 Memcached 集群时启用传输中加密,请进行以下选择:
-
选择 Memcached 作为引擎。
-
选择 1.6.12 或更高的引擎版本。
-
在 Encryption in transit(传输中加密)下,选择 Enable(启用)。
有关 step-by-step流程,请参阅为 Valkey 或 Redis 创建集群 OSS。
使用 Openssl (Memcached) 连接到启用传输中加密的节点
要从启用传输中加密的 ElastiCache (Memcached)节点访问数据,您需要使用支持安全套接字层(SSL)的客户端。您也可以在 Amazon Linux 和 Amazon Linux 2 上使用 Openssl s_client。
使用 Openssl s_client 连接到 Amazon Linux 2 或 Amazon Linux 上启用了传输中加密的 Memcached 集群:
/usr/bin/openssl s_client -connect
memcached-node-endpoint
:memcached-port
使用 Java 创建 TLS Memcached 客户端
要在TLS模式下创建客户端,请执行以下操作以使用相应的方法初始化客户端SSLContext:
import java.security.KeyStore; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import net.spy.memcached.AddrUtil; import net.spy.memcached.ConnectionFactoryBuilder; import net.spy.memcached.MemcachedClient; public class TLSDemo { public static void main(String[] args) throws Exception { ConnectionFactoryBuilder connectionFactoryBuilder = new ConnectionFactoryBuilder(); // Build SSLContext TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init((KeyStore) null); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); // Create the client in TLS mode connectionFactoryBuilder.setSSLContext(sslContext); MemcachedClient client = new MemcachedClient(connectionFactoryBuilder.build(), AddrUtil.getAddresses("mycluster.fnjyzo.cfg.use1.cache.amazonaws.com:11211")); // Store a data item for an hour. client.set("theKey", 3600, "This is the data value"); } }
使用创建 TLS Memcached 客户端 PHP
要在TLS模式下创建客户端,请执行以下操作以使用相应的方法初始化客户端SSLContext:
<?php /** * Sample PHP code to show how to create a TLS Memcached client. In this example we * will use the Amazon ElastiCache Auto Descovery feature, but TLS can also be * used with a Static mode client. * See Using the ElastiCache Cluster Client for PHP (https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/AutoDiscovery.Using.ModifyApp.PHP.html) for more information * about Auto Discovery and persistent-id. */ /* Configuration endpoint to use to initialize memcached client. * this is only an example */ $server_endpoint = "mycluster.fnjyzo.cfg.use1.cache.amazonaws.com"; /* Port for connecting to the cluster. * This is only an example */ $server_port = 11211; /* Initialize a persistent Memcached client and configure it with the Dynamic client mode */ $tls_client = new Memcached('persistent-id'); $tls_client->setOption(Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE); /* Add the memcached's cluster server/s */ $tls_client->addServer($server_endpoint, $server_port); /* Configure the client to use TLS */ if(!$tls_client->setOption(Memcached::OPT_USE_TLS, 1)) { echo $tls_client->getLastErrorMessage(), "\n"; exit(1); } /* Set your TLS context configurations values. * See MemcachedTLSContextConfig in memcached-api.php for all configurations */ $tls_config = new MemcachedTLSContextConfig(); $tls_config->hostname = '*.mycluster.fnjyzo.use1.cache.amazonaws.com'; $tls_config->skip_cert_verify = false; $tls_config->skip_hostname_verify = false; /* Use the created TLS context configuration object to create OpenSSL's SSL_CTX and set it to your client. * Note: These TLS context configurations will be applied to all the servers connected to this client. */ $tls_client->createAndSetTLSContext((array)$tls_config); /* test the TLS connection with set-get scenario: */ /* store the data for 60 seconds in the cluster. * The client will decide which cache host will store this item. */ if($tls_client->set('key', 'value', 60)) { print "Successfully stored key\n"; } else { echo "Failed to set key: ", $tls_client->getLastErrorMessage(), "\n"; exit(1); } /* retrieve the key */ if ($tls_client->get('key') === 'value') { print "Successfully retrieved key\n"; } else { echo "Failed to get key: ", $tls_client->getLastErrorMessage(), "\n"; exit(1); }
有关使用PHP客户端的更多信息,请参阅安装适用于 PHP 的 ElastiCache Cluster Client。