0
0

一度にたくさん来るInspectorの通知を1つにまとめてSNSに送ってみた

Last updated at Posted at 2024-08-17

image.png

一度にたくさん来るInspectorの通知を1つにまとめてSNSに送ってみた

背景

AWSのセキュリティサービスであるInspectorを導入したものの、その通知や管理方法に悩まされていました。多くのAWSユーザーが直面する問題です。

最初は、ネット上の情報を参考にEventBridgeを使用して通知を設定してみました。しかし、この方法では脆弱性の数×インスタンス数、またはLambda関数の数だけ通知が来てしまい、非常に煩わしい状況になってしまいました。

image.png

これは明らかに効率的ではありません。そこで、この問題を解決するための独自のソリューションを開発することにしました。

一度にたくさん来る通知をどうやって処理するか

通知をまとめる方法を考える際、最初に思いついたのはDynamoDBの使用でした。しかし、コストを抑えたいので別のアプローチを模索しました。

そこで注目したのが、SNSのメトリクスがCloudWatchで取得できるという点です。これをトリガーとして使用できれば、効率的に通知をまとめることができるのではないかと考えました。

具体的には、CloudWatch Alarmを使用してLambda関数を実行する方法を採用しました。この方法により、以下のようなワークフローを実現できました:

  1. SNSのダミートピックスを作る。
    image.png
    ダミーなのでサブスクリプションは登録しない。

  2. Inspector FindingをまとめるLambda関数を作る

    1. コードをGithubから持ってくる
    2. ロールの設定。
      デフォルトのロールに以下を追加
    • AWSIoTDeviceDefenderPublishFindingsToSNSMitigationAction
    • AmazonInspectorReadOnlyAccess
    1. 環境変数を入力する。
    • AWS_REGION: Findingの対象リージョン
    • LANG: サマリの言語(デフォルト:en, 日本語はjp)
    • TOPIC_ARN: 実際に通知するSNSトピックのARN
  3. InspectorからEventBridge経由でサブスクリプションを設定していないダミーのSNSに通知

    1. EventBridgeでInspectorにおいてCRITICALな脆弱性が発見されたときのルール作成
      ルールの詳細
      ルールの詳細
      ターゲットの選択でカスタムパターンで参考ページのJSONを貼り付ける。とりあえずここで、緊急度の高いCRITICALのみにする。
      image.png
      {
           "source": ["aws.inspector2"],
           "detail-type": ["Inspector2 Finding"],
           "detail": {
             "severity": ["CRITICAL"],
             "status": ["ACTIVE"]
           }
      }  
      
      作成したダミーのSNSに通知

    参考: Step 2. Amazon Inspector の検出結果の EventBridge ルールを作成する

  4. CloudWatchがSNSのメトリクス(Fill関数を通したNumberOfMessagesPublished)を監視

    1. テストでダミーのSNSにpublishしてみる。
      image.png
    2. CloudWatchのメトリクスで前項のpublishにより上がることを確認する。
      image.png
      3.集計時間を1分にして集計方法を合計または最大にする。またFill関数でデータがない期間を0にする。
      image.png

    参考: Metric Math のサポートされている関数

  5. メトリクスが1を超えた場合、CloudWatch Alarmを設定
    image.png
    image.png

  6. Lambda関数が通知をまとめてSNSに送信
    Inspector通知をまとめてSNSに送るサンプル

この方法により、大量の個別通知を1つにまとめることができ、管理が非常に楽になりました。

まとめ

このソリューションの詳細な実装方法については、GitHubリポジトリで公開しています。興味のある方は是非チェックしてみてください。(まだlambda_function.pyしか置いてないですがそのうち、Readmeを書きます)

このアプローチを採用することで、Inspectorの通知管理が大幅に改善され、セキュリティ監視の効率が向上しました。AWSのサービスを組み合わせることで、コスト効率の良い、カスタマイズされたソリューションを作成できることを実感しました。

皆さんも同様の問題に直面していたら、ぜひ参考にしてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0