はじめに
サメ映画をこよなく愛する梅木です。最近のお気に入りは陸に潜むタイプのサメです。
前回は「特定のパッチを拒否する(拒否リスト)」機能を検証しましたが、今回はその逆、「特定のパッチを明示的に許可する(承認済みパッチ)」 機能について検証します。
パッチ運用において、特定の分類・重要度に該当するパッチを適用対象とするように基準を設けることが有りますが(例:分類Security(セキュリティ)、重要度「Critical(重大)」など)、 「基準には該当しないけれど、このバグ修正パッチだけはどうしても適用したい」という例外的なケースが発生します。
今回はそんな「例外的なパッチ適用」を実現する 「承認済みパッチ(Approved patches)」 の動きを検証したいと思います。
Patch Manager とは
EC2 OS へのパッチ適用を自動化するマネージドサービスです。詳しくは以下記事をご覧ください。
「承認済みパッチ」とは
「承認済みパッチ」とは、パッチベースラインの承認ルールに該当しない、特定のパッケージを個別に指定して適用対象とする機能 です。
「承認されたパッチ」と表現される場合もあります。
やってみよう!
それでは、実際に検証してみましょう。
前提条件:
- SSM Agent がインストールされ、マネージドインスタンスとして認識されている Amazon Linux 2023 の EC2 インスタンス があること(未適用パッチを検出するため少し古いAMIを利用しています)
- カスタムパッチベースライン を作成していること(AWS提供のデフォルトベースラインでは「承認済みパッチ」を編集できないため)
対象のカスタムパッチベースラインが Amazon Linux 2023 OSのデフォルトとして設定されていること(「今すぐパッチ適用」からスキャンを行うため)
現状のパッチベースライン:
- 承認ルール:分類「Security」かつ重要度「Critical、Important」パッチのみを自動承認する設定(=適用対象とする設定)
- パッチの例外「承認済みパッチ」:設定なし

手順1. ターゲットの確認(Before)
まずは、今回の検証ターゲットとなるパッチを探します。 OS上で dnf updateinfo list コマンドを実行し、「重要度が低く、承認ルールで無視されてしまうパッチ」 を見つけます。
sh-5.2$ dnf updateinfo list | grep Low ALAS2023-2026-1360 Low/Sec. libxml2-2.10.4-1.amzn2023.0.15.x86_64 ALAS2023-2026-1397 Low/Sec. libxml2-2.10.4-1.amzn2023.0.17.x86_64 ALAS2023-2025-1152 Low/Sec. nginx-1:1.28.0-1.amzn2023.0.2.x86_64 ALAS2023-2025-1152 Low/Sec. nginx-core-1:1.28.0-1.amzn2023.0.2.x86_64 ALAS2023-2025-1152 Low/Sec. nginx-filesystem-1:1.28.0-1.amzn2023.0.2.noarch ALAS2023-2025-1293 Low/Sec. python3-3.9.25-1.amzn2023.0.1.x86_64 ALAS2023-2025-1293 Low/Sec. python3-libs-3.9.25-1.amzn2023.0.1.x86_64 ALAS2023-2026-1422 Low/Sec. unzip-6.0-68.amzn2023.0.1.x86_64
今回は「重要度は低いが、どうしても適用したい」という想定で一番下の unzip をターゲットにします。
念のため、Patch Manager のスキャン結果でもターゲットが適用対象(Missing)として検出されないことを確認してみます。
- AWSマネジメントコンソールで Systems Manager > Patch Manager を開きます
- 「今すぐパッチ適用 (Patch now)」をクリックします
- 「スキャンのみ (Scan only)」 を選択し、対象のインスタンスを選んで実行し、ステータスが 成功(Success) と表示されるまでしばらく待ちます

パッチマネージャー「スキャンのみを選択」 - 実行完了後「パッチマネージャー」から「コンプラインスレポート」をクリックします。
- 対象インスタンスを選択し「詳細」をクリックします。
unzip がMissingとして検出されていないことを確認します。

unzip は Missing として検出されていませんでした。
unzip を検索してみると…

準拠として表示されました。
手順2. 「承認済みパッチ」への追加
そのままでは Missingとして検出されないパッチを「承認済みパッチ」へ登録します。
- Systems Manager > Patch Manager > パッチベースライン を開きます。
- 適用中の「カスタムパッチベースライン」を選択し、「編集」をクリックします。
- 「承認済みパッチ (Approved patches)」 セクションへ移動します。
- ターゲット(unzip)を追記します。

承認済みパッチ - 変更を保存します。
※記載方法の詳細は公式ドキュメントをご確認ください。
手順3. Patch Manager でパッチスキャン
「承認済みパッチ」の設定が想定通りに動作するか、パッチスキャンを実行して確かめます。 (手順は 手順2 と同一です)
手順4. 結果確認(After)
処理が完了したら、unzip がMissingとして検出されているか確認します。
- 「パッチマネージャー」から「コンプラインスレポート」をクリックします。
- 対象インスタンスを選択し「詳細」をクリックします。
unzip の状態を確認すると…

unzip がMissingとして検出されていました。
パッチベースラインの承認ルールで定義された全体ルールは守りつつ、必要なパッチをピンポイントで適用対象として検出できました!
まとめ
今回は Patch Manager の「承認済みパッチ」機能を Amazon Linux 2023 で検証しました。
パッチ運用では、「安定性のために余計な更新は入れたくない」けど「このパッチだけはインストールしたい」というケースがあります。 「自動化はしたいけど、例外も認めたい」というケースに応える便利な機能を、ぜひご活用ください。
それでは、また次回の記事でお会いしましょう!