

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

# 加密現有的 Amazon RDS for PostgreSQL 資料庫執行個體
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance"></a>

*Piyush Goyal、Shobana Raghu 和 Yaser Raja，Amazon Web Services*

## 總結
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-summary"></a>

此模式說明如何在最短的停機時間下，加密 AWS 雲端中 PostgreSQL 資料庫執行個體的現有 Amazon Relational Database Service (Amazon RDS)。此程序也適用於 Amazon RDS for MySQL 資料庫執行個體。

您可以在建立 Amazon RDS 資料庫執行個體時啟用加密，但無法在建立之後啟用加密。不過，您可以透過建立資料庫執行個體的快照，然後建立該快照的加密複本，將加密新增至未加密的資料庫執行個體。然後，您可以從加密快照還原資料庫執行個體，以取得原始資料庫執行個體的加密副本。如果您的專案允許在此活動期間停機 （至少用於寫入交易），這正是您需要做的。當資料庫執行個體的新加密複本可用時，您可以將應用程式指向新資料庫。不過，如果您的專案不允許此活動的重大停機時間，您需要替代方法來協助將停機時間降至最低。此模式使用 AWS Database Migration Service (AWS DMS) 來遷移和持續複寫資料，以便在最短的停機時間內完成切換到新的加密資料庫。 

Amazon RDS 加密資料庫執行個體使用業界標準的 AES-256 加密演算法，在託管 Amazon RDS 資料庫執行個體的伺服器上加密您的資料。資料加密後，Amazon RDS 會以透明的方式處理資料的存取和解密身分驗證，並將對效能的影響降至最低。您不需要修改資料庫用戶端應用程式即可使用加密。

## 先決條件和限制
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 未加密的 Amazon RDS for PostgreSQL 資料庫執行個體
+ 使用 （建立、修改或停止） AWS DMS 任務的經驗 （請參閱 [AWS DMS 文件中的使用 AWS DMS 任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html))
+ 熟悉用於加密資料庫的 AWS Key Management Service (AWS KMS) （請參閱 [AWS KMS 文件](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html))

