教程:为现有 Amazon SQS 队列配置 服务器端加密 (SSE) - Amazon Simple Queue Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:为现有 Amazon SQS 队列配置 服务器端加密 (SSE)

您可以为队列启用 SSE 以保护其数据。有关使用 SSE 的更多信息,请参阅静态加密

重要

对于启用了 SSE 的队列的所有请求都必须使用 HTTPS 和 签名版本 4

当您禁用 SSE 后,队列中的现有消息将保持加密状态。但是,只要 KMS 密钥保持启用并且可访问,这些消息仍可供使用者使用。

在本教程中,您将学习如何为现有 Amazon SQS 队列启用、禁用和配置 SSE。

AWS 管理控制台

  1. 登录 Amazon SQS 控制台

  2. 从队列列表中选择一个队列。

  3. 队列操作中,选择配置队列

    这将显示配置 QueueName 对话框。

  4. 要启用或禁用 SSE,请使用使用 SSE 复选框。

  5. 指定 客户主密钥 (CMK) ID。有关更多信息,请参阅 关键术语

    对于每种 CMK 类型,都会显示 CMK 的 Description (描述)Account (账户)Key ARN (密钥 ARN)

    重要

    如果您不是 CMK 的拥有者,或者您登录的账户没有 kms:ListAliaseskms:DescribeKey 权限,则无法在 Amazon SQS 控制台上查看有关 CMK 的信息。

    要求 CMK 拥有者授予您这些权限。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的 AWS KMS API 权限:操作和资源参考

    • 要使用适用于 Amazon SQS 的 AWS 托管 CMK,请从列表中选择它。

      注意

      记住以下内容:

      • 如果您未指定自定义 CMK,Amazon SQS 将为 Amazon SQS 使用 AWS 托管的 CMK。有关创建自定义 CMK 的说明,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

      • 在首次使用 AWS 管理控制台为队列的 Amazon SQS 指定 AWS 托管的 CMK 时,AWS KMS 将为 Amazon SQS 创建 AWS 托管的 CMK。

      • 或者,首次在启用 SSE 的队列中使用 SendMessageSendMessageBatch 操作时,AWS KMS 将为 Amazon SQS 创建 AWS 托管的 CMK。

    • 要使用来自您的 AWS 账户的自定义 CMK,请从列表中选择。

      注意

      有关创建自定义 CMK 的说明,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

    • 要使用来自您的 AWS 账户或其他 AWS 账户的自定义 CMK ARN,请从列表中选择 Enter an existing CMK ARN (输入现有的 CMK ARN) 并键入或复制 CMK。

  6. (可选)对于 Data key reuse period (数据密钥重用周期),请指定一个在 1 分钟到 24 小时之间的值。默认为 5 分钟。有关更多信息,请参阅了解数据密钥重用周期

  7. 选择 Save Changes

    您的更改将应用于队列。

AWS SDK for Java

以下示例使用的是 AWS Java 开发工具包。要安装和设置开发工具包,请参阅 AWS SDK for Java Developer Guide 中的设置适用于 Java 的 AWS 开发工具包

运行示例代码之前,请配置您的 AWS 凭证。有关更多信息,请参阅 AWS SDK for Java Developer Guide 中的设置用于开发的 AWS 凭证和区域

您的 必须确保 AWS KMS 密钥策略允许对队列进行加密以及对消息进行加密和解密。。有关更多信息,请参阅配置 AWS KMS 权限

使用 SSE 配置队列

  1. 获取 客户主密钥 (CMK) ID。有关更多信息,请参阅 关键术语

    注意

    记住以下内容:

    • 如果您未指定自定义 CMK,Amazon SQS 将为 Amazon SQS 使用 AWS 托管的 CMK。有关创建自定义 CMK 的说明,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

    • 在首次使用 AWS 管理控制台为队列的 Amazon SQS 指定 AWS 托管的 CMK 时,AWS KMS 将为 Amazon SQS 创建 AWS 托管的 CMK。

    • 或者,首次在启用 SSE 的队列中使用 SendMessageSendMessageBatch 操作时,AWS KMS 将为 Amazon SQS 创建 AWS 托管的 CMK。

  2. 要启用服务器端加密,请通过设置 CreateQueueSetQueueAttributes 操作的 KmsMasterKeyId 属性来指定 CMK ID。

    以下代码示例使用适用于 Amazon SQS 的 AWS 托管 CMK 为现有队列启用 SSE:

    final SetQueueAttributesRequest setAttributesRequest = new SetQueueAttributesRequest(); setAttributesRequest.setQueueUrl(queueUrl); // Enable 服务器端加密 by specifying the alias for the // AWS managed CMK for Amazon SQS. final String kmsMasterKeyAlias = "alias/aws/sqs"; attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); final SetQueueAttributesResult setAttributesResult = client.setQueueAttributes(setAttributesRequest);

    要为现有队列禁用服务器端加密,请使用 SetQueueAttributes 操作将 KmsMasterKeyId 属性设置为空字符串。

    重要

    null 对于 KmsMasterKeyId 是无效值。

  3. (可选)指定在调用 AWS KMS 之前,Amazon SQS 可以重用数据密钥对消息进行加密或者解密的时间长度(以秒为单位)。设置 KmsDataKeyReusePeriodSecondsCreateQueue 操作的 SetQueueAttributes 属性。可能的值介于 60 秒 (1 分钟) 和 86400 秒 (24 小时) 之间。如果不指定值,则使用默认值 300 秒 (5 分钟)。

    以下代码示例将数据密钥重用周期设置为 60 秒 (1 分钟):

    // (Optional) Specify the length of time, in seconds, for which Amazon SQS can reuse // a data key to encrypt or decrypt messages before calling AWS KMS again. attributes.put("KmsDataKeyReusePeriodSeconds", "60");

有关检索队列属性的信息,请参阅 Amazon Simple Queue Service API Reference 中的示例

要检索特定队列的 CMK ID 或数据密钥重用周期,请使用 KmsMasterKeyId 操作的属性 KmsDataKeyReusePeriodSecondsGetQueueAttributes

有关将队列切换到具有同一别名的不同 CMK 的信息,请参阅 AWS Key Management Service Developer Guide 中的更新别名