【AWS Patch Manager】OSパッチ適用を自動化しよう

Amazon Web Services,AWS Patch Manager

こんにちは。プラットフォーム技術部の小林(雄)です。

クラウドサービスの普及により、セキュリティに対する要求も高まっている昨今、セキュリティ対策関連の運用業務も増加傾向にあるように感じます。

とりわけ定期的なパッチ適用、コンポーネントアップデート対応では多くの運用稼働を必要とし、場合によっては毎月本対応に追われることもあると思います。

本日はそんなパッチ適用、コンポーネントアップデート対応の手間を削減できるAWSのPatch Managerについてどのような仕組みなのか、どんなことができるのかについて確認していきたいと思います。

AWS Patch Managerとは

AWS Patch ManagerはAWS Systems Managerの一機能で、端的に表現するとEC2に対するOSパッチの適用を自動化できるマネージドサービスです。

各マネージドサービスの詳細は以下を参照ください。

WindowsOS、LinuxOSどちらにも対応しており、パッチの区分や重要度に応じて適用可否を制御する機能も有しています。

OSパッチ自動適用に必要な主な機能

OSパッチの自動適用を実現するために以下の機能を利用します。

  • Patch Manager
    マネージドインスタンスにパッチを適用するプロセスを自動化する機能
  • Maintenance Windows
    パッチを適用するタイミングや周期を指定する機能
  • Run Command
    パッチ適用対象となるEC2インスタンスにSSMAgentを介してパッチ適用のコマンドを実行する機能
  • Documents
    Run Commandで実行される実行コマンドを定義する機能

OSパッチ自動適用の全体像

AWS Patch Managerを利用したOSパッチ自動適用の全体像は以下のとおりです。

AWS Patch Managerを利用したOSパッチ自動適用の全体像
全体構成

詳細説明

パッチ適用対象のEC2インスタンスへのSSMAgentの導入必須について

パッチ適用の命令は、PatchManagerからRun Commandを通じてSSMAgentによってEC2インスタンスへ実行されます。そのためパッチ適用対象となるEC2には前提としてSSMAgentの導入が必須であり、AWS Systems ManagerのEndpointにアクセスできる必要があります。

パッチ適用対象のEC2インスタンスからPatch Repositoryへのアクセスについて

AWSが標準で用意しているパッチ適用をするためのコマンド(上図のDocuments)では、Linuxであれば「yum」や「dnf」を、Windowsであれば「Windows Update」を実行しています。そのため、パッチ適用対象となるEC2インスタンスからそれぞれが必要とするPatch Repositoryにアクセスできる必要があります。

今回の構成図ではパッチ適用対象のEC2インスタンスが直接InternetにアクセスできないPrivateSubnet上で稼働しているため、NATGateway経由でInternet上のPatch Repositoryにアクセスする構成としています。

適用するパッチ内容の指定について

パッチ適用対象のOS種別やバージョン、SecurityやBugFixといったパッチ分類、CriticalやLowといったパッチ重要度、リリースから適用までの猶予期間などは、Patch Managerの「パッチベースライン」にて設定します。

Patch Managerの「パッチベースライン」の設定がOSパッチ適用の幹です。

パッチ適用対象となるEC2インスタンスの指定について

適用するパッチの内容については Patch Managerの「パッチベースライン」にて指定しますが、指定されたパッチを適用する対象のEC2インスタンスの指定は、今回(※)Patch Managerの「パッチグループ」とEC2インスタンスのインスタンスタグ「Patch Group」を併用し、設定します。

Patch Managerの「パッチグループ」設定にて、利用する「パッチベースライン」の指定と、タグキーである「Patch Group」のValueとなる任意の文字列を指定することにより、「Patch Group」というタグキーを有し、上記で指定した任意の文字列に一致するValueを持つインスタンスをパッチ適用対象と判定します。

(※)Maintenance Windows機能を利用してパッチ適用を実行する場合は、パッチグループ以外にも任意のインスタンスを直接対象指定することも、リソースグループ単位で指定することも可能です。

