はじめに
本記事の情報は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:リソース単位の無効化 。検出結果は無視され、今後は検出されない