使用服务器端加密设置 Amazon SNS 主题加密
Amazon SNS 支持服务器端加密(SSE)使用 Amazon Key Management Service(Amazon KMS)来保护消息内容。按照以下说明使用 Amazon SNS 控制台或 CDK 启用 SSE。
选项 1:使用 Amazon Web Services 管理控制台启用加密
-
登录 Amazon SNS 控制台
。 -
导航到主题页面,选择您的主题,然后选择编辑。
-
展开加密部分并执行以下操作:
-
将加密切换为启用。
-
选择 Amazon 托管式 SNS 密钥(alias/aws/sns)作为加密密钥。此选项默认处于选中状态。
-
-
选择保存更改。
注意
-
如果 Amazon 托管式密钥不存在,则会自动创建。
-
如果您看不到密钥或权限不足,请让管理员提供
kms:ListAliases和kms: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 来确保消息的安全传输。