啟用傳輸中加密時的最佳實務 - Amazon ElastiCache (雷迪OSS斯)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

啟用傳輸中加密時的最佳實務

啟用傳輸中加密之前:請確定您有適當的 DNS 記錄處理

注意

在此過程中,我們正在變更和刪除舊端點。不正確使用端點可能會導致 Redis OSS 用戶端使用舊端點和已刪除的端點,從而阻止其連線到叢集。

當叢集從無 TLS 移轉至 TLS 偏好時,系統會保留舊的每個節點 DNS 記錄,而且會以不同的格式產生新的每個節點 DNS 記錄。啟用 TLS 的叢集使用的 DNS 記錄格式與未啟用 TLS 的叢集不同。 ElastiCache 將在加密模式下配置叢集時保留兩個 DNS 記錄:首選,以便應用程式和其他 Redis OSS 用戶端可以在它們之間切換。DNS 記錄中的下列變更會在 TLS 遷移程序期間進行:

啟用傳輸中加密時所發生的 DNS 記錄變更說明

對於 CME 叢集

當叢集設定為「傳輸加密模式:偏好」時:

  • 未啟用 TLS 叢集的原始叢集端點將保持作用中狀態。將叢集從 TLS 加密模式「無」重新設定為「偏好」時,不會有停機時間。

  • 當叢集設定為 TLS 偏好的模式時,將會產生新的 TLS Redis OSS 端點。這些新端點將解析為與舊端點 (非 TLS) 相同的 IP。

  • 新的 TLS Redis OSS 設定端點將會公開在ElastiCache 主控台和回應 API 中。describe-replication-group

當叢集設定為「傳輸加密模式:需要」時:

  • 舊版未啟用 TLS 的端點將被刪除。TLS 叢集端點不會有停機時間。

  • 您可以cluster-configuration-endpoint從 ElastiCache 控制台或 describe-replication-group API 檢索新的。

對於啟用自動容錯移轉或停用自動容錯移轉的 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 區段下的 Redis OSS 資訊命令,確定沒有更清楚的 TCP 連線到 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