本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊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钥加密的现有消息并将其从队列中删除。
-
创建客户管理的KMS密钥。有关更多信息,请参阅中的创建密钥 Amazon Key Management Service 开发者指南。
-
为了允许 Amazon 服务事件源要使用该
kms:GenerateDataKey
API方法,请在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
-
使用您的KMS密钥@@ 配置现有SSE队列。ARN
-
向ARN事件源提供加密队列的。
配置 Amazon KMS 制片人的权限
当数据密钥重用期到期时,生产者下次调用SendMessage
或SendMessageBatch
也会触发对的调用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: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,这可能会产生超出免费套餐范围的费用。
-
尽管用于加密和解密的数据密钥是单独缓存的,重用周期仍将应用于数据密钥的两个副本。
-
目前,在
SQS:SendMessage
和SQS: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,你可能会遇到错误。以下参考描述错误和可能的故障排除解决方案。