1

我正在尝试使用带有维护窗口的 EC2 Systems Manager 来应用安全补丁。我找不到制作这个的文件。有没有人已经做过这个并且可以给我一个线索?

我知道 AWS 提供适用于 Windows 的Patch Manager

4

1 回答 1

2

您可以在此处找到有关在 EC2 Systems Manager 中开始修补的官方文档:http: //docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/systems-manager-patch.html

还有一个演练涵盖了完整的入门步骤集:http: //docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/sysman-patch-walkthrough.html

我使用 AWS CLI 和 AWS Toolkit for PowerShell 添加了一些与您的问题相关的具体示例。当然,您也可以在 AWS 控制台中执行所有这些操作。

安装安全补丁

要控制应安装的补丁程序,请使用补丁程序基准。补丁基准由一组规则组成,这些规则定义了哪些补丁应该被批准部署以及何时应该被批准,以及一组可选的明确批准和拒绝的补丁。

创建补丁基线

在您的情况下,要仅应用安全补丁,您可以像这样创建补丁基线:

AWS CLI

aws ssm create-patch-baseline --name "Only-Security-Patches"
  --approval-rules "PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=CLASSIFICATION,Values=SecurityUpdates}]},ApproveAfterDays=3}]" 
  --description "Security updates for all versions of Windows"

AWS PowerShell

$rule = New-Object Amazon.SimpleSystemsManagement.Model.PatchRule
$rule.ApproveAfterDays = 3
$ruleFilters = New-Object Amazon.SimpleSystemsManagement.Model.PatchFilterGroup
$classificationFilter = New-Object Amazon.SimpleSystemsManagement.Model.PatchFilter
$classificationFilter.Key = "CLASSIFICATION"
$classificationFilter.Values.Add( "SecurityUpdates" )
$ruleFilters.PatchFilters.Add($classificationFilter)
$rule.PatchFilterGroup = $ruleFilters
New-SSMPatchBaseline 
  -Name "Only-Security-Patches" `
  -Description "Security updates for all versions of Windows" `
  -ApprovalRules_PatchRule $rule

定义默认补丁基准

Patch Group通过使用标签标记实例,将标签的值设置为您选择的补丁组的名称,您可以控制要用于特定 EC2 实例的补丁基准。之后,您可以将补丁组注册到补丁基准。就本示例而言,您还可以将新的补丁基线定义为默认补丁基线,以用于所有未使用标签标记的实例Patch Group

AWS CLI

aws ssm register-default-patch-baseline --baseline-id <the id of the patch baseline created above>

*AWS PowerShell

Register-SSMDefaultPatchBaseline-BaselineId <the id of the patch baseline created above>

使用维护时段驱动修补

创建并配置所需的补丁基准后,您可以使用AWS-ApplyPatchBaseline命令文档来修补实例。如果您只想测试补丁,您可以使用 Run Command 将命令发送到您的实例,但如果您想自动化它,Maintenance Windows 可以提供帮助。

维护时段定义:

  • 哪些实例是维护时段中任务的有效目标
  • 应该针对什么目标执行什么任务
  • 何时应执行这些任务

使用维护窗口将实例注册为目标是可选的,在下面的示例中,我选择不需要目标注册。

创建维护时段

出于本示例的目的,让我们创建一个维护时段,该时段在每周二下午 4 点运行,持续时间为 4 小时:

AWS CLI

aws ssm create-maintenance-window 
  --name "My-Tuesday-Maintenance-Window" 
  --schedule "cron(0 16 ? * TUE *)" 
  --duration 4 
  --cutoff 1
  --allow-unassociated-targets

*AWS PowerShell

New-SSMMaintenanceWindow `
  -Name "My-Tuesday-Maintenance-Window" `
  -Schedule "cron(0 16 ? * TUE *)" `
  -Duration 4 `
  -Cutoff 1 `
  -AllowUnassociatedTarget $true `

注册补丁任务

创建维护窗口后,您现在可以注册要在其中运行的任务,在这种情况下,我们要运行AWS-ApplyPatchBaseline命令。

请注意,以下命令假定您已经执行了定义要用于维护时段的 IAM 角色(我在此处将此角色命名为MW-Role )的步骤,如下所述:http: //docs.aws .amazon.com/AWSEC2/latest/WindowsGuide/sysman-patch-walkthrough.html

AWS CLI

aws ssm register-task-with-maintenance-window 
  --window-id <the id of your maintenance window>
  --targets "Key=InstanceIds,Values=<comma-separated list of instance ids>" 
  --task-arn "AWS-ApplyPatchBaseline" 
  --service-role-arn "arn:aws:iam::<your account id>:role/MW-Role" 
  --task-type "RUN_COMMAND" 
  --max-concurrency 2 
  --max-errors 1 
  --priority 1 
  --task-parameters '{\"Operation\":{\"Values\":[\"Install\"]}}'

AWS PowerShell

$parameters = @{}
$parameterValues = new-object Amazon.SimpleSystemsManagement.Model.MaintenanceWindowTaskParameterValueExpression
$parameterValues.Values = @("Install")
$parameters.Add("Operation", $parameterValues)

Register-SSMTaskWithMaintenanceWindow `
  -WindowId <the id of your maintenance window> `
  -Target @{ Key="InstanceIds";Values="<comma-separated list of instance ids>" } `
  -TaskArn "AWS-ApplyPatchBaseline" `
  -ServiceRoleArn "arn:aws:iam::<your account id>:role/MW-Role" `
  -TaskType "RUN_COMMAND" `
  -MaxConcurrency 2 `
  -MaxErrors 1 `
  -Priority 1 `
  -TaskParameter $parameters `

其他有趣的功能

现在一切都已配置完毕,您可以查看维护时段执行的历史记录以及正在修补的实例的补丁合规性状态。

维护时段执行

您可以使用以下命令深入了解维护时段的执行历史记录:

AWS CLI

AWS PowerShell

补丁合规信息

为您的实例打补丁后,您可以获得它们的补丁合规性信息。

AWS CLI

AWS PowerShell

我希望这有助于回答您的问题,如果没有,请告诉我。

于 2017-03-18T16:32:10.140 回答