监测,OPS.& DevOps

使用AWS SSM,我的Linux实例始终是最新的

使用AWS Systems Manager管理Linux EC2实例队列的更新。
Artur Kowalski.用户图像
Artur Kowalski. | 2019年8月23日

星期五,2019年8月23日

我们生活在一个我们需要记住实例上的操作系统或基本包的世界,因为安全性严重重要。

在我们的env时,有很多情况。有时弄错误,或者我们可以忘记更新其中一个实例。

使用AWS SSM,我们可以为EC2实例安排自动更新。

AWS Systems Manager代理(SSM代理)是可以在Amazon EC2实例,内部部署服务器或虚拟机(VM)上安装和配置的Amazon软件。 SSM代理可以使Systems Manager更新,管理和配置这些资源。代理处理AWS Cloud中系统管理器服务的请求,然后按照请求中的指定运行它们。然后,SSM代理通过使用Amazon消息传递服务将状态和执行信息发送回系统管理器服务(服务前缀:EC2Messages)。

对于本文,我将创建一个小型env。为了更好地使用SSM,我们需要向EC2实例添加正确的标记,并在这些实例上安装SSM代理。

我们的更新计划:

  • 更新实例之前,AMI映像将自动创建为备份解决方案。
  • 分期实例将于周六在UTC的06:00周六修补
  • 仅在实例上安装关键和重要的更新

设置

在暂存ENV中,使用Ubuntu 14.04 OS将有两个EC2实例(称为阶段WEB01和舞台WEB02)。

标签

如果我们有一个大的环境,标签很有帮助。对于我们的文章,我们将为实例附加3个标签:

  • env:暂存
  • OS:Ubuntu14.
  • 补丁组:Ubuntu_staging

从这些标签,我们知道该实例来自使用OS Ubuntu 14的环境分段,而这种情况是Patch Group Ubuntu_staging的一部分。这是稍后重要的。

SSM代理

默认情况下安装了SSM代理:

  • Windows Server 2003-2012 R2 Amis于2016年11月或以后发布
  • Windows Server 2016和2019
  • 亚马逊Linux.
  • 亚马逊Linux 2
  • Ubuntu Server 16.04.
  • Ubuntu Server 18.04.

我们的实例使用Ubuntu 14.04,默认情况下未安装SSM代理。我们需要手动安装SSM代理。您可以阅读安装SSM代理时的AWS文档.

Iam角色

默认情况下,AWS Systems Manager无权在实例上执行操作。您必须使用AWS Identity和Access Management(IAM)实例配置文件来授予访问权限。实例配置文件是将IAM角色信息传递给Amazon Elastic Compute Cloud(Amazon EC2)实例的容器。您可以通过附加一个或多个IAM策略来为System Manager创建实例配置文件,该策略定义了对新角色或已创建的角色来定义必要的权限。

在本文中,您需要两个IAM角色。

The first IAM Role will be called role-for-ssm. This role will be attached to our two instances.

转到AWS控制台 - >我是 ->角色并击中“创建角色”按钮

创建一个名为smm的角色,并附上名为:amazonec2roleforssm的AWS管理器策略

有关更多信息,请阅读//docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html

请记得将IAM角色角色为SSM附加到我们的两个实例。

转到AWS控制台 - >EC2,选择所需实例并命中操作 - >实例设置 - >附加/替换IAM角色

The second IAM Role will be called ssm_automation_service_role.

在创建此角色之前,请阅读这篇文章并做1,2,3的任务

阅读本文并完成任务后,IAM角色SSM自动化service_role应具有一个名为“AmazonssmautomationRole”的附加策略和一个内联策略。

使用SSM.

检查您的环境,我们需要确保SSM Agent正在研究实例:

为了测试目的,整个ENV在一个AZ中的EU-Central-1中发射。

(当然有很高的可用性需求,始终尝试在不同的AZ中启动多个实例)

每个实例都为SSM添加了IAM角色并安装了SSM代理。

请转到AWS Systems Manager中的托管实例,以检查我们是否正确地添加了名为SMS的IAM角色,如果SSM代理正在运行。

我们应该看到我们的整个env。

创建维护窗口

现在我们需要为我们的临时实例创建一个维护窗口:

请转到AWS控制台 - >系统经理 - >维护窗口,然后选择“创建维护窗口”。

名称:Ubuntu_stagingDescription:用于ubuntu Oscheck的暂存实例的维护窗口允许未注册的Targetscheck Cron计划Carron计划在06:00D调度中每周六:1小时启动任务:0个小时计时

创建补丁基线

Patch Baseline定义了哪些修补程序在您的实例上批准安装。您可以逐个指定批准或拒绝的补丁。您还可以创建自动批准规则,以指定应自动批准某些类型的更新(例如,关键更新)。拒绝列表覆盖了规则和批准的列表。

更多的有关补丁基线的信息.

要创建一个新的补丁基线,请转到AWS控制台 - >系统经理 - >Patch Manager,然后单击橙色按钮:创建补丁基线。

名称:Ubuntu-patch-baselinedescription:Ubuntu实例的补丁基线一个操作系统,请选择Ubuntudefault补丁基线:不要改变 - 休假未标记。

