Audit trails et SOC 2 avec Auth0 : logging, monitoring et preuves de conformité

Implémentez des audit trails complets pour votre certification SOC 2 Type II avec Auth0 : log streaming, alerting, et génération de preuves automatisée.

Par Auth0.Expert · 2025-05-26 · 13 min de lecture

SOC2 Audit Conformité Auth0 Logging

Audit trails et SOC 2 avec Auth0

TL;DR

Auth0 est lui-même SOC 2 Type II certifié. Pour votre propre certification SOC 2, utilisez Auth0 Log Streaming pour alimenter votre SIEM et générer des preuves automatisées pour vos auditeurs.

Points de douleur

Architecture d'audit avec Auth0

Voici un schéma simplifié de l’architecture type pour collecter et conserver les logs Auth0 dans une démarche SOC 2. Cette architecture facilite la surveillance, l’alerte et la génération automatique de preuves.

Auth0 Logs
    │
    ▼
Log Streaming ──────────────────────────────────────┐
    │                                               │
    ├──▶ Datadog SIEM                               │
    │    - Dashboards SOC2                          │
    │    - Alertes automatiques                     │
    │    - Rétention 13 mois                        │
    │                                               │
    ├──▶ Splunk / Elastic SIEM                      │
    │    - Corrélation événements                   │
    │    - Rapports auditeurs                       │
    │                                               │
    └──▶ S3 / GCS Archive                          │
         - Rétention long terme (3 ans)             │
         - Preuve d'immuabilité                     │

Configuration Log Streaming

Ce code configure un Log Stream Auth0 vers Datadog, ce qui permet d'envoyer automatiquement tous les événements de sécurité critiques pertinents pour SOC 2 vers votre SIEM.

// Auth0 Log Stream vers Datadog (recommandé SOC2)
const logStreamConfig = {
  name: "SOC2-Datadog-Stream",
  type: "datadog",
  sink: {
    region: "eu1",  // ou "us1", "us3", "us5"
    apiKey: process.env.DATADOG_API_KEY
  },
  // Filtrer les événements pertinents SOC2
  // Laisser vide = tous les événements (recommandé pour SOC2)
};

// Events critiques pour SOC2 :
const soc2CriticalEvents = {
  // CC6 - Logical Access Controls
  "s": "User signed up",
  "slo": "User logged out",
  "ssa": "Successful silent auth",
  "f": "Failed login",
  "fp": "Failed login - wrong password",
  "fu": "Failed login - invalid user",
  "frd": "Failed refresh token",
  "limit_mu": "Rate limit - user",
  "limit_wc": "Rate limit - connection",
  "pwd_leak": "Leaked password detected",

  // CC6 - Admin Operations
  "scoa": "Successfully changed object access",
  "sca": "Successfully changed application",
  "scg": "Successfully changed generic",
  "scu": "Successfully changed user",
  "dcu": "Deleted connection user",

  // CC7 - Anomaly Detection
  "anomaly": "Anomaly detected",
  "ip_limit": "IP rate limit",
  "block": "User blocked",
  "unblock": "User unblocked",
};

Dashboard SOC2 avec Datadog

Cette portion de code Python permet de créer automatiquement un dashboard Datadog, qui centralise les métriques et alertes clés pour vos preuves de conformité SOC2 avec Auth0.

# Script de création de dashboard Datadog pour SOC2 Auth0
import datadog
from datadog import api

datadog.initialize(
    api_key=os.getenv("DD_API_KEY"),
    app_key=os.getenv("DD_APP_KEY")
)

soc2_dashboard = {
    "title": "Auth0 SOC2 Compliance Dashboard",
    "description": "CC6/CC7 evidence collection for SOC2 Type II",
    "layout_type": "ordered",
    "widgets": [
        {
            "definition": {
                "type": "timeseries",
                "title": "Failed Login Attempts (CC6.1)",
                "requests": [{
                    "q": "sum:auth0.logs{type:f}.as_count()",
                    "display_type": "bars"
                }]
            }
        },
        {
            "definition": {
                "type": "toplist",
                "title": "Top Failed Login IPs (CC7.4)",
                "requests": [{
                    "q": "sum:auth0.logs{type:f} by {ip}.as_count()",
                    "limit": 10
                }]
            }
        },
        {
            "definition": {
                "type": "query_value",
                "title": "MFA Adoption Rate (CC6.1)",
                "requests": [{
                    "q": "100 * (sum:auth0.users.mfa_enabled{*} / sum:auth0.users.total{*})"
                }]
            }
        },
        {
            "definition": {
                "type": "alert_graph",
                "title": "Security Alerts (CC7.3)",
                "alert_id": "your-monitor-id"
            }
        }
    ]
}

Ce script structure les visualisations essentielles pour suivre les connexions, l’adoption MFA et les alertes sécurité sur Datadog.

Alertes SOC2 automatiques

Ce bloc définit des règles d’alertes automatiques dans Datadog pour surveiller les attaques, les actions admin anormales, les incidents de sécurité et la disponibilité du service Auth0.

