はじめに
こんにちは。エンタープライズクラウド部の脇江です。
突然ですが、皆さん EC2 インスタンスの運用管理に Systems Manager(以下、SSM)を使ってますでしょうか?
SSM には EC2 インスタンスの運用管理に役立つ多数の機能が備わっています。
例えば以下のような機能があります。
- AWS マネジメントコンソールから OS にログインして操作する
- 複数の EC2 インスタンスに対して OS ログインなしでコマンドを一括実行する
- パッチの自動スキャンや自動パッチ適用を行う
- etc...
これらの SSM 機能を利用するためには EC2 インスタンスが SSM によって管理されている状態であることが必要です。
SSM によって管理されている EC2 インスタンスを「マネージドノード」と呼びます。
今回は Config ルールを使用し、EC2 インスタンスが SSM のマネージドノードとして利用不可になった場合に検知する方法を記載していきます。
対象読者
- SSM を利用して EC2 の運用管理を行っている方
- マネージドノードとして利用不可になった場合の検知方法について知りたい方
前提条件
- 既に EC2 インスタンスがマネージドノードとして利用可能な状態であること
- Config が設定されリソース情報の記録がされていること
マネージドノード利用不可から検知までの流れ
マネージドノード利用不可から検知までの流れは以下のようなイメージとなります。
① マネージドノードとして利用不可
EC2 インスタンスがマネージドノードとして利用不可となるのはマネージドノードの要件を満たせなくなった時となります。
マネージドノードの要件は以下の3つです。
- SSM エージェントが起動している
- SSM API へのアウトバウンド通信経路が確保されている
- SSM に接続するための権限が付与されている
「SSM エージェントが停止した」「SSM API への疎通が取れなくなった」「SSM に接続するための権限を失った」といったことが発生すると、マネージドノードは SSM 機能を利用することができなくなります。
② マネージドノードのステータス変更
マネージドノードとして利用不可の状態になると、マネージドノードのステータスは "Online" から "Connection lost" へと変更されます。
③ Config に記録
マネージドノードのステータスが "Connection lost" に変更されたことは Config によって記録されます。
AWS::SSM::ManagedInstanceInventory の設定項目にステータスが反映される形となります。
※Config 上でのスタータスの表記では "Online" ではなく "Active"、"Connection lost" ではなく "ConnectionLost" になります。
④ Config ルールによる評価
Config ルール「ec2-instance-managed-by-systems-manager」を使用して、マネージドノードのステータスが "ConnectionLost" になったことを検知します。
この Config ルールでは Config で記録された AWS::SSM::ManagedInstanceInventory の設定項目におけるステータスの値を評価します。
AWS::SSM::ManagedInstanceInventory の設定項目におけるステータスが "ConnectionLost" であることを評価すると、Config ルールのステータスが "非準拠" となります。
注意点
マネージドノードのステータスが "ConnectionLost" になってから、その情報が Config に反映されるまではタイムラグがあります。
そのため、実際に EC2 インスタンスがマネージドノードとして利用不可になってから Config ルールで検知されるまでにもタイムラグが発生するので、リアルタイムでの検知ではないという点は注意が必要です。
実際に何度か検証してみたところでは、Config ルールで検知されるまで 1時間〜2時間半程度のタイムラグがありました。
⑤ 通知等の構成
Config ルールのステータスが "非準拠" になることをトリガーとした通知等を構成します。
例えば、EventBridge + SNS の組み合わせでマネージドノード利用不可時にメール通知する構成とすることが可能です。
おわりに
実際にマネージドノードが利用不可になってから検知までにタイムラグはありますが、そこが許容できるのであれば手軽に導入できる仕組みかなと思います。
この記事がどなたかのお役に立てば幸いです。