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

在多个 AWS 区域和账户中运行 Automation 工作流程

您可以在 Automation 管理账户的多个 AWS 区域和 AWS 账户或 AWS 组织部门 (OU) 中运行 AWS Systems Manager Automation。在多个区域和账户或 OU 中运行 Automation 可减少管理 AWS 资源所需的时间,同时提高计算环境的安全性。

例如,您可以集中实施修补和安全更新,纠正 VPC 配置或 Amazon S3 存储桶策略的合规性偏差,并对资源(例如 Amazon EC2 实例)进行批量管理。下图显示了一个用户在 Automation 管理账户的多个区域和账户中运行 AWS-RestartEC2Instances 文档的示例。Automation 在指定的区域和账户中使用指定的标签以查找实例。

注意

跨多个区域和账户运行 Automation 时,可以使用标签或 AWS 资源组名称将资源设置为目标。Automation 不会在没有指定标签或未包含在指定资源组中的资源上运行。


                    显示 Systems Manager Automation 在多个区域和多个账户中运行的示意图。

重要

您的账户将产生与在多个区域和账户中运行 Automation 关联的费用。多区域和账户步骤执行被认为是特殊步骤。特殊步骤没有步骤限制,但您的账户将产生与 Systems Manager 处理的每个步骤关联的费用。有关更多信息,请参阅 AWS Systems Manager 定价页。

工作原理

跨多个区域和账户或 OU 运行 Automation 的工作方式如下:

  1. 验证要在其上运行 Automation 的(所有区域和账户或 OU 中的)所有资源是否使用相同的标签。如果不是,您可以将它们添加到一个 AWS 资源组并将该组设置为目标。有关更多信息,请参阅什么是 AWS Resource Groups?

  2. 登录要配置为 Automation 主账户的 AWS Identity and Access Management (IAM) 账户。

  3. 使用本主题中的过程创建一个名为 AWS-SystemsManager-AutomationExecutionRole 的 IAM 执行角色。此角色为用户提供运行 Automation 工作流程的权限。

  4. 使用本主题中的过程再创建一个名为 AWS-SystemsManager-AutomationAdministrationRole 的 IAM 角色。此角色为用户提供在多个 AWS 账户和 OU 中运行 Automation 工作流程的权限。

  5. 选择 Automation 文档、区域和要运行 Automation 工作流程的账户或 OU。

  6. 运行 Automation。

  7. 在 AWS Systems Manager 控制台或 AWS CLI 中使用 GetAutomationExecutionDescribeAutomationStepExecutionsDescribeAutomationExecutions API 操作监控工作流程的进度。

设置进行多区域和多账户 Automation 执行的管理账户权限

按照以下过程操作,使用 AWS CloudFormation 创建进行 Systems Manager Automation 多区域和多账户执行所需的 IAM 角色。此过程介绍了如何创建 AWS-SystemsManager-AutomationExecutionRole 角色。您必须在要设置为多区域和多账户 Automation 运行目标的每一个账户中创建该角色。

此过程还介绍如何创建 AWS-SystemsManager-AutomationAdministrationRole 角色。您只需要在 Automation 管理账户中创建此角色。

使用 AWS CloudFormation 创建进行多区域和多账户 Automation 执行所需的 IAM 角色

  1. 下载 AWS-SystemsManager-AutomationExecutionRole.zip 文件夹。此文件夹包含 AWS-SystemsManager-AutomationExecutionRole.json AWS CloudFormation 模板文件。

  2. Open the AWS CloudFormation console at https://console.amazonaws.cn/cloudformation.

  3. 选择 Create Stack

  4. 选择一个模板部分中,选择将模板上传到 Amazon S3

  5. 选择浏览,然后选择 AWS-SystemsManager-AutomationExecutionRole.json AWS CloudFormation 模板文件。

  6. 选择 Next

  7. 指定详细信息页面的堆栈名称字段中,输入一个名称。

  8. Parameters (参数) 部分的 MasterAccountID 字段中,输入要用于运行多区域和多账户 Automation 的账户的 ID。

  9. 选择 Next

  10. 选项页面上,为要使用的所有选项输入值。选择 Next

  11. 审核页面上,向下滚动并选择我确认,AWS CloudFormation 可能创建 IAM 资源选项。

  12. 选择 Create

    大约三分钟左右,AWS CloudFormation 会显示 CREATE_IN_PROGRESS 状态。状态变为 CREATE_COMPLETE

  13. 在要设置为多区域和多账户 Automation 运行目标的每一个账户中重复这一过程。

  14. 下载 AWS-SystemManager-AutomationAdministrationRole.zip 文件夹,并为 AWS-SystemManager-AutomationAdministrationRole 角色重复此过程。您只需要在 Automation 管理账户中创建 AWS-SystemManager-AutomationAdministrationRole 角色。

