AWS Systems Manager Patch Manager で特定パッチの更新をブロックしてみよう

記事タイトルとURLをコピーする

はじめに

サメ映画をこよなく愛する梅木です。

さて、今回は AWS Systems Manager Patch Manager の 「拒否されたパッチ(Rejected patches)」 のリストという機能を検証します。 AWS Systems Manager Patch Manager によりパッチ適用を自動化することが出来ますが、特定のパッチのインストールだけを更新対象外としたいシーンがあります。 今回はそんな「特定のパッチの更新をブロックする」機能の動きを見ていきたいと思います。

Patch Manager とは

EC2 OS へのパッチ適用を自動化するマネージドサービスです。詳しくは以下記事をご覧ください。

blog.serverworks.co.jp

拒否されたパッチ(Rejected patches)とは

AWS Systems Manager Patch Manager において、

特定のパッチやパッケージ更新を明示的にインストール対象外にする機能のことです。

通常、パッチベースラインでは「重要度(Severity)」や「分類(Classification)」に基づいて自動的にパッチが適用すべきパッチとしてマーク(承認)されます。

しかし、以下のようなケースでは、特定のパッチだけをブロックしたい場合があります。

  • アプリケーションの仕様上、特定のミドルウェアのバージョンを固定したいとき
  • あるパッチを更新するとシステムが不安定になるとき

やってみよう!

それでは、実際に検証してみましょう。 今回は、Amazon Linux 2023 の EC2 インスタンスを使用して、特定のパッケージ更新を拒否してみます。

前提条件:

  • SSM Agent がインストールされ、マネージドインスタンスとして認識されている EC2 があること
  • カスタムパッチベースライン を作成していること(AWS提供のデフォルトベースラインでは「拒否されたパッチ」を編集できないため)

手順1. インストール前の状態を確認(Before)

まずは、現在どのパッケージがインストールされているのか確認します。

OSに接続し、現在のインストール済みパッケージの一覧も取得します。

sh-5.2$ sudo dnf list installed > before_patch.txt

念のため Nginx のバージョンも確認しておきます。

sh-5.2$  nginx version: nginx/1.24.0
nginx version: nginx/1.24.0

また、Patch Manager でスキャンを行い、どのパッチが不足(Missing)となるのか確認しておきます。

  1. AWSマネジメントコンソールで Systems Manager > Patch Manager を開きます
  2. 「今すぐパッチ適用 (Patch now)」をクリックします
  3. 「スキャンのみ (Scan only)」 を選択し、対象のインスタンスを選んで実行し、ステータスが 成功(Success) と表示されるまでしばらく待ちます
    パッチマネージャー「スキャンのみを選択」
  4. 実行完了後「パッチマネージャー」から「コンプラインスレポート」をクリックします。
  5. 対象インスタンスを選択し「詳細」をクリックします。
  6. ステータスが 「不足 (Missing)」 と表示されているパッチID(例: kernel-5.10.x や python3-x.x など)を一つメモします。 今回は例として、nginx 関連のパッチを拒否してみます。
    nginx関連のパッチが不足 (Missing)として表示されている状態

手順2. 拒否されたパッチ(Rejected patches)への該当パッチ追加

nginx* を拒否されたパッチ(Rejected patches)に追加します。

  1. Systems Manager > Patch Manager > パッチベースライン を開きます。
  2. インスタンスに適用している「カスタムパッチベースライン」を選択し、「編集」をクリックします。
  3. 「拒否されたパッチ (Rejected patches)」 セクションへ移動します。
  4. nginx* を入力して追加します(記載の詳細は公式ドキュメントをご確認ください)
  5. 「拒否されたパッチのアクション」ブロック を選択します。
    「パッチベースライン」>「パッチの例外」>「拒否されたパッチ」を編集
  6. 変更を保存します。

手順3. Patch Manager でパッチインストール

手順1 と同様の操作を行い、今度は 「スキャンとインストール (Scan and install)」を選択しパッチ適用を行います。

スキャンとインストールを指定

ステータスが「成功」になるまで待ちます。(Kernel更新などが含まれる場合、インスタンスが再起動することがあります)

手順4. 結果確認と差分チェック(After & Diff)

処理が完了したら、パッチ適用後の状態をファイルに出力し、先ほどのファイルと比較します。

# 適用後のパッケージ一覧を保存
sh-5.2$ sudo dnf list installed > after_patch.txt
sh-5.2$

nginx以外のパッケージは更新されており

Nginx については差分(Diff)が無いことが確認できました!

sh-5.2$ diff before_patch.txt after_patch.txt | grep nginx
sh-5.2$ 

念のため Nginx のバージョンが上がっていないことも確認しておきます。

sh-5.2$ nginx version: nginx/1.24.0
nginx version: nginx/1.24.0

パッチ適用前のバージョンと同一です。

なお、コンプライアンスレポートの表示は、拒否されたパッチのリストに追加される前にインストールされたパッチであるため InstalledRejected という表示に変わりました。

コンプライアンスレポート(After)

nginx のバージョンのみ更新対象外とし、他のパッチを自動適用することができました。

まとめ

今回は Patch Manager の「拒否されたパッチ」機能を検証しました。

全てのパッチを自動適用するのは楽ですが、運用を続けていると「これだけは対象外にしたい」という場面に遭遇します。 そんな時、パッチベースラインの「拒否されたパッチ」を利用することで、特定のパッチのみを適用しないことができます。

それでは、また次回の記事でお会いしましょう!

梅木美香(記事一覧)

EC部SA課所属

2025 Japan All AWS Certifications Engineers

岩手県盛岡市出身。ソウルフードは、もちろん盛岡じゃじゃめんです