亚马逊SQS密钥管理 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

亚马逊SQS密钥管理

亚马逊SQS与 Amazon Key Management Service (KMS) 来管理服务器端加密的KMS密钥 (SSE)。Amazon 中的静态加密 SQS有关SSE信息和密钥管理定义,请参阅。Amazon SQS 使用KMS密钥来验证和保护用于加密和解密消息的数据密钥。以下各节提供有关在 Amazon SQS 服务中使用密KMS钥和数据密钥的信息。

配置 Amazon KMS 权限

每个KMS密钥都必须有密钥策略。请注意,您无法修改的密钥策略 Amazon Amazon 的托管KMS密钥SQS。此KMS密钥的策略包括账户中所有委托人(有权使用 Amazon 的SQS)使用加密队列的权限。

对于客户托管KMS密钥,您必须配置密钥策略以为每个队列创建者和使用者添加权限。为此,您需要在KMS密钥策略中将生产者和消费者指定为用户。有关 Amazon KMS 权限,请参阅 Amazon KMS 资源和运营Amazon KMS API中的权限参考 Amazon Key Management Service 开发者指南

或者,您可以在分配给生成和使用加密消息的委托人的IAM策略中指定所需的权限。有关更多信息,请参阅将IAM策略与配合使用 Amazon KMS中的 Amazon Key Management Service 开发者指南

注意

虽然您可以配置向亚马逊发送和接收的全局权限SQS, Amazon KMS 需要在IAM策略Resource部分中明确命名特定区域的所有ARNKMS密钥。

配置KMS权限 Amazon 服务

有几个 Amazon 服务充当可以向 Amazon SQS 队列发送事件的事件源。要允许这些事件源使用加密队列,您必须创建客户托管KMS密钥,并在密钥策略中添加权限,以便服务使用所需的密钥 Amazon KMS API方法。执行以下步骤来配置权限。

警告

更改用于加密您的 Amazon SQS 消息的KMS密钥时,请注意,使用旧KMS密钥加密的现有消息仍将使用该密钥进行加密。要解密这些消息,您必须保留旧KMS密钥并确保其密钥策略授予亚马逊SQS的权限。kms:GenerateDataKey更新到用于加密新消息的新KMS密钥后,请确保在删除或禁用旧KMS密钥之前,处理所有使用旧密KMS钥加密的现有消息并将其从队列中删除。

  1. 创建客户管理的KMS密钥。有关更多信息,请参阅中的创建密钥 Amazon Key Management Service 开发者指南

  2. 为了允许 Amazon 服务事件源要使用该kms:GenerateDataKeyAPI方法,请在KMS密钥策略中添加以下语句。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey" ], "Resource": "*" }] }

    将上述示例中的“服务”替换为事件源的服务名称。事件源包括以下服务。

    事件源 服务名称
    亚马逊 CloudWatch 活动 events.amazonaws.com
    Amazon S3 事件通知 s3.amazonaws.com
    亚马逊SNS主题订阅 sns.amazonaws.com
  3. 使用您的KMS密钥@@ 配置现有SSE队列。ARN

  4. 向ARN事件源提供加密队列的。

配置 Amazon KMS 制片人的权限

数据密钥重用期到期时,生产者下次调用SendMessageSendMessageBatch也会触发对的调用kms:GenerateDataKey。生产者必须拥有KMS密钥的kms:GenerateDataKey权限。

在生产者的IAM政策中添加以下声明。请记住为密钥资源和队列资源使用正确的ARN值。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:123456789012:MyQueue" }] }

配置 Amazon KMS 消费者的权限

当数据密钥重用周期过期时,使用者下一次调用 ReceiveMessage 时也会触发对 kms:Decrypt 的调用,以便在使用新数据密钥之前验证它的完整性。因此,使用者必须拥有用于加密指定队列中消息的任何密KMS钥的kms:Decrypt权限。如果队列充当死信队列,则使用者还必须拥有用于加密源队列中消息的任何密KMS钥的kms:Decrypt权限。在消费者的IAM政策中添加以下声明。请记住为密钥资源和队列资源使用正确的ARN值。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage" ], "Resource": "arn:aws:sqs:*:123456789012:MyQueue" }] }

