本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon SNS 通知监控 Systems Manager 状态更改
您可以配置 Amazon Simple Notification Service (Amazon SNS) 来发送有关使用 AWS Systems Manager Run Command 或 AWS 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 和 Run Command 提供的 维护时段 通知中包含的 JSON 数据的结构示例,请参阅AWS Systems Manager 的 Amazon SNS 通知示例。
为 AWS Systems Manager 配置 Amazon SNS 通知
Run Command 和 Run Command 任务注册到维护时段,可以为进入以下状态的命令任务发送 Amazon SNS 通知。有关导致命令进入以下状态之一的条件的信息,请参阅了解命令状态。
-
正在进行
-
成功
-
已失败
-
超时
-
Canceled
使用 Run Command 发送的命令还报告“正在取消”和“待处理”状态。Amazon SNS 通知不会捕获这些状态。
命令摘要 Amazon SNS 通知
如果您在维护时段中为 Run Command 通知配置 Run Command 或 Amazon SNS 任务,则 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 |
命令针对的实例。 如果 IDs 任务直接定位实例 Run Command,则实例 IDs 仅包含在摘要消息中。如果使用基于标签的定位发出 IDs 任务,则实例 Run Command 不包含在摘要消息中。 |
status |
字符串 |
命令的命令状态。 |
基于调用的 Amazon SNS 通知
如果您向多个实例发送一个命令,Amazon SNS 可以发送有关该命令的每个副本或调用的消息。此消息包含以下信息。
字段 | 类型 | 描述 |
---|---|---|
eventTime |
字符串 |
触发事件的时间。由于 Amazon SNS 不保证消息传输顺序,因此时间戳很重要。例如:2016-04-26T13:15:30Z |
documentName |
字符串 |
用于运行此命令的 Systems Manager 文档的名称。 |
requestedDateTime |
字符串 |
请求发送到此特定实例的日期和时间。 |
commandId |
字符串 |
Run Command 在发送命令后生成的 ID。 |
instanceId |
字符串 |
由命令定位的实例。 |
status |
字符串 |
此调用的命令状态。 |
要设置命令更改状态时的 Amazon SNS 通知,您必须完成以下任务。
如果您没有为维护时段配置 Amazon SNS 通知,则可以跳过下面的任务 5。
主题
任务 1:创建并订阅 Amazon SNS 主题
主题Amazon SNS是一个通信渠道,注册到维护时段的 和 任务使用它来发送有关命令状态的通知。Run Command 支持不同的通信协议,包括 HTTP/S、电子邮件和其他 AWS 服务(如 Run Command)。Amazon SNSAmazon SQS要快速入门,我们建议您先使用电子邮件协议。有关如何创建主题的信息,请参阅 https://docs.amazonaws.cn/sns/latest/dg/CreateTopic.html 中的创建主题Amazon Simple Notification Service 开发人员指南。
创建主题后,复制或记下 Topic ARN。在发送配置为返回状态通知的命令时将指定此 ARN。
创建主题后,可指定终端节点订阅该主题。如果您选择电子邮件协议,则终端节点是您要接收通知的电子邮件地址。有关如何订阅主题的更多信息,请参阅 中的Amazon SNS为终端节点订阅 主题。Amazon Simple Notification Service 开发人员指南
Amazon SNS 从 AWS 通知 向您指定的电子邮件地址发送确认电子邮件。打开这封电子邮件,然后选择 Confirm subscription (确认订阅) 链接。
您将从 AWS 收到确认消息。Amazon SNS 现已配置为接收通知并将通知以电子邮件形式发送到您指定的电子邮件地址。
任务 2:为 IAM 通知创建 Amazon SNS 策略
使用以下过程创建自定义 AWS Identity and Access Management (IAM) 策略,该策略提供触发 Amazon SNS 通知的权限。
为 Amazon SNS 通知创建自定义 IAM 策略
-
通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/
。 -
在导航窗格中,选择策略,然后选择创建策略。(如果 Get Started 按钮出现,选择此按钮,然后选择 Create Policy。)
-
选择 JSON 选项卡。
-
将默认内容替换为以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "
sns-topic-arn
" } ] }sns-topic-arn
表示现有 Amazon Simple Notification Service (Amazon SNS) 主题的 ARN,用于以 Amazon Simple Notification Service 格式发送arn:aws:sns::
通知,例如:account-id
:sns-topic-name
.arn:aws:sns::123456789012:my-sns-topic
。 -
选择查看策略。
-
在查看策略页面上,对于名称,输入内联策略的名称。例如:
my-sns-publish-permissions
。 -
(可选)对于描述,输入策略的描述。
-
选择创建策略。
任务 3:为 IAM 通知创建 Amazon SNS 角色
使用以下过程为 Amazon SNS 通知创建 IAM 角色。此服务角色供 Systems Manager 用来触发 Amazon SNS 通知。在所有后续过程中,此角色称为 Amazon SNS IAM 角色。
为 Amazon SNS 通知创建 IAM 服务角色
-
通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/
。 -
在导航窗格中,选择角色,然后选择创建角色。
-
在选择受信任实体的类型下,选择 AWS 服务。
-
在 Choose a use case (选择使用案例) 部分中,选择 Systems Manager,然后选择 Next: (下一步:)。权限。
-
在 Attach permissions policies (附加权限策略) 页面上,选中您在任务 2 中创建的自定义策略名称左侧的方框。例如:
my-sns-publish-permissions
。 -
选择 Next: (下一步:) 标签。
-
(可选)添加一个或多个标签键值对以组织、跟踪或控制此角色的访问,然后选择 Next: (下一步:)。 审核。
-
在 Review (检查) 页面上的 Role name (角色名称) 框中输入名称,例如
my-sns-role
。 -
(可选)更改默认角色描述,以反映此角色的用途。例如:
Triggers SNS topics on your behalf.
-
选择创建角色。系统将让您返回到角色页。
-
复制或记下 Role ARN。当您发送配置为返回 Amazon SNS 通知的命令时,将使用此角色的 Amazon 资源名称 (ARN)。
-
使摘要页面保持打开状态。
任务 4:配置用户访问权限
如果已为您的 AWS Identity and Access Management (IAM) 用户账户、组或角色分配管理员权限,则您可以访问 Systems Manager
Run Command 和 维护时段。如果您没有管理员权限,则管理员必须通过向您的 IAM 账户、组或角色分配 AmazonSSMFullAccess
托管策略或提供类似权限的策略来向您授予权限。
使用以下过程配置用户账户以使用 Run Command 和 维护时段。如果您需要创建新的用户账户,请参阅 中的AWS在您的 账户中创建 IAM 用户。IAM 用户指南
配置用户访问权限并将 iam:PassRole 策略附加到用户账户
-
在 IAM 导航窗格中,选择用户,然后选择您要配置的用户账户。
-
在权限选项卡上的策略列表中,验证其中是否列出了
AmazonSSMFullAccess
策略或者授予账户访问 Systems Manager 权限的类似策略。 -
选择 Add inline policy (添加内联策略)。
-
在创建策略页面上,选择可视化编辑器选项卡。
-
选择服务,然后选择 IAM。
-
选择选择操作。
-
在 Filter actions (筛选操作) 文本框中,键入
PassRole
,然后选择 PassRole 选项。 -
选择 Resources (资源)。确保已选择 Specific,然后选择添加 ARN。
-
在 Specify ARN for role (指定角色 ARN) 字段中,粘贴您在任务 3 结束时复制的 Amazon SNS IAM 角色 ARN。系统会自动填充 Account (账户) 和 Role name with path (具有路径的角色名称) 字段。
-
选择 Add。
-
选择查看策略。
-
在查看策略页面上键入一个名称,然后选择创建策略。
任务 5:将 iam:PassRole 策略附加到您的维护时段角色
向维护时段注册 Run Command 任务时,您可以指定服务角色 Amazon 资源名称 (ARN)。此服务角色由 Systems Manager 用来运行注册到维护时段的任务。要为注册的
Run Command 任务配置 Amazon SNS 通知,您必须将 iam:PassRole
策略附加到指定的维护时段服务角色。如果您不打算为注册的任务配置 Amazon SNS 通知,则可以跳过此任务。
策略允许 iam:PassRole
服务角色将任务 3 中创建的 维护时段 Amazon SNS IAM 角色传递给 Amazon SNS 服务。以下过程演示了如何将 iam:PassRole
策略附加到 维护时段 服务角色。
您必须为维护时段使用自定义服务角色,以发送与注册的 Run Command 任务相关的通知。有关信息,请参阅 我应该使用服务相关角色还是自定义服务角色来运行维护时段任务?。
如果需要创建自定义服务角色,请参阅以下主题之一:
将 iam:PassRole 策略附加到您的 维护时段 角色
-
使用 https://console.amazonaws.cn/iam/
打开 IAM 控制台。 -
在导航窗格中,选择 Roles,然后选择在任务 3 中创建的 Amazon SNS IAM 角色。
-
复制或记下 Role ARN (角色 ARN) 并返回到 控制台的 Roles (角色)IAM 部分。
-
选择您创建的自定义 维护时段 服务角色(在 Role (角色) 名称下)。
-
在权限下,验证
AmazonSSMMaintenanceWindowRole
策略是否已列出,或者是否存在可向维护时段授予 Systems Manager API 权限的相当策略。 -
选择 Add inline policy (添加内联策略)。
-
选择 Visual Editor (可视化编辑器) 选项卡。
-
对于 Service (服务),请选择 IAM。
-
对于 Actions (操作),选择 PassRole。
-
对于 Resources (资源),请选择 Specific (特定),然后选择 Add ARN (添加 ARN)。
-
在 Specify ARN for role (为角色指定 ARN) 框中,粘贴在任务 3 中创建的 Amazon SNS IAM 角色的 ARN,然后选择 Add (添加)。
-
选择查看策略。
-
在 Review Policy (查看策略) 页面上,指定 PassRole 策略的名称,然后选择 Create policy (创建策略)。