【Cloud Automator】ジョブワークフローを用いて、EC2インスタンス(Linux)へのパッチ適用を自動化する

記事タイトルとURLをコピーする

カスタマーサクセス部の山﨑です。

近年、多くの企業がAWSクラウドを活用してシステムを構築・運用しています。クラウドの導入により、インフラ管理の負荷が軽減され、ビジネスに集中できるメリットがあります。しかし、クラウド環境でもセキュリティ対策やパッチ適用は欠かせません。今回は、EC2インスタンス(Linux)へのパッチ適用について、弊社が提供するSaaSサービスである「Cloud Automator」を用いて自動化する方法をご紹介します。

AWSクラウド上でのパッチ適用について

AWSの多くのマネージドサービス(例:Amazon S3、Amazon DynamoDBなど)では、基盤となるOSやミドルウェアの管理はAWSが責任を持って行います。このため、オンプレミス環境と比較して、運用管理の負荷が大幅に軽減されます。ユーザーはインフラの保守や更新を気にすることなく、サービスの利用に専念できます。

一方、AWSの責任共有モデルによれば、IaaS(Infrastructure as a Service)に分類されるサービス、例えばAmazon EC2やAmazon EBSなどでは、AWSは基盤となるハードウェアや仮想化層までを管理しますが、その上のOS、ミドルウェア、アプリケーションの管理はユーザーの責任となります。

つまり、IaaSサービスを利用する場合、以下のような管理・運用はユーザー自身が行う必要があります。

  • OSのパッチ適用と更新: セキュリティパッチや機能更新を適用し、システムの安全性とパフォーマンスを維持します。
  • ミドルウェアの管理: データベースやウェブサーバーなどのミドルウェアの設定、パッチ適用、バージョン管理を行います。
  • アプリケーションのメンテナンス: アプリケーションコードの更新、セキュリティ修正、依存ライブラリの管理などを実施します。

EC2インスタンスに対するパッチ適用方法について

EC2インスタンスへのパッチ適用方法として有名なのが、Systems Manager Patch Manager を利用した方法です。 弊社ブログでも過去に紹介されています。

その他にもEC2インスタンスへのパッチ適用方法には、例えば以下のような方法があります。 今回は「3rd Party製品を利用する」方法として、弊社SaaSサービスである「Cloud Automator」を活用してパッチ適用を自動化する方法をご紹介します。

No 方法 概要
1 手動でパッチ適用を行う 対象EC2インスタンスにログインし、パッチ適用のコマンドを直接実行する方法
2 SSM Run Command を実行する AWS Systems ManagerのRun Commandを使用して、リモートからパッチ適用コマンドを実行する方法
3 SSM Patch Manager を使用する AWS Systems ManagerのPatch Managerを利用して、パッチ適用を自動化およびスケジュール化する方法
4 構成管理ツールを使用する Ansible、Chef、Puppetなどの構成管理ツールを使用して、パッチ適用を自動化する方法 |
5 3rd Party製品を利用する 3rd Party製品を利用して、複数のEC2インスタンスに対するパッチ適用プロセスを自動化する方法

Cloud Automator とは

概要

Cloud Automator(クラウドオートメーター)は、弊社が提供するAWSの運用自動化に特化したSaaSサービスです。

プログラミングスキル不要で、直感的なインターフェースを通じてAWSの運用タスクを簡単に自動化できます。

「AWS運用の自動化をしたいが、エンジニアリソースが不足している・・・」そんなお悩みを抱えているAWS管理者の方々にはピッタリのサービスとなっています!

例えば、以下のような運用自動化が可能です。

  • 開発環境やテスト環境のEC2インスタンスを業務時間外に自動的に停止し、始業時に自動起動させることで不要なコストを削減する
  • バックアップの取得を自動化する

料金プラン

運用ジョブを1,000回実行できるビジネスプランは48,000円/月で利用可能です。

インフラエンジニア1名の1時間あたりの人件費を3,500円と仮定した場合、およそ14時間の費用でAWS運用の自動化を実現することができます。

料金プラン

料金プラン | AWS運用自動化サービス Cloud Automator

Cloud Automator のジョブワークフローとは

ジョブワークフローとは、順番に実行したい一連の運用ジョブがある場合に、それらを1つの「ワークフロー」としてまとめて管理・実行できる機能です。この機能により、複数のジョブを実行順に並べるだけで、連続した運用タスクを自動化できます。

今回は、このジョブワークフローを用いて、EC2インスタンス(Linux)へのパッチ適用を自動化する方法をご紹介します!

