IT

EC2インスタンスにセキュリティパッチを適用する方法

EC2インスタンスにログインすると、以下のようにパッケージアップデートのメッセージが表示されます。この通りにsudo yum updateすればアップデートされるのですが、他のアプリが動いている時に行っても良いのか、アップデート後に再起動は必要なのかなど気になることがあったので、少し調べてみました。

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
41 package(s) needed for security, out of 79 available
Run "sudo yum update" to apply all updates.

利用可能なセキュリティパッチを確認する

まず、アップデートが必要と言われているパッケージの具体的な一覧は yum check-update または yum updateinfo コマンドで確認できます。

$ yum check-update --security
(なんかすごく色々と表示されたので省略)
41 package(s) needed for security, out of 79 available

bzip2.x86_64                            1.0.6-13.amzn2.0.3            amzn2-core
(省略)
systemd-sysv.x86_64                     219-78.amzn2.0.14             amzn2-core
Obsoleting Packages
grub2.x86_64                            1:2.06-2.amzn2.0.3            amzn2-core
    grub2.x86_64                        1:2.02-35.amzn2.0.4           installed
(省略)
$ yum updateinfo
amzn2-core/2/x86_64                                      | 3.7 kB     00:00
Updates Information Summary: updates
    33 Security notice(s)
         6 important Security notice(s)
         4 low Security notice(s)
        23 medium Security notice(s)
updateinfo summary done

yum updateinfo は33件の Security notices と最初のメッセージと数が異なりますが、これはALAS(Amazon Linux AMI Security Advisory)と呼ばれるパッチの単位のようで(Amazon Linux Security Centerで確認できます)、yum updateinfo list で緊急度を含めた一覧を確認できます。

$ yum updateinfo list
ALAS2-2021-1652 low/Sec.       bzip2-1.0.6-13.amzn2.0.3.x86_64
(省略)
ALAS2-2021-1647 medium/Sec.    systemd-sysv-219-78.amzn2.0.14.x86_64
updateinfo list done

ALASの詳細の確認は yum check-update--advisory オプションでできます(カンマ区切りで複数指定も可)。

$ yum check-update --advisory=ALAS2-2021-1652
(省略)
2 package(s) needed for security, out of 79 available

bzip2.x86_64                      1.0.6-13.amzn2.0.3                  amzn2-core
bzip2-libs.x86_64                 1.0.6-13.amzn2.0.3                  amzn2-core

セキュリティパッチを適用する

セキュリティパッチの適用は sudo yum update で行います。試しにALASを1つだけ指定して実行してみます。

$ sudo yum update --advisory=ALAS2-2021-1652
(省略)
Dependencies Resolved

================================================================================
 Package          Arch         Version                   Repository        Size
================================================================================
Updating:
 bzip2            x86_64       1.0.6-13.amzn2.0.3        amzn2-core        52 k
 bzip2-libs       x86_64       1.0.6-13.amzn2.0.3        amzn2-core        40 k

Transaction Summary
================================================================================
Upgrade  2 Packages

Total download size: 92 k
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/2): bzip2-libs-1.0.6-13.amzn2.0.3.x86_64.rpm            |  40 kB   00:00
(2/2): bzip2-1.0.6-13.amzn2.0.3.x86_64.rpm                 |  52 kB   00:00
--------------------------------------------------------------------------------
Total                                              755 kB/s |  92 kB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : bzip2-libs-1.0.6-13.amzn2.0.3.x86_64                         1/4
  Updating   : bzip2-1.0.6-13.amzn2.0.3.x86_64                              2/4
  Cleanup    : bzip2-1.0.6-13.amzn2.0.2.x86_64                              3/4
  Cleanup    : bzip2-libs-1.0.6-13.amzn2.0.2.x86_64                         4/4
  Verifying  : bzip2-1.0.6-13.amzn2.0.3.x86_64                              1/4
  Verifying  : bzip2-libs-1.0.6-13.amzn2.0.3.x86_64                         2/4
  Verifying  : bzip2-1.0.6-13.amzn2.0.2.x86_64                              3/4
  Verifying  : bzip2-libs-1.0.6-13.amzn2.0.2.x86_64                         4/4

Updated:
  bzip2.x86_64 0:1.0.6-13.amzn2.0.3    bzip2-libs.x86_64 0:1.0.6-13.amzn2.0.3

Complete!

すると、パッケージ単位だと2つ、ALAS単位だと1つが適用され、確認コマンドの結果にも反映されています。

$ yum check-update --security
39 package(s) needed for security, out of 77 available

$ yum updateinfo
Updates Information Summary: updates
    32 Security notice(s)
         6 important Security notice(s)
         3 low Security notice(s)
        23 medium Security notice(s)
updateinfo summary done

セキュリティーに関するものを全てアップデートする場合は --security オプションを指定します。

$ sudo yum update --security
(省略)
Transaction Summary
================================================================================
Install   7 Packages (+2 Dependent packages)
Upgrade  33 Packages

Total download size: 59 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/42): chrony-4.0-3.amzn2.0.2.x86_64.rpm                  | 287 kB   00:00
(2/42): cloud-init-19.3-44.amzn2.noarch.rpm                | 926 kB   00:00
(省略)
Complete!

確認してみると見事になくなっています。カーネルもアップデートされたものの、まだアップデート前のバージョンで動いているようです。

$ yum check-update --security
No packages needed for security; 37 packages available
Security: kernel-4.14.243-185.433.amzn2.x86_64 is an installed security update
Security: kernel-4.14.209-160.339.amzn2.x86_64 is the currently running version

$ yum updateinfo
Security: kernel-4.14.243-185.433.amzn2.x86_64 is an installed security update
Security: kernel-4.14.209-160.339.amzn2.x86_64 is the currently running version
updateinfo summary done

再起動が必要かを確認する

カーネルをアップデートしたのでOS再起動が必要なのは確実ですが、その前にサービスやOSの再起動が必要か確認するコマンドがあるので実行してみます。sudo needs-restarting-s-r オプションです。

$ sudo needs-restarting -s
rpcbind.service
systemd-logind.service
network.service
postfix.service
dbus.service
lvm2-lvmetad.service
sshd.service
rngd.service
rsyslog.service
systemd-journald.service

$ sudo needs-restarting -r
Core libraries or services have been updated:
  openssl-libs -> 1:1.0.2k-19.amzn2.0.7
  kernel -> 4.14.243-185.433.amzn2
  systemd -> 219-78.amzn2.0.14

Reboot is required to ensure that your system benefits from these updates.

More information:
https://access.redhat.com/solutions/27943

再起動(sudo reboot)すると表示がなくなりました。

$ sudo needs-restarting -s
$ sudo needs-restarting -r
No core libraries or services have been updated.
Reboot is probably not necessary.

まとめ

セキュリティパッチの適用自体は簡単に行え、個別に適用したり、適用後の再起動の要否を確認したりする方法も分かりました。

他のシステムに影響を与えない場合もありますが、影響範囲は個別に調べる必要がありますし、サービスやOSの再起動が必要な場合もあるので、基本的にはシステムから切り離して行うものだと言えます。