0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Inspector運用

Last updated at Posted at 2025-04-25

Inspector運用方法

1. Inspectorの自動スキャン機能を有効化

リソース別スキャンタイミングと料金

リソース スキャンタイミング 料金
EC2 毎日自動スキャン $1.258 / インスタンス / 月
Lambda(標準) 自動 $0.30 / 関数 / 月
ECR(初回) push 時 $0.09 / イメージ
ECR(再スキャン) 継続的スキャン $0.01 / イメージ / 再スキャン

🔗 Amazon Inspector 料金ページ

設定手順

  • 管理コンソールから Amazon Inspector にアクセスし、活性化
  • EC2, Lambda, ECR は自動でスキャン対象に含まれる
  • ECR リポジトリの「継続スキャン(Continuous Scanning)」をオンに設定

2. 脆弱性発見時に即時通知と対応

即時通知の仕組み

  • EPSSスコアを含む詳細情報を自動通知
  • 通知方法:SNS、Lambda、EventBridge など

EventBridge ルール作成例

  • パターン: Amazon Inspector Findings(severity: High or Critical)
{
  "source": ["aws.inspector2"],
  "detail-type": ["Inspector2 Finding"],
  "detail": {
    "severity": ["CRITICAL", "HIGH"],
    "resources": {
      "type": ["AWS_ECR_CONTAINER_IMAGE"],
      "id": ["arn:aws:ecr:ap-northeast-1:091346305127:repository/{repository name}/{ダイジェスト}"]
    }
  }
}

SNS トピック + Lambda通知例(Teams Webhook)

InspectorのEventBridge イベントスキーマ

import json
import os
import requests  # 必要に応じてLambdaレイヤーに追加

WEBHOOK_URL = os.environ.get("WEBHOOK_URL")  # Teams URLを環境変数に設定

def lambda_handler(event, context):
    detail = event.get("detail", {})
    vulnerability = detail.get("packageVulnerabilityDetails", {})
    epss_score = detail.get("epss", {}).get("score", 0)
    cve_id = vulnerability.get("vulnerabilityId", "N/A")
    description = detail.get("description", "N/A")

    message = {
        "text": f"🚨 *Inspector脆弱性検知*\n"
                f"*CVE番号*: {cve_id}\n"
                f"*CVSSスコア*: {vulnerability.get('cvss', [{}])[0].get('baseScore', 'N/A')}\n"
                f"*EPSSスコア*: {epss_score:.5f}\n"
                f"*脆弱性の説明と影響を受けるシステム*: {description}\n"
    }

    # Teams 送信
    if WEBHOOK_URL:
        headers = {'Content-Type': 'application/json'}
        try:
            response = requests.post(WEBHOOK_URL, headers=headers, data=json.dumps(message))
            response.raise_for_status()
        except Exception as e:
            print(f"Error sending message: {str(e)}")
            raise e
    else:
        print("No WEBHOOK_URL provided.")

    return {
        'statusCode': 200,
        'body': json.dumps('Notification sent.')
    }

通知に含まれる情報

  • 脆弱性のCVE番号
  • CVSSスコア
  • EPSSスコア
  • 脆弱性の説明と影響対象

3. EPSSスコアを基に優先度を設定

EPSSスコア範囲 対応方針 対応時間
0.1以上 緊急対応(即時) 即時対応
0.1 ~ 0.05 重要対応(非緊急) 1ヶ月以内
0.05 ~ 0 非緊急対応 定期点検時に対応検討または無視

参考:EPSSスコアを元に対応について


4. 継続的なモニタリングと対応

  • 定期レビュー: EPSSスコアの変化を元に週次/月次でレビューと再評価を実施
  • リスク調整: スコア変動に応じて優先順位を調整

プロセスの流れ

  1. スキャン: Inspectorにより自動スキャン
  2. 即時通知: CVSS=Critical/High + 任意のEPSS条件でSNS通知(Lambda経由)
  3. 優先順位判定と対応: チームに通知し、対応方針に従い実行

期待される効果

  • 効率的なリソース配分: EPSSに基づくリスクベース対応
  • 即時対応の実現: 通知と優先順位設定でリスク最小化

結論

EPSSスコアを活用して脆弱性対応の優先順位を設定し、リアルタイムで発生した脆弱性に迅速に対応する方法に運用プロセスを改善できます。

これにより、脆弱性対応の効率性セキュリティインシデントの予防を大幅に向上させることができます。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?