Amazon GuardDuty で検知した脅威を Slack に通知して、AWS 環境のセキュリティ対策をしよう

Amazon GuardDuty とは、 AWS のセキュリティに関するマネージドサービスの 1 つです。
脅威インテリジェンス(AWSマネージドルール)を使用して、AWS アカウントに対する脅威を検出してくれるため、AWS 環境のセキュリティ対策をする上で、重要なサービスの 1 つとなります。
導入自体は簡単ですが、GuardDuty 単体では検出の役割しか果たさないため、検出された「脅威」に対して何らかの対応を実施しなければいけません。
本ブログでは検出された「脅威」を重要レベルに応じて Slack に通知する方法をご紹介します。
目次
AWS 環境のセキュリティ向上に「脅威」の通知がなぜ必要か
Amazon GuardDuty は、以下のデータソースを分析して脅威を検出します。
※ 別途有効化は不要
- AWS CloudTrail
- VPC Flow Logs
- DNS クエリログ
- Amazon EKS 監査ログ
GuardDuty を有効化するだけで、これらを自動で分析し「脅威」を検出してくれます。
とても便利なサービスですが、忘れてはいけないことがあります。
それは、 GuardDuty は「検出」の役割しか果たさないということです。
そのため検出時には別途、社内のセキュリティポリシーに則って何らかの処置を行う必要があります。
処置を迅速に行うためにも、「脅威」が検出されたことを通知する仕組みが必要となります。
今回は「脅威」を重要レベルに応じて Slack に通知する方法を記載していきます。
■ 構成図

AWS アカウントで GuardDuty を有効化
まずは GuardDuty を有効化してみましょう。
手順は簡単で、ナビゲーションペインから GuardDuty へ遷移し、
「今すぐ始める」→「 GuardDuty を有効にする」をクリックして完了です。

▼

▼

AWS Chatbot を使用して、SNS トピックと Slack を連携
AWS Chatbot とは、 AWS リソースの通知送信などを補助するサービスです。
本ブログでは Chatbot の機能について詳しくは記述しませんが、今回は Chatbot を使用して SNS トピックと Slack チャンネルを連携します。
まずは、 Amazon SNS にてスタンダードタイプの「トピック」を作成します。
※この段階ではサブスクリプションに何も設定していないままで問題ありません。

続いて、AWS Chatbot と Slack アカウントを連携します。
チャットクライアントを「 Slack 」にし、「クライアントを設定」をクリックします。

通知送信先の Slack ワークスペースにサインインします。


Chatbot に Slack のワークスペースが追加されたことを確認し、「新しいチャネルを設定」へ進みます。

「 Slack チャネル」には、送信先の Slack チャンネルを設定します。
チャンネルタイプを「パブリック」にし、対象のチャンネルを選択します。

「アクセス許可」では、 Chatbot チャネルの権限を設定します。
ここでは「チャネルロール」と「ガードレールポリシー」の2つを設定します。
- チャネルロール
「ポリシーテンプレート」で「通知のアクセス許可」を選択します。チャネルメンバーに付与するロールが選択した「ポリシーテンプレート」を元に作成されます。もちろん既存のロールも使用できます。
- チャネルガードレールポリシー
チャネルガードレールポリシーは、予期せぬ実行を起こさないための「制限」として設定します。例えば、チャネルロールで付与されているアクションであっても、チャネルガードレールポリシーで付与されていないアクションの場合、アクションが制限されるため実行不可となります。
今回は単純な権限設定のみなので、チャネルガードレールポリシーの役割が分かりにくいですが、ユーザーロールの活用など権限が複雑になった場合に、「制限」として力を発揮することを理解しておくと良いでしょう。

「通知」では、作成した SNS トピックを選択し、「設定」をクリックします。

以下 2 つを確認します。
① チャネルが追加されたこと

② 対象の SNS トピックのサブスクリプションにエンドポイントが追加されたこと

Chatbot 画面でチャネルを選択し「テストメッセージを送信」を実施して、対象の Slack チャンネルに通知されるか確認しましょう。
※ 事前に Slack へ「 AMS Chatbot アプリ」をインストールする必要があります。

受信したテストメッセージ

EventBridge を使用して、GuardDuty と SNS トピックを連携
GuardDuty の検出結果をフィルタリングして、SNS トピックへメトリクスを流す設定を行います。
Amazon EventBridge のメニューで「ルール」を選択し、「ルールの作成」へ進みます。

「ルールの詳細を定義」ではルールタイプを「イベントパターンを持つルール」に選択し、「次へ」をクリックします。

「イベントソース」では、「 AWS イベントまたは EventBridge パートナーイベント」を選択します。

「作成のメソッド」では、「カスタムパターン (JSON エディタ)」を選択します。

「イベントパターン」では、 GuardDuty の検出結果のメトリクスをイベントタイプとして指定し、重要度のフィルタリングを設定します。
※本ブログでは公式ドキュメントの例に則り、重要度が[Medium] (中)〜[High] (高) の検出を通知する様にフィルタリングします。
参考:https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_findings_cloudwatch.html
{
"source": [
"aws.guardduty"
],
"detail-type": [
"GuardDuty Finding"
],
"detail": {
"severity": [
4,
4.0,
4.1,
4.2,
4.3,
4.4,
4.5,
4.6,
4.7,
4.8,
4.9,
5,
5.0,
5.1,
5.2,
5.3,
5.4,
5.5,
5.6,
5.7,
5.8,
5.9,
6,
6.0,
6.1,
6.2,
6.3,
6.4,
6.5,
6.6,
6.7,
6.8,
6.9,
7,
7.0,
7.1,
7.2,
7.3,
7.4,
7.5,
7.6,
7.7,
7.8,
7.9,
8,
8.0,
8.1,
8.2,
8.3,
8.4,
8.5,
8.6,
8.7,
8.8,
8.9
]
}
}
ターゲットに、作成した SNS トピックを設定し「次へ」をクリックします。

「レビューと作成」にて設定内容を確認し、「ルールの作成」をクリックします。

EventBridge の「ルール」が作成されたことを確認します。

以上で、通知設定が完了しました。
Slack 通知の検証
GuardDuty の「検出結果サンプル作成」機能を利用して検証していきましょう。
GuardDuty の「設定」で「検出結果サンプルの生成」をクリックします。

「検出結果」に、[例]と記載された検出結果サンプルが表示されました。

Slack チャンネルに以下参考画像の形式で通知されたことを確認できれば完了です。

Amazon GuardDuty で検知した脅威を Slack に通知して、AWS 環境のセキュリティ対策をしよう(まとめ)
本ブログでは、筆者が準備しておくべきと感じた内容をご紹介いたしました。Amazon GuardDuty では、有効開始から 1 ヶ月は無料期間となり、その間に発生する費用をテストすることができます。
通知設定も含めて、そこまで複雑な手順ではないので、ぜひ導入されてみてはいかがでしょうか。
長々とお読みくださりありがとうございました。
本ブログの内容についてご不明な点がございましたら、お気軽にお問い合わせください。

元記事発行日: 2024年01月29日、最終更新日: 2024年02月28日