使用服务器端加密设置 Amazon SNS 主题加密 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用服务器端加密设置 Amazon SNS 主题加密

Amazon SNS 支持服务器端加密(SSE)使用 Amazon Key Management Service(Amazon KMS)来保护消息内容。按照以下说明使用 Amazon SNS 控制台或 CDK 启用 SSE。

选项 1:使用 Amazon Web Services 管理控制台启用加密

  1. 登录 Amazon SNS 控制台

  2. 导航到主题页面,选择您的主题,然后选择编辑

  3. 展开加密部分并执行以下操作:

    • 将加密切换为启用

    • 选择 Amazon 托管式 SNS 密钥(alias/aws/sns)作为加密密钥。此选项默认处于选中状态。

  4. 选择保存更改

注意
  • 如果 Amazon 托管式密钥不存在,则会自动创建。

  • 如果您看不到密钥或权限不足,请让管理员提供 kms:ListAliaseskms:DescribeKey

选项 2:使用 Amazon CDK 启用加密

要在 CDK 应用程序中使用 Amazon 托管式 SNS 密钥,请添加以下片段:

import software.amazon.awscdk.services.sns.*; import software.amazon.awscdk.services.kms.*; import software.amazon.awscdk.core.*; public class SnsEncryptionExample extends Stack { public SnsEncryptionExample(final Construct scope, final String id) { super(scope, id); // Define the managed SNS key IKey snsKey = Alias.fromAliasName(this, "helloKey", "alias/aws/sns"); // Create the SNS Topic with encryption enabled Topic.Builder.create(this, "MyEncryptedTopic") .masterKey(snsKey) .build(); } }

其他信息

  • 自定义 KMS 密钥 - 如果需要,您可以指定自定义密钥。在 Amazon SNS 控制台中,从列表中选择自定义 KMS 密钥或输入 ARN。

  • 自定义 KMS 密钥的权限 - 如果使用自定义 KMS 密钥,请在密钥策略中包含以下内容,以使 Amazon SNS 能够加密和解密消息:

{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type/customer-resource-id" }, "StringEquals": { "kms:EncryptionContext:aws:sns:topicArn": "arn:aws:sns:your_region:customer-account-id:your_sns_topic_name" } } }

对使用者的影响

启用 SSE 不会更改订阅用户使用消息的方式。Amazon 以透明方式管理加密和解密。消息在静态状态下保持加密状态,并在发送给订阅用户之前自动解密。为了获得最佳安全性,Amazon 建议为所有端点启用 HTTPS 来确保消息的安全传输。