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

教程:修补服务器环境 (AWS CLI)

以下过程将说明用户如何使用自定义补丁基准、补丁组和维护时段来修补服务器环境。

注意

您必须先为维护时段功能配置角色和权限,然后才能开始使用。有关更多信息,请参阅 控制对维护时段的访问权限

有关可以用于 Patch Manager 配置任务的其他 AWS CLI 命令的示例,请参阅Patch Manager 的 AWS CLI 命令

开始前的准备工作

在实例上安装或更新 SSM 代理。要修补 Linux 实例,您的实例必须运行 SSM 代理 版本 2.0.834.0 或更高版本。有关更新此代理的信息,请参阅从控制台运行命令中标题为示例:更新 SSM 代理 的部分。

此外,以下演练在维护时段期间运行补丁。您必须先为维护时段功能配置角色和权限,然后才能开始使用。有关更多信息,请参阅 控制对维护时段的访问权限

配置 Patch Manager 和补丁实例 (AWS CLI)

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

    有关信息,请参阅安装或升级 AWS CLI

  2. (Windows) 运行以下命令以创建一个名为“Production-Baseline”的补丁基准,该补丁基准将在发布适用于生产环境的补丁 7 天后批准这些补丁。此外,补丁基准已标记来指示它适用于生产环境。

    aws ssm create-patch-baseline --name "Production-Baseline" --operating-system "WINDOWS" --tags "Key=Environment,Value=Production" --approval-rules "PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=MSRC_SEVERITY,Values=[Critical,Important]},{Key=CLASSIFICATION,Values=[SecurityUpdates,Updates,UpdateRollups,CriticalUpdates]}]},ApproveAfterDays=7}]" --description "Baseline containing all updates approved for production systems"

    (Linux) 运行以下命令以创建一个名为“Production-Baseline”的补丁基准,该补丁基准将在发布适用于生产环境的补丁 7 天后批准这些补丁,包括源存储库中包括的安全性和非安全性补丁。此外,补丁基准已标记来指示它适用于生产环境。

    aws ssm create-patch-baseline --name "Production-Baseline" --operating-system "AMAZON_LINUX_2" --tags "Key=Environment,Value=Production" --approval-rules "PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=PRODUCT,Values=[AmazonLinux2,AmazonLinux2.0]},{Key=SEVERITY,Values=[Critical,Important]},{Key=CLASSIFICATION,Values=[Security]}]},ApproveAfterDays=7,EnableNonSecurity=true}]" --description "Baseline containing all updates approved for production systems"

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

    {
       "BaselineId":"pb-0c10e65780EXAMPLE"
    }
  3. 运行以下命令,为三个分别名为“Production”、“Database Servers”和“Front-End Patch Group”的补丁组注册“Production-Baseline”补丁基准。

    aws ssm register-patch-baseline-for-patch-group --baseline-id pb-0c10e65780EXAMPLE --patch-group "Production"

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

    {
       "PatchGroup":"Production",
       "BaselineId":"pb-0c10e65780EXAMPLE"
    }
    aws ssm register-patch-baseline-for-patch-group --baseline-id pb-0c10e65780EXAMPLE --patch-group "Database Servers"

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

    {
       "PatchGroup":"Database Servers",
       "BaselineId":"pb-0c10e65780EXAMPLE"
    }
  4. 运行以下命令为生产服务器创建两个维护时段。第一个时段在每周二晚上 10 点运行。第二个时段在每周六晚上 10 点运行。此外,维护时段已标记来指示它适用于生产环境。

    aws ssm create-maintenance-window --name "Production-Tuesdays" --tags "Key=Environment,Value=Production" --schedule "cron(0 0 22 ? * TUE *)" --duration 1 --cutoff 0 --no-allow-unassociated-targets

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

    {
       "WindowId":"mw-0c66948c711a3b5bd"
    }
    aws ssm create-maintenance-window --name "Production-Saturdays" --tags "Key=Environment,Value=Production" --schedule "cron(0 0 22 ? * SAT *)" --duration 2 --cutoff 0 --no-allow-unassociated-targets

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

    {
       "WindowId":"mw-09e2a75baadd84e85"
    }
  5. 运行以下命令以将生产服务器注册到两个生产维护时段。

    aws ssm register-target-with-maintenance-window --window-id mw-0c66948c711a3b5bd --targets "Key=tag:Patch Group,Values=Production" --owner-information "Production servers" --resource-type "INSTANCE"

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

    {
       "WindowTargetId":"557e7b3a-bc2f-48dd-ae05-e282b5b20760"
    }
    aws ssm register-target-with-maintenance-window --window-id mw-0c66948c711a3b5bd --targets "Key=tag:Patch Group,Values=Database Servers" --owner-information "Database servers" --resource-type "INSTANCE"

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

    {
       "WindowTargetId":"767b6508-f4ac-445e-b6fe-758cc912e55c"
    }
    aws ssm register-target-with-maintenance-window --window-id mw-09e2a75baadd84e85 --targets "Key=tag:Patch Group,Values=Production" --owner-information "Production servers" --resource-type "INSTANCE"

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

    {
       "WindowTargetId":"faa01c41-1d57-496c-ba77-ff9cadba4b7d"
    }
    aws ssm register-target-with-maintenance-window --window-id mw-09e2a75baadd84e85 --targets "Key=tag:Patch Group,Values=Database Servers" --owner-information "Database servers" --resource-type "INSTANCE"

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

    {
       "WindowTargetId":"673b5840-58a4-42ab-8b80-95749677cb2e"
    }
  6. 运行以下命令以注册一个补丁任务,此任务仅在第一个生产维护时段内扫描生产服务器是否存在缺失的更新。

    aws ssm register-task-with-maintenance-window --window-id mw-0c66948c711a3b5bd --targets "Key=WindowTargetIds,Values=557e7b3a-bc2f-48dd-ae05-e282b5b20760" --task-arn "AWS-RunPatchBaseline" --service-role-arn "arn:aws:iam::12345678:role/MW-Role" --task-type "RUN_COMMAND" --max-concurrency 2 --max-errors 1 --priority 1 --task-parameters '{\"Operation\":{\"Values\":[\"Scan\"]}}'

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

    {
       "WindowTaskId":"968e3b17-8591-4fb2-932a-b62389d6f635"
    }
    aws ssm register-task-with-maintenance-window --window-id mw-0c66948c711a3b5bd --targets "Key=WindowTargetIds,Values=767b6508-f4ac-445e-b6fe-758cc912e55c" --task-arn "AWS-RunPatchBaseline" --service-role-arn "arn:aws:iam::12345678:role/MW-Role" --task-type "RUN_COMMAND" --max-concurrency 2 --max-errors 1 --priority 5 --task-parameters '{\"Operation\":{\"Values\":[\"Scan\"]}}'

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

    {
       "WindowTaskId":"09f2e873-a3a7-443f-ba0a-05cf4de5a1c7"
    }
  7. 运行以下命令以注册一个补丁任务,此任务在第二个维护时段内在生产服务器上安装缺失的更新。

    aws ssm register-task-with-maintenance-window --window-id mw-09e2a75baadd84e85 --targets "Key=WindowTargetIds,Values=557e7b3a-bc2f-48dd-ae05-e282b5b20760" --task-arn "AWS-RunPatchBaseline" --service-role-arn "arn:aws:iam::12345678:role/MW-Role" --task-type "RUN_COMMAND" --max-concurrency 2 --max-errors 1 --priority 1 --task-parameters '{\"Operation\":{\"Values\":[\"Install\"]}}'

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

    {
       "WindowTaskId":"968e3b17-8591-4fb2-932a-b62389d6f635"
    }
    aws ssm register-task-with-maintenance-window --window-id mw-09e2a75baadd84e85 --targets "Key=WindowTargetIds,Values=767b6508-f4ac-445e-b6fe-758cc912e55c" --task-arn "AWS-RunPatchBaseline" --service-role-arn "arn:aws:iam::12345678:role/MW-Role" --task-type "RUN_COMMAND" --max-concurrency 2 --max-errors 1 --priority 5 --task-parameters '{\"Operation\":{\"Values\":[\"Install\"]}}'

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

    {
       "WindowTaskId":"09f2e873-a3a7-443f-ba0a-05cf4de5a1c7"
    }
  8. 运行以下命令以获取补丁组的高级补丁合规性摘要。高级补丁合规性摘要将为您提供补丁组的大量具有以下状态的补丁的实例数:“NotApplicable”、“Missing”、“Failed”、“InstalledOther”和“Installed”。

    aws ssm describe-patch-group-state --patch-group "Production"

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

    {
       "InstancesWithNotApplicablePatches":0,
       "InstancesWithMissingPatches":0,
       "InstancesWithFailedPatches":1,
       "InstancesWithInstalledOtherPatches":4,
       "Instances":4,
       "InstancesWithInstalledPatches":3
    }
  9. 运行以下命令以获取补丁组的每个实例的补丁摘要状态。每个实例的摘要将为您提供补丁组的每个实例中具有以下状态的大量补丁:“NotApplicable”、“Missing”、“Failed”、“InstalledOther”和“Installed”。

    aws ssm describe-instance-patch-states-for-patch-group --patch-group "Production"

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

    {
       "InstancePatchStates":[
          {
             "OperationStartTime":1481259600.0,
             "FailedCount":0,
             "InstanceId":"i-08ee91c0b17045407",
             "OwnerInformation":"",
             "NotApplicableCount":2077,
             "OperationEndTime":1481259757.0,
             "PatchGroup":"Production",
             "InstalledOtherCount":186,
             "MissingCount":7,
             "SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e",
             "Operation":"Scan",
             "InstalledCount":72
          },
          {
             "OperationStartTime":1481259602.0,
             "FailedCount":0,
             "InstanceId":"i-0fff3aab684d01b23",
             "OwnerInformation":"",
             "NotApplicableCount":2692,
             "OperationEndTime":1481259613.0,
             "PatchGroup":"Production",
             "InstalledOtherCount":3,
             "MissingCount":1,
             "SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e",
             "Operation":"Scan",
             "InstalledCount":1
          },
          {
             "OperationStartTime":1481259547.0,
             "FailedCount":0,
             "InstanceId":"i-0a00def7faa94f1dc",
             "OwnerInformation":"",
             "NotApplicableCount":1859,
             "OperationEndTime":1481259592.0,
             "PatchGroup":"Production",
             "InstalledOtherCount":116,
             "MissingCount":1,
             "SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e",
             "Operation":"Scan",
             "InstalledCount":110
          },
          {
             "OperationStartTime":1481259549.0,
             "FailedCount":0,
             "InstanceId":"i-09a618aec652973a9",
             "OwnerInformation":"",
             "NotApplicableCount":1637,
             "OperationEndTime":1481259837.0,
             "PatchGroup":"Production",
             "InstalledOtherCount":388,
             "MissingCount":2,
             "SnapshotId":"b0e65479-79be-4288-9f88-81c96bc3ed5e",
             "Operation":"Scan",
             "InstalledCount":141
          }
       ]
    }