【AWS Config】EC2インスタンスに特定アプリケーションがインストールされているかチェックして通知する
はじめに
上記のように、EC2インスタンスに特定アプリケーションがインストールされているかどうかチェックを行い、 必要に応じて通知を行う仕組みを作りたいです。
これを実現するための仕組みを作って、試してみます(検証用 EC2インスタンスとして Amazon Linux 2を使用)。
先にまとめますが、以下のような構成図になります。
前提知識
前述の構成図の各要素説明します。
「インストールされているアプリケーション情報を収集する」ために必要なサービス
この部分の説明をします。
主に AWS Systems Manager(SSM) の機能を活用します。 SSMは AWS環境の運用管理のために役立つ多種多様なサービス群の総称です。 SSMでできることはとっても多いので、今回使用するサービスに絞って説明します。
EC2インスタンスや オンプレミスサーバに SSMエージェント をインストールすることで、 そのインスタンス(サーバ)を SSMマネージドインスタンス として扱えます。 "SSMマネージドインスタンス化" することで直接 SSHなどで接続することなく、 インスタンスの管理を行うことができます。代表的なサービスとしては以下の通りです。
- Session Manager: インスタンスへ接続できる機能。 SSHポートを開いたり、踏み台ホスト作成する必要が無い
- Run Command: インスタンスに対してコマンドを実行する機能
- パッチマネージャー: パッチ適用を行う機能
- ★ インベントリ: OS/アプリケーションに関する情報を収集する機能
SSMインベントリ は マネージドインスタンスの OS/アプリケーションに関する情報を収集する機能です。 このインベントリが本チェックの判断材料です。
「特定アプリケーションがインストールされているかチェックする」ために必要なサービス
この部分の説明をします。 AWS Config および Configルール を活用します。
AWS Config は AWSリソースの構成を記録、管理するためのサービスです。 EC2インスタンスやセキュリティグループなど、AWSリソースが 「いつ、どのような変更がされたか」 の履歴を記録してくれます。
この Config ですが、 SSMインベントリも記録対象 にすることができます。 アプリケーションのインストール状況や、ネットワーク設定など、記録して確認できます。
※Config および SSMインベントリについての深堀りは以下エントリが参考になります。
一方、 AWS Config ルール は Configの記録された情報を利用して AWSリソースの構成の評価ができる機能です。 AWSリソースのあるべき構成を条件としています。 条件に違反しているリソースが検出されると 「非準拠」フラグが付けられます。
AWSが提供/管理しているConfigルール(マネージドルール)に ec2-managedinstance-applications-required
があります。
マネージドインスタンスに特定のアプリケーションがインストールされているか、 チェックを行うルールです。本構成で活用します。
「非準拠リソースが見つかった際に通知する」ために必要なサービス
この部分の説明をします。
前述の Configルールで非準拠リソースが見つかった際に、 そのリソースに対して SSMオートメーションを実行する ことができます。 (Configルールの「 修復アクション 」と呼びます)
SSMオートメーション はワークフロー実行のサービスです。自動化に役立ちます。
自身でワークフローを記述してドキュメントを作成することはできますが、
今回は AWS が提供/管理しているオートメーション AWS-PublishSNSNotification
を使用します。
Amazon SNS に通知を発行するだけのシンプルなオートメーションです。
事前準備
「SSMインベントリを Configで記録する環境」 および 「SNSトピックの作成/購読設定」 は事前準備として済ませましょう。
SSMインベントリを Configで記録する環境
以下設定が完了していない場合は済ませましょう。
▼ 監視対象の EC2インスタンスを SSMマネージドインスタンスにする
SSMエージェントをインストールして、マネージドインスタンスとして登録しましょう。 うまく登録できない場合は以下エントリが参考になります。
▼ インベントリ収集の設定
マネコンから 1-Click で有効化できます。設定方法は以下参照ください。
▼ Config 記録
Config 記録を有効化していない場合は有効化しましょう。
また、記録するリソースが "全て" である場合は問題有りませんが、
そうでない場合は AWS SSM ManagedInstanceInventory
が記録リソースタイプにあるか
確認しましょう。
SNSトピックの作成/購読設定
今回の通知用の SNSトピックを事前に作成しておきます。 必要に応じてメールなど購読設定をしておきましょう。
環境構築
Configルールとそれに紐づく SSMオートメーション を作成します。 今回は CloudFormation テンプレートとしてサクッと作ってしまいます。
※マネコンから構築する場合は以下エントリを参照ください。 使用する Configルール/SSMオートメーションが違うだけで、大枠は同じです。
CFnテンプレート
- パラメータ(Parameters)
ApplicationNames
… 検知させたいアプリケーション名を記入します (複数ある場合は ":" で区切って指定)SnsTopicArn
… 通知先の SNSトピックのARNを記入します
- リソース(Resources)
IamRole
… 修復アクション(SSMオートメーション)のための IAMロールですConfigRule
… Configルールです。 マネージドルールEC2_MANAGEDINSTANCE_APPLICATIONS_REQUIRED
を使いますRemediationConfiguration
… 修復アクション(SSMオートメーション)です。 マネージドドキュメントAWS-PublishSNSNotification
を使います
動作確認
先程のテンプレートを展開して動作確認をしました。
生成された Configルールのページを見てみると 1つ、非準拠リソースが確認できます。
The EC2 instance is missing the following applications: xxx.
SNSトピックには メール購読設定をしていました。 以下のように非準拠リソースの情報を届くこと確認できました。
おわりに
ベースラインとして入っていないといけないソフトウェアがちゃんと入っているか、 トラッキングしたいときに役立つと思います。
以上、少しでも参考になれば幸いです。