

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 从远程位置运行文档
<a name="documents-running-remote-github-s3"></a>

您可以使用 `AWS-RunDocument` 预定义的 SSM 文档从远程位置运行 AWS Systems Manager (SSM) 文档。此文档支持运行存储在以下位置的 SSM 文档：
+ 公共和私有 GitHub 存储库（不支持 GitHub Enterprise）
+ Amazon S3 存储桶
+ Systems Manager

虽然您也可以使用State Manager或 Automation（都是 AWS Systems Manager 中的工具）运行远程文档，下面的过程仅介绍了如何在 Systems Manager 控制台中使用 AWS Systems Manager Run Command 运行远程 SSM 文档。

**注意**  
`AWS-RunDocument` 仅可用于运行命令类型的 SSM 文档，而不是其他类型（如自动化运行手册）。`AWS-RunDocument` 使用 `aws:downloadContent` 插件。有关 `aws:downloadContent` 插件的更多信息，请参阅 [`aws:downloadContent`](documents-command-ssm-plugin-reference.md#aws-downloadContent)。

**警告**  
`AWS-RunDocument` 可以执行来自各种来源（SSM 文档、GitHub、S3、URL）的文档内容。执行远程文档时，评估的 IAM 权限适用于远程文档中的 `ssm:GetDocument` 和 `AWS-RunDocument` 中的 `ssm:SendCommand`。如果您的 IAM 策略拒绝访问特定 SSM 文档，则拥有 `AWS-RunDocument` 权限的用户仍然可以通过将文档内容作为参数传递来执行这些被拒绝的文档，这些参数可能不受相同的特定于文档的 IAM 限制的约束。  
要正确限制文档执行，请使用以下方法之一：  
**允许名单批准的来源**：如果您需要使用嵌套文档执行，请使用对每种来源类型的适当控制来限制仅允许访问已批准的来源：用于控制 SSM 文档来源的 `ssm:GetDocument` 的 IAM 策略、Amazon S3 来源的 IAM 和 Amazon S3 存储桶策略以及公共互联网来源的网络设置（例如 VPC 端点或安全组）。
**限制访问 AWS-RunDocument**：拒绝 `AWS-RunDocument` 中的 `ssm:SendCommand` 以及在您的 IAM 策略中使用 `aws:runDocument` 插件的任何其他文档，进而防止嵌套文档执行。
**使用权限边界**：实施 IAM 权限边界为用户设置最大权限，防止他们执行未经授权的文档，无论执行方法如何。
有关 IAM 最佳实践和权限边界的更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的 [IAM 身份的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。

**开始前的准备工作**  
必须先完成以下任务才能运行远程文档。
+ 创建 SSM 命令文档并在远程位置保存该文档。有关更多信息，请参阅 [创建 SSM 文档内容](documents-creating-content.md)。
+ 如果打算运行存储在私有 GitHub 存储库中的远程文档，则必须为 GitHub 安全访问令牌创建 Systems Manager `SecureString` 参数。通过 SSH 手动传递令牌无法访问私有 GitHub 存储库中的远程文档。该访问令牌必须作为 Systems Manager `SecureString` 参数传递。有关创建 `SecureString` 参数的更多信息，请参阅 [在 Systems Manager 中创建 Parameter Store 参数](sysman-paramstore-su-create.md)。

## 运行远程文档（控制台）
<a name="documents-running-remote-github-s3-console"></a>

**运行远程文档**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Run Command**。

1. 选择 **Run command（运行命令）**。

1. 在 **文档**列表中，选择 **`AWS-RunDocument`**。

1. 在 **命令参数** 中，对于 **源类型**，请选择一个选项。
   + 如果选择 **GitHub**，则采用以下格式指定**源信息**信息：

     ```
     {
         "owner": "owner_name",
         "repository": "repository_name",
         "path": "path_to_document",
         "getOptions":"branch:branch_name",
         "tokenInfo": "{{ssm-secure:secure-string-token}}"
     }
     ```

     例如：

     ```
     {
         "owner":"TestUser",
         "repository":"GitHubTestExamples",
         "path":"scripts/python/test-script",
         "getOptions":"branch:exampleBranch",
         "tokenInfo":"{{ssm-secure:my-secure-string-token}}"
     }
     ```
**注意**  
`getOptions` 是用于从分支（而非主分支）或存储库中的特定提交中检索内容的额外选项。如果您在主分支中使用最新提交，则可以省略 `getOptions`。仅当您的 SSM 文档存储在 `master` 以外的分支中时，`branch` 参数才是必需的。  
要使用存储库中特定*提交* 中的 SSM 文档版本，请使用 `commitID` 和 `getOptions`，而不是 `branch`。例如：  

     ```
     "getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",
     ```
   + 如果选择 **S3**，则采用以下格式指定**源信息**信息：

     ```
     {"path":"URL_to_document_in_S3"}
     ```

     例如：

     ```
     {"path":"https://s3.amazonaws.com/amzn-s3-demo-bucket/scripts/ruby/mySSMdoc.json"}
     ```
   + 如果选择 **SSMDocument**，则采用以下格式指定**源信息**信息：

     ```
     {"name": "document_name"}
     ```

     例如：

     ```
     {"name": "mySSMdoc"}
     ```

1. 在 **文档参数** 字段中，输入远程 SSM 文档的参数。例如，如果运行 `AWS-RunPowerShell` 文档，则可指定：

   ```
   {"commands": ["date", "echo \"Hello World\""]}
   ```

   如果运行 `AWS-ConfigureAWSPack` 文档中，则可指定：

   ```
   {
      "action":"Install",
      "name":"AWSPVDriver"
   }
   ```

1. 在 **Targets**（目标）部分中，通过指定标签、手动选择实例或边缘设备或指定资源组，选择要在其上运行此操作的托管式节点。
**提示**  
如果未列出您希望看到的托管式节点，请参阅 [排除托管式节点可用性的问题](fleet-manager-troubleshooting-managed-nodes.md) 以获取故障排除技巧。

1. 对于 **Other parameters（其他参数）**：
   + 对于 **Comment（注释）**，请输入有关此命令的信息。
   + 对于 **Timeout (seconds) (超时 (秒))**，请指定在整个命令执行失败之前系统等待的秒数。

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 AWS Resource Groups 来选择目标，但不确定有多少个托管式节点已被设为目标，则可通过指定百分比来限制可同时运行该文档的目标的数量。
   + 对于 **Error threshold**（错误阈值），请指定当命令在一定数量或百分比的节点上失败后，何时在其他托管式节点上停止运行该命令。例如，如果您指定三个错误，Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理该命令的托管式节点也可能发送错误。

1. （可选）对于 **输出选项**，要将命令输出保存到文件，请选中 **将命令输出写入 S3 存储桶** 框。在输入框中输入存储桶和前缀（文件夹）名称。
**注意**  
授予将数据写入 S3 存储桶的能力的 S3 权限，是分配给实例的实例配置文件（适用于 EC2 实例）或 IAM 服务角色（混合激活的计算机）的权限，而不是执行此任务的 IAM 用户的权限。有关更多信息，请参阅[配置 Systems Manager 所需的实例权限](setup-instance-permissions.md)或[为混合环境创建 IAM 服务角色](hybrid-multicloud-service-role.md)。此外，如果指定的 S3 存储桶位于不同的 AWS 账户 中，请确保与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

1. 在 **SNS 通知**部分，如果需要发送有关命令执行状态的通知，请选中 **Enable SNS notifications（启用 SNS 通知）**复选框。

   有关为 Run Command 配置 Amazon SNS 通知的更多信息，请参阅 [使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)。

1. 选择 **Run（运行）**。

**注意**  
有关在使用 Run Command 调用脚本时重启服务器和实例的信息，请参阅 [运行命令时处理重启问题](send-commands-reboot.md)。