

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

# Amazon SNS 主题的权限
<a name="sns-required-permissions"></a>

仅当您要配置 Amazon DevOps Guru 以向其他 AWS 账户拥有的 Amazon SNS 主题发送通知时，才使用本主题中的信息。

要 DevOps让 Guru 向其他账户拥有的 Amazon SNS 主题发送通知，您必须向 Amazon SNS 主题附加一项政策，授予 DevOps Guru 向其发送通知的权限。如果您将 DevOps Guru 配置为向您用于 DevOps Guru 的同一账户所拥有的 Amazon SNS 主题发送通知，则 DevOps Guru 会为您向这些主题添加策略。

在附加策略以配置另一个账户中的亚马逊 SNS 主题的权限后，您可以在 Guru 中 DevOps添加亚马逊 SNS 主题。您还可以使用通知通道更新您的 Amazon SNS 政策，使其更加安全。

**注意**  
DevOpsGuru 目前仅支持同一地区的跨账户访问。

**Topics**
+ [另一个账户中的 Amazon SNS 主题的配置权限](#sns-permissions-attach-policy)
+ [添加另一个账户的 Amazon SNS 主题](#sns-permissions-add-sns-topic)
+ [使用通知通道更新您的 Amazon SNS 政策（推荐）](#sns-permissions-policy-notification-channel)

## 另一个账户中的 Amazon SNS 主题的配置权限
<a name="sns-permissions-attach-policy"></a>

### 作为 IAM 角色添加权限
<a name="sns-permissions-policy-login"></a>

如果您希望在使用 IAM 角色登录后使用另一个账户中的 Amazon SNS 主题，则必须向要使用的 Amazon SNS 主题附加一个策略。如要在使用 IAM 角色时将策略附加到其他账户的 Amazon SNS 主题，您需要对作为 IAM 角色一部分的账户资源拥有以下权限：
+ sns: CreateTopic
+ sns: GetTopicAttributes
+ sns: SetTopicAttributes
+ sns:Publish

将以下策略附加到您要使用的 Amazon SNS 主题。`Resource`密钥{{topic-owner-account-id}}是主题所有者的账户 ID，{{topic-sender-account-id}}是设置 DevOps Guru 的用户的账户 ID，{{devops-guru-role}}是相关个人用户的 IAM 角色。必须用相应的值替换{{region-id}}（例如，`us-west-2`）和{{my-topic-name}}。

### 以 IAM 用户身份添加权限
<a name="sns-permissions-policy-iam-user"></a>

要以 IAM 用户身份从其他账户使用 Amazon SNS 主题，请将以下策略附加到要使用的 Amazon SNS 主题。`Resource`密钥{{topic-owner-account-id}}是主题所有者的账户 ID，{{topic-sender-account-id}}是设置 DevOps Guru 的用户的账户 ID，{{devops-guru-user-name}}是所涉及的个人 IAM 用户。必须用适当的值替换{{region-id}}（例如，`us-west-2`）和{{my-topic-name}}。

**注意**  
在可能的情况下，我们建议使用临时凭证，而不是创建具有长期凭证（如密码和访问密钥）的 IAM 用户。有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。



## 添加另一个账户的 Amazon SNS 主题
<a name="sns-permissions-add-sns-topic"></a>

在另一个账户中为亚马逊 SNS 主题配置权限后，您可以将该亚马逊 SNS 主题添加到 DevOps Guru 通知设置中。您可以使用 AWS CLI 或 DevOps Guru 控制台添加亚马逊 SNS 主题。
+ 使用控制台时，必须选择 “**使用 SNS 主题 ARN 指定现有主题**” 选项，才能使用其他账户的主题。
+ 当您使用 “[添加通知频道” AWS CLI 操作时](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/devops-guru/add-notification-channel.html)，必须在对象内`TopicArn`指定。`NotificationChannelConfig`

**使用控制台添加来自其他账户的 Amazon SNS 主题**

1. 在以下位置打开 Amazon DevOps Guru 控制台。[ https://console.aws.amazon.com/devops-guru/ ](https://console.aws.amazon.com/devops-guru/)

1. 打开导航窗格，选择**设置**。

1. 前往“**通知**”部分并选择 “**编辑”**。

1. 选择**添加 SNS 主题**。

1. 选择**使用 SNS 主题 ARN 指定现有主题**。

1. 输入您要使用的 Amazon SNS 主题的 ARN。您应该已经通过为该主题附加策略来配置该主题的权限。

1. （可选）选择**通知配置**以编辑通知频率设置。

1. 选择**保存**。

将 Amazon SNS 主题添加到通知设置后， DevOpsGuru 会使用该主题向您通知重要事件，例如创建新见解时。

## 使用通知通道更新您的 Amazon SNS 政策（推荐）
<a name="sns-permissions-policy-notification-channel"></a>

添加主题后，我们建议您仅为包含您的主题的 DevOps Guru 通知渠道指定权限，从而提高政策的安全性。

**使用通知通道更新您的 Amazon SNS 主题政策（推荐）**

1. 在您要从中发送通知的账户中运行 `list-notification-channels` DevOps Guru AWS CLI 命令。

   ```
   aws devops-guru list-notification-channels
   ```

1. 在 `list-notification-channels` 回复中，记下包含您的 Amazon SNS 主题的 ARN 的通道 ID。通道 ID 是一个指南。

   例如，在以下响应中，带有 ARN `arn:aws:sns:{{region-id}}:{{111122223333}}:{{topic-name}}` 的主题的通道 ID 为 `{{e89be5f7-989d-4c4c-b1fe-e7145037e531}}`

   ```
   {
     "Channels": [
       {
         "Id": "{{e89be5f7-989d-4c4c-b1fe-e7145037e531}}",
         "Config": {
         "Sns": {
             "TopicArn": "arn:aws:sns:{{region-id}}:{{111122223333}}:{{topic-name}}"
           },
         "Filters": {
             "MessageTypes": [{{"CLOSED_INSIGHT", "NEW_INSIGHT", "SEVERITY_UPGRADED"}}],
             "Severities": [{{"HIGH", "MEDIUM"}}]
           }
         }
       }
     ]
   }
   ```

1. 转到您使用 [另一个账户中的 Amazon SNS 主题的配置权限](#sns-permissions-attach-policy) 中的主题所有者 ID 在另一个账户中创建的政策。在 `Condition` 策略声明中，添加指定 `SourceArn` 的行。ARN 包含您的区域 ID（例如`us-east-1`）、主题发件人的 AWS 账号以及您记下的频道 ID。

   您的更新的 `Condition` 声明如下所示。

   ```
   "Condition" : {
     "StringEquals" : {
       "AWS:SourceArn": "arn:aws:devops-guru:{{us-east-1}}:{{111122223333}}:channel/{{e89be5f7-989d-4c4c-b1fe-e7145037e531}}",
       "AWS:SourceAccount": "{{111122223333}}"
      } 
    }
   ```

如果 `AddNotificationChannel` 无法添加您的 SNS 主题，请检查您的 IAM policy 是否具有以下权限。