Inspector運用

# Inspector運用方法

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

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

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

🔗 [Amazon Inspector 料金ページ](https://aws.amazon.com/jp/inspector/pricing/)

### 設定手順

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

---

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

### 即時通知の仕組み

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

### EventBridge ルール作成例

- **パターン:** Amazon Inspector Findings（severity: High or Critical）
```json
{
  "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 イベントスキーマ](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/eventbridge-integration.html#)

```python
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スコアを元に対応について](https://qiita.com/justNOZA/items/cfc472785c024d9962dd)

---

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

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

---

## プロセスの流れ

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

---

# 期待される効果

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

---

# 結論

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

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

---

# 参考リンク

- 🔗 [Inspectorの検出結果の見方（公式）](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/findings-view.html)