ちょっと話題の記事

【アップデート】Amazon EC2 Systems ManagerのPatch ManagerがLinuxに対応しました!!!

2017.07.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

森永です。

パッチ管理してますか?
古いパッケージをそのまま使っていませんか?

脆弱性を突いた攻撃の多くはパッチ管理をしていれば防げますが、後手に回っているという方も多いかと思います。
AWSではPatch Managerという素晴らしい機能があり、自動でパッチを適用することが出来ます。
こちらの機能はWindows限定の機能だったのですが、遂にLinuxに対応しました!!

Amazon EC2 Systems Manager Now Supports Linux Patching

対応Liuxディストリビューション

  • 64-Bitと32-Bitの両方に対応
    • Amazon Linux 2014.03, 2014.09 以降
    • Ubuntu Server 12.04 LTS, 14.04 LTS, or 16.04 LTS
    • Red Hat Enterprise Linux (RHEL) 6.5 以降
  • 64-Bitのみに対応
    • Amazon Linux 2015.03, 2015.09, 以降
    • Red Hat Enterprise Linux (RHEL) 7.x 以降

試してみる

前準備

こちらのチュートリアルを参考にEC2インスタンスを用意して下さい。
やる作業は以下の2点だけです。

  • 「AmazonEC2RoleforSSM」ポリシーがアタッチされたIAMロールをEC2に割り当てる
  • EC2にSSMエージェントをインストール、実行する(User Dataでやってもいいです)

EC2_Management_Console

最新のAMIを使うと最新のパッチが当たっているため、今回は古いAMI(Amazon Linux AMI release 2016.09)を使用して試します。

パッチグループの設定

パッチグループと言っていますが、インスタンスにタグ付けするだけです。
必須ではないですが、推奨されていますので設定します。

単純なWebサーバであればカジュアルにパッチを当ててしまってもあまり問題にはならないかと思いますが、基幹の重要なサーバの場合は慎重にパッチを当てたいということもあるかと思います。
また、検証サーバはすぐにパッチを当てて問題が起きないかを確かめて、本番は数日置いて問題ないことを確かめてから当てたいということもあるでしょう。
役割ごとにタグを分けておくとPatch Managerでパッチ適用の戦略をグループ毎に変えることができます。

パッチグループを設定するには、インスタンスに「Patch Group」というキーでタグを設定します。
今回は「dev」のように設定してみます。

EC2_Management_Console 3

パッチベースラインの作成

次にパッチの適用条件となるパッチベースラインを設定します。
どのようなパッチをどのように適用するか(何日後に適用など)を設定できます。

「Patch Baselines」から「Create Patch Baseline」を選択します。
設定画面では以下のように設定します。

  • Name:任意の名前
    • OSとパッチグループの名前があると分かりやすいです
  • Description:任意の説明
  • Operating System:使用しているOS

EC2_Management_Console 18

キモとなるのは「Approval Rules」の部分です。
ここでパッチ適用の戦略を設定します。

今回は以下のように設定してみました。

  • 基本的に「Critical」なパッチは全て即時適用
  • Security周りは怖いので「Important」なものも即時適用
  • Bugfixは全て即時適用
  • その他はパッチリリースから7日後適用

EC2_Management_Console 6

パッチベースラインが出来たらそれにパッチグループを割り当てます。
作成したパッチベースラインを選択し、「Modify Patch Groups」を選択します。

EC2_Management_Console 10

タグで設定したパッチグループの値を指定し、チェックボタンを押します。
そのまま「Close」すると確定しないのでご注意を。

EC2_Management_Console 16

パッチ適用実行

本来は定期的に実行する必要があるためメンテナンスウィンドウを使うのが筋ですが、今回は検証のためRun Commandで単発実行します。

Run Commandで以下のように設定を行います。

  • Command document:AWS-RunPatchBaseline
    • AWS-ApplyPatchBaselineではないのでご注意下さい
  • Select Targets by:Patch Groupのタグで指定します
  • Execute on:1 targets
    • 同時に処理を実行する台数を指定します
    • 割合で指定することも可能です
  • Stop after:1 errors
    • いくつ処理に失敗した場合に処理を停止するかを指定します
  • Operation:Scan
    • Scanの場合は最新パッチでないものをスキャンしてくれます(今回はこちら)
    • Installの場合はインストールしてくれます(再起動が走るので注意)

あとはデフォルト値のまま「Run」を押して実行します。

EC2_Management_Console 17

Run Command実行が完了した後、「Patch Compliance」で確認するとパッチが最新でないインスタンスがある事が分かります。

EC2_Management_Console 13

「Managed Instances」からは更に詳細なパッチの情報を確認できます。
下部の「Patch」タブを確認すると、適用が必要なパッチ数が確認できます。
フィルタで「State」が「Missing」なものを選択すると、一覧を確認可能です。

EC2_Management_Console 14

34個適用が必要なパッチがありますので、適用処理まで実行してみましょう。
先ほど実行したRun Commandの「Operation」の部分だけ「Install」にして実行してみましょう。(再起動が走ります!!)

完了後、「Patch Compliance」を確認するとちゃんとup to dateになっていることがわかりますね!

EC2_Management_Console 15

最後に

LinuxもPatch Managerで管理できるようになり、sshしないでのインスタンスのフル運用が現実のものになってきました。
パッチの管理はセキュリティの面でも非常に重要ですので、AWSの機能をうまく活用し楽してセキュアな環境を作りましょう!!