在多个区域和账户中运行 Automation(控制台)

以下过程介绍了如何使用 Systems Manager 控制台在 Automation 管理账户的多个区域和账户中运行 Automation。

开始前的准备工作

在完成以下过程之前,请记下以下信息:

  • 要在其中运行 Automation 的 AWS 账户 ID 或 OU。

  • 要在其中运行 Automation 的 AWS Systems Manager 区域。

  • 要在其中运行 Automation 的标签键和标签值或资源组的名称。

在多个区域和账户中运行 Automation 工作流程

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

  2. 在导航窗格中,选择 Automation (自动化),然后选择 Execute automation (执行自动化)

  3. Automation document (自动化文档) 列表中,选择一个文档。在 Document categories (文档类别) 窗格中选择一个或多个选项,以根据其用途筛选 SSM 文档。要查看您拥有的文档,请选择 Owned by me (我拥有的) 选项卡。要查看与您的账户共享的文档,请选择 Shared with me (与我共享) 选项卡。要查看所有文档,请选择 All documents (所有文档) 选项卡。

    注意

    可以通过选择文档名称来查看有关文档的信息。

  4. Document details (文档详细信息) 部分中,验证文档版本已设置为要运行的版本。系统包括以下版本选项:

    • Default version at runtime (运行时的默认版本):如果定期更新 Automation 文档并指定新的默认版本,请选择此选项。

    • 运行时的最新版本:如果定期更新自动化文档,并且需要运行最新更新版本,请选择此选项。

    • 1 (默认):选择此选项可运行文档的第一个版本,这是默认设置。

  5. 选择 Next

  6. Execute automation document (执行自动化文档) 页面上,选择 Multi-account and Region (多账户和区域)

  7. Target accounts and Regions (目标账户和区域) 部分中,使用 Accounts and organizational (OUs) (账户和组织 (OU)) 字段指定要在其中运行 Automation 的各个 AWS 账户或 AWS 组织部门 (OU)。使用逗号分隔多个账户或 OU。

  8. 使用 AWS Regions (AWS 区域) 列表选择要在其中运行 Automation 的一个或多个区域。

  9. 使用 Multi-Region and account rate control (多区域和账户费率控制) 选项将 Automation 执行限制为在有限区域中的有限账户运行。这些选项不限制可运行 Automation 的 AWS 资源的数量。

    1. Location (account-Region pair) concurrency (位置(账户-区域对)并发) 部分中,选择一个选项以限制可同时在多个账户和区域中运行的 Automation 工作流程的数量。例如,如果选择在位于四 (4) 个 AWS 区域中的五 (5) 个 AWS 账户中运行 Automation,则 Systems Manager 在总共 20 个账户-区域对中运行 Automation。您可以使用此选项指定一个绝对数量(例如 2),以使 Automation 仅同时在两个账户-区域对中运行。或者,您也可以指定可同时运行的账户-区域对的百分比。例如,对于 20 个账户-区域对,如果您指定 20%,则 Automation 在最多五 (5) 个账户-区域对中同时运行。

      • 选择 targets (目标) 输入可同时运行 Automation 工作流程的账户-区域对的绝对数量。

      • 选择 percent (百分比) 输入可同时运行 Automation 工作流程的账户-区域对总数的百分比。

    2. Error threshold (错误阈值) 部分中,选择一个选项:

      • 选择 errors (错误) 输入 Automation 停止将工作流程发送到其他资源之前允许的错误的绝对数量。

      • 选择 percent (百分比) 输入 Automation 停止将工作流程发送到其他资源之前允许的错误的百分比。

  10. 目标部分中,选择希望如何定位要在其中运行自动化的 AWS 资源。这些选项是必需的。

    1. 使用 Parameter (参数) 列表选择一个参数。Parameter (参数) 列表中的项目由此过程开始时选择的 Automation 文档中的参数确定。通过选择参数,可以定义在其上运行 Automation 工作流程的资源的类型。

    2. 使用 Targets (目标) 列表选择设置目标资源的方式。如果选择使用 AWS Resource Groups将资源设置为目标,请从 Resource Group (资源组) 列表中选择组的名称。

      如果选择使用标签将资源设置为目标,请在提供的字段中输入标签键和(可选)标签值。选择 Add

      如果选择使用参数值来定位资源,请在“输入参数”部分输入所选参数的参数值。

  11. Input parameters (输入参数) 部分中,指定所需的输入。(可选)您可以从 AutomationAssumeRole 列表中选择一个 IAM 服务角色。

    注意

    您可能不需要选择 Input parameters (输入参数) 部分中的某些选项。原因是您使用标签或资源组将多个区域和账户中的资源设置为目标。例如,如果选择了 AWS-RestartEC2Instance 文档,则无需在 Input parameters (输入参数) 部分中指定或选择实例 ID。Automation 执行过程使用您指定的标签以查找要重新启动的实例。

  12. 使用 Rate control (费率控制) 部分中的选项限制可在每个账户/区域对中运行自动化的 AWS 资源的数量。

    Concurrency (并发) 部分中,选择一个选项:

    • 选择 targets (目标) 输入可同时运行 Automation 工作流程的目标的绝对数量。

    • 选择 percentage (百分比) 输入可同时运行 Automation 工作流程的目标集的百分比。

  13. Error threshold (错误阈值) 部分中,选择一个选项:

    • 选择 errors (错误) 输入 Automation 停止将工作流程发送到其他资源之前允许的错误的绝对数量。

    • 选择 percentage (百分比) 输入 Automation 停止将工作流程发送到其他资源之前允许的错误的百分比。

  14. 选择 Execute (执行)

