AWS Systems ManagerのPatch Managerを利用して、RHELのパッチ適用を検証していたところ、気になるAWS公式ドキュメントの記載を見つけました。
AWSのトラブルシューティングには、/etc/yum.confにexclude=package-nameを指定しても、Patch ManagerのInstallではパッケージが除外されないと記載されています。
一方、今回利用しているOSはRHEL 9です。
そこで、RHEL 9の/etc/dnf/dnf.confにexclude=kernel*を設定した場合、AWS-RunPatchBaselineのScan、Installではどのような動作になるのか実際に試してみました。
今回の記事では、AWS-RunPatchBaselineでdnf.confのexcludeは効いているのか検証した結果を紹介します。
AWS-RunPatchBaselineでdnf.confのexcludeが効くか検証
■AWS公式ドキュメントの記載
AWSのPatch Managerトラブルシューティングには、次の内容が記載されています。

/etc/yum.confにexclude=package-nameを指定しても、Patch ManagerのInstallでは対象パッケージは除外されません。
原因は、Patch Managerが/etc/yum.confで指定された除外項目を取り込まないためです。
特定のパッケージを除外したい場合は、カスタムパッチベースラインを作成し、Patch Baseline側で除外する方法が案内されています。
今回はRHEL 9なので、/etc/dnf/dnf.confで検証してみます。
■exclude設定前の状態を確認
まず、excludeを設定していない状態でAWS-RunPatchBaselineのScanを実行しました。
その後、AWS CLIからState=Missingのパッチを取得します。
aws ssm describe-instance-patches \
--instance-id i-xxxxxxxxxxxxxxxxx \
--filters Key=State,Values=Missing
kernel関連では、以下のパッケージがMissingとして検出されました。
kernel.x86_64:0:5.14.0-687.44.1.el9_8
kernel-core.x86_64:0:5.14.0-687.44.1.el9_8
kernel-modules.x86_64:0:5.14.0-687.44.1.el9_8
kernel-modules-core.x86_64:0:5.14.0-687.44.1.el9_8
kernel-tools.x86_64:0:5.14.0-687.44.1.el9_8
kernel-tools-libs.x86_64:0:5.14.0-687.44.1.el9_8
AWSではMISSINGを、Patch Baselineで承認されているものの、マネージドノードにインストールされていないパッチとしています。
AWS-RunPatchBaselineをScanで実行した場合、Scanで検出された未インストールのパッチがMISSINGとして報告されます。
■dnf.confにexcludeを追加
続いて、/etc/dnf/dnf.confに以下を追加しました。
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
exclude=kernel*

