はじめに
サメ映画をこよなく愛する梅木です。
さて、今回は AWS Systems Manager Patch Manager の 「拒否されたパッチ(Rejected patches)」 のリストという機能を検証します。 AWS Systems Manager Patch Manager によりパッチ適用を自動化することが出来ますが、特定のパッチのインストールだけを更新対象外としたいシーンがあります。 今回はそんな「特定のパッチの更新をブロックする」機能の動きを見ていきたいと思います。
Patch Manager とは
EC2 OS へのパッチ適用を自動化するマネージドサービスです。詳しくは以下記事をご覧ください。
拒否されたパッチ(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)となるのか確認しておきます。
- AWSマネジメントコンソールで Systems Manager > Patch Manager を開きます
- 「今すぐパッチ適用 (Patch now)」をクリックします
- 「スキャンのみ (Scan only)」 を選択し、対象のインスタンスを選んで実行し、ステータスが 成功(Success) と表示されるまでしばらく待ちます

パッチマネージャー「スキャンのみを選択」 - 実行完了後「パッチマネージャー」から「コンプラインスレポート」をクリックします。
- 対象インスタンスを選択し「詳細」をクリックします。
- ステータスが 「不足 (Missing)」 と表示されているパッチID(例: kernel-5.10.x や python3-x.x など)を一つメモします。
今回は例として、nginx 関連のパッチを拒否してみます。

nginx関連のパッチが不足 (Missing)として表示されている状態
手順2. 拒否されたパッチ(Rejected patches)への該当パッチ追加
nginx* を拒否されたパッチ(Rejected patches)に追加します。
- Systems Manager > Patch Manager > パッチベースライン を開きます。
- インスタンスに適用している「カスタムパッチベースライン」を選択し、「編集」をクリックします。
- 「拒否されたパッチ (Rejected patches)」 セクションへ移動します。
nginx*を入力して追加します(記載の詳細は公式ドキュメントをご確認ください)- 「拒否されたパッチのアクション」 は
ブロックを選択します。
「パッチベースライン」>「パッチの例外」>「拒否されたパッチ」を編集 - 変更を保存します。
手順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 という表示に変わりました。

nginx のバージョンのみ更新対象外とし、他のパッチを自動適用することができました。
まとめ
今回は Patch Manager の「拒否されたパッチ」機能を検証しました。
全てのパッチを自動適用するのは楽ですが、運用を続けていると「これだけは対象外にしたい」という場面に遭遇します。 そんな時、パッチベースラインの「拒否されたパッチ」を利用することで、特定のパッチのみを適用しないことができます。
それでは、また次回の記事でお会いしましょう!