远程和会话管理
远程和会话管理包括 Run Command、Fleet Manager 和 Session Manager 等功能。
远程管理
使用 Run Command(AWS Systems Manager 中的一个工具),您可以远程安全地管理托管节点的配置。Run Command 允许您自动化常见的管理任务,并大规模执行一次性配置更改。您可以从 AWS Management Console、AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell 或 AWS SDK 使用 Run Command。

Run Command 的常见用例包括:
- 引导节点: 您可以在所有或特定节点上安装或引导应用程序。
- 配置管理: Systems Manager 支持多种领域特定语言(DSL),包括 Ansible、Salt States 和 PowerShell DSC。
- 加入域: 将节点加入 Windows 域
- 部署其他 Amazon 代理: 在 Parameter Store 中存储代理配置
复合命令文档
这些 Systems Manager 文档定义了您希望在托管节点上执行的操作。Systems Manager 提供了多种预定义的公共文档,并支持自定义文档。您可以在配置过程中执行复合文档。复合文档执行一个或多个辅助文档的任务。
使用复合命令文档时需要注意的是,它只支持顺序操作,不支持分支。您可以通过 AWS-RunDocument 来执行存储在 Systems Manager、私有或公共 GitHub 或 Amazon S3 中的文档。这是通过使用 aws:downloadContent 和 aws:runDocument 插件实现的。aws:runDocument 插件执行位于 Systems Manager 或本地路径中的文档。一个示例是 AWS-RunPatchBaselineWithHooks。
限制 Run Command
您可以通过 IAM 用户/角色来限制用户在会话中可以运行的命令。在文档中,您定义用户启动会话时运行的命令以及用户可以提供的参数。您可以基于以下条件限制访问:ssm:SendCommand、文档名称或前缀、资源标签和资源 ID。您还可以使用 SAML 会话标签强制执行 ABAC 策略。

- 例如,您可以根据 AWS Identity and Access Management (IAM) 用户所属的部门授予对特定托管节点的访问权限。
- Alice 和 Bob 使用其外部身份提供商(IdP)联合登录到 AWS Management Console。两个联合用户必须根据各自的"部门"成员身份(分别为 Amber 和 Blue)使用 Session Manager 访问特定的 EC2 实例。
多账户和多区域 Run Command
- Run Command 本身是按账户/区域运行的
- 利用 Automation 跨账户/区域调用
Automation 是 AWS Systems Manager 中的一个工具,它简化了常见的维护、部署和修复任务。您可以利用它来定位多个账户/区域。对于多账户/多区域自动化,当定位子账户时,命令文档需要存在于目标账户/区域中。您可以使用 CloudFormation 或 Terraform 来部署命令文档。必须为 Systems Manager 服务设置适当的权限才能执行自动化操作。有关更多信息,请参阅 Automation 部分。

通过 AWS Systems Manager State Manager 关联调度 Run Command
State Manager 帮助您自动化保持托管节点(来自 AWS、本地或多云环境)处于所需状态的过程。在 State Manager 中,关联是文档中表达的配置、一组目标和特定计划之间的绑定,以确保一致的状态。您可以通过创建带有 Runbook 的 State Manager 关联来启动自动化。与配置关联的命令文档需要存在于每个目标账户/区域中。

处理错误、退出和重启代码
默认情况下,脚本中最后运行的命令的退出代码将作为整个脚本的退出代码报告。
Exit 0结果状态为:SuccessExit 1或其他*,结果状态为:Failed- 您可以包含特定的退出代码以更快地识别错误。
- 重启代码:
- Windows:
exit 3010 - Linux:
exit 194
- Windows:

使用 Amazon CloudWatch 监控 Run Command
AWS Systems Manager 将有关 Run Command 命令状态的 metrics 发布到 CloudWatch,使您能够基于这些 metrics 设置告警。Systems Manager 推送到 CloudWatch 的特定 metrics 包括命令的 Delivery Time Out、Failed 数量和 Successful 数量。
要了解有关监控 Run Command 的更多信息,请访问使用 Amazon CloudWatch 监控 Run Command metrics。
会话管理
AWS Session Manager 是完全托管的 AWS Systems Manager 工具。您可以使用交互式一键浏览器 shell 或 AWS Command Line Interface (AWS CLI) 与托管节点进行交互。Session Manager 提供安全的节点管理,无需打开入站端口、维护堡垒主机或管理 SSH 密钥。您能够遵守要求控制对托管节点的访问、严格安全实践以 及包含节点访问详细信息的日志的企业策略,同时为最终用户提供简单的一键跨平台访问您的托管节点。
治理

