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

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

密钥管理

以下部分提供了有关使用 Amazon Key Management Service (Amazon KMS) 中托管的密钥的信息。了解更多信息

注意

Amazon SNS 仅支持对称加密KMS密钥。您不能使用任何其他类型的KMS密钥来加密您的服务资源。有关确定密钥是否为对称加密KMS密钥的帮助,请参阅识别非对称KMS密钥。

估算成本 Amazon KMS

为了预测成本并更好地了解您的 Amazon 账单,您可能需要了解Amazon SNS 使用您的账单的频率 Amazon KMS key。

注意

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

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

R = B / D * (2 * P)

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

D是数据密钥的重复使用周期(以秒为单位,Amazon 最多可SNS重复使用数据密钥 5 分钟)。

P是发送到 Amazon SNS 主题的出版体人数。

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

示例 1:计算 1 个发布者和 1 个主题的 Amazon KMS API呼叫次数

此示例假定:

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

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

  • 提供了 1 个主题。

  • 提供了 1 个发布委托人。

2,678,400 / 300 * (2 * 1) = 17,856

示例 2:计算多个发布者和 2 个主题的 Amazon KMS API调用次数

此示例假定:

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

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

  • 提供了 2 个主题。

  • 第一个主题具有 3 个发布委托人。

  • 第二个主题具有 5 个发布委托人。

(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024

配置 Amazon KMS 权限

在使用之前SSE,必须将 Amazon KMS key 策略配置为允许对主题进行加密以及对消息进行加密和解密。有关 Amazon KMS 权限的示例和更多信息,请参阅《Amazon Key Management Service 开发者指南》中的 “Amazon KMS API权限:操作和资源参考”。有关如何使用服务器端加密设置 Amazon SNS 主题的详细信息,请参阅设置使用服务器端加密的 Amazon SNS 主题

注意

您还可以使用IAM策略管理对称加密KMS密钥的权限。有关更多信息,请参阅将IAM策略与配合使用 Amazon KMS

虽然您可以配置向亚马逊发送和接收的全局权限SNS,但 Amazon KMS 需要KMSs在IAM策略Resource部分明确命名特定区域的完整ARN内容。

您还必须确保的密钥策略 Amazon KMS key 允许必要的权限。为此,请在KMS密钥策略中将在 Amazon 中生成和使用加密消息的委托人命名SNS为用户。

或者,您可以在分配给在 Amazon KMS ARN SNS 中发布和订阅以接收加密消息的委托人的IAM策略中指定所需的 Amazon KMS 操作。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的管理对 Amazon KMS的访问

如果您为 Amazon SNS 主题选择了客户管理的密钥,并且您使用别名使用IAM策略或带有条件KMS密钥的密KMS钥策略来控制对密钥的访问kms:ResourceAliases,请确保所选的客户管理的密钥也具有关联的别名。有关使用别名控制KMS密钥访问权限的更多信息,请参阅《Amazon Key Management Service 开发者指南》中的使用别名控制KMS密钥访问权限

允许用户使用以下方式向主题发送消息 SSE

发布者必须具有 Amazon KMS key的 kms:GenerateDataKey*kms:Decrypt 权限。

{ "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:123456789012:MyTopic" }] }

启用来自 Amazon 服务的事件源和加密主题之间的兼容性

有几项 Amazon 服务会向 Amazon SNS 主题发布事件。要允许这些事件源使用加密主题,您必须执行以下步骤。

  1. 使用客户自主管理型密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建密钥

  2. 要允许 Amazon 服务拥有kms:GenerateDataKey*kms:Decrypt权限,请在KMS策略中添加以下语句。

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }] }
    事件源 服务主体
    Amazon CloudWatch cloudwatch.amazonaws.com
    亚马逊 CloudWatch 活动 events.amazonaws.com
    Amazon CodeCommit codecommit.amazonaws.com
    AWS CodeStar codestar-notifications.amazonaws.com
    Amazon Database Migration Service dms.amazonaws.com
    Amazon Directory Service ds.amazonaws.com
    Amazon DynamoDB dynamodb.amazonaws.com
    Amazon Inspector inspector.amazonaws.com
    Amazon Redshift redshift.amazonaws.com
    Amazon RDS events.rds.amazonaws.com
    Amazon S3 Glacier glacier.amazonaws.com
    Amazon Simple Email Service ses.amazonaws.com
    Amazon Simple Storage Service s3.amazonaws.com
    Amazon Snowball importexport.amazonaws.com
    Amazon Systems Manager 事件管理器

    Amazon Systems Manager 事件管理器由两个服务原则组成:

    ssm-incidents.amazonaws.com; ssm-contacts.amazonaws.com
    注意

    某些 Amazon SNS 事件源要求您在 Amazon KMS key 策略中提供IAM角色(而不是服务主体):

  3. 在KMS资源策略中添加aws:SourceAccountaws:SourceArn条件密钥,以进一步保护密KMS钥免受混淆的副手攻击。有关每种案例的具体详细信息,请参阅上述特定于服务的文档列表。

    重要

    EventBridge加密主题不支持在 Amazon KMS 策略中添加aws:SourceAccountaws:SourceArn

    { "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "customer-account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type:customer-resource-id" } } }
  4. 使用@@ 您的主题启SSE用KMS。

  5. 向ARN事件源提供加密主题的。

Amazon KMS 错误

当您与 Amazon SNS 合作时 Amazon KMS,可能会遇到错误。以下列表描述了这些错误和可能的故障排除解决方案。

KMSAccessDeniedException

密文引用了不存在的或您无权访问的密钥。

HTTP状态码:400

KMSDisabledException

请求被拒绝,因为指定的KMS未启用。

HTTP状态码:400

KMSInvalidStateException

由于指定资源的状态对此请求无效,请求被拒绝。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的 Amazon KMS keys的密钥状态

HTTP状态码:400

KMSNotFoundException

由于找不到指定的实体或资源,请求被拒绝。

HTTP状态码:400

KMSOptInRequired

Amazon 访问密钥 ID 需要订阅该服务。

HTTP状态码:403

KMSThrottlingException

由于请求限制而导致请求被拒绝。有关节流的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的限额

HTTP状态码:400