在多个区域和账户中运行 Automation(命令行)

以下过程介绍了如何使用 AWS CLI(在 Linux 或 Windows 上)或 AWS Tools for PowerShell 在 Automation 管理账户的多个区域和账户中运行 Automation。

开始前的准备工作

在完成以下过程之前,请记下以下信息:

  • 要在其中运行 Automation 的 AWS 账户 ID 或 OU。

  • 要在其中运行 Automation 的 AWS Systems Manager 区域。

  • 要在其中运行 Automation 的标签键和标签值或资源组的名称。

在多个区域和账户中运行 Automation 工作流程

  1. 安装并配置 AWS CLI 或 AWS Tools for PowerShell(如果尚未执行该操作)。

    有关更多信息,请参阅 安装或升级 AWS CLIInstall or Upgrade the AWS Tools for PowerShell

  2. 使用以下格式创建一个命令,以便在多个区域和账户中运行 Automation 工作流程。

    LinuxWindowsPowerShell
    Linux
    aws ssm start-automation-execution \ --document-name name_of_Automation_document \ --parameters AutomationAssumeRole=arn:aws:iam::Automation_management_account_ID:role/AWS-SystemsManager-AutomationAdministrationRole \ --target-parameter-name parameter_name (required) \ --targets Key=tag_key,Values=tag_value \ --target-locations Accounts=account_ID_1,account_ID_2,account_ID_3,Regions=Region_1,Region_2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    Windows
    aws ssm start-automation-execution ^ --document-name name_of_Automation_document ^ --parameters AutomationAssumeRole=arn:aws:iam::Automation_management_account_ID:role/AWS-SystemsManager-AutomationAdministrationRole ^ --target-parameter-name parameter_name (required) ^ --targets Key=tag_key,Values=tag_value ^ --target-locations Accounts=account_ID_1,account_ID_2,account_ID_3,Regions=Region_1,Region_2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "target_key" $Targets.Values = "target_value" Start-SSMAutomationExecution ` -DocumentName "name_of_Automation_document" ` -Parameter @{ "AutomationAssumeRole"="arn:aws:iam::Automation_management_account_ID:role/AWS-SystemsManager-AutomationAdministrationRole" } ` -TargetParameterName "parameter_name (required)" ` -Target $Targets ` -TargetLocation @{ "Accounts"="account_ID_1","account_ID_2","account_ID_3"; "Regions"="Region_1","Region_2"; "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }

    以下是一些示例。

    示例 1:该示例重新启动 123456789012987654321098 账户中的 Amazon EC2 实例,它们位于 us-east-2us-west-1 区域中。必须使用标签键对值 Env-PROD 标记这些实例。

    LinuxWindowsPowerShell
    Linux
    aws ssm start-automation-execution \ --document-name AWS-RestartEC2Instance \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \ --target-parameter-name InstanceId \ --targets Key=tag:Env,Values=PROD \ --target-locations Accounts=123456789012,987654321098,Regions=us-east-2,us-west-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    Windows
    aws ssm start-automation-execution ^ --document-name AWS-RestartEC2Instance ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^ --target-parameter-name InstanceId ^ --targets Key=tag:Env,Values=PROD ^ --target-locations Accounts=123456789012,987654321098,Regions=us-east-2,us-west-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "tag:Env" $Targets.Values = "PROD" Start-SSMAutomationExecution ` -DocumentName "AWS-RestartEC2Instance" ` -Parameter @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } ` -TargetParameterName "InstanceId" ` -Target $Targets ` -TargetLocation @{ "Accounts"="123456789012","987654321098"; "Regions"="us-east-2","us-west-1"; "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }

    示例 2:该示例重新启动 123456789012987654321098 账户中的 Amazon EC2 实例,它们位于 eu-central-1 区域中。这些实例必须是 prod-instances AWS 资源组的成员。

    LinuxWindowsPowerShell
    Linux
    aws ssm start-automation-execution \ --document-name AWS-RestartEC2Instance \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \ --target-parameter-name InstanceId \ --targets Key=ResourceGroup,Values=prod-instances \ --target-locations Accounts=123456789012,987654321098,Regions=eu-central-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    Windows
    aws ssm start-automation-execution ^ --document-name AWS-RestartEC2Instance ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^ --target-parameter-name InstanceId ^ --targets Key=ResourceGroup,Values=prod-instances ^ --target-locations Accounts=123456789012,987654321098,Regions=eu-central-1,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "prod-instances" Start-SSMAutomationExecution ` -DocumentName "AWS-RestartEC2Instance" ` -Parameter @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } ` -TargetParameterName "InstanceId" ` -Target $Targets ` -TargetLocation @{ "Accounts"="123456789012","987654321098"; "Regions"="eu-central-1"; "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }

    示例 3:该示例重新启动 ou-1a2b3c-4d5e6c AWS 组织部门 (OU) 中的 Amazon EC2 实例。这些实例位于 us-west-1us-west-2 区域中。这些实例必须是 WebServices AWS 资源组的成员。

    LinuxWindowsPowerShell
    Linux
    aws ssm start-automation-execution \ --document-name AWS-RestartEC2Instance \ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole \ --target-parameter-name InstanceId \ --targets Key=ResourceGroup,Values=WebServices \ --target-locations Accounts=ou-1a2b3c-4d5e6c,Regions=us-west-1,us-west-2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    Windows
    aws ssm start-automation-execution ^ --document-name AWS-RestartEC2Instance ^ --parameters AutomationAssumeRole=arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole ^ --target-parameter-name InstanceId ^ --targets Key=ResourceGroup,Values=WebServices ^ --target-locations Accounts=ou-1a2b3c-4d5e6c,Regions=us-west-1,us-west-2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "ResourceGroup" $Targets.Values = "WebServices" Start-SSMAutomationExecution ` -DocumentName "AWS-RestartEC2Instance" ` -Parameter @{ "AutomationAssumeRole"="arn:aws:iam::123456789012:role/AWS-SystemsManager-AutomationAdministrationRole" } ` -TargetParameterName "InstanceId" ` -Target $Targets ` -TargetLocation @{ "Accounts"="ou-1a2b3c-4d5e6c"; "Regions"="us-west-1"; "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }

    系统返回类似于以下内容的信息。

    LinuxWindowsPowerShell
    Linux
    {
        "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
    }
    Windows
    {
        "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
    }
    PowerShell
    4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
  3. 运行以下命令以查看工作流程执行情况。

    LinuxWindowsPowerShell
    Linux
    aws ssm describe-automation-executions \ --filters Key=ExecutionId,Values=4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
    Windows
    aws ssm describe-automation-executions ^ --filters Key=ExecutionId,Values=4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
    PowerShell
    Get-SSMAutomationExecutionList | ` Where {$_.AutomationExecutionId -eq "a4a3c0e9-7efd-462a-8594-01234EXAMPLE"}
  4. 运行以下命令以查看有关执行进度的详细信息。

    LinuxWindowsPowerShell
    Linux
    aws ssm get-automation-execution \ --automation-execution-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
    Windows
    aws ssm get-automation-execution ^ --automation-execution-id 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
    PowerShell
    Get-SSMAutomationExecution ` -AutomationExecutionId a4a3c0e9-7efd-462a-8594-01234EXAMPLE

    注意

    您也可以在控制台中监控工作流程的状态。在执行列表中,选择您刚才运行的执行,然后选择步骤选项卡。该选项卡显示工作流程操作的状态。

通过 AWS Systems Manager Automation 进行集中式多账户和多区域修补