本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
启用传输中加密时的最佳实践
在启用传输中加密之前:确保您正确处理 DNS 记录
注意
在此过程中,我们正在更改和删除旧端点。不正确地使用端点可能会导致 Valkey 或 Redis OSS 客户端使用旧的和已删除的端点,从而使其无法连接到集群。
当集群从 no-TLS 迁移到时 TLS-preferred,会保留旧的集群配置终端节点 DNS 记录,并以不同的格式生成新的集群配置终端节点 DNS 记录。 TLS-enabled 集群使用与集 TLS-disabled群不同的 DNS 记录格式。 ElastiCache 在中配置集群时将保留两个 DNS 记录,encryption mode: Preferred以便应用程序和其他 Valkey 或 Redis OSS 客户端可以在它们之间切换。在此过程中,DNS 记录会发生以下更改: TLS-migration
启用传输中加密时发生的 DNS 记录更改的描述
对于 CME 集群
当集群设置为“传输加密模式:首选”时:
-
禁用 TLS 的集群的原始集群配置端点将保持活动状态。将集群从 TLS 加密模式“无”重新配置为“首选”时,不会出现停机。
-
当集群设置为模式时,将生成新的 TLS Valkey 或 Redis OSS 终端节点。TLS-preferred 这些新端点将解析为与旧端点(非 TLS)相同的 IP。
-
新的 TLS Valkey 或 Redis OSS 配置端点将在ElastiCache 控制台和对 API 的响应中公开。
describe-replication-group
当集群设置为“传输加密模式:需要”时:
-
将删除未启用 TLS 的旧端点。TLS 集群端点将不会停机。
-
您可以
cluster-configuration-endpoint从 ElastiCache 控制台或describe-replication-groupAPI 中检索新内容。
对于启用了自动失效转移或禁用了自动失效转移的 CMD 集群
当复制组设置为“传输加密模式:首选”时:
-
未启用 TLS 的集群的原始主端点和读取器端点将保持活动状态。
-
当集群设置为 TLS
Preferred模式时,将生成新的 TLS 主端点和读取器端点。此新端点将解析为与旧端点(非 TLS)相同的 IP。 -
新的主端点和读取器端点将在 ElastiCache 控制台和对
describe-replication-groupAPI 的响应中公开。
当复制组设置为“传输加密模式:需要”时:
-
将删除旧的非 TLS 主端点和读取器端点。TLS 集群端点将不会停机。
-
您可以从 ElastiCache控制台或
describe-replication-groupAPI 检索新的主端点和读取器端点。
DNS 记录的建议用法
对于 CME 集群
-
在应用程序代码中使用集群配置端点,而不是每节点 DNS 记录。不建议直接使用每节点 DNS 名称,因为这些名称在迁移过程中会发生变化,这会导致应用程序代码与集群的连接中断。
-
不要在应用程序中对集群配置端点进行硬编码,因为该端点在此过程中会发生变化。
-
在应用程序中对集群配置端点进行硬编码是一种不好的做法,因为在此过程中可能会对端点进行更改。传输中加密完成后,使用
describe-replication-groupAPI 查询集群配置端点,如上所示(粗体),然后从此时起使用从响应中获得的 DNS。
对于启用了自动失效转移的 CMD 集群
-
使用主终端节点和读取器终端节点而不是应用程序代码中的每节点 DNS 名称,因为在将集群从 no-TLS 迁移到时,会删除旧的每节点 DNS 名称并生成新的名称。 TLS-preferred不建议直接使用每节点 DNS 名称,因为将来您可能会向集群添加副本。此外,启用自动故障转移后, ElastiCache 服务会自动更改主群集和副本的角色,建议使用主终端节点和读取器终端节点来帮助您跟踪这些更改。最后,使用读取器端点将帮助您在集群中的副本之间平均分配从副本进行的读取操作。
-
在应用程序中对主端点和读取器端点进行硬编码是不好的做法,因为在 TLS 迁移过程中可能会对端点进行更改。迁移更改完成后,使用 TLS-preferred describe-replication-group API 查询主终端节点和读取器终端节点终端节点,然后使用此后获得的 DNS 作为响应。这样,您将能够以动态方式跟踪端点的变化。
对于禁用了自动失效转移的 CMD 集群
-
在应用程序的代码中使用主端点和读取器端点,而不是每节点 DNS 名称。禁用自动故障转移后,在启用自动故障转移时由 ElastiCache 服务自动管理的扩展、修补、故障转移和其他过程将由您完成。这使您能够更轻松地手动跟踪不同的端点。由于在将群集从无 TLS 迁移到时会删除旧的每节点 DNS 名称并生成新名称TLS-preferred,因此请勿直接使用每节点 DNS 名称。这是必需的,这样客户端才能在运行期间连接到集群 TLS-migration。此外,在使用读取器终端节点时,您可以从在副本之间均匀分配读取数据以及跟踪集群中 DNS-records 添加或删除副本的时间。
-
在应用程序中对集群配置端点进行硬编码是一种不好的做法,因为在 TLS 迁移过程中可能会对端点进行更改。
在传输中加密期间:注意迁移过程何时完成
传输加密模式的更改并非立即生效,而可能需要一些时间。对于大型集群而言,这种情况尤其如此。只有当集群完成向的迁移后, TLS-preferred 它才能接受和提供 TCP 和 TLS 连接。因此,在传输中加密完成之前,不应创建尝试与集群建立 TLS 连接的客户端。
有几种方法可以在传输中加密成功完成或失败时获得通知:(未显示在上面的代码示例中):
-
使用 SNS 服务在加密完成时收到通知
-
使用将在加密完成后发出事件的
describe-eventsAPI -
在 ElastiCache 控制台中看到一条提示加密已完成的消息
您还可以在应用程序中实现逻辑以了解加密是否已完成。在上面的示例中,我们看到了几种确保集群完成迁移的方法:
-
等到迁移过程开始(集群状态更改为“正在修改”),然后等到修改完成(集群状态变回为“可用”)
-
通过查询
describe-replication-groupAPI 断言集群已将transit_encryption_enabled设置为 True。
启用传输中加密后:确保正确配置了您使用的客户端
当集群处于 TLS-preferred 模式时,您的应用程序应打开与集群的 TLS 连接并仅使用这些连接。这样,在启用传输中加密时,应用程序就不会出现停机。您可以使用 SSL 部分下的 info 命令,确保与 Valkey 或 Redis OSS 引擎之间没有更清晰的 TCP 连接。
# SSL ssl_enabled:yes ssl_current_certificate_not_before_date:Mar 20 23:27:07 2017 GMT ssl_current_certificate_not_after_date:Feb 24 23:27:07 2117 GMT ssl_current_certificate_serial:D8C7DEA91E684163 tls_mode_connected_tcp_clients:0 (should be zero) tls_mode_connected_tls_clients:100