この状態でもう一度AWS-RunPatchBaselineのScanを実行します。
その後、再度AWS CLIで確認しました。
aws ssm describe-instance-patches \
--instance-id i-xxxxxxxxxxxxxxxxx \
--filters Key=State,Values=Missing
すると、それまでMissingだったkernel関連パッケージが一覧から消えました。
今回のRHEL 9環境では、/etc/dnf/dnf.confにexcudeとしてkernel*を記載すると、Missingとして検出されない
という結果になりました。
■Installでもkernelが除外されるか確認
次に、exclude=kernel*を残した状態でAWS-RunPatchBaselineのInstallを実行しました。
まず、実行前のkernelを保存します。
rpm -qa 'kernel*' | sort > /tmp/kernel-before.txt
実行前は以下の状態でした。
kernel-5.14.0-503.15.1.el9_5.x86_64
kernel-core-5.14.0-503.15.1.el9_5.x86_64
kernel-modules-5.14.0-503.15.1.el9_5.x86_64
kernel-modules-core-5.14.0-503.15.1.el9_5.x86_64
kernel-tools-5.14.0-503.15.1.el9_5.x86_64
kernel-tools-libs-5.14.0-503.15.1.el9_5.x86_64
AWS-RunPatchBaselineのInstall実行後、再度取得します。
rpm -qa 'kernel*' | sort > /tmp/kernel-after.txt
結果は以下でした。
kernel-5.14.0-503.15.1.el9_5.x86_64
kernel-core-5.14.0-503.15.1.el9_5.x86_64
kernel-modules-5.14.0-503.15.1.el9_5.x86_64
kernel-modules-core-5.14.0-503.15.1.el9_5.x86_64
kernel-tools-5.14.0-503.15.1.el9_5.x86_64
kernel-tools-libs-5.14.0-503.15.1.el9_5.x86_64
前後の差分も確認します。
diff /tmp/kernel-before.txt /tmp/kernel-after.txt
差分はありませんでした。
つまり、今回の環境ではAWS-RunPatchBaselineのInstallを実行しても、kernelは更新されませんでした。
■更新可能なkernelが存在することも確認
念のため、"そもそも更新可能なkernelが存在しなかったのではないか"という点も確認しました。
DNFのexcludeを一時的に無効化して、更新候補を確認します。
dnf --disableexcludes=all check-update 'kernel*'
結果は以下です。
Last metadata expiration check: 1:36:12 ago on Fri 04 Sep 2026 06:58:33 AM UTC.
kernel.x86_64 5.14.0-687.44.1.el9_8 rhel-9-baseos-rhui-rpms
kernel-core.x86_64 5.14.0-687.44.1.el9_8 rhel-9-baseos-rhui-rpms
kernel-modules.x86_64 5.14.0-687.44.1.el9_8 rhel-9-baseos-rhui-rpms
kernel-modules-core.x86_64 5.14.0-687.44.1.el9_8 rhel-9-baseos-rhui-rpms
kernel-tools.x86_64 5.14.0-687.44.1.el9_8 rhel-9-baseos-rhui-rpms
kernel-tools-libs.x86_64 5.14.0-687.44.1.el9_8 rhel-9-baseos-rhui-rpms
5.14.0-687.44.1.el9_8が更新候補として存在することを確認できました。
そのため今回の検証結果は、次のように整理できます。
| 検証内容 | 結果 |
|---|---|
| excludeなしでScan | kernelがMissingとして検出された |
exclude=kernel*でScan |
kernelがMissingから消えた |
exclude=kernel*でInstall |
kernelは更新されなかった |
--disableexcludes=allで確認 |
新しいkernelが更新候補として存在した |
■AWS公式ドキュメントとの違いについて
AWSのトラブルシューティングでは、/etc/yum.confのexcludeはPatch ManagerのInstallでは取り込まれないと記載されています。
一方、今回検証したのはRHEL 9の/etc/dnf/dnf.confです。
今回の実機検証では、
- Scanでkernelが
Missingとして検出されなかった - Installでもkernelが更新されなかった
- excludeを無効化すると更新可能なkernelが存在した
という結果になりました。
そのため、少なくとも今回検証したRHEL 9環境では、/etc/dnf/dnf.confのexclude=kernel*がAWS-RunPatchBaselineのScanとInstallの両方に影響することを確認できました。
ただし、この結果だけでAWS公式ドキュメントの誤りや、Patch Managerの仕様変更と判断することはできません。
AWSがPatch Managerで特定パッケージを除外する方法として案内しているのは、現在もカスタムPatch Baselineを利用する方法です。
まとめ
今回は、RHEL 9の/etc/dnf/dnf.confにexclude=kernel*を設定し、AWS-RunPatchBaselineのScanとInstallでkernelが除外されるか検証しました。
AWS公式ドキュメントには、/etc/yum.confのexcludeはPatch ManagerのInstallでは取り込まれないと記載されています。
しかし、今回検証したRHEL 9環境では、/etc/dnf/dnf.confにexclude=kernel*を設定すると、ScanでkernelがMissingとして検出されず、Installでもkernelは更新されませんでした。
AWS公式ドキュメントの記載とは条件が異なるため単純比較はできませんが、RHEL 9でPatch Managerを利用する際には、DNF側のexclude設定がパッチ適用結果に影響する可能性がある点は注意した方がよさそうです。
参考サイトリンク:AWS公式ドキュメント
↓ほかの協栄情報メンバーもAWS Systems Managerに関する記事を公開しています。ぜひ参考にしてみてください。
■AWS-RunPowerShellScriptからPythonを実行できなかったときの対応方法(齊藤弘樹)
■AWS CLIでSSMドキュメント作成時に「text contents could not be decoded」が出たときの解決策(Windows)(齊藤弘樹)
■SSM Run CommandでWindows Server 2025にCloudWatch Agentをインストール&起動(齊藤弘樹)


