使用 Amazon SNS 通知监控 Systems Manager 状态更改 - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 Amazon SNS 通知监控 Systems Manager 状态更改

您可以配置 Amazon Simple Notification Service (Amazon SNS) 来发送有关使用 Run Command 或维护时段发送的命令状态的通知。Amazon Web Services Systems Manager。Amazon SNS 协调并管理向订阅 Amazon SNS 主题的客户端或终端节点发送和传输通知。您可以在命令更改为新状态或特定状态(例如失败超时)时接收通知。如果您将一条命令发送给多个实例,则可接收发送给特定实例的命令的每个副本的通知。每个副本称为一个调用

Amazon SNS 可以以以 HTTP 或 HTTPS POST 以及电子邮件(SMTP,纯文本或 JSON 格式)的形式传输通知,或将通知作为消息发布到 Amazon Simple Queue Service (Amazon SQS) 队列。有关更多信息,请参阅 。什么是 Amazon SNS中的Amazon Simple Notification Service 开发人员指南。有关运行命令和维护窗口提供的 Amazon SNS 通知中包含的 JSON 数据结构的示例,请参阅针对的 Amazon SNS 通知示例Amazon Web Services Systems Manager

为配置 Amazon SNS 通知Amazon Web Services Systems Manager

注册到维护时段的 Run Command 和维护时段任务可以为进入以下状态的命令任务发送 Amazon SNS 通知:

  • 正在进行

  • 成功

  • 已失败

  • 超时

  • Canceled

有关导致命令进入以下状态之一的条件的信息,请参阅了解命令状态

注意

使用 Run Commance (Run Commance) 发送的命令还报告 “正在取消” Amazon SNS 通知不会捕获这些状态。

命令摘要 Amazon SNS 通知

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

字段 类型 描述

eventTime

字符串

启动事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。示例:2016-04-26T 13:15:30 Z

documentName

字符串

用于运行此命令的 SSM 文档的名称。

commandId

字符串

在发送命令后由 Run Command 生成的 ID。

expiresAfter

日期

如果达到此时间但命令尚未开始执行,则它将不会运行。

outputS3BucketName

字符串

Amazon Simple Storage Service (Amazon S3) 存储桶,将命令执行响应存储到位。

outputS3KeyPrefix

字符串

将命令执行响应存储到存储桶中的 Amazon S3 目录路径。

requestedDateTime

字符串

请求发送到此特定实例的日期和时间。

instanceIds

StringList

命令的目标实例。

注意

如果运行命令任务直接定位实例 ID,则实例 ID 仅包含在摘要消息中。如果运行命令任务使用基于标签的定位发出,则实例 ID 不会包含在摘要消息中。

status

字符串

命令的命令状态。

基于调用的 Amazon SNS 通知

如果您向多个实例发送一条命令,Amazon SNS 会发送有关命令每个副本或调用的消息。此消息包含以下信息。

字段 类型 描述

eventTime

字符串

触发事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。示例:2016-04-26T 13:15:30 Z

documentName

字符串

用于运行此命令的 Systems Manager 文档的名称。

requestedDateTime

字符串

请求发送到此特定实例的日期和时间。

commandId

字符串

在发送命令后由 Run Command 生成的 ID。

instanceId

字符串

由命令定位的实例。

status

字符串

此调用的命令状态。

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

注意

如果您没有为维护时段配置 Amazon SNS 通知,则可以跳过下面的任务 5。

任务 1:创建并订阅 Amazon SNS 主题

Amazon SNS主题是注册到维护时段的 Run Command 和 Run Command 任务的通信渠道,使用它发送有关命令状态的通知。Amazon SNS 支持不同的通信协议,包括 HTTP/S、电子邮件和其他Amazon服务,例如 Amazon Simple Queue Service (Amazon SQS)。首先,我们建议您先使用电子邮件协议。有关如何创建主题的信息,请参阅创建主题中的Amazon Simple Notification Service 开发人员指南

注意

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

创建主题后,可指定终端节点订阅该主题。如果您选择电子邮件协议,终端节点即为您希望接收通知的电子邮件地址。有关如何订阅主题的更多信息,请参阅为终端节点订阅 Amazon SNS 主题中的Amazon Simple Notification Service 开发人员指南

Amazon SNS 从发送确认电子邮件Amazon通知添加到您指定的电子邮件地址。打开这封电子邮件,然后选择 Confirm subscription (确认订阅) 链接。

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

任务 2:为 Amazon SNS 通知创建 IAM 策略

使用以下过程可创建一个自定义 AWS Identity and Access Management (IAM) 策略,该策略提供触发 Amazon SNS 通知的权限。

