はじめに

本記事の情報は2023/7時点での情報です。
AWS Security Hubにて一元的に情報を管理されている方もいらっしゃるかと思います。
その際に特定の条件を満たした検知されたイベントについて何かしらの通知を行いたい場合もあるかと思います。
本記事では、AWS Security Hubで検知されたイベントを指定されたメールアドレス宛に通知する方法を記載いたします。

前提条件

  • AWS Security Hubが有効化されている
  • 指定されたメールアドレスへ通知を行いたい
  • 作成している環境において暗号化を必須としており、ユーザー側で鍵の管理を行う
  • 暗号化が不要な場合は、暗号化に必要な作業を省いていただければ対応可能です。

対象

  • 重要度のラベルが CRITICAL、HIGH
  • フローの状態がNEW

設定方法

AWS Security Hubで検知された内容を指定された宛先に通知するために以下のサービスを利用します。

  • EventBridge
  • SNS
  • KMS

SNS

項目 設定値
タイプ 標準
名前 AAAAAA
暗号化 有効化する
キー名 作成したKMS
タグキー 必要であれば
タグ値 必要であれば

オプション部分は適宜必要なものを記載ください。

EventBridge

項目 設定値
名前 BBBBB
説明 – 任意 任意
イベントパス default
ルールタイプ イベントパターンを持つルール
イベントソース AWS イベントまたは EventBridge パートナーイベント
サンプルイベント
作成のメソッド パターンフォームを使用する
イベントソース AWSのサービス
作成のメソッド Security Hub
イベントタイプ Security Hub Findings – Imported
イベントタイプ 任意の AWS アカウント ID
任意のコンプライアンスステータス
任意の重要度
任意の製品 ARN
任意のレコードの状態
任意のリソース ID
任意のリソースタイプ
特定の重大度ラベル: HIGH、 CRITICAL
特定のワークフローステータス: NEW
ターゲットタイプ AWSのサービス
ターゲットを選択 SNSトピック
トピック SNS
タグキー 必要であれば
タグ値 必要であれば

入力トランスフォーマー等の追加の設定については、
通知内容を整形する場合は必要となりますため必要に応じて対応ください。
※イベント内容にバックスラッシュが含まれている場合にFailedInvocationsが発生する可能性があります。(改行コード”\n”も該当)
改行コード等が含まれる可能性がある場合はLambda関数で整形しSNS通知を行う処理をご検討ください。

設定を行なったSNSについては、アクセスポリシーに自動的に付与されるため、手動での追加は不要ですが、
追加されていない場合は以下の権限を付与ください。

{
"Sid": "AWS Events",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:リージョン:アカウント番号:トピック名"
},

KMS

項目 設定
キーのタイプ 対称
キーの使用 暗号化および複合化
キーマテリアルオリジン KMS
リージョンごと 単一リージョンキー
エイリアス CCCCCCC
タグキー 必要であれば
タグ値 必要であれば
キーの管理アクセス許可を定義 デフォルト設定
キーの使用アクセス許可を定義 デフォルト設定

キーポリシーにはEventBridgeから接続許可を行うために以下を追加いたします。

{
"Sid": "Allow EventBridge to use the key",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}

トラブルシューティング

EventBridgeでの操作が失敗した時に備え、エラー内容をDead Letter Que(DLQ)に格納する
方法をとっておくとその後の解析に役に立つかと思います。
EventBridgeでDLQを設定するためには以下の設定が必要となります。

  • SQSの作成
  • KMS

暗号化を行うことが必要な環境であれば、KMSの作成が必要ですが、不要であればそのまま設定を行うことが可能です。
まずは暗号化を行うことを必要としているため、新規にKMSキーを作成いたします。

項目 設定
キーのタイプ 対称
キーの使用 暗号化および複合化
キーマテリアルオリジン KMS
リージョンごと 単一リージョンキー
エイリアス XXXXXXX
タグキー 必要であれば
タグ値 必要であれば
キーの管理アクセス許可を定義 デフォルト設定
キーの使用アクセス許可を定義 デフォルト設定

また、キーポリシーでEventBridgeからの利用を許可します。

{
"Sid": "Allow EventBridge to use the key",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}

KMSキーを作成後、SQSも新規に作成していきます。

項目 設定
タイプ 標準
名前 YYYYYY
可視性タイムアウト 30秒
メッセージ保持期間 4日
配信遅延 0秒
最大メッセージサイズ 256KB
メッセージ受信待機時間 0秒
サーバー側の暗号化 有効
Encryption key type SSE-KMS
カスタマーマスターキー 作成したKMSキー
データキー再利用期間 5分
メソッドを選択 ベーシック
キューにメッセージを送信できるユーザーを定義 キューの所有者のみ
キューからメッセージを受信できるユーザーを定義 キューの所有者のみ
このキューをデッドレターキューとして使用できるソースキューを選択 無効
デッドレターキュー 無効

設定としてはデフォルトで大丈夫かと思います。
メッセージ保持期間については、運用を踏まえ設定を行なっていただければと思います。
SQSの設定において、デッドレターキューを設定する箇所がありますが、このデッドレターキュー
については、SQSのデッドレターキューであり、EventBridgeのデッドレターキューとは関係ありません。
このため、設定としては無効としています。

SQSの作成まで完了しましたら、該当のEventBridgeの編集画面から「ターゲットを選択」の画面まで行き、デッドレターキューを有効にして、作成したSQSを設定します。

これにより、EventBrigeが失敗した場合に指定したSQSにキューとして情報が貯まるようになります。

最後に

今回の設定では単純に重要度ラベルとフローのステータスがNEWのものを通知する設定を行いました。
ventBridgeが特定の検知で失敗が発生するなども考えられますため、
失敗内容を確認するためにDLQの設定を行うのも大切になってくるかと思います。

またこちらについては、他にフィルタリング等をしていないため、合致するものは全て通知されるようになります。
このため、大量の通知が届く場合があるため注意が必要です。
通知を実施する検知対象の抑止を行なったり無効化を行なったりする方法はございますが、
本記事では対象外とさせていただきます。

  • 参考情報
  • SecurityHubの検知抑止方法
  • 無効化:コントロールを無効にできます。 無効化したコントロールはチェックの対象外になり、関連して生成している Configルールも削除されます
  • SUPPRESSED:リソース単位の無効化 。検出結果は無視され、今後は検出されない