使用 Amazon SNS 通知监控 Systems Manager 状态更改
注意
不支持 Amazon Simple Notification Service FIFO 主题。
您可以配置 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 |
String |
用于运行此命令的 SSM 文档的名称。 |
commandId |
String |
在发送命令后由 Run Command 生成的 ID。 |
expiresAfter |
Date |
如果达到此时间但命令尚未开始执行,则它将不会运行。 |
outputS3BucketName |
String |
应该存储对命令执行的响应的 Amazon Simple Storage Service (Amazon S3) 存储桶。 |
outputS3KeyPrefix |
String |
应该存储对命令执行的响应的存储桶中的 Amazon S3 目录路径。 |
requestedDateTime |
String |
将请求发送到此特定节点的日期和时间。 |
instanceIds |
StringList |
通过命令设为目标的节点。 注意如果 Run Command 任务直接将实例 ID 设为目标,则实例 ID 仅包含在摘要消息中。如果使用基于标签的目标设定发出 Run Command 任务,则实例 ID 不会包含在摘要消息中。 |
状态 |
String |
命令的命令状态。 |
基于调用的 Amazon SNS 通知
如果您将一条命令发送给多个节点,则 Amazon SNS 可以发送有关该命令的每个副本或调用的消息。此类消息包含以下信息。
字段 | 类型 | 描述 |
---|---|---|
eventTime |
字符串 |
启动事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。示例:2016-04-26T13:15:30Z |
documentName |
String |
用于运行此命令的 Systems Manager 文档(SSM 文档)的名称。 |
requestedDateTime |
String |
将请求发送到此特定节点的日期和时间。 |
commandId |
String |
在发送命令后由 Run Command 生成的 ID。 |
instanceId |
String |
由命令设为目标的实例。 |
状态 |
String |
此调用的命令状态。 |
要设置命令更改状态时的 Amazon SNS 通知,必须完成以下任务。
注意
如果您没有为维护时段配置 Amazon SNS 通知,则可跳过本主题后面的“任务 5”。
主题
任务 1:创建并订阅 Amazon SNS 主题
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 主题。
注意
创建主题后,复制或记下 Topic ARN (主题 ARN)。在发送配置为返回状态通知的命令时将指定此 ARN。
创建主题后,通过指定终端节点来订阅该主题。如果您选择了电子邮件协议,则终端节点即为您希望接收通知的电子邮件地址。有关如何订阅主题的更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的订阅 Amazon SNS 主题。
Amazon SNS 将从 Amazon Notifications 向您指定的电子邮件地址发送确认电子邮件。打开这封电子邮件,然后选择 Confirm subscription (确认订阅) 链接。
您将收到来自 Amazon 的确认消息。Amazon SNS 现已配置为接收通知并以电子邮件的形式将通知发送到指定的电子邮件地址。
任务 2:为 Amazon SNS 通知创建 IAM policy
使用以下过程创建自定义 Amazon Identity and Access Management (IAM) policy,该策略提供了启动 Amazon SNS 通知的权限。
为 Amazon SNS 通知创建自定义 IAM policy
访问: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 service endpoints 的 Region 列。
表示您的 Amazon Web Services 账户的 12 位标识符,格式为account-id
123456789012
。sns-topic-name
表示要用于发布通知的 Amazon SNS 主题的名称。 -
选择下一步:标签。
-
(可选)添加一个或多个标签键值对,以组织、跟踪或控制此策略的访问权限。
-
选择 下一步: 审核。
-
在 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 服务角色
登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色。
-
选择 Amazon Web Services 服务 角色类型,然后选择 Systems Manager。
-
选择 Systems Manager 应用场景。然后选择下一步。
-
在 Attach permissions policies (附加权限策略) 页面上,选中您在“任务 2”中创建的自定义策略名称左侧的方框。例如:
my-sns-publish-permissions
。 -
(可选)设置权限边界。这是一项高级特征,可用于服务角色,但不可用于服务相关角色。
展开 Permissions boundary(权限边界)部分,然后选择 Use a permissions boundary to control the maximum role permissions(使用权限边界控制最大角色权限)。IAM 包括您的账户中的 Amazon 托管策略和客户托管策略的列表。选择要用于权限边界的策略,或选择创建策略以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息,请参阅 IAM 用户指南 中的创建 IAM policy。在您创建策略后,关闭该选项卡并返回到您的原始选项卡,以选择要用于权限边界的策略。
-
选择 Next(下一步)。
-
如果可能,输入有助于识别该角色的作用的角色名称或角色名称后缀。角色名称在您的 Amazon Web Services 账户 内必须是唯一的。名称不区分大小写。例如,您无法同时创建名为
PRODROLE
和prodrole
的角色。由于多个单位可能引用该角色,角色创建完毕后无法编辑角色名称。 -
(可选)对于 Description(描述),输入新角色的描述。
-
在 Step 1: Select trusted entities(步骤 1:选择可信实体)或 Step 2: Select permissions(步骤 2:选择权限)部分中的 Edit(编辑),以编辑角色的用户案例和权限。
-
(可选)通过以键值对的形式附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 《IAM 用户指南》 中的标记 IAM 资源。
-
检查角色,然后选择 Create role。
-
选择此角色的名称,然后复制或记下 Role ARN(角色 ARN)的值。在发送配置为返回 Amazon SNS 通知的命令时,将使用此角色的 Amazon Resource Name(ARN)。
-
使 Summary (摘要) 页面保持打开状态。
任务 4:配置用户访问权限
如果为 IAM 实体(用户、角色或组)分配了管理员权限,则该用户或角色将有权访问 Run Command 和 Maintenance Windows(它们是 Amazon Systems Manager 的功能)。
对于没有管理员权限的实体,管理员必须向 IAM 实体授予以下权限:
-
AmazonSSMFullAccess
托管策略,或提供类似权限的策略。 -
已在 任务 3:为 Amazon SNS 通知创建 IAM 角色 中为角色创建的
iam:PassRole
权限。例如:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::
account-id
:role/sns-role-name
" } ] }
要提供访问权限,请为您的用户、组或角色添加权限:
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中针对第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《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(检查策略)页面上输入一个名称,然后选择 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 任务有关的通知。有关信息,请参阅设置 Maintenance Windows。
如果您需要为维护时段任务创建自定义服务角色,请参阅设置 Maintenance Windows。
将 iam:PassRole
策略附加到 Maintenance Windows 角色
-
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
在导航窗格中,选择 Roles (角色),然后选择在“任务 3”中创建的 Amazon SNS IAM 角色。
-
复制或记下 Role ARN (角色 ARN),然后返回到 IAM 控制台的 Roles (角色) 部分。
-
从 Role name(角色名称)列表中选择您创建的自定义 Maintenance Windows 服务角色。
-
在 Permissions(权限)选项卡中,验证是否列出了
AmazonSSMMaintenanceWindowRole
策略,或者存在可向 Systems Manager API 授予维护时段权限的类似策略。如果没有,则依次选择添加权限、附加策略,以附加此策略。 -
选择 Add permissions, Create 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 (添加)。
-
选择查看策略。
-
在审核策略页面上,为
PassRole
策略指定名称,然后选择创建策略。