Amazon Simple Notification Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:为 Amazon SNS 主题启用服务器端加密 (SSE)

您可以为主题启用服务器端加密 (SSE) 以保护其数据。有关使用 SSE 的更多信息,请参阅使用服务器端加密 (SSE) 和 AWS KMS 保护 Amazon SNS 数据

重要

针对启用了 SSE 的主题的所有请求都必须使用 HTTPS 和签名版本 4

以下教程说明如何使用 AWS 管理控制台和 AWS SDK for Java为现有 Amazon SNS 主题启用、禁用和配置 SSE(通过使用 CreateTopicSetTopicAttributes API 操作来设置 KmsMasterKeyId 属性)。

使用 AWS 管理控制台为 Amazon SNS 主题启用服务器端加密 (SSE)

  1. 登录 Amazon SNS 控制台

  2. 在导航面板上,选择主题

  3. 主题页面上,选择一个主题,然后选择操作编辑

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

    1. 选择启用加密

    2. 指定客户主密钥 (CMK)。有关更多信息,请参阅 关键术语

      对于每个 CMK 类型,都会显示 Description (描述)Account (账户)CMK ARN

      重要

      如果您不是 CMK 的拥有者,或者您没有使用拥有 kms:ListAliaseskms:DescribeKey 权限的账户登录,则无法查看有关 Amazon SNS 控制台上的 CMK 的信息。

      要求 CMK 拥有者授予您这些权限。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的 AWS KMS API 权限:操作和资源参考

      • 默认情况下,适用于 Amazon SNS (默认) alias/aws/sns 的 AWS 托管 CMK 处于选中状态。

        注意

        记住以下内容:

        • 在首次使用 AWS 管理控制台为主题的 Amazon SNS 指定 AWS 托管的 CMK 时,AWS KMS 将为 Amazon SNS 创建 AWS 托管的 CMK。

        • 或者,首次对启用 SSE 的主题使用 Publish 操作时,AWS KMS 将为 Amazon SNS 创建 AWS 托管的 CMK。

      • 要从您的 AWS 账户中使用自定义 CMK,选择 Customer master key (CMK) (客户主密钥 (CMK)) 字段,然后从列表中选择自定义 CMK。

        注意

        有关创建自定义 CMK 的说明,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

      • 要从您的 AWS 账户或其他 AWS 账户中使用自定义 CMK ARN,请在 Customer master key (CMK) (客户主密钥 (CMK)) 字段中输入它。

  5. 选择保存更改

    这将为主题启用 SSE,并显示我的主题页面。

    主题的加密状态、AWS 账户客户主密钥(CMK)CMK ARN描述将显示在加密选项卡上。

使用 AWS SDK for Java为 Amazon SNS 主题启用服务器端加密 (SSE)

  1. 将 AWS KMS 密钥策略配置为允许对主题进行加密以及对消息进行加密和解密。有关更多信息,请参阅 配置 AWS KMS 权限

  2. 指定您的 AWS 凭证。有关更多信息,请参阅 适用于 Java 的 AWS 开发工具包 2.x 开发人员指南 中的设置用于开发的 AWS 凭证和区域

  3. 获取客户主密钥 (CMK) ID。有关更多信息,请参阅关键术语

    注意

    记住以下内容:

    • 在首次使用 AWS 管理控制台为主题的 Amazon SNS 指定 AWS 托管的 CMK 时,AWS KMS 将为 Amazon SNS 创建 AWS 托管的 CMK。

    • 或者,首次对启用 SSE 的主题使用 Publish 操作时,AWS KMS 将为 Amazon SNS 创建 AWS 托管的 CMK。

  4. 编写您的代码。有关更多信息,请参阅使用 适用于 Java 的开发工具包 2.x

    要启用服务器端加密,请通过使用 CreateTopicSetTopicAttributes 操作设置 KmsMasterKeyId 属性来指定 CMK ID。

    以下代码摘录使用适用于 Amazon SNS 的 AWS 托管 CMK 为现有主题启用 SSE:

    // Enable server-side encryption by specifying the alias ARN of the AWS managed CMK for Amazon SNS. final String kmsMasterKeyAlias = "arn:aws-cn:kms:us-west-2:123456789012:alias/aws/sns"; final SetTopicAttributesRequest setAttributesRequest = new SetTopicAttributesRequest() .withTopicArn(topicArn) .withAttributeName("KmsMasterKeyId") .withAttributeValue(kmsMasterKeyAlias); final SetTopicAttributesResponse setAttributesResponse = snsClient.setTopicAttributes(setAttributesRequest)

    要为现有主题禁用服务器端加密,请使用 SetTopicAttributes 操作将 KmsMasterKeyId 属性设置为空字符串。

    重要

    null 对于 KmsMasterKeyId 是无效值。

    以下代码摘录使用自定义 CMK 创建具有 SSE 的新主题:

    final Map<String, String> attributes = new HashMap<String, String>(); // Enable server-side encryption by specifying the alias ARN of the custom CMK. final String kmsMasterKeyAlias = "arn:aws:kms:us-west-2:123456789012:alias/MyAlias"; attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); final CreateTopicRequest createRequest = new CreateTopicRequest("MyTopic") .withAttributes(attributes); final CreateTopicRespone createResponse = snsClient.createTopic(createRequest);