Exemples concrets

Des exemples prêts à lire et à adapter

Le scanner se pilote avec des objets JSON déclaratifs : des jobs, des tags, des réglementations et des résultats. Voici des exemples réels, repris du référentiel du produit. Cliquez les onglets pour explorer chaque format, puis les commandes CLI en bas de page.

smb/reglementaire_mixte.json : job scanner_job/1.3
{
  "job_format_version": "scanner_job/1.3",
  "_metadata": {
    "job_id": "scan_smb_reg_mixte_001",
    "request_id": "REQ-SMB-REGLEM-001",
    "generator_version": "job-creator/1.0"
  },
  "payload": {
    "analysis_id": 5,
    "analysis_nom": "reglementaire_mixte - SMB",
    "type_analyse": "reglementaire_mixte",
    "thinking": false,
    "source": {
      "nom": "Partage SMB Production",
      "protocol": { "code": "smb", "endpoint": "192.168.10.100", "port": 445 },
      "auth": { "kind": "user_password", "username": "administrator@domain.local", "password": "********" },
      "params": { "smb": { "share": "data$", "dialect": "auto" } },
      "type_code": "file_server"
    },
    "scope": {
      "analysis": {
        "paths": [""],
        "exclude_presets": ["default_os", "vcs", "ide_editor", "microsoft_office_temps", "archives_heavy"],
        "exclude_globs": ["**/*.log", "**/*.tmp"],
        "depth_max": 50,
        "file_filter": { "mode": "extensions", "allow": ["all"] },
        "max_file_size_bytes": 104857600
      }
    },
    "reglementations": [
      { "id": 101, "nom": "RGPD FR", "version": "v1.0", "criticite": "elevee", "priorite": 1 }
    ],
    "options": { "job_deadline_seconds": 7200, "priorite": 5 }
  }
}
Protocole SMB / CIFS Mode reglementaire_mixte Identifiants chiffrés dans le job

Le mot de passe est masqué ici à l'affichage : dans un vrai job, il est chiffré au niveau du champ avant d'atteindre le serveur.

s3/inventaire_minio.json : job scanner_job/1.3
{
  "job_format_version": "scanner_job/1.3",
  "_metadata": { "job_id": "scan_s3_minio_inventaire_001", "request_id": "REQ-S3-MINIO-INVENT-001" },
  "payload": {
    "analysis_id": 1004,
    "analysis_nom": "inventaire - S3 MinIO",
    "type_analyse": "inventaire",
    "source": {
      "nom": "MinIO local",
      "protocol": { "code": "s3", "endpoint": "minio.local", "port": 9000 },
      "auth": {
        "kind": "aws_signature_v4",
        "aws_credentials": { "access_key_id": "minioadmin", "secret_access_key": "********" }
      },
      "params": { "s3": { "bucket": "documents", "region": "us-east-1", "path_style": true, "skip_verify": true } },
      "type_code": "s3"
    },
    "scope": {
      "inventory": {
        "paths": [""],
        "exclude_presets": ["default_os", "vcs"],
        "depth_max": 50,
        "file_filter": { "mode": "extensions", "allow": ["all"] }
      }
    },
    "reglementations": [],
    "options": { "job_deadline_seconds": 1800, "priorite": 5 }
  }
}
S3 natif, sans dépendance externe Mode inventaire seul Endpoint custom : MinIO, R2, B2, Wasabi…

Le même schéma s'applique à Cloudflare R2, Backblaze B2, Wasabi, Scaleway ou OVH : il suffit de changer endpoint et port.

tag.example.json : un tag avec son détecteur
// Tag « semi-structured » : regex primary + mots-clés de contexte + exclusion + validateur
{
  "id": 1003,
  "nom": "PII_PHONE",
  "description": "Numéro de téléphone français (PII directe)",
  "format": "semi-structured",
  "sensibilite": "MOYENNE",
  "statut": "ACTIVE",
  "metadata": {
    "detector": {
      "normalization": true,
      "primary_optional": false,
      "elements": [
        { "type": "regex", "role": "primary", "weight": 80,
          "pattern": "\b(?:\+33|0)[1-9](?:[\s.\-]?\d{2}){4}\b" },
        { "type": "keywords", "role": "context", "weight": 20, "window": 6,
          "keywords": ["tel", "telephone", "téléphone", "mobile", "portable"] },
        { "type": "regex", "role": "exclude", "exclude_mode": "soft", "weight": 30,
          "pattern": "\b0{10}\b|\b1{10}\b" }
      ],
      "validators": ["fr_phone"],
      "thresholds": { "min_score": 85, "min_primary_score": 60 }
    }
  },
  "categorie": { "id": 1, "nom": "PII", "code": "PII" },
  "liaison": { "est_obligatoire": true, "ordre_priorite": 2 }
}
Rôles : primary / context / exclude Validateur fr_phone Seuils min_score / min_primary_score

Un tag décrit une seule donnée sensible. Le même tag s'exécute par motif déterministe ou peut porter un prompt_detection pour l'analyse IA des formats non-structurés.