配置 Amazon KMS 权限与副手保护混乱

当关键政策声明中的委托人是 Amazon 服务主体,你可以使用aws:SourceArnaws:SourceAccount全局条件键来防范混乱的副手场景。要使用这些条件密钥,请将值设置为正在加密的资源的 Amazon 资源名称 (ARN)。如果您不知道该ARN资源的类型,请aws:SourceAccount改用。

在此KMS关键政策中,允许账户拥有的服务中的特定资源111122223333在使用 Amazon 期间KMS进行调SSE用DecryptGenerateDataKey操作SQS。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "<replaceable>service</replaceable>.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:service::111122223333:resource" ] } } }] }

使用SSE启用的 Amazon SQS 队列时,以下服务支持aws:SourceArn

  • Amazon SNS

  • Amazon S3

  • CloudWatch 大事记

  • Amazon Lambda

  • CodeBuild

  • Amazon Connect Customer Profiles

  • Amazon Auto Scaling

  • Amazon Chime

了解数据密钥重用周期

数据密钥重复使用期限定义了 Amazon SQS 重复使用相同数据密钥的最长持续时间。当数据密钥重复使用期结束时,Amazon SQS 会生成一个新的数据密钥。请注意以下有关此重用周期的准则。

  • 较短的重复使用期可以提高安全性,但会导致更多的调用 Amazon KMS,这可能会产生超出免费套餐范围的费用。

  • 尽管用于加密和解密的数据密钥是单独缓存的,重用周期仍将应用于数据密钥的两个副本。

  • 目前,在SQS:SendMessageSQS:SendMessageBatch操作期间仅使用该KMS:GenerateDataKey权限。该kms:Decrypt权限仅在SQS:ReceiveMessage操作期间使用。

  • 校长 (Amazon Web Services 账户 或用户)不共享数据密钥(由唯一委托人发送的消息始终会获得唯一的数据密钥)。因此,拨打的电话量 Amazon KMS 是数据密钥重复使用期间使用的唯一主体数量的倍数。

估计 Amazon KMS 成本

预测成本并更好地了解您的 Amazon bill,你可能想知道 Amazon SQS 使用你的KMS密钥的频率。

注意

尽管以下公式可以让你很好地了解预期成本,但由于 Amazon 的分布式特性,实际成本可能会更高SQS。

要计算每个队列的API请求数 (R),请使用以下公式:

R = (B / D) * (2 * P + C)

B 是账单周期(以秒为单位)。

D数据密钥重用周期(以秒为单位)。

P是发送到 Amazon SQS 队列的生成委托人的数量。

C是从 Amazon SQS 队列中接收的消费委托人的数量。

重要

通常,创建主体产生的费用是使用主体的两倍。有关更多信息,请参阅 了解数据密钥重用周期

如果创建者和使用者具有不同的用户,则费用会增加。

以下是一些示例计算。有关确切的定价信息,请参阅 Amazon Key Management Service 定价

示例 1:计算数量 Amazon KMS API呼叫 2 位校长和 1 个队列

此示例假定:

  • 账单周期为 1 月 1 日 - 31 日(2678400 秒)。

  • 数据密钥重用周期设置为 5 分钟(300 秒)。

  • 有 1 个队列。

  • 有 1 个创建主体和 1 个使用主体。

(2,678,400 / 300) * (2 * 1 + 1) = 26,784

示例 2:计算数量 Amazon KMS API呼叫多个生产者和消费者以及 2 个队列

此示例假定:

  • 账单周期为 2 月 1 日 - 28 日(2419200 秒)。

  • 数据密钥重用周期设置为 24 小时(86400 秒)。

  • 有 2 个队列。

  • 第一个队列有 3 个创建主体和 1 个使用主体。

  • 第二个队列有 5 个创建主体和 2 个使用主体。

(2,419,200 / 86,400 * (2 * 3 + 1)) + (2,419,200 / 86,400 * (2 * 5 + 2)) = 532

Amazon KMS 错误

当你与 Amazon SQS 合作时 Amazon KMS,你可能会遇到错误。以下参考描述错误和可能的故障排除解决方案。