为 Amazon SNS Notification 创建自定义 IAM 策略

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择策略,然后选择创建策略。(如果 Get Started 按钮出现,选择此按钮,然后选择 Create Policy。)

  3. 选择 JSON 选项卡。

  4. 将默认内容替换为以下内容。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "sns-topic-arn" } ] }

    SNS 主题 ARN代表用于发送 Amazon SNS 通知的现有 Amazon Simple Notification Service (Amazon SNS) 主题的 ARN,格式为arn:aws:sns::account-id:sns-topic-name.例如:arn:aws:sns::123456789012:my-sns-topic

  5. 选择查看策略

  6. 查看策略页面上,对于名称,输入内联策略的名称。例如:my-sns-publish-permissions

  7. (可选)对于描述,输入策略的描述。

  8. 选择创建策略

任务 3:为 Amazon SNS 通知创建 IAM 角色

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

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

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色,然后选择创建角色

  3. Select type of trusted entity (选择受信任实体的类型) 下,选择 Amazon service ( 服务)

  4. 选择使用案例部分,选择Systems Manager,然后选择后续:Permissions (下一步:权限)

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

  6. 选择 Next:。标签

  7. (可选)添加一个或多个标签键值对以组织、跟踪或控制此角色的访问,然后选择后续:审核

  8. 在存储库的审核页面上,输入名称Role name (角色名称)框中,例如my-sns-role

  9. (可选)更改默认角色描述,以反映此角色的用途。例如:Triggers SNS topics on your behalf.

  10. 选择创建角色。系统将让您返回到角色页。

  11. 复制或记下 Role ARN。在发送配置为返回 Amazon SNS 通知的命令时将使用此角色 Amazon 资源名称 (ARN)。

  12. 保留摘要页面打开。

任务 4:配置用户访问权限

如果已为您的 IAM 用户账户、组或角色分配管理员权限,则您可以访问 Run Command 和维护时段,以及Amazon Web Services Systems Manager。如果您没有管理员权限,则管理员必须通过将AmazonSSMFullAccess托管策略或向您的 IAM 账户、组或角色提供类似权限的策略。

使用以下过程将用户帐户配置为使用运行命令和维护时段。如果您需要创建新用户帐户,请参阅在您的Amazon Web Services 账户中的IAM 用户指南

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

  1. 在 IAM 导航窗格中,选择用户,然后选择要配置的用户帐户。

  2. 在存储库的Permissions (权限)选项卡的策略列表中,验证AmazonSSMFullAccess策略或者授予账户访问 Systems Manager 权限的类似策略。

  3. 选择添加内联策略

  4. 创建策略页面上,选择可视化编辑器选项卡。

  5. 选择服务,然后选择IAM

  6. 选择选择操作

  7. 筛选器操作文本框中,输入PassRole,然后选择PassRole选项。

  8. 选择资源。确保已选择 Specific,然后选择添加 ARN

  9. 为角色指定 ARN字段中,粘贴您在任务 3 结束时复制的 Amazon SNS IAM 角色 ARN。系统会自动填充 Account (账户)Role name with path (具有路径的角色名称) 字段。

  10. 选择添加

  11. 选择查看策略

  12. 在存储库的查看策略页面上,输入名称,然后选择创建策略

任务 5:将 IAM: PassRole 策略附加到您的维护时段角色

在使用维护时段注册运行命令任务时,您将指定服务角色 Amazon 资源名称 (ARN)。Systems Manager 使用此服务角色来运行注册到维护时段的任务。要为注册的 “运行命令” 任务配置 Amazon SNS 通知,请附加iam:PassRole策略设置为指定的维护时段服务角色。如果您不打算为 Amazon SNS 通知配置注册的任务,则可以跳过此任务。

这些区域有:iam:PassRole策略允许维护时段服务角色将在任务 3 中创建的 Amazon SNS IAM 角色传递到 Amazon SNS 服务。以下过程演示如何将iam:PassRole策略添加到 “维护窗口” 服务角色。

注意

您必须为维护时段使用自定义服务角色发送与注册的 Run Command 任务相关的通知。有关信息,请参阅 我应该使用服务相关角色还是自定义服务角色来运行维护时段任务?

如果需要创建自定义服务角色,请参阅以下主题之一:

将 IAM: PassRole 策略附加到您的维护时段角色

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色并选择在任务 3 中创建的 Amazon SNS IAM 角色。

  3. 复制或记下角色 ARN,然后返回到角色部分。

  4. 选择您创建的自定义维护时段服务角色(在角色名称)。

  5. Permissions (权限),请验证AmazonSSMMaintenanceWindowRole策略或者存在可向维护时段授予 Systems Manager API 权限的类似策略。

  6. 选择添加内联策略

  7. 选择 Visual Editor (可视化编辑器) 选项卡。

  8. 适用于服务中,选择IAM

  9. 对于 Actions (操作),请选择 PassRole

  10. 对于 Resources (资源),请选择 Specific (特定),然后选择 Add ARN (添加 ARN)

  11. 为角色指定 ARN框中,粘贴在任务 3 中创建的 Amazon SNS IAM 角色的 ARN,然后选择Add

  12. 选择查看策略

  13. 在存储库的查看策略页上,指定 PassRole 策略的名称,然后选择创建策略