现在我们需要创建一些规则:

Rule1

产品:重算:Alluriority:必填符合规范:至关重要

Rule2

产品:重放:NoteplioRity:重要信息报告:至关重要

现在单击“创建补丁基线”,如果一切都很好,我们应该看到:

使用自定义补丁基线分配补丁组标记

现在,此步骤非常重要,我们需要使用Patch组标记分配我们的自定义补丁基准。

请转到AWS控制台 - >系统经理 - >补丁经理

找到Ubuntu的补丁基线,请按名称使用搜索:ubuntu-patch-baseline

选择我们的补丁基准,然后单击操作 - >修改补丁组

在Patch组中,添加我们的标签:staging_ubuntu

现在单击关闭。

In Patch groups, we should see our Patch group, staging_ubuntu, registered with ubuntu-patch-baseline.

请记住:如果我们未指定补丁组,AWS将使用所需操作系统的默认补丁基线。

在维护窗口中注册目标

我们希望SSM仅使用我们的标记更新实例Patch Group:staging_ubuntu

请转到AWS Systems Manager - >维护窗口

Search Maintenance window by name, ubuntu_staging, and click on the Window ID of the ubuntu_staging.

我们应该看到:

现在我们需要创建维护窗口目标。

单击“目标”选项卡和“注册目标”。

目标名称:staging-targetsdescription:窗口目标仅用于暂存实例目标选择,请选择:实例标记和类型:标签键:补丁组标签值:staging_ubuntu

最后,单击寄存器目标

我们应该看到这样的东西:

现在我们已使用维护窗口注册了我们的实例。

因此,如果我们添加具有正确标签和IAM角色的新实例,则新实例将自动添加到此维护窗口中。

在维护窗口中创建任务

现在我们需要在维护窗口中添加任务以进行暂存env。

请转到AWS Systems Manager - >维护窗口。

Search the Maintenance window by name: ubuntu_staging, and click on Window ID of the ubuntu_staging.

现在点击任务。

我们需要做的第一件事是在开始修补之前注册用于创建AMI映像的自动任务。这将是我们的备份计划。如果修补后存在错误,我们可以恢复更改,从备份AMI启动新实例。

要做到这一点,请:

单击“注册任务”,然后选择“注册自动化任务”。

名称:create_ami_imagedescription:此任务将在修补前创建实例的AMI映像

在自动化文件中,请在文档版本中选择AWS-CreateImage,在运行时选择最新版本。在任务优先级中,键入:0

Task priority 0 - it’s the highest priority, it will be executed as the first task In Targets, we need to select staging-targets registered targets groups

速率控制:

在这里,我们可以设置有多少实例可以一次运行此任务。

如果我们有一个非常大的环境,我们可以使用百分比,但在我们的情况下,我们会一次设置1个实例。

在错误阈值中,我们在应停止此任务时设置值。因此,如果出现错误,则此任务将停止。

我建议使用1。

现在选择自定义服务角色,允许维护窗口代表您的其他AWS资源进行交互。

在我们的案例中,它将是角色:ssm_automation_service_role

完成为创建AMI映像配置自动化的最后一步是设置输入参数。

请输入以下参数:

instanceID {{target_id}} noreboot false

然后选择橙色按钮,“编辑自动化任务”

由于这些参数,当SSM开始工作时,它将首先停止实例并将AMI映像作为备份解决方案创建。

现在我们需要创建修补的第二任务

转到维护窗口 - >任务并选择注册任务。然后选择注册运行命令任务。

类型:名称:PatchingTask

In the Command document, select AWS-RunPatchBaseline and enter 5 as the Task Priority

所以在这种情况下,第一个任务将是创造ami.图像因为这是优先权0和第二次patchingtask.因为它优先较低(5)

在目标中,如前所述,我们需要选择窗口目标ID调用staging-targets

速率控制,我们还需要设置1个目标(此任务将在目标组中的每个实例上执行 - 一个逐个),并在1个错误后停止

现在我们需要为此任务选择服务角色。

就像之前一样,我们需要使用一个角色:ssm_automation_service_role

对于此示例,我们不会更改输出选项(这将被禁用),我们不需要启用SNS通知。

在参数中,选择操作 - >安装。所有其他选项都将默认。

现在单击“编辑运行”命令任务,我们已完成配置SSM。

测试SSM

出于测试目的,我在utc 11:45的每周五改变了维护窗口。

更改维护窗口后,请记住启用维护窗口。

如果我们启用维护窗口,我们应该看到这样的东西:

我们应该看到下一个执行时间:Fri,2019年7月12日,11:45:00 AM UTC

11:45之后,转到维护窗口,然后单击历史记录,我们应该看到类似的东西:

我们的窗口执行ID是“正在进行” - 很棒!选择我们的窗口执行ID,然后单击查看详细信息。

我们看到SSM现在任务创建AMI映像。

当修补任务正在进行时,它应该看起来相似。

最后,我们应该看到这样的东西:

恭喜!我们已成功配置SSM以创建AMI映像作为备份,然后更新我们的实例。

作者
Artur Kowalski.用户图像
Artur Kowalski.