使用 Amazon SNS 通知监控 Systems Manager 状态更改
您可以配置 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。有关由 Run Command 和 Maintenance Windows 提供的 Amazon SNS 通知中包括的 JSON 数据的结构示例,请参阅适用于 Amazon Systems Manager 的 Amazon SNS 通知示例。
为 Amazon Systems Manager 配置 Amazon SNS 通知
注册到维护时段的 Run Command 和 Maintenance Windows 任务可为进入以下状态的命令任务发送 Amazon SNS 通知:
-
正在进行
-
成功
-
已失败
-
已超时
-
已取消
有关导致命令进入以下状态之一的条件的信息,请参阅 了解命令状态。
使用 Run Command 发送的命令还会报告 Canceling (正在取消) 和 Pending (待处理) 状态。Amazon SNS 通知不会捕获这些状态。
命令摘要 Amazon SNS 通知
如果您在维护时段中为 Amazon SNS 通知配置 Run Command 或 Run Command 任务,Amazon SNS 将发送摘要消息,其中包含以下信息。
字段 | 类型 | 描述 |
---|---|---|
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 通知
如果您将一条命令发送给多个节点,则 Amazon SNS 可以发送有关该命令的每个副本或调用的消息。此类消息包含以下信息。
字段 | 类型 | 描述 |
---|---|---|
eventTime |
字符串 |
启动事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。示例:2016-04-26T13:15:30Z |
documentName |
字符串 |
用于运行此命令的 Systems Manager 文档(SSM 文档)的名称。 |
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 开发人员指南中的创建 Amazon SNS 主题。
创建主题后,复制或记下 Topic ARN (主题 ARN)。在发送配置为返回状态通知的命令时将指定此 ARN。
创建主题后,通过指定终端节点来订阅该主题。如果您选择了电子邮件协议,则终端节点即为您希望接收通知的电子邮件地址。有关如何订阅主题的更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的订阅 Amazon SNS 主题。
Amazon SNS 将从 Amazon Notifications 向您指定的电子邮件地址发送确认电子邮件。打开这封电子邮件,然后选择 Confirm subscription (确认订阅) 链接。
您将收到来自 Amazon 的确认消息。Amazon SNS 现已配置为接收通知并以电子邮件的形式将通知发送到指定的电子邮件地址。
任务 2:为 Amazon SNS 通知创建 IAM 策略
使用以下过程创建自定义 Amazon Identity and Access Management (IAM) 策略,该策略提供了启动 Amazon SNS 通知的权限。
为 Amazon SNS 通知创建自定义 IAM 策略
访问:https://console.aws.amazon.com/iam/
,打开 IAM 控制台。 -
在导航窗格中选择 Policies,然后选择 Create Policy。(如果显示 Get Started (入门) 按钮,请选择此按钮,然后选择 Create Policy (创建策略)。)
-
选择 JSON 选项卡。
-
将默认内容替换为以下内容。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "
arn:aws:sns:
" } ] }region
:account-id
:sns-topic-name
region
表示 Amazon Systems Manager 支持的 Amazon Web Services 区域 的标识符,例如us-east-2
对应美国东部(俄亥俄)区域。有关受支持的region
值的列表,请参阅 Amazon Web Services 一般参考中的 Systems Manager 服务终端节点中的 Region(区域)列。
表示 Amazon 账户的 12 位标识符,格式为account-id
123456789012
。sns-topic-name
表示要用于发布通知的 Amazon SNS 主题的名称。 -
请选择下一步:标签。
-
(可选)添加一个或多个标签键值对,以组织、跟踪或控制此策略的访问权限。
-
请选择 Next: Review(下一步:审核)。
-
在 Review policy (审核策略) 页面上,对于 Name (名称),输入内联策略的名称。例如:
my-sns-publish-permissions
。 -
(可选)对于 Description (描述),输入策略的描述。
-
选择 Create policy (创建策略)。
任务 3:为 Amazon SNS 通知创建 IAM 角色
使用以下过程为 Amazon SNS 通知创建 IAM 角色。Systems Manager 使用此服务角色启动 Amazon SNS 通知。在后续的所有过程中,此角色都称为 Amazon SNS IAM 角色。
为 Amazon SNS 通知创建 IAM 服务角色
访问 https://console.aws.amazon.com/iam/
,打开 IAM 控制台。 -
在导航窗格中,选择 Roles (角色),然后选择 Create role (创建角色)。
-
在 Select type of trusted entity (选择受信任实体的类型) 下,选择 Amazon service (Amazon Web Services 服务)。
-
在 Choose a use case (选择使用案例) 部分中,选择 Systems Manager。
-
在 Select your use case (选择您的使用案例) 部分中,选择 Systems Manager,然后选择 Next: Permissions (下一步:权限)。
-
在 Attach permissions policies (附加权限策略) 页面上,选中您在“任务 2”中创建的自定义策略名称左侧的方框。例如:
my-sns-publish-permissions
。 -
选择 下一步:标签。
-
(可选)添加一个或多个标签键值对,以组织、跟踪或控制此角色的访问权限。
-
请选择 Next: Review(下一步:审核)。
-
在 Review(检查)页面中,对于 Role name(角色名称),输入一个用来标识该角色的名称,例如
my-sns-role
。 -
(可选)更改默认角色描述,以反映此角色的用途。例如:
Runs SNS topics on your behalf.
-
选择 Create role (创建角色)。系统将让您返回到 Roles (角色) 页面。
-
选择此角色的名称,然后复制或记下 Role ARN(角色 ARN)的值。在发送配置为返回 Amazon SNS 通知的命令时,将使用此角色的 Amazon Resource Name(ARN)。
-
使 Summary (摘要) 页面保持打开状态。
任务 4:配置用户访问权限
如果已为您的 IAM 用户账户、组或角色分配了管理员权限,则您可以访问 Amazon Systems Manager 的功能 Run Command 和 Maintenance Windows。如果您没有管理员权限,则管理员必须通过向您的 IAM 账户、组或角色分配 AmazonSSMFullAccess
托管策略或提供类似权限的策略,来向您授予权限。
使用以下过程配置用户账户,以使用 Run Command 和 Maintenance Windows。如果您需要创建新的用户账户,请参阅 IAM 用户指南中的在您的 Amazon Web Services 账户中创建 IAM 用户。
配置用户访问权限并将 iam:PassRole
策略附加到用户账户
-
在 IAM 导航窗格中,选择 Users (用户),然后选择您要配置的用户账户。
-
在 Permissions (权限) 选项卡上的策略列表中,验证并确保其中列出了
AmazonSSMFullAccess
策略,或者存在授予账户访问 Systems Manager 权限的类似策略。 -
选择 Add inline policy (添加内联策略)。
-
在 Create policy (创建策略) 页面上,选择 Visual editor (可视化编辑器) 选项卡。
-
选择 Choose a service (选择服务),然后选择 IAM。
-
对于 Actions(操作),在 Filter actions(筛选操作)文本框中,输入
PassRole
,然后选中 PassRole 旁的复选框。 -
对于 Resources(资源),验证已选择 Specific(特定),然后选择 Add ARN(添加 ARN)。
-
在 Specify ARN for role(为角色指定 ARN)字段中,粘贴在“任务 3”结束时复制的 Amazon SNS IAM 角色 ARN。系统会自动填充 Account (账户) 和 Role name with path (具有路径的角色名称) 字段。
-
选择 Add (添加)。
-
选择 Review policy (审核策略)。
-
在 Review Policy(检查策略)页面上输入一个名称,然后选择 Create Policy(创建策略)。
任务 5:将 iam:PassRole 策略附加到您的维护时段角色
当您向某一维护时段注册 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 任务有关的通知。有关信息,请参阅 我应该使用服务相关角色还是自定义服务角色来运行维护时段任务?。
如果需要创建自定义服务角色,请参阅以下主题之一:
将 iam:PassRole
策略附加到 Maintenance Windows 角色
-
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择 Roles (角色),然后选择在“任务 3”中创建的 Amazon SNS IAM 角色。
-
复制或记下 Role ARN (角色 ARN),然后返回到 IAM 控制台的 Roles (角色) 部分。
-
从 Role name(角色名称)列表中选择您创建的自定义 Maintenance Windows 服务角色。
-
在 Permissions(权限)选项卡中,验证是否列出了
AmazonSSMMaintenanceWindowRole
策略,或者存在可向 Systems Manager API 授予维护时段权限的类似策略。如果没有,则选择 Attach policies(附加策略)以附加此策略。 -
选择 Add inline policy(添加内联策略)。
-
选择 Visual editor (可视化编辑器) 选项卡。
-
对于 Service (服务),请选择 IAM。
-
对于 Actions(操作),在 Filter actions(筛选操作)文本框中,输入
PassRole
,然后选中 PassRole 旁的复选框。 -
对于 Resources (资源),请选择 Specific (特定),然后选择 Add ARN (添加 ARN)。
-
在 Specify ARN for role (为角色指定 ARN) 框中,粘贴在“任务 3”中创建的 Amazon SNS IAM 角色的 ARN,然后选择 Add (添加)。
-
选择 Review policy (审核策略)。
-
在 Review Policy (审核策略) 页面上,为
PassRole
策略指定名称,然后选择 Create policy (创建策略)。