Grafana でアラートを通知する方法と検知内容による通知内容の切り替え

## はじめに

この記事では、オープンソースの監視ツールである Grafana を使用して、異常を検知しアラートを送信する方法を紹介します。  

## アラートの基本設定

Grafana ではアラートルールを設定して、特定の条件を満たしたときに通知を送ることができます。

### アラートルールの作成

分かりやすい関連情報がありましたので、引用させていただきます。  
[アラートの作成](https://qiita.com/frozencatpisces/items/c4b601084250a7ce7091#2-%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)

※ポイントはアラート条件に合致した際、アラートに付与されるラベルによって、通知先を振り分けていく、という流れです。  
アラートに付与されるラベルは下記種類があり、引用させて頂い記事にはその設定方法まで記載されています。
- アラート名やフォルダ名のように自動付与されるもの
- カスタムラベルを付与して自分でコントロールしていくもの

## Contact pointsの作成

1. Grafanaにログインします。
2. 左側のメニューから「Alerting」を選択します。
3. 「Contact points」をクリックします。
4. 「+ Add contact point」をクリックして新しい通知チャネルを作成します.
5. 通知の種類（Email, Slack, Webhook など）、必要情報を入力し、「Test」をクリックして通知が正しく機能することを確認します.
6. 「Save」をクリックして通知チャネルを保存します.

## Notification policiesの作成とラベルマッチング

1. 左側のメニューから「Alerting」を選択します。
2. 「Notification policies」をクリックします.
3. 「+ Add nested policy」をクリックして新しい通知ポリシーを作成します.
4. 必要な情報を入力し、「Save policy」をクリックして通知ポリシーを保存します.
5. 「Labels」セクションに移動し、ラベルマッチャーを追加します. ラベルマッチャーはラベル名、演算子、値の3つの部分から構成されます.

## 通知する内容をテンプレートによって切り替える方法

Grafanaでは、通知テンプレートを作成して再利用することができます。これにより、異なるアラート通知で同じメッセージ構造を使用することができます。

1. Grafanaにログインし、左側のメニューから「Alerting」を選択します。
2. 「Contact points」をクリックします。
3. 「Notification Templates」タブを選択し、「+ Add notification template」をクリックします.
4. テンプレートの名前を入力し、コンテンツフィールドにテンプレートの内容を記述します.
5. 「Save」をクリックして変更を保存します.

テンプレートは、`{{ define \"template-name\" }}` と `{{ end }}` で囲むことで定義します。これにより、同じテンプレートを複数の通知で再利用することができます。

## アラート条件選定用の参考情報

アクセスログの監視で有効な対象を選定する際には、以下の条件が特に重要です。

1. **ログイン試行回数の異常**: 異常に多いログイン試行は不正アクセスの兆候として重要です。
2. **ファイルアクセスの異常**: 特定の機密情報や重要なファイルへのアクセス試行はセキュリティ上のリスクです。
3. **不正な認証試行の検出**: 不正な認証試行は、ブルートフォース攻撃などの不正アクセスを検知するために重要です。
4. **異常なユーザー権限の変更**: 異常な権限の変更は、権限の乱用や不正アクセスを検知するために重要です。
5. **不正なファイルシステムアクセス**: システムファイルや機密情報への不正なアクセスはセキュリティ上のリスクです。
6. **不正な API アクセスの検知**: API を介した不正なアクセス試行は、セキュリティ上のリスクとなる可能性があります。

アクティビティログの監視で有効な対象を選定する際には、以下の条件が重要です。

1. **不正なアカウント活動の検知**: アカウントの不正利用や乗っ取りを検知する。
2. **不正なユーザー認証の試行**: 不正なユーザーが認証を試みる試行を検知する。
3. **セキュリティポリシーの違反**: 社内のセキュリティポリシーに違反する行動を検知する。
4. **異常なセキュリティイベントの検知**: システムに異常なセキュリティイベントが発生した場合に検知する。
5. **不正な URL アクセスの検知**: 不正な URL へのアクセスを試みる試行を検知する。
6. **ファイルの改ざんの検知**: 重要なファイルの改ざんを検知する。
7. **不正な SSL 証明書の使用**: 信頼されていない SSL 証明書の使用を検知する。
8. **不正なネットワークポートの利用**: 不正なポートが利用された場合に検知する。

他にも下記の観点で当てはまるものの活用を検討します。

1. **ログイン試行回数の異常**

   - 条件: 1 分間に 10 回以上のログイン試行があった場合
   - 説明: 一定期間内に異常に多くのログイン試行がある場合、不正アクセスの可能性が高いためアラートを出す。

2. **ファイルアクセスの異常**

   - 条件: 特定のファイルに異常なアクセス試行があった場合
   - 説明: 機密情報や重要なファイルへの不正アクセスを検知するために、アクセスログを監視し異常を検知する。

3. **IP アドレスの異常**

   - 条件: 特定の IP アドレスからのアクセスが急増した場合
   - 説明: 不審な IP アドレスからのアクセスを検知し、不正アクセスを警告する。

4. **特定ユーザーの操作異常**

   - 条件: 特定のユーザーが通常と異なる操作を行った場合
   - 説明: 特権ユーザーや管理者アカウントなどの操作を監視し、不正アクセスを検知する。

5. **異常な時間帯のアクセス**

   - 条件: 深夜や休日などに通常と異なるアクセスがあった場合
   - 説明: 通常業務時間外のアクセスがあった場合に、不正アクセスを検知する。

6. **異常なアクセス元の国・地域**

   - 条件: 特定の国・地域からのアクセスが急増した場合
   - 説明: 特定の国・地域からのアクセスを監視し、海外からの不正アクセスを検知する。

7. **異常な HTTP リクエスト**

   - 条件: 異常なヘッダーを持つ HTTP リクエストがあった場合
   - 説明: SQL インジェクションやクロスサイトスクリプティングなどの攻撃を検知する。

8. **異常なデータベース操作**

   - 条件: 特定のデータベース操作が異常に多い場合
   - 説明: データベースへの不正なアクセスやデータ改ざんを検知する。

9. **異常なファイルのアップロード**

   - 条件: 不正なファイル形式や大容量のファイルがアップロードされた場合
   - 説明: ウイルス感染ファイルや機密情報の漏洩を検知する。

10. **異常なユーザーエージェント**

    - 条件: 不正なユーザーエージェントを持つリクエストがあった場合
    - 説明: ボットやスクレイパーからのアクセスを検知し、防御する。

11. **異常なファイルのダウンロード**

    - 条件: 特定のファイルが異常に多くダウンロードされた場合
    - 説明: 機密情報や重要なファイルの不正なダウンロードを検知する。

12. **不正な認証試行の検出**

    - 条件: 一定期間内に不正な認証試行が複数回行われた場合
    - 説明: 不正なアカウントアクセスやパスワード試行を検知し、ブルートフォース攻撃を防止する。

13. **異常なユーザー権限の変更**

    - 条件: 特定のユーザーの権限が異常に変更された場合
    - 説明: 不正な権限の変更や権限の乱用を検知する。

14. **セキュリティ設定の変更**

    - 条件: セキュリティ設定が異常に変更された場合
    - 説明: セキュリティポリシーやファイアウォールの変更を検知し、不正な変更を防止する。

15. **不正なファイルシステムアクセス**

    - 条件: 特定のファイルやディレクトリへの不正なアクセスが試みられた場合
    - 説明: システムファイルや機密情報への不正なアクセスを検知する。

16. **異常なネットワークトラフィック**

    - 条件: 異常に多いまたは異常なパターンのネットワークトラフィックが検出された場合
    - 説明: DDoS 攻撃やボットネットの活動を検知し、対処する。

17. **不正なシステムコマンドの実行**

    - 条件: 特定のシステムコマンドが実行された場合
    - 説明: シェルインジェクションやシステムへの不正なアクセスを検知する。

18. **異常なプロセス実行**

    - 条件: 異常なプロセスが実行された場合
    - 説明: 不正なマルウェアやトロイの木馬の実行を検知する。

19. **セキュリティポリシーの違反**

    - 条件: セキュリティポリシーに違反するアクションが検出された場合
    - 説明: 社内のセキュリティポリシーに違反する行動を検知し、適切な対応を行う。

20. **不正な SSL 証明書の使用**

    - 条件: 信頼されていない SSL 証明書が使用された場合
    - 説明: SSL 証明書の信頼性を確保し、中間者攻撃やフィッシング詐欺を防止する。

21. **不正なネットワークポートの利用**

    - 条件: 不正なポートがアクセスされた場合
    - 説明: 通常使用されないポートへのアクセスを検知し、不正な通信を防止する。

22. **ファイルの改ざんの検知**

    - 条件: 特定のファイルが改ざんされた場合
    - 説明: 重要なファイルの改ざんを検知し、データの完全性を保護する。

23. **ブラウザのセキュリティ警告の検知**

    - 条件: ユーザーがブラウザのセキュリティ警告を無視した場合
    - 説明: セキュリティ意識の低いユーザーの行動を検知し、教育や対策を行う。

24. **不正な API アクセスの検知**

    - 条件: 不正な API リクエストが送信された場合
    - 説明: 不正な API アクセスを検知し、API のセキュリティを確保する。

25. **不正なアカウント活動の検知**

    - 条件: アカウントが不正な活動を行った場合
    - 説明: アカウント乗っ取りや不正なアカウント活動を検知し、対策を行う。

26. **異常なセキュリティイベントの検知**

    - 条件: セキュリティイベントログに異常なイベントが記録された場合
    - 説明: 不審なアクティビティや攻撃を検知し、対応する。

27. **不正な URL アクセスの検知**

    - 条件: 不正な URL にアクセスが試みられた場合
    - 説明: フィッシング詐欺やマルウェア感染の試みを検知する。

28. **不正なユーザー認証の試行**

    - 条件: 不正なユーザーが認証を試みた場合
    - 説明: 不正なアカウントアクセスやセキュリティ違反の試みを検知する。

29. **システムリソースの異常使用**

    - 条件: システムリソースが異常に使用された場合
    - 説明: マルウェアや攻撃によるサーバー負荷の増加を検知する。

30. **セキュリティパッチの未適用**
    - 条件: システムにセキュリティパッチが未適用の場合
    - 説明: 未修正の脆弱性に対するリスクを検知し、対策を行う。