

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

# Amazon Data Firehose 中的資料保護
<a name="encryption"></a>

Amazon Data Firehose 會使用 TLS 通訊協定加密傳輸中的所有資料。此外，對於在處理期間存放在臨時儲存中的資料，Amazon Data Firehose 會使用 加密資料[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)，並使用檢查總和驗證來驗證資料完整性。

如果您有敏感資料，您可以在使用 Amazon Data Firehose 時啟用伺服器端資料加密。您的做法取決於資料的來源。

**注意**  
如果您在 AWS 透過命令列界面或 API 存取 時需要 FIPS 140-2 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-2 概觀](https://aws.amazon.com/compliance/fips/)。

## 使用 Kinesis Data Streams 進行伺服器端加密
<a name="sse-with-data-stream-as-source"></a>

當您將資料從資料生產者傳送到資料串流時，Kinesis Data Streams 會使用 AWS Key Management Service (AWS KMS) 金鑰加密您的資料，然後再存放靜態資料。當您的 Firehose 串流從資料串流讀取資料時，Kinesis Data Streams 會先解密資料，然後將其傳送至 Amazon Data Firehose。Amazon Data Firehose 會根據您指定的緩衝提示，緩衝記憶體中的資料。再傳送到您的目的地，而不會將未加密的資料儲存為靜態資料。

如需如何為 Kinesis 資料串流啟用伺服器端加密的相關資訊，請參閱《Amazon Kinesis Data Streams 開發人員指南》**中的[使用伺服器端加密](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html)。

## 使用 Direct PUT 或其他資料來源的伺服器端加密
<a name="sse-with-direct-put"></a>

如果您使用 [PutRecord](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html) 或 [PutRecordBatch](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html) 將資料傳送至 Firehose 串流，或使用 AWS IoT Amazon CloudWatch Logs 或 CloudWatch Events 傳送資料，您可以使用 [StartDeliveryStreamEncryption](https://docs.aws.amazon.com/firehose/latest/APIReference/API_StartDeliveryStreamEncryption.html) 操作開啟伺服器端加密。

欲停用伺服器端加密，請使用 [StopDeliveryStreamEncryption](https://docs.aws.amazon.com/firehose/latest/APIReference/API_StopDeliveryStreamEncryption.html) 操作。

您也可以在建立 Firehose 串流時啟用 SSE。為此，請在調用 [CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html) 時指定 [DeliveryStreamEncryptionConfigurationInput](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeliveryStreamEncryptionConfigurationInput.html)。

若要成功使用 `CUSTOMER_MANAGED_CMK`，呼叫者的 IAM 政策和 KMS 金鑰政策都必須允許 `kms:GenerateDataKey`和 `kms:Decrypt`操作。當您使用`CUSTOMER_MANAGED_CMK`加密呼叫 PutRecord 或 PutRecordBatch 時，Firehose 會驗證這些許可。此外，使用`CUSTOMER_MANAGED_CMK`加密呼叫 CreateDeliveryStream 或 StartDeliveryStreamEncryption 時需要`kms:CreateGrant`許可。

當 CMK 類型為 時`CUSTOMER_MANAGED_CMK`，如果 Amazon Data Firehose 服務因為 `KMSNotFoundException`、`KMSInvalidStateException`、 `KMSDisabledException`或 而無法解密記錄`KMSAccessDeniedException`，服務會等待最多 24 小時 （保留期間） 讓您解決問題。如果問題持續超過保留期間，服務會略過那些已經過保留期間且無法解密的記錄，然後捨棄資料。Amazon Data Firehose 提供下列四個 CloudWatch 指標，可用來追蹤四個 AWS KMS 例外狀況：
+ `KMSKeyAccessDenied`
+ `KMSKeyDisabled`
+ `KMSKeyInvalidState`
+ `KMSKeyNotFound`

如需這四個指標的詳細資訊，請參閱 [使用 CloudWatch 指標監控 Amazon Data Firehose](monitoring-with-cloudwatch-metrics.md)。

**重要**  
若要加密 Firehose 串流，請使用對稱 CMKs。Amazon Data Firehose 不支援非對稱 CMKs。如需對稱和非對稱 CMKs 的相關資訊，請參閱 AWS Key Management Service 開發人員指南中的[關於對稱和非對稱 CMKs](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html)。

**注意**  
當您使用[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) (CUSTOMER\$1MANAGED\$1CMK) 為您的 Firehose 串流啟用伺服器端加密 (SSE) 時，Firehose 服務會在使用您的金鑰時設定加密內容。由於此加密內容代表使用您 AWS 帳戶所擁有的金鑰，因此會記錄為 AWS 帳戶 AWS CloudTrail 事件日誌的一部分。此加密內容是由 Firehose 服務產生的系統。您的應用程式不應對 Firehose 服務所設定的加密內容的格式或內容做出任何假設。