

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

# 使用 Amazon S3 S3A 用戶端加密
<a name="emr-s3a"></a>

從 Amazon Elastic Map Reduce (EMR) 7.6.0 版開始，S3A 檔案系統連接器現在支援 Amazon S3 用戶端加密。這表示 Amazon S3 資料的加密和解密會直接發生在運算叢集上的 S3A 用戶端內。使用此功能時，檔案會在上傳至 Amazon S3 之前自動加密，並在下載時解密。如需加密方法及其實作的完整詳細資訊，使用者可以參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用用戶端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)。

在 Amazon EMR 中使用 S3A 啟用用戶端加密 (CSE) 時，您有兩個金鑰管理系統選項：
+ **CSE-KMS** – 此方法使用 AWS Key Management Service (KMS) 金鑰，該金鑰設定為專為 Amazon EMR 設計的政策。如需金鑰需求的詳細資訊，請參閱[使用 AWS KMS 金鑰進行加密](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-awskms-keys)文件。
+ **CSE-CUSTOM** – 此方法可讓您整合自訂 Java 類別，提供負責加密和解密資料的用戶端根金鑰。

**注意**  
EMR 中的 S3A 用戶端加密本質上與 EMRFS 用戶端加密相容，這表示使用 EMRFS CSE 加密的物件可以透過 S3A CSE 讀取。

**Topics**
+ [設定 CSE-KMS](emr-s3a-cse-kms.md)
+ [設定 CSE-CUSTOM](emr-s3a-cse-custom.md)
+ [使用 Amazon S3 S3A 用戶端加密的屬性](emr-encryption-s3a-properties.md)

# 設定 CSE-KMS
<a name="emr-s3a-cse-kms"></a>

您可以在兩個主要範圍內使用 AWS KMS (CSE-KMS) 啟用用戶端加密：
+ 第一個是整個叢集的組態：

  ```
  [
    {
      "Classification":"core-site",
      "Properties": {
         "fs.s3a.encryption.algorithm": "CSE-KMS",
         "fs.s3a.encryption.key":"${KMS_KEY_ID}",
      }
    }
  ]
  ```
**注意**  
如果 AWS KMS 金鑰區域與 S3 儲存貯體/EMR 區域不同，您必須設定下列其他組態：`fs.s3a.encryption.cse.kms.region=${KMS_REGION}`。
+ 第二個是任務或應用程式特定的組態。您可以為特定 Spark 應用程式設定 CSE-KMS，如下所示：

  ```
  spark-submit --conf spark.hadoop.fs.s3a.encryption.algorithm=CSE-KMS --conf spark.hadoop.fs.s3a.encryption.key=${KMS_KEY_ID}
  ```

# 設定 CSE-CUSTOM
<a name="emr-s3a-cse-custom"></a>

若要使用 CSE-CUSTOM，您必須實作 [Keyring](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/choose-keyring.html) 界面來建立自訂金鑰提供者。以下是實作範例：

```
public class CustomKeyring implements Keyring {
  public CustomKeyring()  {
    // custom code
  }

  @Override
  public EncryptionMaterials onEncrypt(EncryptionMaterials encryptionMaterials) {
    // custom code
  }

  @Override
  public DecryptionMaterials onDecrypt(DecryptionMaterials decryptionMaterials,
      ListEncryptedDataKey list) {
    // custom code
  }
```

您可以在兩個主要範圍內啟用用戶端加密自訂金鑰 (CSE-CUSTOM)：
+ 第一個範圍是整個叢集的組態：

  ```
  [
    {
      "Classification":"core-site",
      "Properties": {
         "fs.s3a.encryption.algorithm": "CSE-CUSTOM",
         "fs.s3a.cse.customKeyringProvider.uri":"S3 path of custom jar",
         "fs.s3a.encryption.cse.custom.keyring.class.name":"fully qualified class name"
      }
    }
  ]
  ```
+ 第二個是任務或應用程式特定的組態。您可以為特定 Spark 應用程式設定 CSE-CUSTOM，如下所示：

  ```
  spark-submit --conf spark.hadoop.fs.s3a.encryption.algorithm=CSE-CUSTOM --conf spark.hadoop.fs.s3a.encryption.cse.custom.keyring.class.name=fully qualified class name
  ```
**注意**  
確保類別路徑中存在產生加密/解密金鑰所需的自訂 jar。

# 使用 Amazon S3 S3A 用戶端加密的屬性
<a name="emr-encryption-s3a-properties"></a>

若要使用 S3A 設定用戶端加密，必須在 core-site.xml 設定中設定多個組態屬性。如需自訂組態設定的詳細資訊，請參閱[設定應用程式](emr-configure-apps.html)。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-encryption-s3a-properties.html)