リモートデスクトップの接続ログをパラメータストアを使ってCloudWatchLogsに転送してアラート通知してみた

2020.11.07

はじめに

こんにちは。大阪オフィスの林です。

今回やりたいことはタイトルの通りなのですが、基本的な内容としては下記のブログに概ねまとめられています。下記のブログと違う点としては、本ブログではパラメータストアを使用してCloudWatchAgentの設定をしている点とCloudWatch周りのUIが新しくなっている点、といったところでしょうか。

それでは早速やっていきましょう!

前提

下記前提のもと手順を進めていきます。

  • 対象のEC2がAWS Systems Managerのマネージドインスタンスとして登録されていること
  • 対象のEC2にCloudWatchAgentがインストール済みであること
  • 通知アクションで使用するSNSトピックが作成済みであること

やってみた

AWS Systems Managerのダッシュボードから「パラメータストア」-「パラメータの作成」を選択します。

今回は下記パラメータで進めます。

項目
設定値
名前 rdp-log
説明 rdp-log
利用枠 標準
タイプ 文字列
データ型 text

下記のJSONを「値」に入力し「パラメータを作成」を選択します。

{
    "logs": {
        "logs_collected": {
            "windows_events": {
                "collect_list": [
                {
                    "event_name": "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational",
                    "event_levels": [
                        "INFORMATION",
                        "WARNING",
                        "ERROR",
                        "CRITICAL",
                        "VERBOSE"
                    ],
                    "log_group_name": "Windows_TerminalServices-Log",
                    "log_stream_name": "{local_hostname}_{instance_id}"
                }
                ]
            }
        }
    }
}

パラメータストアで定義した内容をEC2に反映させます。AWS Systems Managerのダッシュボードから「Run Command」-「Run Command」を選択します。

コマンドドキュメントから「AmazonCloudWatch-ManageAgent」を検索し、選択します。

「Optional Configuration Location」に先ほど作成したパラメータストアの名前を入力します。(本手順では「rdp-log」を指定)

その他はデフォルトでターゲットのインスタンスを選択します。

その他はデフォルトで「実行」を選択します。

実行結果の画面に遷移したあと、ステータスが「成功」になったことを確認します。

CloudWatchLogsを見てみます。既に対象のログがある場合、ロググループが作成されています。(本手順では「Windows_TerminalServices-Log」というロググループが作成されている)

ロググループを選択し、「アクション」-「メトリクスフィルターを作成」を選択します。

フィルタパターンに"リモート デスクトップ サービス: セッション ログオンに成功しました"と入力し「Next」を選択します。(ダブルクォーテーションも忘れずに入力します)

フィルター名に任意の名前を入力し「次へ」を選択します。(本手順では「RDP-Connection-Success」とする)

メトリクスの詳細について、今回は下記パラメータを指定し「Next」を選択します。

項目
設定値
メトリクス名前空間 RDP-Connection-Success
メトリクス名 RDP-Connection-Success
メトリクス値 1

内容を確認し「メトリクスフィルターを作成」を選択します。

メトリクスフィルターが作成されたことを確認します。

作成したメトリクスフィルターにチェックを入れ、「アラームを作成」を選択します。

メトリクス名に前述で作成したメトリクスが指定されていることを確認し「統計」を「合計」、「期間」を「1分」とします。

条件について、今回は下記パラメータを指定し「次へ」を選択します。

項目
設定値
しきい値の種類 静的
次の時... より大きい
...よりも(しきい値を定義) 0
欠陥データの処理 欠陥データを適正(しきい値をこえていない)として処理

アクションの設定について、今回は下記パラメータを指定します。

項目
設定値
アラーム状態トリガー アラーム状態
SNSトピックを選択 既存のSNSトピックを選択
通知の送信先 [予め作成済みのSNSトピックを指定]

その他はデフォルトで「次へ」を選択します。

アラーム名に任意の名前を入力し「次へ」を選択します。(本手順では「RDP-Connection-Alarm」とする)

プレビューを確認し「アラームの作成」を選択します。

アラームが作成されたことを確認します。

対象のEC2にリモートデスクトップ接続します。

少しすると、CloudWatchAlarm上で「アラーム状態」となりました。

SNSを経由したメール通知も受領しました。

まとめ

最近ではパラメータストアを使用した設定の配布がスタンダードになってきているのではないでしょうか?どなたかの参考になりましたら幸いです!

以上、大阪オフィスの林がお送りしました!