**限制**
+ 您只能在建立 Amazon RDS 資料庫執行個體時啟用加密，而不是在建立資料庫執行個體之後。
+ 未使用快照還原[未記錄資料表](https://www.postgresql.org/docs/current/sql-createtable.html)中的資料。如需詳細資訊，請參閱[使用 PostgreSQL 的最佳實務](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html#CHAP_BestPractices.PostgreSQL)。
+ 未加密資料庫執行個體不可以有加密僅供讀取複本，加密資料庫執行個體也不可以有未加密僅供讀取複本。
+ 您無法將未加密的備份或快照還原至已加密的資料庫執行個體。
+ AWS DMS 不會自動傳輸序列，因此需要其他步驟才能處理此問題。

如需詳細資訊，請參閱 [Amazon RDS 文件中的 Amazon RDS 加密資料庫執行個體限制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html#Overview.Encryption.Limitations)。

## Architecture
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-architecture"></a>

**來源架構**
+ 未加密的 RDS 資料庫執行個體

**目標架構**
+ 加密的 RDS 資料庫執行個體
  + 透過還原來源 RDS 資料庫執行個體的資料庫快照複本，即可建立目的地 RDS 資料庫執行個體。
  + 還原快照時，AWS KMS 金鑰用於加密。
  + AWS DMS 複寫任務用於遷移資料。

![程序使用 AWS DMS 將現有的 Amazon RDS for PostgreSQL 資料庫執行個體加密為新的資料庫。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/44dd8420-d89d-466e-b7fb-1bdafab8f7f9.png)


## 工具
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-tools"></a>

**用來啟用加密的工具：**
+ 用於加密的 AWS KMS 金鑰 – 當您建立加密的資料庫執行個體時，您可以選擇客戶受管金鑰或 Amazon RDS 的 AWS 受管金鑰來加密資料庫執行個體。如果您未指定客戶受管金鑰的金鑰識別符，Amazon RDS 會為您的新資料庫執行個體使用 AWS 受管金鑰。Amazon RDS 會為您的 AWS 帳戶建立 Amazon RDS 的 AWS 受管金鑰。您的 AWS 帳戶對於每個 AWS 區域都有不同的 Amazon RDS AWS 受管金鑰。如需使用 KMS 金鑰進行 Amazon RDS 加密的詳細資訊，請參閱[加密 Amazon RDS 資源](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)。

**用於持續複寫的工具**：
+ AWS DMS – 您可以使用 AWS Database Migration Service (AWS DMS) 將變更從來源資料庫複寫到目標資料庫。請務必讓來源和目標資料庫保持同步，以將停機時間降至最低。如需有關設定 AWS DMS 和建立任務的資訊，請參閱 [AWS DMS 文件](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)。

## 史詩
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-epics"></a>

### 建立來源資料庫執行個體的快照並進行加密
<a name="create-a-snapshot-of-the-source-db-instance-and-encrypt-it"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 檢查來源 PostgreSQL 資料庫執行個體的詳細資訊。 | 在 Amazon RDS 主控台上，選擇來源 PostgreSQL 資料庫執行個體。在**組態**索引標籤上，確定執行個體未啟用加密。如需畫面圖例，請參閱[其他資訊](#encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional)一節。 | DBA | 
| 建立資料庫快照。 | 建立您要加密之執行個體的資料庫快照。建立快照所需的時間取決於資料庫的大小。如需說明，請參閱 [Amazon RDS 文件中的建立資料庫快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)。 | DBA | 
| 加密快照。 | 在 Amazon RDS 主控台導覽窗格中，選擇**快照**，然後選取您建立的資料庫快照。針對 **Actions** (動作) 選擇 **Copy Snapshot** (複製快照)。在對應的欄位中，提供目的地 AWS 區域和資料庫快照複本的名稱。選取**啟用加密**核取方塊。在 **Master Key (主金鑰)** 中，指定用來加密資料庫快照副本的 KMS 金鑰識別符。選擇 **Copy Snapshot (複製快照)**。如需詳細資訊，請參閱 [Amazon RDS 文件中的複製快照](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)。 | DBA | 

### 準備目標資料庫執行個體
<a name="prepare-the-target-db-instance"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 還原資料庫快照。 | 在 Amazon RDS 主控台上，選擇**快照**。選擇您建立的加密快照。針對 **Actions** (動作)，選擇 **Restore Snapshot** (還原快照)。針對**資料庫執行個體識別符**，提供新資料庫執行個體的唯一名稱。檢閱執行個體詳細資訊，然後選擇**還原資料庫執行個體**。系統會從您的快照建立新的加密資料庫執行個體。如需詳細資訊，請參閱 Amazon RDS 文件中的[從資料庫快照還原](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)。 | DBA | 
| 使用 AWS DMS 遷移資料。 | 在 AWS DMS 主控台上，建立 AWS DMS 任務。針對**遷移類型**，選擇**遷移現有資料並複寫進行中的變更**。在**任務設定**中，針對**目標資料表準備模式**，選擇**截斷**。如需詳細資訊，請參閱 AWS DMS 文件中的[建立任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)。 | DBA | 
| 啟用資料驗證。 | 在**任務設定**中，選擇**啟用驗證**。這可讓您比較來源資料與目標資料，以確認資料已準確遷移。  | DBA | 
| 停用目標資料庫執行個體的限制。 | [停用目標資料庫執行個體上的任何觸發條件和外部金鑰限制](https://www.postgresql.org/docs/current/sql-altertable.html)，然後啟動 AWS DMS 任務。如需停用觸發條件和外部金鑰限制的詳細資訊，請參閱 [AWS DMS 文件。](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) | DBA | 
| 驗證資料。 | 完全載入完成後，請驗證目標資料庫執行個體上的資料，以查看是否符合來源資料。如需詳細資訊，請參閱 [AWS DMS 文件中的 AWS DMS 資料驗證](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。 | DBA | 

### 切換到目標資料庫執行個體
<a name="cut-over-to-the-target-db-instance"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在來源資料庫執行個體上停止寫入操作。 | 停止來源資料庫執行個體上的寫入操作，以便開始應用程式停機時間。確認 AWS DMS 已完成管道中資料的複寫。在目標資料庫執行個體上啟用觸發和外部索引鍵。 | DBA | 
| 更新資料庫序列 | 如果來源資料庫包含任何序號，請驗證並更新目標資料庫中的序列。 | DBA | 
| 設定應用程式端點。 | 設定您的應用程式連線以使用新的 Amazon RDS 資料庫執行個體端點。資料庫執行個體現在已加密。 | DBA，應用程式擁有者 | 

## 相關資源
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-resources"></a>
+ [建立 AWS DMS 任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html) 
+ [使用 Amazon CloudWatch 監控複寫任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Monitoring.CloudWatch)
+ [監控 AWS DMS 任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)
+ [更新 Amazon RDS 加密金鑰](https://aws.amazon.com/premiumsupport/knowledge-center/update-encryption-key-rds/)

## 其他資訊
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional"></a>

檢查來源 PostgreSQL 資料庫執行個體的加密：

![來源 PostgreSQL 資料庫執行個體的摘要頁面顯示未啟用儲存體加密。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/d53d1dab-b5c2-452d-b823-ba3d6508ad15.png)


此模式的其他備註：
+ 將 `rds.logical_replication` 參數設定為 1，以在 PostgreSQL 上啟用複寫。

**重要注意事項：**複寫槽會保留預先寫入日誌 (WAL) 檔案，直到檔案在外部使用，例如 `pg_recvlogical`； 擷取、轉換和載入 (ETL) 任務；或 AWS DMS。當您將`rds.logical_replication`參數值設定為 1 時，AWS DMS 會設定 `wal_level`、`max_wal_senders`、 `max_replication_slots`和 `max_connections` 參數。如果邏輯複寫槽存在，但複寫槽保留的 WAL 檔案沒有取用者，您可能會看到交易日誌磁碟用量增加，以及可用儲存空間持續減少。如需詳細資訊和解決此問題的步驟，請參閱 AWS Support 知識中心的文章[如何識別導致 Amazon RDS for PostgreSQL 上的「沒有剩餘空間」或「DiskFull」錯誤的原因](https://aws.amazon.com/premiumsupport/knowledge-center/diskfull-error-rds-postgresql/)。
+ 您在建立資料庫快照後對來源資料庫執行個體所做的任何結構描述變更都不會出現在目標資料庫執行個體上。
+ 建立加密的資料庫執行個體之後，您無法變更該資料庫執行個體所使用的 KMS 金鑰。在建立加密的資料庫執行個體之前，請務必判斷您的 KMS 金鑰需求。
+ 您必須先在目標資料庫執行個體上停用觸發和外部金鑰，才能執行 AWS DMS 任務。您可以在任務完成時重新啟用這些項目。