こんにちは!大崎です!
みなさんはEC2のふるまい検知として、Amazon GuardDutyの導入を考えたことはないでしょうか?
「検知対象をどのように絞るのか分からない…検知結果を運用担当者などにメール通知したいが方法がわからない…」
今回はそんな疑問にお答えします。
本記事でわかること
- Amazon GuardDutyとは
- Amazon GuardDutyの対象を絞る方法
- 検知結果をメール通知する方法
Amazon GuardDutyとは
★Amazon GuardDutyの概要
Amazon GuardDutyは、S3やCloudTrailに対して
不審なアクティビティや潜在的な脅威に対するリアルタイム脅威検出サービスです。
★主な機能
・脅威検出(Threat Detection)
AWS アカウントやリソースに対するマルウェア通信、異常な API 呼び出しなどを検出。
・脅威インテリジェンスの活用
AWS が提供する脅威インテリジェンスや、カスタムの脅威フィードを使用可能。
・統合と通知
Amazon EventBridgeやSNSと連携して通知を送信。
★ 利用の前提条件
特になく、Amazon GuardDutyの有効化だけで利用可能です。
Amazon GuardDutyの対象を絞る方法
上記「利用の前提条件」を満たしていると、自動的に全てのEC2が検知対象となります。
検知対象を絞りたい場合は、AWSコンソール上から以下どちらかのタグを定義し、
定義したタグをEC2に設定することで実現可能です。
(両方を設定することはできません。)
・検知対象とするEC2を定義するためのタグ
・検知対象外とするEC2を定義するためのタグ
設定方法は以下です。
①GuardDutyのコンソール画面から「EC2のMalware Protection」を選択し、「包含/除外タグ」の「タグを追加」を選択する。

②設定したいタグの種類を選択し「確認」を選択する。

③任意のタグを設定し保存を選択する。

検知結果をメール通知する方法
Amazon GuardDuty単独では通知機能は実装できないため、
ふるまい検知を連携するEventBridgeと実際に通知するSNSを用意します。
今回は両サービスを簡単に実装できるようcloudformationのコードを共有します。
また重要なふるまい検知のみを通知するため重要度が7以上の場合に通知するようにしています。
(コードの49~50行目で指定しています。)

AWSTemplateFormatVersion: '2010-09-09'
Description: EventBridge rule for AWS GuardDuty findings with email notification
Resources:
GuardDutyFindingSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: GuardDutyFindingTopic
GuardDutyFindingEmailSubscription:
Type: AWS::SNS::Subscription
Properties:
Protocol: email
Endpoint: test@test.com #担当者のメールアドレス入力
TopicArn: !Ref GuardDutyFindingSNSTopic
EventBridgeToSNSRole:
Type: AWS::IAM::Role
Properties:
RoleName: EventBridgeToSNSPublishRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: events.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: AllowSNSPublish
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- sns:Publish
Resource: !Ref GuardDutyFindingSNSTopic
GuardDutyFindingRule:
Type: AWS::Events::Rule
Properties:
Name: GuardDutyFindingRule
Description: Trigger on HIGH or CRITICAL GuardDuty findings
EventPattern:
source:
- aws.guardduty
detail-type:
- GuardDuty Finding
detail:
severity:
- numeric: [ ">=", 7 ]
State: ENABLED
Targets:
- Arn: !Ref GuardDutyFindingSNSTopic
Id: "GuardDutyFindingSNSTarget"
RoleArn: !GetAtt EventBridgeToSNSRole.Arn
InputTransformer:
InputPathsMap:
description: "$.detail.description"
region: "$.region"
severity: "$.detail.severity"
finding_id: "$.detail.id"
time: "$.time"
title: "$.detail.type"
InputTemplate: |
{
"重要度": "<severity>",
"発生日時": "<time>",
"検出タイプ": "<title>",
"リージョン": "<region>",
"タイプの説明": "<description>",
"message": "詳細は GuardDuty コンソール( https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<finding_id> )を確認してください。"
}上記設定の上で重要なふるまいを検知すると以下のようなメール通知がされます。
通知文や通知対象はカスタマイズが可能ですのでお好みの内容に変更してみてください。

まとめ
今回は、ふるまい検知対象の絞り方と検知したふるまいのメール通知方法についてご紹介しました。
上記の対応を行うことで任意のEC2へのふるまい検知、
及びその結果を運用担当者へメール通知をすることができます。
運用やシステム構成に合わせて、ぜひこの仕組みを活用してみてください。



コメント