こんにちは!大崎です!
みなさんはEC2の脆弱性検知として、Amazon Inspectorの導入を考えたことはないでしょうか?
「検知対象をどのように絞るのか分からない…検知結果を運用担当者などにメール通知したいが方法がわからない…」今回はそんな疑問にお答えしていきたいと思います。
本記事でわかること
- Amazon Inspectorとは
- Amazon Inspectorの対象を絞る方法
- 検知結果をメール通知する方法
Amazon Inspectorとは
★Amazon Inspectorの概要
Amazon Inspectorは、EC2インスタンスやコンテナイメージ(ECR)に対して
脆弱性スキャンやセキュリティベストプラクティスのチェックを自動で行うサービスです。
★主な機能
・脆弱性スキャン(Vulnerability Scanning)
OSやアプリケーションに存在する既知の脆弱性(CVE)を検出。
・リスク評価と優先順位付け
発見された脆弱性に対してCVSSスコアを用いてリスクを評価。
重要度に応じて対応の優先順位を決定可能。
・統合と通知
Amazon EventBridgeやSNSと連携して通知を送信。
★ 利用の前提条件
EC2インスタンスには SSM Agent がインストール・有効化されていること。
IAMロールに適切なポリシー(AWS管理ポリシーのAmazonSSMManagedInstanceCore)が付与されていること。
Amazon Inspectorの対象を絞る方法
基本的には上記「利用の前提条件」を満たしていると自動的に検知対象となります。
検知対象を絞りたい場合は、検知したくないEC2に「InspectorEC2Excludion」キーのタグを付与する必要があります。(タグの値は指定がないため、TRUEなど理解しやすい値を設定いただければと思います。)

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

AWSTemplateFormatVersion: '2010-09-09'
Description: EventBridge rule for AWS Inspector2 findings with email notification
Resources:
InspectorFindingSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: InspectorFindingTopic
InspectorFindingEmailSubscription:
Type: AWS::SNS::Subscription
Properties:
Protocol: email
Endpoint: test@test.com #担当者のメールアドレス入力
TopicArn: !Ref InspectorFindingSNSTopic
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 InspectorFindingSNSTopic
InspectorFindingRule:
Type: AWS::Events::Rule
Properties:
Name: InspectorFindingRule
Description: Trigger on HIGH or CRITICAL Inspector2 findings
EventPattern:
source:
- aws.inspector2
detail-type:
- Inspector2 Finding
detail:
severity:
- HIGH
- CRITICAL
status:
- ACTIVE
Targets:
- Arn: !Ref InspectorFindingSNSTopic
Id: "InspectorFindingSNSTarget"
RoleArn: !GetAtt EventBridgeToSNSRole.Arn
InputTransformer:
InputPathsMap:
description: "$.detail.description"
region: "$.detail.resources[0].region"
resource_id: "$.detail.resources[0].id"
severity: "$.detail.severity"
time: "$.time"
title: "$.detail.title"
InputTemplate: |
{
"重要度": "<severity>",
"発生日時": "<time>",
"検出タイプ": "<title>",
"リージョン": "<region>",
"タイプの説明": "<description>",
"message": "詳細は Inspector コンソール( https://console.aws.amazon.com/inspector/v2/home?region=<region>#/findings/instances/<resource_id> )を確認してください。"
}上記設定の上で脆弱性を検知すると以下のようなメール通知がされます。通知文や通知対象はカスタマイズが可能ですのでお好みの内容に変更してみてください。

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


コメント