

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

# Oracle 資料庫透明資料加密 (TDE) 搭配 AWS CloudHSM
<a name="oracle-tde"></a>

透明資料加密 (TDE) 可用來加密資料庫檔案。使用 TDE，資料庫軟體將資料存儲在磁盤上之前對其進行加密。資料庫資料表資料欄或資料表空間中的資料會使用資料表金鑰或資料表空間金鑰加密。Oracle 的資料庫軟體的某些版本提供 TDE。在 Oracle TDE 中，這些金鑰會使用 TDE 主加密金鑰加密。您可以將 TDE 主加密金鑰存放在 AWS CloudHSM 叢集的 HSMs中，以達到更高的安全性。

![\[在 AWS CloudHSM中存放 Oracle TDE 主加密金鑰。\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/images/tde-master-key-in-hsm.png)


在這個解決方案中，您使用在 Amazon EC2 執行個體上安裝的 Oracle 資料庫。Oracle 資料庫會與[適用於 PKCS \$111 的AWS CloudHSM 軟體程式庫](pkcs11-library.md)整合，可將 TDE 主金鑰存放在您叢集中的 HSM。

**重要**  
 建議在 Amazon EC2 執行個體上安裝 Oracle 資料庫。

執行下列步驟以完成 Oracle TDE 與 AWS CloudHSM的整合。

**Topics**
+ [步驟 1. 設定先決條件](#oracle-tde-prerequisites)
+ [步驟 2：更新 Oracle 資料庫組態](#oracle-tde-configure-database-and-generate-master-key)
+ [步驟 3：產生 Oracle TDE 主加密金鑰](#oracle-tde-generate-master-key)

## 步驟 1. 設定先決條件
<a name="oracle-tde-prerequisites"></a>

若要完成 Oracle TDE 與 的整合 AWS CloudHSM，您需要下列項目：
+ 具有至少一個 HSM 的作用中 AWS CloudHSM 叢集。
+ 執行 Amazon Linux 作業系統的 Amazon EC2 執行個體，其中已安裝下列軟體：
  +  AWS CloudHSM 用戶端和命令列工具。
  + PKCS \$111 AWS CloudHSM 的軟體程式庫。
  + Oracle Database. AWS CloudHSM support Oracle TDE 整合。用戶端 SDK 5.6 及更高版本支援適用於 Oracle 資料庫 19c 的 Oracle TDE。客戶端 SDK 3 支援適用於 Oracle 資料庫 11g 和 12c 版的 Oracle TDE。
+ 加密使用者 (CU)，擁有及管理叢集中 HSM 上的 TDE 主加密金鑰。

完成以下步驟來設定所有先決條件。

**設定 Oracle TDE 與 整合的先決條件 AWS CloudHSM**

1. 完成「[開始使用](getting-started.md)」中的步驟。完成之後，您將擁有一個作用中叢集，且其中有一個 HSM。您也會有一個執行 Amazon Linux 作業系統的 Amazon EC2 執行個體。 AWS CloudHSM 用戶端和命令列工具也會安裝和設定。

1. (選用) 在您的叢集中新增更多 HSM。如需詳細資訊，請參閱[將 HSM 新增至 AWS CloudHSM 叢集](add-hsm.md)。

1. 連接到 Amazon EC2 用戶端執行個體，並執行下列動作：

   1. [安裝 PKCS \$111 AWS CloudHSM 的軟體程式庫](pkcs11-library-install.md)。

   1. 安裝 Oracle 資料庫。如需詳細資訊，請參閱 [Oracle 資料庫文件](https://docs.oracle.com/en/database/)。用戶端 SDK 5.6 及更高版本支援適用於 Oracle 資料庫 19c 的 Oracle TDE。客戶端 SDK 3 支援適用於 Oracle 資料庫 11g 和 12c 版的 Oracle TDE。

   1. 使用 cloudhsm\$1mgmt\$1util 命令列工具來在您的叢集上建立加密使用者 (CU)。如需關於建立 CU 的詳細資訊，請參閱[如何使用 CMU 管理 HSM 使用者](create-users-cmu.md)和 [HSM 使用者](manage-hsm-users.md)。

## 步驟 2：更新 Oracle 資料庫組態
<a name="oracle-tde-configure-database-and-generate-master-key"></a>

若要更新 Oracle 資料庫組態來使用叢集中的 HSM 做為*外部安全模組*，請完成以下步驟。如需外部安全模組的相關資訊，請參閱 [Oracle Database 進階安全指南](https://docs.oracle.com/database/122/ASOAG/introduction-to-transparent-data-encryption.htm)中的*透明資料加密簡介*。

**更新 Oracle 組態**

1. 連線到 Amazon EC2 用戶端執行個體。您已將 Oracle 資料庫安裝在此執行個體上。

1. 建立名為 `sqlnet.ora` 之檔案的備份複本。關於此檔案的位置，請參閱 Oracle 文件。

1. 使用文字編輯器來編輯名為 `sqlnet.ora` 的檔案。新增以下這一行。如果檔案中有一行以 `encryption_wallet_location` 開頭，請換成以下這一行。

   ```
   encryption_wallet_location=(source=(method=hsm))
   ```

   儲存檔案。

1. 執行下列命令來建立 Oracle 資料庫預期尋找 AWS CloudHSM PKCS \$111 軟體程式庫程式庫檔案的目錄。

   ```
   sudo mkdir -p /opt/oracle/extapi/64/hsm
   ```

1. 執行下列命令，將 PKCS \$111 檔案 AWS CloudHSM 的軟體程式庫複製到您在上一個步驟中建立的目錄。

   ```
   sudo cp /opt/cloudhsm/lib/libcloudhsm_pkcs11.so /opt/oracle/extapi/64/hsm/
   ```
**注意**  
`/opt/oracle/extapi/64/hsm` 目錄必須僅包含一個程式庫檔案。移除該目錄中存在的任何其他檔案。

1. 執行以下命令來變更 `/opt/oracle` 目錄的擁有權及其中一切設定。

   ```
   sudo chown -R oracle:dba /opt/oracle
   ```

1. 啟動 Oracle 資料庫。

## 步驟 3：產生 Oracle TDE 主加密金鑰
<a name="oracle-tde-generate-master-key"></a>

若要在叢集中 HSM 上產生 Oracle TDE 主金鑰，請完成以下程序中的步驟。

**產生主金鑰**

1. 使用下列命令開啟 Oracle SQL\$1Plus。當系統提示時，請輸入您安裝 Oracle 資料庫時所設定的系統密碼。

   ```
   sqlplus / as sysdba
   ```
**注意**  
對於用戶端 SDK 3，每次產生主金鑰時，都必須設定 `CLOUDHSM_IGNORE_CKA_MODIFIABLE_FALSE` 環境變數。此變數僅用於產生主金鑰。如需詳細資訊，請參閱[整合第三方應用程式的已知問題](ki-third-party.md)中的「問題：Oracle 在產生主金鑰期間設定 PCKS \$111 屬性 `CKA_MODIFIABLE`，但 HSM 不支援此屬性」。

1. 執行 SQL 陳述式來建立主加密金鑰，如下列範例所示。請使用與 Oracle 資料庫版本對應的陳述式。以加密使用者 (CU) 的使用者名稱取代 *<CU 使用者名稱>*。以 CU 密碼取代*<密碼>*。
**重要**  
只執行一次下列命令。每次執行此命令都會建立新的主加密金鑰。
   + 若為 Oracle 資料庫第 11 版，請執行下列 SQL 陳述式。

     ```
     SQL> alter system set encryption key identified by "<CU user name>:<password>";
     ```
   + 若為 Oracle 資料庫第 12 版和第 19c 版，請執行下列 SQL 陳述式。

     ```
     SQL> administer key management set key identified by "<CU user name>:<password>";
     ```

   如果回應是 `System altered` 或 `keystore altered`，則表示您已成功產生和設定 Oracle TDE 的主金鑰。

1. (選用) 執行以下命令來驗證 *Oracle 錢包*的狀態。

   ```
   SQL> select * from v$encryption_wallet;
   ```

   如果錢包未開啟，請使用下列其中一個命令來開啟。以加密使用者 (CU) 的名稱取代 *<CU 使用者名稱>*。以 CU 密碼取代*<密碼>*。
   + 若為 Oracle 11，請執行下列命令來開啟錢包。

     ```
     SQL> alter system set encryption wallet open identified by "<CU user name>:<password>";
     ```

     若要手動關閉錢包，請執行下列命令。

     ```
     SQL> alter system set encryption wallet close identified by "<CU user name>:<password>";
     ```
   + 若為 Oracle 12 和 Oracle 19c，請執行下列命令來開啟錢包。

     ```
     SQL> administer key management set keystore open identified by "<CU user name>:<password>";
     ```

     若要手動關閉錢包，請執行下列命令。

     ```
     SQL> administer key management set keystore close identified by "<CU user name>:<password>";
     ```