# Monitors Datadog pour SOC2 Auth0
monitors = [
    {
        "name": "[SOC2-CC6] Brute force attack detected",
        "type": "metric alert",
        "query": "sum(last_5m):sum:auth0.logs{type:f} by {ip}.as_count() > 10",
        "message": "More than 10 failed logins from same IP. @pagerduty @security-team",
        "tags": ["soc2", "cc6", "auth0"],
        "options": {
            "thresholds": {"critical": 10, "warning": 5},
            "notify_no_data": False
        }
    },
    {
        "name": "[SOC2-CC6] Admin action by non-admin user",
        "type": "log alert",
        "query": "source:auth0 @type:(sca OR scu OR dcu) -@role:admin",
        "message": "Admin action performed by non-admin user! @security-team",
        "tags": ["soc2", "cc6", "auth0"]
    },
    {
        "name": "[SOC2-CC7] Leaked credential detected",
        "type": "log alert",
        "query": "source:auth0 @type:pwd_leak",
        "message": "Leaked password detected - immediate investigation required! @security-team",
        "tags": ["soc2", "cc7", "auth0"]
    },
    {
        "name": "[SOC2-A1] Auth0 API error rate spike",
        "type": "metric alert",
        "query": "sum(last_5m):sum:auth0.logs{type:fapi}.as_count() > 50",
        "message": "Auth0 API error spike - potential availability issue",
        "tags": ["soc2", "a1", "auth0"]
    }
]

Grâce à ces alertes, vous bénéficiez d’une surveillance en temps réel sur les risques SOC2 clés liés à Auth0.

Génération automatique de preuves pour auditeurs

Ce script Python sert à produire un rapport mensuel SOC2 à partir des logs Auth0 et des métriques, formalisant les preuves pour vos auditeurs internes ou externes.

# Script de génération de rapport SOC2 mensuel
import requests
from datetime import datetime, timedelta
import json

class SOC2EvidenceGenerator:
    def __init__(self, mgmt_token: str, domain: str, datadog_api_key: str):
        self.auth0_headers = {"Authorization": f"Bearer {mgmt_token}"}
        self.domain = domain
        self.dd_api_key = datadog_api_key

    def generate_monthly_report(self, month: int, year: int) -> dict:
        report = {
            "report_date": datetime.utcnow().isoformat(),
            "period": f"{year}-{month:02d}",
            "generated_by": "Auth0.Expert SOC2 Tool",
            "controls": {}
        }

        # CC6.1 : Authentification et contrôle d'accès
        report["controls"]["CC6.1"] = self._cc6_1_evidence(month, year)

        # CC6.2 : Accès privilégiés
        report["controls"]["CC6.2"] = self._cc6_2_evidence(month, year)

        # CC7.2 : Monitoring des anomalies
        report["controls"]["CC7.2"] = self._cc7_2_evidence(month, year)

        return report

    def _cc6_1_evidence(self, month: int, year: int) -> dict:
        """CC6.1 : Contrôle d'accès logique"""
        # Stats utilisateurs
        total_users = self._get_user_count()
        mfa_users = self._get_mfa_enabled_count()

        # Stats connexions
        failed_logins = self._get_log_count("f", month, year)
        successful_logins = self._get_log_count("s", month, year)
        blocked_attempts = self._get_log_count("block", month, year)

        return {
            "control": "Logical access controls prevent unauthorized access",
            "evidence": {
                "total_users": total_users,
                "mfa_adoption_rate": f"{(mfa_users/total_users*100):.1f}%",
                "failed_login_attempts": failed_logins,
                "successful_logins": successful_logins,
                "blocked_accounts": blocked_attempts,
                "mfa_policy": "Enforced for admin users via Auth0 Actions"
            },
            "conclusion": "PASS" if mfa_users/total_users > 0.9 else "REVIEW"
        }

    def _cc6_2_evidence(self, month: int, year: int) -> dict:
        """CC6.2 : Accès privilégiés"""
        admin_actions = self._get_admin_actions_log(month, year)

        return {
            "control": "Privileged access is restricted and monitored",
            "evidence": {
                "admin_operations_count": len(admin_actions),
                "operations": admin_actions[:10],  # 10 dernières
                "alert_configured": True,
                "review_frequency": "Monthly"
            }
        }

    def _cc7_2_evidence(self, month: int, year: int) -> dict:
        """CC7.2 : Évaluation des anomalies de sécurité"""
        anomalies = self._get_security_events(month, year)

        return {
            "control": "Security anomalies are monitored and investigated",
            "evidence": {
                "anomalies_detected": len(anomalies),
                "anomalies_investigated": len(anomalies),  # toutes
                "mean_time_to_detect": "< 5 minutes (automated alerts)",
                "siem_configured": True
            }
        }

    def export_pdf(self, report: dict, filename: str):
        """Export du rapport en PDF pour les auditeurs"""
        # Utiliser reportlab ou weasyprint
        pass

Ce générateur permet d'automatiser la preuve de conformité SOC 2, rassemblant statistiques d'accès, MFA, activités admin, et détection d'anomalies.

Checklist SOC2 × Auth0

Voici un tableau qui synthétise pour chaque contrôle SOC2 la feature Auth0 à utiliser, pour vérifier rapidement la couverture de conformité.

| Contrôle SOC2 | Description | Feature Auth0 | Status | |---|---|---|---| | CC6.1 | Authentification | MFA + Password Policy | ✅ | | CC6.2 | Accès privilégiés | RBAC + Admin Restrictions | ✅ | | CC6.3 | Revue des accès | User list + last_login | ✅ | | CC6.7 | Transmission chiffrée | TLS 1.2+ | ✅ | | CC7.2 | Anomalie monitoring | Log Streaming + Alerts | ✅ | | CC7.3 | Évaluation incidents | Log Streaming SIEM | ✅ | | CC7.4 | Réponse incidents | Actions + Webhooks | ✅ | | A1.1 | Disponibilité | SLA 99.9%+ Auth0 | ✅ | | A1.2 | Récupération | Backup Auth0 | ✅ |

Auth0.Expert fournit des packages SOC2 complets incluant dashboards, alertes et génération de rapports automatisée.


Autres articles