2021年10月6日
はじめに
Amazon Web Services (AWS) Systems Manager (旧称 SSM) にはパッチマネージャーと呼ばれる機能があり、これを利用することで管理対象インスタンスへ一貫したポリシーを持って OS パッケージ更新を自動化できます。 非常に便利な機能なのですが、やや取っ付き難いところもあるので、つまづきやすいポイントを中心に、使用方法を簡単にご説明したいと思います。
今回のエントリでは、AWS 上に構築した EC2 インスタンス (Amazon Linux 2 AMI) のパッケージを更新する方法をご紹介します。 Windows Server の更新プログラム適用は今回のエントリに含まれません。
パッチマネージャーを利用するためにおさえておきたい機能
実現したい事柄とパッチマネージャーの機能の対応
ざっくりした対応は下表のようになります。
カテゴリ日付や明示的な指定・除外によるパッケージの選定 | パッチベースライン |
インスタンスとパッチベースラインの紐付け | パッチグループ |
深夜など指定した時刻での処理実行 | メンテナンスウィンドウ |
以下、個別にご説明します。
パッチベースライン
運用中のインスタンスへのパッチの適用では、 稼働中のサービスへの影響を小さくするという観点から、脆弱性の見つかったパッケージのみを更新したい場合や、まだ動作検証の済んでいないパッケージを更新対象から除外したい場合などがあります。 また、セキュリティ関連のパッケージのみ更新したいことも、全てのパッケージを更新したいこともあります。
このようなケースに対応してパッケージの選定を行う機能が パッチベースライン です。 AWS によって事前に定義されたパッチベースラインを利用することも、独自にカスタマイズしたパッチベースラインを利用することもできます。 下図は Amazon Linux 2 向けに事前定義されたパッチベースラインです。 公式の説明 では、 『分類が「セキュリティ」で、重要度レベルが「非常事態」または「重要」のすべてのオペレーティングシステムパッチを承認します。パッチはリリースから 7 日後に自動承認されます。また、分類が "Bugfix" のすべてのパッチをリリースから 7 日後に承認します。』 とされています。 ここでの「承認」は、インストールの対象となる、といった意味です。
実際の運用では、セキュリティパッチの運用ポリシーを念頭に置いた上で、パッチベースラインを選択または作成することになります。
パッチグループ
パッチグループ とは、パッチベースラインとインスタンスの紐付けです。 これを利用することで、例えばプロダクション環境のインスタンスと開発環境のインスタンスで別のベースラインを適用することができるようになります。 パッチグループの利用は必須ではなくオプションですが、利用しない場合はインスタンスの OS に関連付けられたデフォルトのパッチベースラインが適用されるため、パッチベースラインの柔軟な選択のためにもパッチグループの利用をお勧めします。
メンテナンスウィンドウ
パッケージ更新には、少なからずサービスの一時的な停止を伴います。また運用中サービスへのパッチ適用は、トラブルと背中合わせであり、事前に入念な検証を行うとしても、予期せぬトラブルを完全に防ぐことはできません。 メンテナンスウィンドウ は、深夜など指定した時刻でパッチの適用を行う場合に利用します。
パッチマネージャーの前提条件
パッチマネージャーを利用するにあたり、次の条件を満たす必要があります。
- AWS Systems Manager の マネージドインスタンスであること
- パッチソースへの経路が確保されていること
詳細については公式の パッチマネージャーの前提条件 を参照してください。
想定する環境
想定する環境を下図に示します。
Amazon Virtual Private Cloud (Amazon VPC) 内にインターネットからのアクセスが可能な Public subnet があり、 Amazon EC2 インスタンスはこの Public subnet 内に配置されています。 EC2 インスタンスの OS は Amazon Linux 2 AMI とします。 EC2 インスタンスからインターネットゲートウェイを経由して AWS Systems Manager およびパッチソースへ接続できるものとします。 (※ パッチソースは通常の OS だと AWS 外部にありますが、Amazon Linux の場合は AWS 内にあります。)
パッチマネージャー 設定プロセス
設定プロセスを下図に示します。
パッチマネージャーの設定
パッチベースラインの選択
このエントリでは、パッチベースラインとして事前定義された Amazon Linux 2 向けのデフォルトベースラインを選択することにします。
-
AWS Systems Manager のトップ画面の左メニューから [パッチマネージャー] をクリックします。
-
画面右上の [事前定義されたパッチベースラインを表示する] ボタンをクリックします。
-
今回はパッチベースラインとして、事前定義された Amazon Linux 2 向けのデフォルトパッチベースラインを選択することにします。
AWS-AmazonLinux2DefaultPatchBaseline
のベースライン ID をクリックします。 -
パッチベースラインが表示されます。
公式の説明 ではこのパッチベースラインは、 『分類が「セキュリティ」で、重要度レベルが「非常事態」または「重要」のすべてのオペレーティングシステムパッチを承認します。パッチはリリースから 7 日後に自動承認されます。また、分類が "Bugfix" のすべてのパッチをリリースから 7 日後に承認します。』 とされています。
この基準でパッケージが選定され、インスタンスへインストールされることになります。
環境や方針に応じて、分類が「Bugfix」のパッチを対象外にしたり、「セキュリティ」で重要度レベルが「非常事態」のみを1日後に承認するようにしたりするといったカスタマイズも考えられます。
パッチグループ作成とパッチベースラインへのアタッチ
-
既に開いているパッチベースラインの画面右上にある [アクション] ラジオボタンから [パッチグループの変更] を選びます。
-
[パッチグループ] のテキストボックスに適当な名前を入力し、 [追加] ボタンをクリックします。
-
[閉じる] ボタンをクリックします。
-
パッチベースラインに先程のパッチグループがアタッチされました。
インスタンスとパッチグループへ関連付け
-
インスタンスをパッチグループに関連付けるため、左メニューから [フリートマネージャー] をクリックします。
-
インスタンス ID をクリックします。
-
タグの [編集] ボタンをクリックします。
-
タグを追加します。ここでキーは必ず Patch Group にしてください。 値は先程のパッチグループ名を設定します。タグの入力後、[保存] ボタンをクリックします。
-
インスタンスにパッチグループが関連付けられました。
パッチグループに関連付けたいインスタンスが複数ある場合は同様の操作を実施してください。 タグの操作は EC2 サービスの画面からも実施可能です。
パッチ適用の即時実行
-
パッチマネージャーの画面に戻ります。左メニューから [パッチマネージャー] をクリックします。
-
画面右上の [パッチ適用を設定] ボタンをクリックします。
-
パッチを適用するインスタンス セクションでは処理を実施するインスタンスを選択します。 ラジオボタンから [パッチグループを選択する] を選択し、[パッチグループ] の入力欄にパッチグループ名を入力します。
-
パッチグループが選択された状態です。
-
パッチ適用スケジュール セクションでは、処理の実行タイミングや周期を設定します。 今回の処理は即時で実行するため、ラジオボタンから [スケジュール作成とインスタンスへのパッチ適用をスキップする] を選択してください。
-
パッチ適用操作 セクションでは、実施する処理を選択します。 ラジオボタンから [スキャンのみ] を選択してください。
ここでの「スキャン」は、インスタンスにあるパッチベースラインを適用した際に不足しているパッケージを洗い出す処理となります。 「スキャンのみ」ではパッケージのインストールは行われません。
「スキャンとインストール」は、パッチベースラインの基準で不足しているパッケージを洗い出した上でそれらをインスタンスにインストールする処理です。
-
追加の設定 セクションでは、パッチベースラインの関連付けを確認できます。
-
[パッチ適用を設定] ボタンをクリックします。
-
[ダッシュボード] タブをクリックします。
-
パッチマネージャーのダッシュボードの パッチオペレーション履歴 セクションに先程設定したスキャンが追加されました。 内容確認のため [Scan] リンクをクリックします。
-
パッチオペレーションのステータスなどを確認できます。 ターゲットと出力 セクションの各インスタンスへのリンクを辿ることで、インスタンスでの処理状況の確認も可能です。
-
インスタンス単位での処理結果です。 内部の処理として全体で 3 ステップの処理が実行されており、それぞれ
PatchWindows
、PatchLinux
、PatchMacOS
となっています。 今回のターゲットとしたインスタンスは Amazon Linux 2 なので、ステップ 2PatchLinux
に結果が出力されています。 -
[レポート] タブを参照することでパッチ適用の概要を確認できます。 インスタンス単位の状態を確認するにはインスタンス ID のリンクをクリックします。
-
[パッチ] タブをクリックします。
-
スキャンの結果が表示されます。
パッチ適用の定期実行設定
-
パッチマネージャーのダッシュボードから [パッチ適用を設定] ボタンをクリックします。
-
パッチを適用するインスタンス セクションでは、 ラジオボタンから [パッチグループを選択する] を選び、[パッチグループ] 欄でパッチグループを指定します。
-
パッチ適用スケジュール セクションでは、 ラジオボタンから [新しいメンテナンスウィンドウでスケジュールを作成する] を選びます。
スケジュールの指定では [ごと 毎日] を選択し、[03:00] を入力します。 [メンテナンスウィンドウ名] には適当な名前を入力します。
なおタイムゾーンは UTC となります。後ほどメンテナンスウィンドウの設定の中でタイムゾーンを変更します。
-
パッチ適用操作 セクションでは、 ラジオボタンから [スキャンとインストール] を選択します。
-
[パッチ適用を設定] ボタンをクリックします。
-
パッチマネージャーのダッシュボードを表示します。
-
定期的なパッチ適用タスク セクションに、先程設定したタスクが追加されます。 詳細を確認するため [PatchingTask] リンクをクリックします。
-
メンテナンスウィンドウが表示されました。 ウィンドウ ID のリンクをクリックしてください。
-
[編集] ボタンをクリックします。
-
スケジュールを指定 セクションの [タイムゾーンのスケジュール - 省略可能] ドロップボックスで [(GMT+09:00) Asia/Tokyo] を選択します。 その後 [変更内容を保存] ボタンをクリックします。
-
メンテナンスウィンドウが編集されました。
-
実行された処理は、パッチマネージャーのダッシュボードの パッチオペレーション履歴 セクションで確認できます。
まとめ
AWS Systems Manager のパッチマネージャー機能を利用して EC2 インスタンス (Amazon Linux 2) の OS パッケージを更新する方法をご紹介しました。
今回ご紹介した内容でパッチ適用の悩みが全て解決するわけではありませんが、自動化できる部分は自動化することで、より重要なオペレーションにリソースを割くことができるようになる可能性はあります。 是非活用をご検討ください。
参照
- AWS Systems Manager (Amazon)
- AWS Systems Manager Patch Manager (Amazon)