パッチ適用の実際の処理内容について

パッチ適用に際して、実際に実行されるコマンドはDocumentsの「AWS-RunPatchBaseline」に定義されています。

パッチ適用の自動実行スケジュールについて

パッチ適用を自動で実行するためのスケジュール設定は、「Maintenance Windows」にて行います。パッチ適用周期、実行ターゲットの指定が可能です。

OSパッチ自動適用設定手順

前提

上記全体構成を踏まえて、AWS Patch Managerを利用しOSパッチを自動設定するためには、以下のような対応が必要です。

OSパッチ自動適用設定手順
必要な対応

今回の記事ではSSM利用設定の詳細な説明については割愛しますが、実際にSSMを利用設定する際に留意すべきポイントを抜粋して以下に記載します。

IAMポリシー&インスタンスプロファイルの作成

AmazonSSMManagedInstanceCoreポリシーを利用します。
個別カスタムポリシーでアクションを選択して付与する場合は、ssmmessagesとec2messagesのアクションの権限も忘れずに付与します。

SSMのVPCエンドポイントの作成

まずは大前提としてのVPCオプションでDNS系設定を有効にします。
以下の4つのEndpointの作成が必要です。(東京リージョンの場合)

  • com.amazonaws.ap-northeast-1.ssm
  • com.amazonaws.ap-northeast-1.ec2messages
  • com.amazonaws.ap-northeast-1.ssmmessages
  • com.amazonaws.ap-northeast-1.s3

その他前提事項

その他前提事項に関しては、AWS公式マニュアルに記載があるので「こちら」を参照ください。

では実際にOSパッチを自動適用可能とするため、設定をしていきます。

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

まずは、適用するパッチの内容や対象を指定するため、「パッチベースライン」を作成します。

AWS Systems Manager画面の左部メニューの「ノード管理」から「パッチマネージャー」を選択し、「事前定義されたパッチベースラインを表示する」リンクを押下します。

AWS Systems Manager画面

パッチマネージャー画面が表示されたら、「パッチベースライン」タブを選択し、「パッチベースラインを作成する」ボタンを押下します。

パッチマネージャー

名前と説明欄に任意の情報を記載し、「オペレーティングシステム」欄のプルダウンからパッチを適用したいEC2インスタンスのOS種別を選択します。本手順ではRHELを選択します。

パッチベースラインを作成する

「製品」、「分類」、「重要度」に関してそれぞれプルダウンから適用したいパッチ情報を選択します。

本手順では分類、重要度ともにALLを指定していますが、実際に利用する際には分類にSecurity、重要度にCriticalなど適用したいパッチレベルを個別指定することを推奨します。

パッチベースラインを作成する

画面最下段までスクロールし、「パッチベースラインを作成する」ボタンを押下します。

パッチベースラインを作成する

これで「パッチベースライン」が作成されました。

パッチベースラインの一覧

パッチグループ名の指定

ここまでの手順で適用するパッチの内容について定義した「パッチベースライン」が作成できました。次の手順では、作成した「パッチベースライン」に対して、当該設定を適用する対象となる「パッチグループ」を指定します。

「パッチベースライン」の一覧から「パッチグループ」を指定したいベースラインを選択し、「ベースラインID」を押下します。

パッチグループ名の指定

ベースラインの詳細画面に遷移したら画面右上の「アクション」から「パッチグループの変更」を選択します。

ベースラインの詳細画面

「パッチグループ」欄に任意の文字列を入力し、「追加」ボタンを押下し、パッチグループが追加されたことを確認します。パッチグループが追加されていれば、「閉じる」ボタンを押下します。

パッチグループの変更

パッチ適用対象EC2インスタンスへタグの付与

ベースラインに指定した、「パッチグループ」の情報とパッチ適用対象とするEC2インスタンスの紐づけをおこなうため、EC2インスタンスにタグを付与します。

パッチ適用対象のインスタンス詳細画面へ遷移し、タグを付与します。タグのキーには「Patch Group」を指定します。タグの値には、「パッチグループ名の指定」手順にてパッチグループの指定で設定した任意の文字列を指定します。

