在多个 Amazon Web Services 区域 和账户中运行自动化 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在多个 Amazon Web Services 区域 和账户中运行自动化

您可以在中央账户的多个 Amazon Web Services 区域 区域和 Amazon Web Services 账户 账户或 Amazon Organizations 组织部门 (OU) 中运行 Amazon Systems Manager 自动化。自动化是 Amazon Systems Manager 的一项功能。在多个区域和账户或 OU 中运行自动化可减少管理 Amazon 资源所需的时间,同时提高计算环境的安全性。

例如,您可以使用自动化运行手册执行以下操作:

  • 集中实施补丁和安全更新。

  • 修复 VPC 配置或 Amazon S3 桶策略的合规性偏差。

  • 大规模管理资源,例如 Amazon Elastic Compute Cloud (Amazon EC2) EC2 实例。

下图显示了一个用户在中央账户的多个区域和账户中运行 AWS-RestartEC2Instances 运行手册的示例。自动化在目标区域和账户中使用指定的标签以查找实例。

注意

跨多个区域和账户运行自动化时,可以使用标签或 Amazon 资源组名称将资源设置为目标。每个目标账户和区域中都必须存在资源组。每个目标账户和区域中的资源组名称必须相同。自动化不会在没有指定标签或未包含在指定资源组中的资源上运行。

为自动化选择中央账户

如果要在 OU 中运行自动化,中央账户必须具有列出 OU 中所有账户的权限。这只能通过委派管理员账户或组织的管理账户实现。我们建议您遵循 Amazon Organizations 最佳实践并使用委派管理员账户。有关 Amazon Organizations 最佳实践的更多信息,请参阅 Amazon Organizations 用户指南中的管理账户的最佳实践。要为 Systems Manager 创建委派管理员账户,可以将 register-delegated-administrator 命令与 Amazon CLI 一起使用,如以下示例所示。

aws organizations register-delegated-administrator \ --account-id delegated admin account ID \ --service-principal ssm.amazonaws.com

如果您想跨多个不受 Amazon Organizations 托管的账户运行自动化,我们建议您创建一个专用账户用于自动化管理。从专用账户运行所有跨账户自动化可简化 IAM 权限管理、故障排除工作,并在操作和管理之间建立分离层。如果您使用 Amazon Organizations,但只希望针对个人账户而不是 OU,也建议使用此方法。

自动化的工作原理

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

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

  2. 登录要配置为 Automation 中央账户的账户。

  3. 使用本主题中的 设置进行多区域和多账户自动化的管理账户权限 过程创建以下 IAM 角色:

    • AWS-SystemsManager-AutomationAdministrationRole - 此角色为用户提供在多个账户和 OU 中运行自动化的权限。

    • AWS-SystemsManager-AutomationExecutionRole - 此角色为用户提供在目标账户中运行自动化的权限。

  4. 选择要运行自动化的运行手册、区域、账户或 OU。

    注意

    自动化不会通过 OU 递归执行。确保目标 OU 包含所需的账户。如果选择自定义运行手册,则必须与所有目标账户共享运行手册。有关共享运行手册的信息,请参阅 共享 SSM 文档。有关使用共享运行手册的信息,请参阅 使用共享 SSM 文档

  5. 运行自动化。

    注意

    在多个区域、账户或 OU 之间运行自动化时,从主账户运行的自动化将在每个目标账户中启动子自动化。主账户中的自动化包含每个目标账户的 aws:executeAutomation 步骤。如果您从 2019 年 3 月 20 日后启动的新区域启动自动化,并以默认启用的区域为目标,自动化将失败。如果您从默认启用的区域启动自动化,并以您启用的区域为目标,自动化将成功运行。

  6. 通过 Amazon Systems Manager 控制台或 Amazon CLI 使用 GetAutomationExecutionDescribeAutomationStepExecutionsDescribeAutomationExecutions API 操作监控自动化进度。您的主账户中自动化步骤的输出将是子自动化的 AutomationExecutionId。要查看在目标账户中创建的子自动化的输出,请确保在您的请求中指定相应的账户、区域和 AutomationExecutionId

设置进行多区域和多账户自动化的管理账户权限

按照以下过程操作,使用 Amazon CloudFormation 创建进行 Systems Manager 自动化多区域和多账户自动化所需的 IAM 角色。此过程介绍如何创建 AWS-SystemsManager-AutomationAdministrationRole 角色。您只需要在自动化中央账户中创建此角色。此过程还介绍了如何创建 AWS-SystemsManager-AutomationExecutionRole 角色。您必须在要设置为多区域和多账户自动化运行目标的每一个账户中创建该角色。我们建议使用 Amazon CloudFormation StackSets 您想要设置为多区域和多账户自动化运行目标的账户创建 AWS-SystemsManager-AutomationExecutionRole 角色。