新しいジョブワークフローについて – サーバーワークス サポートセンター

ジョブワークフローのイメージ図

いざ、実装

想定するユースケース

構成図

最近ではマルチAZで冗長構成を採用しているシステムが大半で主流であるため、ELB(ALB/NLB)配下のEC2インスタンスに対してパッチ適用を行うケースを想定しています。

前提

対象のEC2インスタンスは以下の要件を満たしたSSMマネージドノードであること

  1. EC2 インスタンスにSSM エージェントがインストールされていること
  2. SSM のリージョンエンドポイントとの通信経路を確保していること(VPC Endpoint 作成またはインターネット通信できればOK)
  3. IAMロールを利用してEC2 インスタンスがSSMと通信するために必要な権限が付与されていること

詳細はAWS公式ドキュメントをご覧ください。

docs.aws.amazon.com

Cloud Automator を利用する際のIAMロールに適切な権限が付与されていること

Cloud Automator のIAMロール更新はコンソール画面から実施可能です。

ワークフロー専用のジョブを作成する

Cloud Automator のコンソール画面から以下7つのワークフロー専用ジョブを作成します。 Cloud Automator は直感的なUIで、ステップバイステップで設定していく設計なので、実際のジョブ作成画面を見ればポチポチ簡単に設定できます。

ワークフロー専用ジョブ一覧画面

No アクション 役割
1 タイマートリガー ワークフロー開始のトリガーとなるジョブ
2 EC2: AMIを作成 パッチ適用前にEBS-Backed AMIを取得します
3 ELB(ALB/NLB): ターゲットグループからEC2インスタンスを登録解除 パッチ適用前に対象EC2インスタンスをターゲットグループから登録解除することで、サービスに影響を及ぼさないよう隔離します
4 EC2: インスタンスでコマンドを実行 対象EC2インスタンスに対してパッチ適用コマンドを実行します
5 EC2: インスタンスを停止 kernelパッチなど、再起動が必要なパッチがあるためインスタンスを停止します
6 EC2: インスタンスを起動 インスタンスを起動します。ジョブ作成時にステータスチェックも合わせて行います
7 ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録 パッチ適用対象EC2インスタンスをターゲットグループから再登録します。この時、ヘルスチェックステータスがHealthyになるとワークフローが成功で完了します

補足その1:EC2: インスタンスでコマンドを実行

本アクションでは、SSM Run Command を実行します。ジョブ作成時に実行コマンドを入力する記載欄がありますが、例えば以下のようなコマンドを入力しておきます。 最後にif文で条件分岐を入れているのは、実行コマンド(dnf update --security -y)の終了ステータスをもとにジョブ実行の成功/失敗をチェックするためです。

#!/bin/bash

## umask値を変更(root 権限でdnf updateした時に権限の問題でエラーが出る可能性があるため)
umask 0022

## dnfのキャッシュを削除
dnf clean all

## dnfのキャッシュディレクトリがあれば削除
rm -fr /var/cache/dnf

# セキュリティパッチのみを適用
dnf update --security -y

# dnf updateの結果を判定
if [ $? -eq 0 ]; then
    exit 0
else
    exit 1
fi

ワークフローを作成する

Cloud Automator のコンソール画面からワークフローを作成します。 ジョブワークフロー名とグループを指定したら、後は実行したい順番にジョブを並べるだけです!

今回のワークフローの完成形は以下の通りです!この順番にジョブを並べればOKです!

最終的に実装するワークフロー

パッチ適用開始日時(トリガー)を設定する

ここまで来たら、あとはタイマートリガーでパッチ適用の開始時刻を決めるだけです!

タイマートリガーの設定

まとめ

AWS環境におけるセキュリティ強化のためには、定期的なパッチ適用が欠かせません。しかし、手動でのパッチ適用は時間と労力がかかり、ミスの原因にもなり得ます。本記事で紹介した「Cloud Automator」を利用すれば、プログラミングスキルがなくてもパッチ適用の自動化が可能となり、運用負荷を大幅に軽減できます。

Systems Manager Patch Manager を活用するなど、方法は様々ありますが、ぜひこの機会に、Cloud Automatorを活用したパッチ適用の自動化をご検討ください!

山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ

カスタマーサクセス部所属。2019年12月にインフラ未経験で入社し、AWSエンジニアとしてのキャリアを始める。2023 Japan AWS Ambassadors/2023-2024 Japan AWS Top Engineers