本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟用傳輸中加密時的最佳實務
啟用傳輸中加密之前:請確定您有適當的 DNS 記錄處理
注意
在此過程中,我們正在變更和刪除舊端點。不正確使用端點可能會導致 Valkey 或 Redis OSS 用戶端使用舊的已刪除端點,以防止其連線至叢集。
當叢集從無 TLS 移轉至 TLS 偏好時,系統會保留舊的每個節點 DNS 記錄,而且會以不同的格式產生新的每個節點 DNS 記錄。啟用 TLS 的叢集使用的 DNS 記錄格式與未啟用 TLS 的叢集不同。當叢集設定為加密模式時,ElastiCache 會保留兩個 DNS 記錄:偏好 ,以便應用程式和其他 Valkey 或 Redis OSS 用戶端可以在它們之間切換。DNS 記錄中的下列變更會在 TLS 遷移程序期間進行:
啟用傳輸中加密時所發生的 DNS 記錄變更說明
對於 CME 叢集
當叢集設定為「傳輸加密模式:偏好」時:
-
未啟用 TLS 叢集的原始叢集端點將保持作用中狀態。將叢集從 TLS 加密模式「無」重新設定為「偏好」時,不會有停機時間。
-
當叢集設定為 TLS 偏好模式時,將產生新的 TLS Valkey 或 Redis OSS 端點。這些新端點將解析為與舊端點 (非 TLS) 相同的 IP。
-
新的 TLS Valkey 或 Redis OSS 組態端點將在 ElastiCache 主控台和
describe-replication-group
API 回應中公開。
當叢集設定為「傳輸加密模式:需要」時:
-
舊版未啟用 TLS 的端點將被刪除。TLS 叢集端點不會有停機時間。
-
您可以從 ElastiCache 控制台或
describe-replication-group
API 檢索新的cluster-configuration-endpoint
。
對於啟用自動容錯移轉或停用自動容錯移轉的 CMD 叢集
當複寫群組設為「傳輸加密模式:偏好」時:
-
啟用非 TLS 叢集的原始主端點和讀取器端點將保持作用中狀態。
-
當叢集設為 TLS
Preferred
模式時,將產生新的 TLS 主要端點和讀取端點。此新端點將解析為與舊端點 (非 TLS) 相同的 IP。 -
新的主要端點和讀取器端點將在 ElastiCache 控制台和對
describe-replication-group
API 的反應中公開。
當複寫群組設為「傳輸加密模式:需要」時:
-
舊的非 TLS 主端點和讀取器端點將被刪除。TLS 叢集端點不會有停機時間。
-
您可以從 ElastiCache 控制台或
describe-replication-group
API 檢索新的主要與讀取器端點。
DNS 記錄的建議用法
對於 CME 叢集
-
使用叢集組態端點,而不是應用程式程式碼中的每個節點 DNS 記錄。不建議直接使用每個節點的 DNS 名稱,因為它們可能會在新增或移除碎片時變更。
-
不要在應用程式中對叢集組態端點進行硬式編碼,因為它會在此過程中發生變更。
-
在應用程式中對叢集組態端點進行硬式編碼是一種不好的做法,因為它可能在此過程中變更。傳輸中加密完成後,請使用
describe-replication-group
API 查詢叢集組態端點 (如上文所示 (粗體)),並使用您從此後得到的 DNS 作出回應。
對於啟用自動容錯移轉的 CMD 叢集
-
使用主要端點和讀取器端點,而不是應用程式程式碼中的每節點 DNS 名稱,因為舊的每節點 DNS 名稱會被刪除,並在將叢集從非 TLS 移轉至 TLS 偏好時產生新的 DNS 名稱。不建議直接使用每個節點的 DNS 名稱,因為您未來可能會將複本新增至叢集。此外,啟用「自動容錯移轉」時,ElastiCache 服務會自動變更主要叢集和複本的角色,建議使用主要端點和讀取器端點來協助您追蹤這些變更。最後,使用讀取器端點可協助您在叢集中的複本之間平均分配複本的讀取。
-
在應用程式中硬式編碼主要端點和讀取器端點是不好的做法,因為它可以在 TLS 遷移程序期間進行變更。完成 TLS 偏好的遷移變更後,請使用 describe-replication-group API 查詢主要端點和讀取器端點,並使用您從此時取得的 DNS 回應。如此,您將能夠以動態方式追踪端點中的變更。
對於停用自動容錯移轉的 CMD 叢集
-
使用主要端點和讀取器端點,而不是應用程式程式碼中的每個節點 DNS 名稱。當停用自動容錯移轉時,在啟用自動容錯移轉時由 ElastiCache 服務自動管理的擴展、修補、容錯移轉和其他過程將由您完成。這可讓您更輕易地手動追蹤不同端點。由於舊的每個節點 DNS 名稱會被刪除,並在將叢集從非 TLS 移轉至 TLS 偏好時產生新名稱,因此請勿直接使用每個節點的 DNS 名稱。這是強制性的,因此用戶端才能夠在 TLS 遷移期間連線到叢集。此外,使用讀取器端點時,您將受益於在複本之間均勻分散讀取,並在從叢集中新增或刪除複本時追蹤 DNS 記錄。
-
在應用程式中對叢集組態端點進行硬式編碼是一種不好的做法,因為它可以在 TLS 遷移過程中變更。
在傳輸過程中加密:注意遷移過程何時完成
傳輸加密模式的變更不是立即的,可能需要一些時間。大型叢集尤其如此。只有當叢集完成 TLS 的遷移作業時,才能接受並提供 TCP 和 TLS 連線。因此,在傳輸中加密完成之前,您不應該建立嘗試與叢集建立 TLS 連線的用戶端。
在傳輸中加密成功完成或失敗時,有幾種方法可以得到通知:(未顯示於上面的程式碼範例中):
-
使用 SNS 服務在加密完成時收到通知
-
使用將在加密完成時發出事件的
describe-events
API -
在 ElastiCache 主控台中看到加密已完成的訊息
您也可以在應用程式中實作邏輯,以瞭解加密是否完成。在上面的範例中,我們看到了幾種確保叢集完成遷移的方法:
-
等待遷移程序開始 (叢集狀態變更為「修改」),並等待修改完成 (叢集狀態會變回「可用」)
-
透過查詢
describe-replication-group
API 聲明叢集的transit_encryption_enabled
已設為 True。
啟用傳輸中加密之後:確定您使用的用戶端設定正確
當叢集處於 TLS 偏好的模式時,您的應用程式應該開啟與叢集的 TLS 連線,並且只使用這些連線。如此一來,您的應用程式在啟用傳輸中加密時就不會遇到停機時間。您可以使用 SSL 區段下的資訊命令,確保沒有更清楚的 TCP 連線至 Valkey 或 Redis OSS 引擎。
# 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