使用 Amazon CloudFormation 创建进行多区域和多账户自动化所需的 IAM 管理角色
  1. 下载并解压缩 AWS-SystemsManager-AutomationAdministrationRole.zip。或者,如果您的账户由 Amazon Organizations AWS-SystemsManager-AutomationAdministrationRole (org).zip 管理。此文件包含 AWS-SystemsManager-AutomationAdministrationRole.yaml Amazon CloudFormation 模板文件。

  2. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  3. 选择创建堆栈

  4. Specify template(指定模板)部分中,选择 Upload a template(上传模板)。

  5. 选择 Choose file(选择文件),然后选择 AWS-SystemsManager-AutomationAdministrationRole.yaml Amazon CloudFormation 模板文件。

  6. 选择 Next(下一步)

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

  8. 选择 Next(下一步)

  9. Configure stack options(配置堆栈选项)页面上,为要使用的所有选项输入值。选择 Next(下一步)

  10. 审核页面上,向下滚动并选择我确认 Amazon CloudFormation 可能使用自定义名称创建了 IAM 资源选项。

  11. 选择创建堆栈

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

在要设置为多区域和多账户自动化运行目标的每一个账户中,您必须重复以下过程。

使用 Amazon CloudFormation 创建进行多区域和多账户自动化所需的 IAM 自动化角色
  1. 下载 AWS-SystemsManager-AutomationExecutionRole.zip。或者,如果您的账户由 Amazon Organizations AWS-SystemsManager-AutomationExecutionRole (org).zip 管理。此文件包含 AWS-SystemsManager-AutomationExecutionRole.yaml Amazon CloudFormation 模板文件。

  2. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  3. 选择创建堆栈

  4. Specify template(指定模板)部分中,选择 Upload a template(上传模板)。

  5. 选择 Choose file(选择文件),然后选择 AWS-SystemsManager-AutomationExecutionRole.yaml Amazon CloudFormation 模板文件。

  6. 选择 Next(下一步)

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

  8. Parameters(参数)部分的 AdminAccountId 字段中,输入自动化中央账户的 ID。

  9. 如果您要为 Amazon Organizations 环境设置此角色,则该部分中还有另一个名为 OrganizationID 的字段。输入 Amazon 组织的 ID。

  10. 选择 Next(下一步)

  11. Configure stack options(配置堆栈选项)页面上,为要使用的所有选项输入值。选择 Next(下一步)

  12. 审核页面上,向下滚动并选择我确认 Amazon CloudFormation 可能使用自定义名称创建了 IAM 资源选项。

  13. 选择创建堆栈

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

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

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

开始前的准备工作

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

  • 用于运行多区域或多账户自动化的用户或角色必须拥有 AWS-SystemsManager-AutomationAdministrationRole 角色的 iam:PassRole 权限。

  • 要在其中运行自动化的 Amazon Web Services 账户 账户 ID 或 OU。

  • 将在其中运行自动化的受 Systems Manager 支持区域

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

在多个区域和账户中运行自动化
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

  2. 在导航窗格中,选择自动化,然后选择执行自动化

  3. 自动化文档列表中,请选择运行手册。在文档类别窗格中选择一个或多个选项,以便根据 SSM 文档的用途对其进行筛选。要查看您拥有的运行手册,请选择我拥有的选项卡。要查看与您的账户共享的运行手册,请选择与我共享选项卡。要查看所有运行手册,请选择所有文档选项卡。

    注意

    您可以通过选择运行手册名称来查看有关该手册的信息。

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

    • 运行时的默认版本 – 如果定期更新自动化运行手册并分配新的默认版本,请选择此选项。

    • 运行时的最新版本 – 如果定期更新自动化运行手册并且想要运行最新更新的版本,请选择此选项。

    • 1(默认) – 选择此选项可执行文档的第一个版本,即默认版本。

  5. 选择下一步

  6. 执行自动化文档页面上,选择多账户和区域

  7. 目标账户和区域部分中,使用账户和组织 (OU)字段指定要在其中运行自动化的不同 Amazon Web Services 账户 或 Amazon 组织部门 (OU)。使用逗号分隔多个账户或 OU。

  8. 使用 Amazon Web Services 区域 列表选择要在其中运行自动化的一个或多个区域。

  9. 使用多区域和账户速率控制选项将自动化限制为在有限区域中的有限账户运行。这些选项不限制可运行自动化的 Amazon 资源的数量。

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

      • 选择目标,以输入可同时运行自动化的账户-区域对的绝对数量。

      • 选择百分比,以输入可同时运行自动化的账户-区域对总数的百分比。

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

      • 选择错误,以输入自动化停止将自动化发送到其他资源之前允许的错误绝对数量。

      • 选择百分比,以输入自动化停止将工作流程发送到其他资源之前允许的错误的百分比。

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

    1. 使用参数列表选择一个参数。参数列表中的项目由此过程开始时选择的自动化运行手册中的参数确定。通过选择参数,可以定义在其上运行自动化工作流的资源类型。

    2. 使用目标列表选择设置目标资源的方式。

      1. 如果选择使用参数值将资源设置为目标,请输入您在输入参数部分为参数选择的参数值。

      2. 如果选择使用 Amazon Resource Groups 将资源设置为目标,请从资源组列表中选择组的名称。

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

      4. 如果要在当前 Amazon Web Services 账户 和 Amazon Web Services 区域 中的所有实例上运行自动化运行手册,则选择所有实例

  11. 输入参数 部分中,指定所需的输入。从 AutomationAssumeRole 列表选择 AWS-SystemsManager-AutomationAdministrationRole IAM 服务角色。

    注意

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

  12. (可选)选择一个 CloudWatch 警报以应用于您的自动化进行监控。要将 CloudWatch 警报附加到自动化,启动自动化的 IAM 主体必须具有 iam:createServiceLinkedRole 操作的权限。有关 CloudWatch 警报的更多信息,请参阅使用 Amazon CloudWatch 警报。请注意,如果您的警报激活,自动化将取消,并且您定义的任何 OnCancel 步骤都会运行。如果使用 Amazon CloudTrail,您将在跟踪中看到 API 调用。

  13. 使用速率控制部分中的选项限制可在每个账户-区域对中运行自动化的 Amazon 资源的数量。

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

    • 选择目标,以输入可同时运行自动化工作流目标的绝对数量。

    • 选择百分比,以输入可同时运行自动化工作流的目标集的百分比。

  14. 错误阈值部分中,选择一个选项:

    • 选择错误,以输入自动化停止将工作流程发送到其他资源之前允许的错误的绝对数量。

    • 选择百分比,以输入自动化停止将工作流程发送到其他资源之前允许的错误的百分比。

  15. 选择执行

