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

教程:使用服务器端加密创建 Amazon SQS 队列 (SSE)

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

重要

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

在本教程中,您将学习如何创建启用 SSE 的 Amazon SQS 队列。尽管该示例使用 FIFO 队列,SSE 可用于标准和 FIFO 两种队列。

AWS 管理控制台

  1. 登录 Amazon SQS 控制台

  2. 选择新建队列

  3. 新建队列页面上,确保您位于正确的区域,然后键入队列名称

    注意

    FIFO 队列的名称必须以 .fifo 后缀结尾。

  4. 标准 默认处于选中状态。选择 FIFO

  5. 选择 Configure Queue,然后选择 Use SSE

  6. 指定 客户主密钥 (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。

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

  8. 选择 Create Queue

    新队列是使用 SSE 创建的。Encryption 选项卡上将显示加密状态、CMK 的别名、DescriptionAccountKey ARNData Key Reuse Period

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 权限

  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 AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); final Map<String, String> attributes = new HashMap<String, String>(); final CreateQueueRequest createRequest = new CreateQueueRequest("MyQueue").withAttributes(attributes); // Enable 服务器端加密 by specifying the alias ARN of the // AWS managed CMK for Amazon SQS. final String kmsMasterKeyAlias = "arn:aws-cn:kms:us-east-2:123456789012:alias/aws/sqs"; attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); // (Optional) Specify the length of time, in seconds, for which Amazon SQS can reuse attributes.put("KmsDataKeyReusePeriodSeconds", "60"); final CreateQueueResult createResult = client.createQueue(createRequest);

    以下代码示例使用自定义 CMK 创建具有 SSE 的新队列:

    final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); final Map<String, String> attributes = new HashMap<String, String>(); final CreateQueueRequest createRequest = new CreateQueueRequest("MyQueue").withAttributes(attributes); // Enable 服务器端加密 by specifying the alias ARN of the custom CMK. final String kmsMasterKeyAlias = "arn:aws-cn:kms:us-east-2:123456789012:alias/MyAlias"; attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); // (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", "86400"); final CreateQueueResult createResult = client.createQueue(createRequest);
  3. (可选)指定再次调用 AWS KMS 之前,Amazon SQS 可以重用数据密钥对消息进行加密或者解密的时间长度(以秒为单位)。设置 KmsDataKeyReusePeriodSecondsCreateQueue 操作的 SetQueueAttributes 属性。可能的值介于 60 秒 (1 分钟) 和 86400 秒 (24 小时) 之间。如果不指定值,则使用默认值 300 秒 (5 分钟)。

    上述第一个代码示例将数据密钥重用时间段设置为 60 秒 (1 分钟)。第二个代码示例将该时间段设置为 86400 秒 (24 小时)。以下代码示例将数据密钥重用周期设置为 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 中的更新别名