

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

# 授予 Amazon Managed Service for Prometheus 向 Amazon SNS 主题发送警报消息的权限
<a name="AMP-alertmanager-receiver-AMPpermission"></a>

您必须授予 Amazon Managed Service for Prometheus 向您的 Amazon SNS 主题发送消息的权限。以下策略声明将授予该权限。其中包括一项 `Condition` 声明，以防止出现被称为“混淆代理”**问题的安全问题。该 `Condition` 声明限制了对 Amazon SNS 主题的访问权限，仅允许来自该特定账户和 Amazon Managed Service for Prometheus 工作区的操作。有关混淆代理人问题的更多信息，请参阅[防止跨服务混淆座席](#cross-service-confused-deputy-prevention)。

**授予 Amazon Managed Service for Prometheus 向您的 Amazon SNS 主题发送消息的权限**

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

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

1. 选择您正用于 Amazon Managed Service for Prometheus 的主题的名称。

1. 选择**编辑**。

1. 选择**访问策略**，将以下策略声明添加到现有策略。

   ```
   {
       "Sid": "Allow_Publish_Alarms",
       "Effect": "Allow",
       "Principal": {
           "Service": "aps.amazonaws.com"
       },
       "Action": [
           "sns:Publish",
           "sns:GetTopicAttributes"
       ],
       "Condition": {
           "ArnEquals": {
               "aws:SourceArn": "workspace_ARN"
           },
           "StringEquals": {
               "AWS:SourceAccount": "account_id"
           }
       },
       "Resource": "arn:aws:sns:region:account_id:topic_name"
   }
   ```

   [可选] 如果您的 Amazon SNS 主题启用了服务端加密 (SSE)，则需要在用于加密主题的密 AWS KMS 钥策略中添加`kms:GenerateDataKey*`和`kms:Decrypt`权限，从而允许适用于 Prometheus 的亚马逊托管服务向该加密主题发送消息。

   例如，您可以在策略中添加以下内容：

   ```
   {
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "Service": "aps.amazonaws.com"
       },
       "Action": [
         "kms:GenerateDataKey*",
         "kms:Decrypt"
       ],
       "Resource": "*"
     }]
   }
   ```

   有关更多信息，请参阅 [SNS 主题的AWS KMS 权限](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html#sns-what-permissions-for-sse)。

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

**注意**  
 默认情况下，Amazon SNS 会创建带有 `AWS:SourceOwner` 条件的访问策略。有关更多信息，请参阅 [SNS 访问策略](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html#source-account-versus-source-owner)。

**注意**  
IAM 遵循[最严格的策略优先](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)规则。在您的 SNS 主题中，如果存在比记录在案的 Amazon SNS 策略块更严格的策略数据块，则不会授予该主题策略的权限。要评估您的策略并了解已授予的权限，请参阅[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

## 选择加入区域的 SNS 主题配置
<a name="AMP-alertmanager-sns-regional-config"></a>

您可以使用配置`aps.amazonaws.com`与适用于 Prometheus 的亚马逊托管服务工作区 AWS 区域 相同的亚马逊 SNS 主题。要将来自 non-opt-in区域（例如 us-east-1）的 SNS 主题与可选区域（例如 af-south-1）一起使用，您需要使用区域服务主体格式。在区域服务原则中，*us-east-1*替换为您要使用的 non-opt-in区域：**aps.*us-east-1*.amazonaws.com**。

下表列出了选择加入区域及其相应的区域服务主体：


**选择加入区域及其区域服务主体**  

| 区域名称 | Region | 区域服务主体 | 
| --- | --- | --- | 
| 非洲（开普敦） | af-south-1 | af-south-1.aps.amazonaws.com | 
| 亚太地区（香港） | ap-east-1 | ap-east-1.aps.amazonaws.com | 
| 亚太地区（泰国） | ap-southeast-7 | ap-southeast-7.aps.amazonaws.com | 
| 欧洲地区（米兰） | eu-south-1 | eu-south-1.aps.amazonaws.com | 
| 欧洲（苏黎世） | eu-central-2 | eu-central-2.aps.amazonaws.com | 
| 中东（阿联酋）： | me-central-1 | me-central-1.aps.amazonaws.com | 
| 亚太地区（马来西亚） | ap-southeast-5 | ap-southeast-5.aps.amazonaws.com | 

有关启用选择加入区域的信息，请参阅 Amazon Web Services 一般参考中的《IAM 用户指南》**中的[管理 AWS 区域](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)。

在为这些选择加入区域配置 Amazon SNS 主题时，请确保使用正确的区域服务主体来启用跨区域发送警报。

## 防止跨服务混淆座席
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理问题是一个安全性问题，即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS，跨服务模仿可能会导致混乱的副手问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况， AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键，以限制 Amazon Managed Service for Prometheus 为 Amazon SNS 提供的资源访问权限。如果使用两个全局条件上下文键，在同一策略语句中使用时，`aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户必须使用相同的账户 ID。

`aws:SourceArn` 的值必须为 Amazon Managed Service for Prometheus 工作区的 ARN。

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符（`*`）的 `aws:SourceArn` 全局上下文条件键。例如 `arn:aws:servicename::123456789012:*`。

[授予 Amazon Managed Service for Prometheus 向 Amazon SNS 主题发送警报消息的权限](#AMP-alertmanager-receiver-AMPpermission) 中所示的策略演示了如何使用 Amazon Managed Service for Prometheus 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键来防范混淆代理人问题。