reglementation.example.json : catalogue (extrait)
// Catalogue : Réglementations → Tags. Extrait : RGPD (email) + PCI-DSS (carte, Luhn)
{
  "version": "1.1",
  "stats": { "total_reglementations": 2, "total_tags": 4 },
  "reglementations": [
    {
      "id": 101, "nom": "RGPD",
      "description": "Règlement Général sur la Protection des Données (UE 2016/679)",
      "criticite": "ELEVEE", "statut": "ACTIVE",
      "base_legale": "Règlement (UE) 2016/679",
      "tags": [
        { "id": 1001, "nom": "PII_EMAIL", "format": "structured", "sensibilite": "MOYENNE",
          "metadata": { "detector": {
            "elements": [ { "type": "regex", "role": "primary", "weight": 80, "flags": "i" } ],
            "thresholds": { "min_score": 60, "min_primary_score": 60 } } } }
      ]
    },
    {
      "id": 102, "nom": "PCI-DSS", "criticite": "CRITIQUE", "version": "4.0",
      "perimetre": "Données de carte bancaire (PAN, CVV) en clair",
      "tags": [
        { "id": 2001, "nom": "PCI_PAN", "format": "structured", "sensibilite": "CRITIQUE",
          "metadata": { "detector": {
            "elements": [ { "type": "regex", "role": "primary", "weight": 70, "pattern": "\b(?:\d[ \-]?){12,18}\d\b" } ],
            "validators": ["luhn"],
            "thresholds": { "min_score": 70, "min_primary_score": 60 } } },
          "categorie": { "id": 2, "nom": "Données financières", "code": "FIN" } }
      ]
    }
  ]
}
RGPD · ELEVEE PCI-DSS · CRITIQUE · Luhn Hiérarchie Catalogue → Réglementations → Tags
résultat de scan : schema 1.4 (extrait)
# Fichier de résultats JSONL produit par le scan, lisible par l'API et l'export
{
  "_metadata": { "schema_version": "1.4", "job_id": "scan_example_001" },
  "analyse": { "id": 99, "type": "reglementaire", "statut": "completed", "etape": "2/2" },
  "source": { "nom": "Partage SMB Production", "protocole": "smb" },
  "resume": {
    "total_fichiers": 3, "fichiers_analyses": 3, "fichiers_erreur": 0,
    "taille_totale_humaine": "1.05 KB",
    "inventory_metrics": { "files_analyzed_done": 3, "files_analyzed_skipped": 0 }
  },
  "fichiers": [
    {
      "identification": { "nom_fichier": "contrat.docx", "extension": "docx", "profondeur": 2 },
      "caracteristiques": { "taille_humaine": "512 B", "type_mime_detecte": "…wordprocessingml.document" },
      "conformite": {
        "niveau_risque": "CONFORME",
        "methode_extraction": "tika",
        "tags_detectes": [],
        "details_analyse": { "analysis_mode": "regex_ia", "analysis_regex_ms": 30 }
      }
    }
  ]
}
Schema 1.4 Métriques d'inventaire Preuves masquées (jamais en clair)

Quand un tag est détecté, il apparaît dans tags_detectes avec son score, ses occurrences et sa preuve masquée. Voir le format de justification de score sur la page Conformité.

scanner.exe : commandes essentielles
# 1) Diagnostiquer une source AVANT de scanner (test de connectivité)
scanner.exe diag --job tests/diag/smb.json --config config/config.json
   → { "smb": { "ok": true } }

# 2) Lancer le serveur REST embarqué + le Job Builder
scanner.exe serve --config config/config.json
   → API         https://<hote>:<port>/api/v1/*
   → Doc API     https://<hote>:<port>/api/docs
   → Job Builder https://<hote>:<port>/jobbuilder/

# 3) Exporter un rapport d'audit à partir des résultats
scanner.exe export --results data/results/scan_001.jsonl \
                   --format pdf --out rapport_rgpd.pdf
   → formats : pdf · docx · xlsx · html · md · zip
diag : statut ok par protocole serve : API + Job Builder export : plusieurs formats
Modèles par protocole

Un jeu d'exemples pour chaque source

Le scanner est livré avec des jobs d'exemple par protocole, déclinés sur les différents modes d'analyse, de l'inventaire seul au réglementaire mixte.

SMB / Fichiers

  • inventaire
  • reglementaire_regex
  • reglementaire_mixte
  • reglementaire_ia / heuristic

Bases SQL

  • PostgreSQL · MySQL · MariaDB
  • MSSQL · Oracle
  • Analyse du contenu des tables
  • Filtres schéma / table / colonne

Stockage objet

  • S3, MinIO, R2, B2
  • Wasabi, Scaleway, OVH
  • Azure Blob · GCS
  • Mode inventaire / réglementaire

SSH / FTP

  • SSH / SFTP (clé ou mot de passe)
  • FTP / FTPS
  • plusieurs modes d'analyse
  • Vérification de l'hôte connu

Les jobs d'exemple sont fournis avec le scanner et composables sans écrire de JSON via le Job Builder.

Composez votre premier job sans écrire de JSON

Partez de ces exemples, ou assemblez visuellement sources, tags et réglementations dans le Job Builder, puis lancez un inventaire.