-
将用户与数据分离: 云运维的一个关键原则是尽可能将用户与数据分离。Session Manager 关闭了允许任何拥有凭证的人访问并可能更改服务器配置的入站网络端口。Session Manager 可以进一步限制用户只能运行单个命令并查看结果,而无需进行交互式会话。
-
集中管理访问: 云运维可能导致环境中弹性且持续变化的流。与其在每台服务器上维护谁可以访问每台服务器,Session Manager 与 Identity Access Management 集成,允许集中定义谁可以访问哪些节点。
-
控制对工作负载和组件的访问: 组织可以使用 IAM 根据工作负载或角色控制对节点的访问。例如,数据库管理员可能能够远程访问任何标记为"Component: Database"的实例,或者应用程序开发人员可以远程访问任何标记为"Environment: Development"的实例。这种基于属性的访问控制允许项目团队按需快速交付业务价值,同时组织可以确信他们在定义的护栏内运行。
-
将命令限制为特定角色: 如我们在"将用户与数据分离"中提到的,可以允许某个角色仅执行该角色所需的特定命令集。例如,应用程序开发人员可以在生产环境中"tail"其应用程序 的日志文件,而无需对生产环境进行交互式访问。
-
基于业务原因授予临时访问权限: 借助开源和商业临时权限提升解决方案提供的额外功能,甚至可以拒绝所有操作员的远程访问,除非他们有正当的业务理由访问服务器。例如,生产应用服务器将没有任何远程访问方式。但是,在事件期间,操作员可以请求并获得对服务器的临时访问权限以调查事件。此访问权限将与记录的原因相关联,由第二位操作员批准,并且仅在完成工作所需的时间内有效。
可观测性与合规性
- 记录虚拟机和容器会话活动以及监控托管节点的访问和活动: 当从 AWS 控制台使用 Session Manager 启动终端会话时,会话的所有命令及其结果都可以记录到 S3 和 CloudWatch Log Groups。这可以提供交互式会话期间所有更改的审计跟踪。您还可以使用 CloudTrail 事件来监控(如有必要,对其发出告警)成功和失败的远程会话到节点的连接。例如,在定义的变更窗口之外进行的远程会话可以向相关人员及其经理发出告警。
简化运维
- 从控制台一键访问: Session Manager 与 AWS 控制台深度集成,从 EC2 控制台、Session Manager 控制台和 Fleet Manager 控制台提供"连接"选项。
- 无需管理 SSH: 使用 Session Manager,无需管理 PKI 基础设施的创建、分发和刷新 以实现对弹性节点群的 SSH 访问。通过 IAM 的集中授权取代了在整个集群中存储、保护和监控私钥的需求。
- 允许访问而无需打开安全组: 使用 Session Manager 的"端口转发"功能,您可以允许授权访问您的节点,而无需打开或扩大对实例远程会话端口的网络访问。例如,开发人员可以通过从其家用开发机器通过 Session Manager 服务端口转发到相关实例的方式,通过完全加密和经过身份验证的管道安全访问测试环境的数据库实例。
- 集中访问: 与控制台和 IAM 的集成允许操作员从任何需要的地方获得所需(并获得授权的)远程访问。
- 降低"爆炸半径": 锁定入站网络端口并将远程访问集中限制为仅用户角色所需的节点,我们降低了任何潜在安全漏洞可能造成的"爆炸半径"。
优化 IT 成本
- 无需堡垒主机或跳板机: Session Manager 可以消除在您的环境中使用堡垒主机或跳板机的需求——消除全天候运行的实例成本。这意味着替换那些开放 SSH 和 RDP 入站网络端口以及通过 SSH 和 RDP 出站访问环境中其他节点的主机。相反,访问通过与云环境其余部分相同的机制——IAM——来保护,提供细粒度的授权和对目标节点的临时凭证访问。
- 访问 EC2 实例无需额外费用:除了 EC2 现有的实例费用外,使用 Session Manager 允许远程访问您的 EC2 节点和容器不需要额外费用。