

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

# Amazon SQS 中的静态加密
<a name="sqs-server-side-encryption"></a>

借助服务器端加密 (SSE)，您可以采用加密队列的方式传输敏感数据。SSE 使用 SQS 托管的加密密钥 (SSE-SQS) 或在 (SSE-KMS) 中管理的密钥来保护队列中消息的内容。 AWS Key Management Service 有关使用管理 SSE 的信息 AWS 管理控制台，请参阅以下内容：
+ [为队列配置 SSE-SQS（控制台）](sqs-configure-sqs-sse-queue.md)
+ [为队列配置 SSE-KMS（控制台）](sqs-configure-sse-existing-queue.md)

 有关使用 适用于 Java 的 AWS SDK （以及`[CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)`、`[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)`和`[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)`操作）管理 SSE 的信息，请参阅以下示例：
+ [在 Amazon SQS 队列中使用服务器端加密](sqs-java-configure-sse.md)
+ [为配置 KMS 权限 AWS 服务](sqs-key-management.md#compatibility-with-aws-services)

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/Mw1NVpJsOZc?rel=0&amp;controls=0&amp;showinfo=0/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/Mw1NVpJsOZc?rel=0&amp;controls=0&amp;showinfo=0)


一旦 Amazon SQS 收到消息，SSE 就会对消息进行加密。这些消息以加密形式存储，仅当消息发送给授权使用者时，Amazon SQS 才会对消息进行解密。

**重要**  
针对启用了 SSE 的队列的所有请求都必须使用 HTTPS 和 [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。  
使用默认密钥（Amazon SQS 的AWS 托管 KMS 密钥）的[加密队列](#sqs-server-side-encryption)无法在其他队列中调用 Lambda 函数。 AWS 账户  
可以使用 AWS Security Token Service `[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)`操作向 Amazon SQS 发送通知的 AWS 服务的某些功能与 SSE 兼容，但*仅适用于标准队列*：  
[Auto Scaling 生命周期挂钩](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)
[AWS Lambda 死信队列](https://docs.aws.amazon.com/lambda/latest/dg/dlq.html)
有关其他服务与加密队列的兼容性的信息，请参阅 [为 AWS 服务配置 KMS 权限](sqs-key-management.md#compatibility-with-aws-services) 和服务文档。

AWS KMS 将安全、高度可用的硬件和软件相结合，提供可扩展到云端的密钥管理系统。当您将 Amazon SQS 与一起使用时 AWS KMS，加密消息[数据的数据密钥](#sqs-sse-key-terms)也会被加密并与它们保护的数据一起存储。

使用 AWS KMS具有以下好处：
+ 您可以自行创建和管理 [AWS KMS keys](#sqs-sse-key-terms)。
+ 您也可以使用适用于 Amazon SQS 的 AWS 托管 KMS 密钥，该密钥对于每个账户和地区都是唯一的。
+  AWS KMS 安全标准可以帮助您满足与加密相关的合规性要求。

有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[什么是 AWS Key Management Service？](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)

## 加密范围
<a name="sqs-encryption-what-does-sse-encrypt"></a>

SSE 将对 Amazon SQS 队列中的消息正文进行加密。

SSE 不对以下各项进行加密：
+ 队列元数据（队列名称和属性）
+ 消息元数据（消息 ID、时间戳和属性）
+ 每队列指标

对消息进行加密将使其内容对未经授权的或匿名的用户不可用。启用 SSE 后，对加密队列的匿名 `SendMessage` 和 `ReceiveMessage` 请求将被拒绝。Amazon SQS 安全最佳实践建议不要使用匿名请求。如果您想向 Amazon SQS 队列发送匿名请求，请确保禁用 SSE。这不会影响 Amazon SQS 的正常功能：
+ 仅在启用队列加密后发送消息时对其进行加密。Amazon SQS 不会加密积压的消息。
+ 任何加密的消息将保持加密状态，即使已禁用其队列的加密。

将消息移至[死信队列](sqs-dead-letter-queues.md)不会影响其加密：
+ 如果 Amazon SQS 将一条消息从加密的源队列移至未加密的死信队列，则该消息将保持加密状态。
+ 如果 Amazon SQS 将一条消息从未加密的源队列移至加密的死信队列，则该消息将保持未加密状态。

## 关键术语
<a name="sqs-sse-key-terms"></a>

以下关键术语有助于您更好地了解 SSE 的功能。有关详细说明，请参阅 *[Amazon Simple Queue Service API 参考](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/)*。

**数据密钥**  
负责加密 Amazon SQS 消息内容的密钥 (DEK)。  
有关更多信息，请参阅《AWS Encryption SDK 开发人员指南》**中《AWS Key Management Service 开发人员指南》**的[数据密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)。

**数据密钥重用周期**  
在再次调用之前，Amazon SQS 可以重复使用数据密钥来加密或解密消息的时间长度，以秒为单位。 AWS KMS 一个表示秒数的证书，介于 60 秒（1 分钟）和 86400 秒（24 小时）之间。默认值为 300（5 分钟）。有关更多信息，请参阅 [了解数据密钥重用周期](sqs-key-management.md#sqs-how-does-the-data-key-reuse-period-work)。  
万一出现无法访问的情况 AWS KMS，Amazon SQS 将继续使用缓存的数据密钥，直到重新建立连接。

**KMS 密钥 ID**  
您的账户或其他账户中的 AWS 托管 KMS 密钥或自定义 KMS 密钥的别名、别名 ARN、密钥 ID 或密钥 ARN。虽然 Amazon SQS 的 AWS 托管 KMS 密钥的别名始终是`alias/aws/sqs`，但例如，自定义 KMS 密钥的别名可以是。`alias/MyAlias`您可以利用这些 KMS 密钥保护 Amazon SQS 队列中的消息。  
记住以下内容：  
+ 如果您未指定自定义 KMS 密钥，Amazon SQS 将使用亚马逊 SQS 的 AWS 托管 KMS 密钥。
+ 首次使用为队列指定亚马逊 SQS 的 AWS 托管 KMS 密钥时， AWS KMS 会为亚马逊 SQS 创建 AWS 托管 KMS 密钥。 AWS 管理控制台 
+ 或者，首次对启用了 SSE 的队列使用`SendMessage`或`SendMessageBatch`操作时， AWS KMS 会为 Amazon SQS 创建 AWS 托管 KMS 密钥。
您可以创建 KMS 密钥，定义控制如何使用 KMS 密钥的策略，并使用控制 AWS KMS 台的 “**客户托管密钥**” 部分或`[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)` AWS KMS 操作来审计 KMS 密钥的使用情况。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)和[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。有关 KMS 密钥标识符的更多示例，请参阅 *AWS Key Management Service API 参考[KeyId](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters)*中的。有关查找 KMS 密钥标识符的信息，请参阅《AWS Key Management Service 开发人员指南》**中的[查找密钥 ID 和 ARN](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn)。  
使用需要支付额外费用 AWS KMS。有关更多信息，请参阅 [估算成本 AWS KMS](sqs-key-management.md#sqs-estimate-kms-usage-costs) 和 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing)。

**信封加密**  
加密的数据的安全性部分取决于如何保护可解密该数据的数据密钥。Amazon SQS 使用 KMS 密钥对数据密钥进行加密，然后加密的数据密钥与加密的消息一起存储。这种使用 KMS 密钥加密数据密钥的做法称为信封加密。  
有关封装加密的更多信息，请参阅 *AWS Encryption SDK 开发人员指南*的[封装加密](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption)。