本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊SQS密钥管理
Amazon 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 Key Management Service 开发人员指南》中的Amazon KMS 资源和操作或Amazon KMS API权限参考。
或者,您可以在分配给生成和使用加密消息的委托人的IAM策略中指定所需的权限。有关更多信息,请参阅《Amazon Key Management Service 开发者指南》 Amazon KMS中的将IAM策略与一起使用。
注意
虽然您可以配置向亚马逊发送和接收的全ARN局权限SQS,但 Amazon KMS 需要在IAM策略Resource
部分明确命名特定区域的全部KMS密钥。
为 Amazon 服务配置KMS权限
有几项 Amazon 服务充当可以向 Amazon SQS 队列发送事件的事件源。要允许这些事件源使用加密队列,您必须创建客户托管KMS密钥,并在密钥策略中添加权限,以便服务使用所需 Amazon KMS API方法。执行以下步骤来配置权限。
警告
更改用于加密您的 Amazon SQS 消息的KMS密钥时,请注意,使用旧KMS密钥加密的现有消息仍将使用该密钥进行加密。要解密这些消息,您必须保留旧密KMS钥并确保其密钥策略授予 Amazon 对kms:Decrypt
和SQS的权限。kms:GenerateDataKey
更新到用于加密新消息的新KMS密钥后,请确保在删除或禁用旧KMS密钥之前,处理所有使用旧密KMS钥加密的现有消息并将其从队列中删除。
-
创建客户管理的KMS密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建密钥。
-
要允许 Amazon 服务事件源使用
kms:Decrypt
和kms:GenerateDataKey
API方法,请在KMS密钥策略中添加以下语句。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "
service
.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }] }将上述示例中的“服务”替换为事件源的服务名称。事件源包括以下服务。
事件源 服务名称 亚马逊 CloudWatch 活动 events.amazonaws.com
Amazon S3 事件通知 s3.amazonaws.com
Amazon SNS 主题订阅 sns.amazonaws.com
-
使用您的KMS密钥@@ 配置现有SSE队列。ARN
-
向ARN事件源提供加密队列的。
为制作者配置 Amazon KMS 权限
当数据密钥重用周期过期时,创建者下次调用 SendMessage
或 SendMessageBatch
时也会触发对 kms:Decrypt
和 kms:GenerateDataKey
的调用。对 kms:Decrypt
的调用是在使用新数据密钥之前验证它的完整性。因此,创建者必须拥有KMS密钥的kms:Decrypt
和kms:GenerateDataKey
权限。
在生产者的IAM政策中添加以下声明。请记住为密钥资源和队列资源使用正确的ARN值。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:Decrypt", "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:SourceArn
或 aws:SourceAccount
全局条件键以防止出现混淆代理问题。要使用这些条件密钥,请将值设置为正在加密的资源的 Amazon 资源名称 (ARN)。如果您不知道该ARN资源的类型,请aws:SourceAccount
改用。
在此KMS关键政策中,允许账户拥有的服务中的特定资源111122223333
在使用 Amazon 期间KMS进行调SSE用Decrypt
和GenerateDataKey
操作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,这可能会产生超出免费套餐的费用。
-
尽管用于加密和解密的数据密钥是单独缓存的,重用周期仍将应用于数据密钥的两个副本。
-
当数据密钥重用期结束时,下一次调用
SendMessage
或SendMessageBatch
通常会触发对 Amazon KMSGenerateDataKey
方法的调用以获取新的数据密钥。此外,接下来对SendMessage
和的调用都ReceiveMessage
将触发对的调用 Amazon KMSDecrypt
,以验证数据密钥的完整性,然后再使用它。 -
委托人(Amazon Web Services 账户 或用户)不共享数据密钥(由唯一委托人发送的消息始终会获得唯一的数据密钥)。因此,对的调用量 Amazon KMS 是数据密钥重复使用期间使用的唯一主体数量的倍数。
估算成本 Amazon KMS
为了预测成本并更好地了解您的 Amazon 账单,您可能需要了解 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:计算 2 个主体和 1 个队列的 Amazon KMS API呼叫数
此示例假定:
-
账单周期为 1 月 1 日 - 31 日(2678400 秒)。
-
数据密钥重用周期设置为 5 分钟(300 秒)。
-
有 1 个队列。
-
有 1 个创建主体和 1 个使用主体。
(2,678,400 / 300) * (2 * 1 + 1) = 26,784
示例 2:计算多个生产者和使用者以及 2 个队列的 Amazon KMS API呼叫次数
此示例假定:
-
账单周期为 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,可能会遇到错误。以下参考描述错误和可能的故障排除解决方案。