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

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

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

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

注意

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

重要

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

工作方式

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

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

  2. 登录要配置为自动化主账户的 Amazon Identity and Access Management (IAM) 账户。

  3. 使用本主题中的过程创建名为 AWS-SystemsManager-AutomationExecutionRole IAM 自动化角色。此角色为用户提供运行自动化的权限。

  4. 使用本主题中的过程创建第二个 IAM 角色,名为 AWS-SystemsManager-AutomationAdministrationRole。此角色为用户提供在多个 Amazon Web Services 账户 账户和 OU 中运行自动化的权限。

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

    注意

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

  6. 运行自动化。在多个区域、账户或 OU 之间运行自动化时,从主账户运行的自动化将在每个目标账户中启动子自动化。主账户中的自动化将具有每个目标账户的 aws:executeAutomation 步骤。

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

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

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

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

使用 Amazon CloudFormation 创建进行多区域和多账户自动化所需的 IAM 角色

  1. 下载并解压缩 AWS-SystemsManager-AutomationExecutionRole.zip 文件。此文件包含 AWS-SystemsManager-AutomationExecutionRole.json Amazon CloudFormation 模板文件。

    注意

    我们建议不要将模板中指定的角色名称更改为 AWS-SystemsManager-AutomationExecutionRole 以外的其他内容。否则,您的多区域和多账户自动化可能会失败。

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

  3. 选择创建堆栈

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

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

  6. 选择 Next (下一步)

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

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

  9. 选择 Next (下一步)

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

  11. Review(审核)页面上,向下滚动并选择 I acknowledge that Amazon CloudFormation might create IAM resources with custom names(我确认 Amazon CloudFormation 可能使用自定义名称创建 IAM 资源)选项。

  12. 选择创建堆栈

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

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

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

    注意

    用于运行多区域或多账户自动化的用户或角色必须具有 AWS-SystemsManager-AutomationAdministrationRole 角色的 iam:PassRole 权限。我们建议不要将模板中指定的角色名称更改为 AWS-SystemsManager-AutomationAdministrationRole 之外的其他内容。否则,您的多区域和多账户自动化可能会失败。

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

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

开始前的准备工作

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

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

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

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

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

  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

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

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

    注意

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

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

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

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

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

  5. 选择 Next (下一步)

  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 列表选择一个 IAM 服务角色。

    注意

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

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

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

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

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

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

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

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

  14. 选择执行

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

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

开始前的准备工作

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

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

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

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

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

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

    想要了解有关信息,请参阅安装或升级 Amazon 命令行工具.

  2. 使用以下格式创建一个命令,以便在多个区域和账户中运行自动化。

    Linux & macOS
    aws ssm start-automation-execution \ --document-name name_of_runbook \ --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_runbook ^ --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_runbook" ` -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 账户中的 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. 运行以下命令以查看自动化的详细信息。

    Linux & macOS
    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. 运行以下命令以查看自动化进程的详细信息。

    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
    注意

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

通过 Amazon Systems Manager自动化进行集中式多账户和多区域修补