

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

# 啟用傳輸中加密時的最佳實務
<a name="enable-python-best-practices"></a>

## 啟用傳輸中加密之前：請確定您有適當的 DNS 記錄處理
<a name="enable-python-best-practices-before"></a>

**注意**  
在此過程中，我們正在變更和刪除舊端點。不正確使用端點可能會導致 Valkey 或 Redis OSS 用戶端使用舊的和已刪除的端點，以防止其連線至叢集。

當叢集從非 TLS 遷移至 TLS 偏好時，會保留舊的叢集組態端點 DNS 記錄，並以不同的格式產生新的叢集組態端點 DNS 記錄。啟用 TLS 的叢集使用與停用 TLS 的叢集不同的 DNS 記錄格式。ElastiCache 會保留兩個 DNS 記錄，`encryption mode: Preferred`以便應用程式和其他 Valkey 或 Redis OSS 用戶端可以在它們之間切換。DNS 記錄中的下列變更會在 TLS 遷移程序期間進行：

### 啟用傳輸中加密時所發生的 DNS 記錄變更說明
<a name="enable-python-best-practices-before-desc"></a>

**對於 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 記錄的建議用法
<a name="enable-python-best-practices-before-usage"></a>

**對於 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 遷移過程中變更。

## 在傳輸過程中加密：注意遷移過程何時完成
<a name="enable-python-best-practices-during"></a>

傳輸加密模式的變更不是立即的，可能需要一些時間。大型叢集尤其如此。只有當叢集完成 TLS 的遷移作業時，才能接受並提供 TCP 和 TLS 連線。因此，在傳輸中加密完成之前，您不應該建立嘗試與叢集建立 TLS 連線的用戶端。

在傳輸中加密成功完成或失敗時，有幾種方法可以得到通知：(未顯示於上面的程式碼範例中)：
+ 使用 SNS 服務在加密完成時收到通知
+ 使用將在加密完成時發出事件的 `describe-events` API
+ 在 ElastiCache 主控台中看到加密已完成的訊息

您也可以在應用程式中實作邏輯，以瞭解加密是否完成。在上面的範例中，我們看到了幾種確保叢集完成遷移的方法：
+ 等待遷移程序開始 (叢集狀態變更為「修改」)，並等待修改完成 (叢集狀態會變回「可用」)
+ 透過查詢 `describe-replication-group` API 聲明叢集的 `transit_encryption_enabled` 已設為 True。

### 啟用傳輸中加密之後：確定您使用的用戶端設定正確
<a name="enable-python-best-practices-after"></a>

當叢集處於 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
```