なお、EC2インスタンスタグに指定可能な文字列と、他のサービスでインスタンスタグを参照する場合に利用可能な文字列には差があり、EC2インスタンスタグに指定されている文字列によってはうまく動作しないことがあります。すべてのサービスで利用可能なEC2インスタンスタグに指定可能な文字列の詳細は以下のマニュアルを参照ください。

タグを管理

メンテナンスウィンドウの作成

ここまでの手順で適用するパッチの内容を定義した「パッチベースライン」の設定と、実際にパッチを適用する対象のEC2インスタンスとの紐づけができました。この状態でPatch Managerの画面からパッチ適用処理の手動実行が可能になります。今回の手順では「Maintenance Windows」を利用してパッチ適用の定期的な自動実行するため、引き続き「メンテナンスウィンドウ」を作成します。

AWS Systems Manager画面の左部メニューの「変更管理」から、「メンテナンスウィンドウ」を選択し、「メンテナンスウィンドウの作成」ボタンを押下します。

メンテナンスウィンドウの作成

メンテナンスウィンドウの作成画面に遷移したら、「名前」、「説明」欄に任意の文字列を入力します。

メンテナンスウィンドウの作成

以下画面の各設定にて、パッチを自動適用する周期を指定します。

スケジュールの設定

設定値の入力が完了したら画面下部の「メンテナンスウィンドウの作成」ボタンを押下する。

メンテナンスウィンドウの作成

パッチ適用を設定

作成した「メンテナンスウィンドウ」と「パッチベースライン」設定の紐づけをするため、「パッチ適用を設定」します。

AWS Systems Manager画面の左部メニューの「ノード管理」から「パッチマネージャー」を選択し、「パッチ適用を設定」リンクを押下します。

パッチ適用を設定

パッチ適用を設定画面に遷移したら、「パッチを適用するインスタンス」欄にて「パッチグループを選択する」を選択し、「パッチグループ」欄に「パッチグループ名の指定」手順で指定したパッチグループを指定します。

パッチ適用を設定

「パッチ適用スケジュール」欄にて、「既存のメンテナンスウィンドウを選択する」を選択し、「メンテナンスウィンドウ」欄にて「メンテナンスウィンドウの作成」手順にて作成したメンテナンスウィンドウを指定する。

パッチ適用スケジュール

「パッチ適用操作」欄にて、「スキャンとインストール」を選択します。自動でパッチの実適用までおこなわず、定期的にスキャンのみおこなう場合はここでスキャンのみを選択します。

パッチ適用操作

「追加の設定」欄の、「パッチベースラインの関連付け」にて、「パッチベースラインの作成」手順で作成したパッチベースラインを選択し、「パッチ適用を設定」ボタンを押下する。

追加の設定

実行結果確認

OSパッチ自動適用における設定手順は以上となり、あとはメンテナンスウィンドウに指定した周期で自動的にOSパッチ適用が実行されます。OSパッチ適用の実行履歴は、「メンテナンスウィンドウ」詳細画面の「履歴」タブから参照可能です。

以下は実際の実行履歴のログサンプルです。

実行結果確認

まとめ

今回はOSパッチ適用の手間を削減するために、AWS Patch Managerを利用したOSパッチ適用の自動化について確認しました。

実運用上、本番環境でOSパッチを自動適用することはあまりないと思いますが、開発、検証環境に対してパッチ運用フローに基づいて自動適用させるといったケースでは十分実用に耐える仕組みだと感じました。

パッケージとして管理されていない個別導入されているミドルウェアやライブラリの更新に関しては、標準機能では更新対象外となってしまうため、別途更新運用が必要ですが、それでも複数のOS種別が混在し、多数のサーバーが存在する環境下では大きな運用工数削減効果があると思います。

みなさまもぜひAWS Patch ManagerでのOSパッチ適用自動化をお試しください。

  • Zabbix Enterprise Appliance
  • 低コスト・短納期で提供するまるごとおまかせZabbix