设置 Run Command - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

设置 Run Command

必须先为将运行命令的用户配置 Amazon Identity and Access Management (IAM) 用户策略,然后才能使用 Run Command(Amazon Systems Manager 的一项功能)管理节点。有关更多信息,请参阅为 Systems Manager 创建非管理员 IAM 用户和组

您还必须为 Systems Manager 配置节点。有关更多信息,请参阅设置 Amazon Systems Manager

我们建议您完成以下可选设置任务,以帮助最大限度地改善托管式节点的安保状况并尽量减少节点的日常管理工作。

使用 Amazon EventBridge 监控命令执行情况

您可以使用 Eventbridge 记录命令执行状态更改。您可以创建一个规则,只要状态发生变换或者在变换到一个或多个感兴趣的状态时,就运行该规则。此外,您还可以将 Run Command 指定为发生 EventBridge 事件时的目标操作。有关更多信息,请参阅为 Systems Manager 事件配置 EventBridge

使用 Amazon CloudWatch Logs 监控命令执行情况

您可以将 Run Command 配置为定期将所有命令输出和错误日志发送到 Amazon CloudWatch 日志组。您可以近乎实时地监控这些输出日志,搜索特定短语、值或模式,以及基于搜索创建警报。有关更多信息,请参阅为 Run Command 配置 Amazon CloudWatch Logs

限制对特定托管式节点的 Run Command 访问

您可以通过使用 Amazon Identity and Access Management (IAM) 来限制用户在托管式节点上运行命令的能力。特别是,您可以创建 IAM 用户策略,并包含一个条件,规定用户只能在使用特定标签标记的托管式节点上运行命令。有关更多信息,请参阅根据标签限制 Run Command 访问

根据标签限制 Run Command 访问

本节介绍如何通过在 IAM 策略中指定标签条件来限制用户在托管式实例上运行命令的能力。托管式实例包括混合环境中为 Systems Manager 配置的 Amazon EC2 实例、本地服务器、边缘设备和虚拟机。尽管没有明确显示相关信息,但您也可以限制对托管式 Amazon IoT Greengrass 核心设备的访问。首先,您必须标记 Amazon IoT Greengrass 设备。有关更多信息,请参阅 Amazon IoT Greengrass Version 2 开发人员指南中的标记 Amazon IoT Greengrass Version 2 资源

您可以通过创建一个 IAM 用户策略将命令执行限制为特定托管式节点,该用户策略包含一个条件,规定用户只能在带有特定标签的节点上运行命令。在以下示例中,通过以下方式来允许用户使用 Run Command (Effect: Allow, Action: ssm:SendCommand):在任何节点 (Resource: arn:aws:ec2:*:*:instance/*) 上使用任何 SSM 文档 (Resource: arn:aws:ssm:*:*:document/*),条件是节点为 Finance WebServer (ssm:resourceTag/Finance: WebServer)。如果用户向未经标记或具有除 Finance: WebServer 以外的任何标签的节点发送命令,则执行结果将显示 AccessDenied

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":[ "arn:aws:ssm:*:*:document/*" ] }, { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":[ "arn:aws:ec2:*:*:instance/*" ], "Condition":{ "StringLike":{ "ssm:resourceTag/Finance":[ "WebServers" ] } } } ] }

您可以创建允许用户在使用多个标签标记的托管式节点上运行命令的 IAM 策略。以下策略允许用户在具有两个标签的托管式节点上运行命令。如果用户向未使用这两个标签标记的节点发送命令,则执行结果将显示 AccessDenied

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag_key1":[ "tag_value1" ], "ssm:resourceTag/tag_key2":[ "tag_value2" ] } } }, { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":[ "arn:aws:ssm:us-west-1::document/AWS-*", "arn:aws:ssm:us-east-2::document/AWS-*" ] }, { "Effect":"Allow", "Action":[ "ssm:UpdateInstanceInformation", "ssm:ListCommands", "ssm:ListCommandInvocations", "ssm:GetDocument" ], "Resource":"*" } ] }

您也可以创建允许用户在多个已标记托管式节点组上运行命令的 IAM 策略。以下示例策略允许用户在任一已标记节点组或两个已标记节点组上运行命令。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag_key1":[ "tag_value1" ] } } }, { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag_key2":[ "tag_value2" ] } } }, { "Effect":"Allow", "Action":[ "ssm:SendCommand" ], "Resource":[ "arn:aws:ssm:us-west-1::document/AWS-*", "arn:aws:ssm:us-east-2::document/AWS-*" ] }, { "Effect":"Allow", "Action":[ "ssm:UpdateInstanceInformation", "ssm:ListCommands", "ssm:ListCommandInvocations", "ssm:GetDocument" ], "Resource":"*" } ] }

有关创建 IAM 用户策略的更多信息,请参阅 IAM 用户指南中的托管式策略与内联策略。有关标记托管式节点的更多信息,请参阅 Amazon Resource Groups 用户指南中的标签编辑器