在多个区域和账户中运行自动化(命令行)

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

开始前的准备工作

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

  • 要在其中运行自动化的 Amazon Web Services 账户 账户 ID 或 OU。

  • 将在其中运行自动化的受 Systems Manager 支持区域

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

在多个区域和账户中运行自动化
  1. 安装并配置 Amazon CLI 或 Amazon Tools for PowerShell(如果尚未执行该操作)。

    有关信息,请参阅安装或更新 Amazon CLI 的最新版本以及安装 Amazon Tools for PowerShell

  2. 使用以下格式创建一个命令,以便在多个区域和账户中运行自动化。将每个示例资源占位符替换为您自己的信息。

    Linux & macOS
    aws ssm start-automation-execution \ --document-name runbook name \ --parameters AutomationAssumeRole=arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole \ --target-parameter-name parameter name \ --targets Key=tag key,Values=value \ --target-locations Accounts=account ID,account ID 2,Regions=Region,Region 2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    Windows
    aws ssm start-automation-execution ^ --document-name runbook name ^ --parameters AutomationAssumeRole=arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole ^ --target-parameter-name parameter name ^ --targets Key=tag key,Values=value ^ --target-locations Accounts=account ID,account ID 2,Regions=Region,Region 2,ExecutionRoleName=AWS-SystemsManager-AutomationExecutionRole
    PowerShell
    $Targets = New-Object Amazon.SimpleSystemsManagement.Model.Target $Targets.Key = "tag key" $Targets.Values = "value" Start-SSMAutomationExecution ` -DocumentName "runbook name" ` -Parameter @{ "AutomationAssumeRole"="arn:aws:iam::management account ID:role/AWS-SystemsManager-AutomationAdministrationRole" } ` -TargetParameterName "parameter name" ` -Target $Targets ` -TargetLocation @{ "Accounts"="account ID","account ID 2"; "Regions"="Region","Region 2"; "ExecutionRoleName"="AWS-SystemsManager-AutomationExecutionRole" }

    下面是几个示例:

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

    Linux & macOS
    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 账户中的 EC2 实例,它们位于 eu-central-1 区域中。这些实例必须是 prod-instances Amazon 资源组的成员。

    Linux & macOS
    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 Amazon 组织部门 (OU) 中的 EC2 实例。这些实例位于 us-west-1us-west-2 区域中。这些实例必须是 WebServices Amazon 资源组的成员。

    Linux & macOS
    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" }

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

    Linux & macOS
    {
            "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
        }
    Windows
    {
            "AutomationExecutionId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
        }
    PowerShell
    4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
  3. 运行以下命令以查看自动化的详细信息。将 automation execution ID 替换为您自己的信息。

    Linux & macOS
    aws ssm describe-automation-executions \ --filters Key=ExecutionId,Values=automation execution ID
    Windows
    aws ssm describe-automation-executions ^ --filters Key=ExecutionId,Values=automation execution ID
    PowerShell
    Get-SSMAutomationExecutionList | ` Where {$_.AutomationExecutionId -eq "automation execution ID"}
  4. 运行以下命令以查看自动化进程的详细信息。

    Linux & macOS
    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
    注意

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