

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

# 针对预算通知创建 Amazon SNS 主题
<a name="budgets-sns-policy"></a>

当您创建发送给 Amazon Simple Notification Service（Amazon SNS）主题的预算时，您需要有一个预先存在的 Amazon SNS 主题或创建一个。Amazon SNS 主题可让您通过 SNS 以及电子邮件发送通知。您的预算必须具有向您的主题发送通知的权限。

要创建 Amazon SNS 主题并向您的预算授予权限，请使用 Amazon SNS 控制台。

**注意**  
Amazon SNS 主题必须与您正在配置的 Budgets 放在同一个账户中。不支持跨账户导出到 Amazon SNS。

**创建 Amazon SNS 通知主题并授予权限**

1. [登录 AWS 管理控制台 并在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. 在导航窗格上，选择**主题**。

1. 选择**创建主题**。

1. 对于**名称**，输入您通知主题的名称。

1. （可选）对于**显示名称**，输入您希望在收到通知时显示的名称。

1. 在**访问策略** 中，选择**高级**。

1. 在策略文本字段中，在 ** "Statement": [** 后面，添加以下文本：

   ```
   {
     "Sid": "E.g., AWSBudgetsSNSPublishingPermissions",
     "Effect": "Allow",
     "Principal": {
       "Service": "budgets.amazonaws.com"
     },
     "Action": "SNS:Publish",
     "Resource": "your topic ARN",
      "Condition": {
           "StringEquals": {
             "aws:SourceAccount": "<account-id>"
           },
           "ArnLike": {
             "aws:SourceArn": "arn:aws:budgets::<account-id>:*"
           }
         }
   }
   ```

1. **例如，将 AWSBudgetsSNSPublishing权限**替换为字符串。`Sid` 在策略中必须是唯一的。

1. 选择**创建主题**。

1. 在 **Details（详细信息）**下，保存您的 ARN。

1. 选择**编辑**。

1. 在 “**访问策略**” 下，*your topic ARN*替换为步骤 10 中的 Amazon SNS 主题 ARN。

1. 选择**保存更改**。

   您的主题现在显示在**主题**页面上的主题列表中。

## 问题排查
<a name="budgets-sns-troubleshoot"></a>

为预算通知创建 Amazon SNS 主题时，您可能会遇到以下错误消息。

**Please comply with SNS ARN format（请遵循 SNS ARN 格式）**  
您替换的 ARN 中存在语法错误（步骤 9）。确认 ARN 的语法和格式是否正确。

**Invalid SNS topic（无效的 SNS 主题）**  
AWS 预算无权访问 SNS 主题。确认您已允许 budgets.amazonaws.com 在基于 SNS 主题资源的策略中向此 SNS 主题发布消息。

**The SNS topic is encrypted（SNS 主题已加密）**  
您对 SNS 主题启用了**加密**。如果没有其他权限，SNS 主题将无法正常工作。禁用对主题的加密，然后刷新 **Budget edit（预算编辑）**页面。

## 检查或重新发送通知确认电子邮件
<a name="budgets-confirm-subscription"></a>

在创建带通知的预算时，您还将创建 Amazon SNS 通知。对于要发送的通知，您必须接受对 Amazon SNS 通知主题的订阅。

要确认您的通知订阅已接受或重新发送订阅确认电子邮件，请使用 Amazon SNS 控制台。

**检查您的通知状态或重新发送通知确认电子邮件**

1. [登录 AWS 管理控制台 并在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. 在导航窗格上，选择**订阅**。

1. 在 **Subscriptions** 页面上，对于 **Filter**，输入 `budget`。您的预算通知列表将出现。

1. 检查通知的状态。如果未接受并确定订阅，**状态**下将显示 `PendingConfirmation`。

1. （可选）要重新发送确认请求，请选择待确认的订阅，然后选择 **Request confirmation（请求确认）**。Amazon SNS 将向订阅通知的终端节点发送确认请求。

   在终端节点的每个所有者收到电子邮件后，他们必须选择**确认订阅**链接来激活通知。

## 使用 SSE 保护您的 Amazon SNS 预算提醒数据以及 AWS KMS
<a name="protect-sns-sse"></a>

您可以使用服务器端加密（SSE），采用加密主题的方式传输敏感数据。SSE 使用在 AWS Key Management Service ()AWS KMS中管理的密钥来保护 Amazon SNS 消息。

要使用 AWS 管理控制台 或 AWS 服务开发套件 (SDK) 管理 [SSE，请参阅亚马逊*简单通知服务入门*指南中的为亚马逊 SNS 主题启用服务器端加密 (SSE)](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-enable-encryption-for-topic.html)。

要使用创建加密主题 AWS CloudFormation，请参阅[AWS CloudFormation 用户指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

一旦 Amazon SNS 收到消息，SSE 就会对消息进行加密。消息以加密方式存储，仅在发送后才会使用 Amazon SNS 解密。

### 配置 AWS KMS 权限
<a name="configure-kms-perm"></a>

必须先配置 AWS KMS 密钥策略，然后才能使用 SSE。该配置让您可以加密主题，以及加密和解密消息。有关 AWS KMS 权限的详细信息，请参阅《*AWS Key Management Service 开发者指南》*中的 [AWS KMS API 权限：操作和资源参考](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)。

您还可以使用 IAM 策略来管理 AWS KMS 密钥权限。有关更多信息，请参阅[将 IAM 策略与一起使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)。

**注意**  
尽管您可以配置全局权限以发送和接收来自 Amazon SNS 的消息，但 AWS KMS 需要您在特定区域中命名完整 ARN AWS KMS keys （KMS 密钥）。您可以在 IAM 策略的 **Resource（资源）**部分中找到此内容。  
您必须确保 KMS 密钥的密钥策略允许必要的权限。为此，请将在 Amazon SNS 中创建和使用加密消息的委托人指定为 CMK 密钥策略中的用户。<a name="enable-compatiblility"></a>

**启用 AWS 预算和加密的 Amazon SNS 主题之间的兼容性**

1. [创建 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-keys-console)。

1. 将以下文本添加到 KMS 密钥策略。

1. [为 SNS 主题启用 SSE](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-enable-encryption-for-topic.html)。
**注意**  
请务必使用相同的 KMS 密钥，该密钥向 AWS 预算局授予发布加密的 Amazon SNS 主题的权限。

1. 选择**保存更改**。