

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 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）第 140-2 版》](https://aws.amazon.com/compliance/fips/)。

## Server-side 使用 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 Data Streams 启用服务器端加密的信息，[请参阅*亚马逊 Kinesis Data Streams 开发*者指南中的 Server-Side 使用](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html)加密。

## Server-side 使用直接 PUT 或其他数据源进行加密
<a name="sse-with-direct-put"></a>

如果您使用或向 Firehose 流发送数据 [PutRecordBatch](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html)，[PutRecord](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html)或者使用 AWS IoT Amazon L CloudWatch ogs 或 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。为此，请指定[DeliveryStreamEncryptionConfigurationInput](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeliveryStreamEncryptionConfigurationInput.html)何时调用[CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html)。

要成功使用`CUSTOMER_MANAGED_CMK`，调用方的 IAM 策略和 KMS 密钥策略都必须允许`kms:GenerateDataKey`和`kms:Decrypt`操作。Firehose 会在您调用 PutRecord 或 PutRecordBatch 加密时验证这些权限。`CUSTOMER_MANAGED_CMK`此外，调 StartDeliveryStreamEncryption 用 CreateDeliveryStream 或`CUSTOMER_MANAGED_CMK`加密时需要`kms:CreateGrant`获得许可。

当 CMK 类型为 `CUSTOMER_MANAGED_CMK`，时，如果 Amazon Data Firehose 服务因 `KMSNotFoundException`、`KMSInvalidStateException`、`KMSDisabledException` 或 `KMSAccessDeniedException` 而无法解密记录，服务最多会等待 24 小时（保留期），以便您解决问题。如果保留期过后，问题仍然存在，服务会跳过已过保留期但无法解密的记录，然后丢弃数据。Amazon Data Firehose 提供了以下四个 CloudWatch 指标，您可以使用这些指标来跟踪这四个 AWS KMS 异常：
+ `KMSKeyAccessDenied`
+ `KMSKeyDisabled`
+ `KMSKeyInvalidState`
+ `KMSKeyNotFound`

有关这 4 个指标的更多信息，请参阅[使用指标监控亚马逊数据 Firehose CloudWatch](monitoring-with-cloudwatch-metrics.md)。

**重要**  
要加密您的 Firehose 流，请使用对称 CMK。Amazon Data Firehose 不支持非对称 CMK。有关对称和非对称 CMK 的信息，请参阅开发者指南中的[关于对称和非对称 CM](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html) K。 AWS Key Management Service 

**注意**  
当您使用[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)（CUSTOMER\_MANAGED\_CMK）为 Firehose 流启用服务器端加密（SSE）时，Firehose 服务会在使用您的密钥时设置加密上下文。由于此加密上下文表示使用您 AWS 账户拥有的密钥的情况，因此它会作为您 AWS 账户 AWS CloudTrail 事件日志的一部分进行记录。此加密上下文是由 Firehose 服务生成的系统。您的应用程序不应对 Firehose 服务设置的加密上下文的格式或内容做出任何假设。