

• Amazon Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 使用 Amazon SNS 通知监控 Systems Manager 状态更改
<a name="monitoring-sns-notifications"></a>

您可以配置 Amazon Simple Notification Service（Amazon SNS），令其发送与使用 Run Command 或 Maintenance Windows（都是 Amazon Systems Manager 中的工具）发送的命令的状态有关的通知。Amazon SNS 协调并管理向订阅 Amazon SNS 主题的客户端或端点发送和传输通知。您可以在命令更改为新状态或特定状态（例如 *Failed (已失败)* 或 *Timed Out (已超时)*）时收到通知。如果您将一条命令发送给多个节点，则对于发送给特定节点的命令的每个副本，您都可以收到通知。每个副本称为一个*调用*。

Amazon SNS 能够以 HTTP 或 HTTPS POST 以及电子邮件（SMTP，纯文本或 JSON 格式）的形式传输通知，或将通知作为消息发布到 Amazon Simple Queue Service (Amazon SQS) 队列。有关更多信息，请参阅 *Amazon Simple Notification Service Developer Guide* 中的[什么是 Amazon SNS](https://docs.amazonaws.cn/sns/latest/dg/)。有关由 Run Command 和 Maintenance Windows 提供的 Amazon SNS 通知中包括的 JSON 数据的结构示例，请参阅 [适用于 Amazon Systems Manager 的 Amazon SNS 通知示例](monitoring-sns-examples.md)。

**重要**  
请注意以下重要信息。  
不支持 Amazon Simple Notification Service FIFO 主题。
聊天应用程序中的 Amazon Q 开发者版不支持使用 Amazon SNS 监控 Systems Manager。若想使用聊天应用程序中的 Amazon Q 开发者版来监控 Systems Manager，则必须将其与 Amazon EventBridge 一起使用。有关使用 EventBridge 监控 Systems Manager 的信息，请参阅[使用 Amazon EventBridge 监控 Systems Manager 事件](monitoring-eventbridge-events.md)。有关聊天应用程序中的 Amazon EventBridge 和 Amazon Q 开发者版的信息，请参阅《聊天应用程序中的 Amazon Q 开发者版管理员指南》**中的[教程：创建向聊天应用程序中的 Amazon Q 开发者版发送通知的 EventBridge 规则](https://docs.amazonaws.cn/chatbot/latest/adminguide/create-eventbridge-rule.html)。

## 为 Amazon Systems Manager 配置 Amazon SNS 通知
<a name="monitoring-sns-configure"></a>

注册到维护时段的 Run Command 和 Maintenance Windows 任务可为进入以下状态的命令任务发送 Amazon SNS 通知：
+ 正在进行
+ 成功
+ 已失败
+ 已超时
+ 已取消

有关导致命令进入以下状态之一的条件的信息，请参阅 [了解命令状态](monitor-commands.md)。

**注意**  
使用 Run Command 发送的命令还会报告 Canceling (正在取消) 和 Pending (待处理) 状态。Amazon SNS 通知不会捕获这些状态。

### 命令摘要 Amazon SNS 通知
<a name="monitoring-sns-configure-summary"></a>

如果您在维护时段中为 Amazon SNS 通知配置 Run Command 或 Run Command 任务，Amazon SNS 将发送摘要消息，其中包含以下信息。


****  

| 字段 | Type | 说明 | 
| --- | --- | --- | 
|  eventTime  |  字符串  |  启动事件的时间。由于 Amazon SNS 不保证消息传输顺序，因此时间戳很重要。示例：2016-04-26T13:15:30Z   | 
|  documentName  |  字符串  |  用于运行此命令的 SSM 文档的名称。  | 
|  commandId  |  字符串  |  在发送命令后由 Run Command 生成的 ID。  | 
|  expiresAfter  |  日期  |  如果达到此时间但命令尚未开始执行，则它将不会运行。  | 
|  outputS3BucketName  |  字符串  |  应该存储对命令执行的响应的 Amazon Simple Storage Service (Amazon S3) 存储桶。  | 
|  outputS3KeyPrefix  |  字符串  |  应该存储对命令执行的响应的存储桶中的 Amazon S3 目录路径。  | 
|  requestedDateTime  |  字符串  |  将请求发送到此特定节点的日期和时间。  | 
|  instanceIds  |  StringList  |  通过命令设为目标的节点。  如果 Run Command 任务直接将实例 ID 设为目标，则实例 ID 仅包含在摘要消息中。如果使用基于标签的目标设定发出 Run Command 任务，则实例 ID 不会包含在摘要消息中。   | 
|  status  |  字符串  |  命令的命令状态。  | 

### 基于调用的 Amazon SNS 通知
<a name="monitoring-sns-configure-invocation"></a>

如果您将一条命令发送给多个节点，则 Amazon SNS 可以发送有关该命令的每个副本或调用的消息。此类消息包含以下信息。


****  

| 字段 | Type | 说明 | 
| --- | --- | --- | 
|  eventTime  |  字符串  |  启动事件的时间。由于 Amazon SNS 不保证消息传输顺序，因此时间戳很重要。示例：2016-04-26T13:15:30Z   | 
|  documentName  |  字符串  |  用于运行此命令的 Systems Manager 文档（SSM 文档）的名称。  | 
|  requestedDateTime  |  字符串  |  将请求发送到此特定节点的日期和时间。  | 
|  commandId  |  字符串  |  在发送命令后由 Run Command 生成的 ID。  | 
|  instanceId  |  字符串  |  由命令设为目标的实例。  | 
|  status  |  字符串  |  此调用的命令状态。  | 

要设置命令更改状态时的 Amazon SNS 通知，必须完成以下任务。

**注意**  
如果您没有为维护时段配置 Amazon SNS 通知，则可跳过本主题后面的“任务 5”。

**Topics**
+ [命令摘要 Amazon SNS 通知](#monitoring-sns-configure-summary)
+ [基于调用的 Amazon SNS 通知](#monitoring-sns-configure-invocation)
+ [任务 1：创建并订阅 Amazon SNS 主题](#monitoring-configure-sns)
+ [任务 2：为 Amazon SNS 通知创建 IAM policy](#monitoring-iam-policy)
+ [任务 3：为 Amazon SNS 通知创建 IAM 角色](#monitoring-iam-notifications)
+ [任务 4：配置用户访问权限](#monitoring-sns-passpolicy)
+ [任务 5：将 iam:PassRole 策略附加到您的维护时段角色](#monitoring-sns-passpolicy-mw)

### 任务 1：创建并订阅 Amazon SNS 主题
<a name="monitoring-configure-sns"></a>

Amazon SNS *主题*是一个通信渠道，注册到维护时段的 Run Command 和 Run Command 任务使用该渠道发送与命令的状态有关的通知。Amazon SNS 支持多种通信协议，包括 HTTP/S、电子邮件和其他 Amazon Web Services 服务，如 Amazon Simple Queue Service（Amazon SQS）。要入门，我们建议您先从电子邮件协议开始。有关如何创建主题的信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[创建 Amazon SNS 主题](https://docs.amazonaws.cn/sns/latest/dg/sns-create-topic.html)。

**注意**  
创建主题后，复制或记下 **Topic ARN (主题 ARN)**。在发送配置为返回状态通知的命令时将指定此 ARN。

创建主题后，通过指定**终端节点**来订阅该主题。如果您选择了电子邮件协议，则终端节点即为您希望接收通知的电子邮件地址。有关如何订阅主题的更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[订阅 Amazon SNS 主题](https://docs.amazonaws.cn/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

Amazon SNS 将从 *Amazon Notifications* 向您指定的电子邮件地址发送确认电子邮件。打开这封电子邮件，然后选择 **Confirm subscription (确认订阅)** 链接。

您将收到来自 Amazon 的确认消息。Amazon SNS 现已配置为接收通知并以电子邮件的形式将通知发送到指定的电子邮件地址。

### 任务 2：为 Amazon SNS 通知创建 IAM policy
<a name="monitoring-iam-policy"></a>

使用以下过程创建自定义 Amazon Identity and Access Management (IAM) policy，该策略提供了启动 Amazon SNS 通知的权限。

**为 Amazon SNS 通知创建自定义 IAM policy**

1. 访问：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)，打开 IAM 控制台。

1. 在导航窗格中选择 **Policies**，然后选择 **Create Policy**。（如果显示 **Get Started (入门)** 按钮，请选择此按钮，然后选择 **Create Policy (创建策略)**。）

1. 选择 **JSON** 选项卡。

1. 根据 Amazon SNS 主题是否使用 Amazon KMS 加密，将默认内容替换为以下内容之一：

------
#### [ SNS topic not encrypted ]

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:sns-topic-name"
           }
       ]
   }
   ```

------

   *region* 表示 Amazon Systems Manager 支持的 Amazon Web Services 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.amazonaws.cn/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   **account-id** 表示您的 Amazon Web Services 账户的 12 位标识符，格式为 `123456789012`。

   *sns-topic-name* 表示要用于发布通知的 Amazon SNS 主题的名称。

------
#### [ SNS topic encrypted ]

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:sns-topic-name"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/kms-key-id"
           }
       ]
   }
   ```

------

   *region* 表示 Amazon Systems Manager 支持的 Amazon Web Services 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.amazonaws.cn/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   **account-id** 表示您的 Amazon Web Services 账户的 12 位标识符，格式为 `123456789012`。

   *sns-topic-name* 表示要用于发布通知的 Amazon SNS 主题的名称。

   *kms-key-id* 表示 Amazon KMS 中用于加密和解密主题的对称加密 KMS 密钥的 ID，格式为 `1234abcd-12ab-34cd-56ef-12345EXAMPLE`。

**注意**  
使用 Amazon KMS 加密需要支付相应的费用。有关更多信息，请参阅《Amazon Key Management Service Developer Guide**》中的 [Managing Amazon SNS encryption keys and costs](https://docs.amazonaws.cn/sns/latest/dg/sns-key-management.html)。

------

1. 选择**下一步：标签**。

1. （可选）添加一个或多个标签键值对，以组织、跟踪或控制此策略的访问权限。

1. 选择**下一步：审核**。

1. 在 **Review policy (审核策略)** 页面上，对于 **Name (名称)**，输入内联策略的名称。例如：**my-sns-publish-permissions**。

1. （可选）对于 **Description (描述)**，输入策略的描述。

1. 选择 **Create policy (创建策略)**。

### 任务 3：为 Amazon SNS 通知创建 IAM 角色
<a name="monitoring-iam-notifications"></a>

使用以下过程为 Amazon SNS 通知创建 IAM 角色。Systems Manager 使用此服务角色启动 Amazon SNS 通知。在后续的所有过程中，此角色都称为 Amazon SNS IAM 角色。

**为 Amazon SNS 通知创建 IAM 服务角色**

1. 登录 Amazon Web Services 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 选择 **Amazon Web Services 服务** 角色类型，然后选择 Systems Manager。

1. 选择 Systems Manager 应用场景。然后选择**下一步**。

1. 在 **Attach permissions policies (附加权限策略)** 页面上，选中您在“任务 2”中创建的自定义策略名称左侧的方框。例如：**my-sns-publish-permissions**。

1. （可选）设置[权限边界](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_boundaries.html)。这是一项高级特征，可用于服务角色，但不可用于服务相关角色。

   展开 **Permissions boundary**（权限边界）部分，然后选择 **Use a permissions boundary to control the maximum role permissions**（使用权限边界控制最大角色权限）。IAM 包括您的账户中的 Amazon 托管策略和客户托管策略的列表。选择要用于权限边界的策略，或选择**创建策略**以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息，请参阅 *IAM 用户指南* 中的[创建 IAM policy](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。在您创建策略后，关闭该选项卡并返回到您的原始选项卡，以选择要用于权限边界的策略。

1. 选择 **Next**（下一步）。

1. 如果可能，输入有助于识别该角色的作用的角色名称或角色名称后缀。角色名称在您的 Amazon Web Services 账户 内必须是唯一的。名称不区分大小写。例如，您无法同时创建名为 **PRODROLE** 和 **prodrole** 的角色。由于多个单位可能引用该角色，角色创建完毕后无法编辑角色名称。

1. （可选）对于 **Description**（描述），输入新角色的描述。

1. 在 **Step 1: Select trusted entities**（步骤 1：选择可信实体）或 **Step 2: Select permissions**（步骤 2：选择权限）部分中的 **Edit**（编辑），以编辑角色的用户案例和权限。

1. （可选）通过以键值对的形式附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息，请参阅 *《IAM 用户指南》* 中的[标记 IAM 资源](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_tags.html)。

1. 检查角色，然后选择 **Create role**。

1. 选择此角色的名称，然后复制或记下 **Role ARN**（角色 ARN）的值。在发送配置为返回 Amazon SNS 通知的命令时，将使用此角色的 Amazon Resource Name（ARN）。

1. 使 **Summary (摘要)** 页面保持打开状态。

### 任务 4：配置用户访问权限
<a name="monitoring-sns-passpolicy"></a>

如果为 IAM 实体（用户、角色或组）分配了管理员权限，则该用户或角色将有权访问 Run Command 和 Maintenance Windows（都是 Amazon Systems Manager 中的工具）。

对于没有管理员权限的实体，管理员必须向 IAM 实体授予以下权限：
+ `AmazonSSMFullAccess` 托管策略，或提供类似权限的策略。
+ 已在 [任务 3：为 Amazon SNS 通知创建 IAM 角色](#monitoring-iam-notifications) 中为角色创建的 `iam:PassRole` 权限。例如：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/sns-role-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ssm.amazonaws.com"
                }
            }
        }
    ]
}
```

------

要提供访问权限，请为您的用户、组或角色添加权限：
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

**配置用户访问权限并将 `iam:PassRole` 策略附加到用户账户**

1. 在 IAM 导航窗格中，选择 **Users (用户)**，然后选择您要配置的用户账户。

1. 在 **Permissions (权限)** 选项卡上的策略列表中，验证并确保其中列出了 **AmazonSSMFullAccess** 策略，或者存在授予账户访问 Systems Manager 权限的类似策略。

1. 选择 **Add inline policy (添加内联策略)**。

1. 在 **Create policy (创建策略)** 页面上，选择 **Visual editor (可视化编辑器)** 选项卡。

1. 选择 **Choose a service (选择服务)**，然后选择 **IAM**。

1. 对于 **Actions**（操作），在 **Filter actions**（筛选操作）文本框中，输入 **PassRole**，然后选中 **PassRole** 旁的复选框。

1. 对于 **Resources**（资源），验证已选择 **Specific**（特定），然后选择 **Add ARN**（添加 ARN）。

1. 在 **Specify ARN for role**（为角色指定 ARN）字段中，粘贴在“任务 3”结束时复制的 Amazon SNS IAM 角色 ARN。系统会自动填充 **Account (账户)** 和 **Role name with path (具有路径的角色名称)** 字段。

1. 选择 **Add (添加)**。

1. 选择**查看策略**。

1. 在 **Review Policy**（检查策略）页面上输入一个名称，然后选择 **Create Policy**（创建策略）。

### 任务 5：将 iam:PassRole 策略附加到您的维护时段角色
<a name="monitoring-sns-passpolicy-mw"></a>

当您向某一维护时段注册 Run Command 任务时，将指定服务角色 Amazon Resource Name (ARN)。Systems Manager 将使用此服务角色来运行注册到该维护时段的任务。要为已注册的 Run Command 任务配置 Amazon SNS 通知，请将 `iam:PassRole` 策略附加到指定的维护时段服务角色。如果您不打算为 Amazon SNS 通知配置已注册的任务，则可以跳过此任务。

`iam:PassRole` 策略允许 Maintenance Windows 服务角色将在“任务 3”中创建的 Amazon SNS IAM 角色传递到 Amazon SNS 服务。以下过程显示了如何将 `iam:PassRole` 策略附加到 Maintenance Windows 服务角色。

**注意**  
使用您的维护时段的自定义服务角色发送与已注册的 Run Command 任务有关的通知。有关信息，请参阅[设置 Maintenance Windows](setting-up-maintenance-windows.md)。  
如果您需要为维护时段任务创建自定义服务角色，请参阅[设置 Maintenance Windows](setting-up-maintenance-windows.md)。

**将 `iam:PassRole` 策略附加到 Maintenance Windows 角色**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **Roles (角色)**，然后选择在“任务 3”中创建的 Amazon SNS IAM 角色。

1. 复制或记下 **Role ARN (角色 ARN)**，然后返回到 IAM 控制台的 **Roles (角色)** 部分。

1. 从 **Role name**（角色名称）列表中选择您创建的自定义 Maintenance Windows 服务角色。

1. 在 **Permissions**（权限）选项卡中，验证是否列出了 `AmazonSSMMaintenanceWindowRole` 策略，或者存在可向 Systems Manager API 授予维护时段权限的类似策略。如果没有，则依次选择**添加权限、附加策略**，以附加此策略。

1. 选择 **Add permissions, Create inline policy**（添加权限、创建内联策略）。

1. 选择 **Visual editor (可视化编辑器)** 选项卡。

1. 对于 **Service (服务)**，请选择 **IAM**。

1. 对于 **Actions**（操作），在 **Filter actions**（筛选操作）文本框中，输入 **PassRole**，然后选中 **PassRole** 旁的复选框。

1. 对于 **Resources (资源)**，请选择 **Specific (特定)**，然后选择 **Add ARN (添加 ARN)**。

1. 在 **Specify ARN for role (为角色指定 ARN)** 框中，粘贴在“任务 3”中创建的 Amazon SNS IAM 角色的 ARN，然后选择 **Add (添加)**。

1. 选择**查看策略**。

1. 在**审核策略**页面上，为 `PassRole` 策略指定名称，然后选择**创建策略**。