AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 AWS Systems Manager 配置 Amazon SNS 通知

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

Amazon SNS 可以将通知作为 HTTP 或 HTTPS POST、电子邮件(SMTP,采用纯文本或 JSON 格式)或发布到 Amazon Simple Queue Service (Amazon SQS) 队列的消息进行传输。有关更多信息,请参阅 Amazon Simple Notification Service Developer Guide 中的什么是 Amazon SNS。有关 Amazon SNS 通知(Run Command 和 Maintenance Window 提供)中包含的 JSON 数据的结构的示例,请参阅 AWS Systems Manager 的 Amazon SNS 通知示例

为 AWS Systems Manager 配置 Amazon SNS 通知

注册到维护时段的 Run Command 和 Run Command 任务可以为进入以下状态的命令任务发送 Amazon SNS 通知。有关导致命令进入以下状态之一的条件的信息,请参阅了解命令状态

  • 正在进行

  • 成功

  • 失败

  • 超时

  • 已取消

注意

使用 Run Command 发送的命令还报告“正在取消”和“待处理”状态。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 文档的名称。

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、电子邮件和其他 AWS 服务(如 Amazon SQS)。要快速入门,我们建议您先使用电子邮件协议。有关如何创建主题的信息,请参阅 Amazon Simple Notification Service Developer Guide 中的创建主题

注意

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

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

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

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

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

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

为 Amazon SNS 通知创建自定义 IAM 策略

  1. Open the IAM console at https://console.amazonaws.cn/iam/.

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

  3. 选择 JSON 选项卡。

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "*" } ] }
  5. 选择查看策略

  6. 查看策略页面上,对于名称,输入内联策略的名称。例如:SNSPublishPermissions

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

  8. 选择 Create policy

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

使用以下过程为 Amazon SNS 通知创建 IAM 角色。此服务角色供 Systems Manager 用来触发 Amazon SNS 通知。

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

  1. Open the IAM console at https://console.amazonaws.cn/iam/.

  2. 在导航窗格中,选择 Roles,然后选择 Create Role

  3. Select type of trusted entity 页面上的 AWS Service 下,选择 EC2

  4. 选择您的使用案例部分,选择 EC2,然后选择下一步:权限

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

  6. Review 页面上,在 Role name 框中键入名称,然后键入描述。

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

  8. 角色页面中,选择刚刚创建的角色以打开摘要页面。

  9. 选择 Trust Relationships 选项卡,然后选择 Edit Trust Relationship

  10. , "ssm.amazonaws.com" 添加到现有策略,如以下代码段所示:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com", "ssm.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    注意

    您必须在现有条目后添加逗号。在上一示例中,此条目为 "ec2.amazonaws.com"。否则,JSON 将无效。

  11. 选择 Update Trust Policy

  12. 复制或记下 Role ARN。在发送配置为返回 Amazon SNS 通知的命令时将使用此角色 ARN。

  13. 使摘要页面保持打开状态。

任务 4:将 iam:PassRole 策略附加到您的 Amazon SNS 角色

使用以下过程将 iam:PassRole 策略附加到您在任务 3 中创建的 Amazon SNS 服务角色。

将 iam:PassRole 策略附加到您的 Amazon SNS 角色

  1. 在您在任务 3 中创建的角色的 Summary (摘要) 页面中,选择 Permissions (权限) 选项卡。

  2. 选择添加内联策略

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

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

  5. 选择选择操作

  6. Filter actions (筛选操作) 文本框中,键入 PassRole,然后选择 PassRole 选项。

  7. 选择 Resources (资源)。确保已选择 Specific,然后选择添加 ARN

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

  9. 选择 Add

  10. 选择查看策略

  11. 查看策略页面上键入一个名称,然后选择创建策略

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

当您向维护时段注册 Run Command 任务时,将指定服务角色 Amazon 资源名称 (ARN)。此服务角色由 Systems Manager 用来运行注册到维护时段的任务。要为注册的 Run Command 任务配置 Amazon SNS 通知,您必须将 iam:PassRole 策略附加到指定的维护时段服务角色。如果您不打算为注册的任务配置 Amazon SNS 通知,则可以跳过此任务。

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

注意

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

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

将 iam:PassRole 策略附加到您的 Maintenance Window 角色

  1. 使用 https://console.amazonaws.cn/iam/ 打开 IAM 控制台。

  2. 在导航窗格中,选择 Roles (角色),然后选择任务 3 中创建的 Amazon SNS 角色。

  3. 复制或记下角色 ARN 并返回到 IAM 控制台中的 Roles (角色) 部分。

  4. 选择您创建的自定义 Maintenance Window 服务角色(在 Role (角色) 名称下)。

  5. 权限下,验证 AmazonSSMMaintenanceWindowRole 策略是否已列出,或者是否存在可向维护时段授予 Systems Manager API 权限的相当策略。

  6. 选择 Add inline policy (添加内联策略)

  7. Set Permissions 页面上,选择 Policy Generator,然后选择 Select

  8. 验证 Effect 是否已设置为 Allow

  9. AWS Services 中选择 AWS Identity and Access Management

  10. Actions (操作) 中,选择 PassRole

  11. Amazon Resource Name (ARN) (Amazon 资源名称 (ARN)) 字段中,粘贴在任务 3 中创建的 Amazon SNS IAM 角色的 ARN。

  12. 选择 Add statement (添加声明),然后选择 Next (下一步)

  13. Review Policy 页面上,选择 Apply Policy