← The Forge
Recettes 6 juin 2026 · 6 · par L'équipe WORKFLOW v6

Recette : Intégrer la validation de conformité des licences de données dans un pipeline Workflow v6

Assurez la conformité juridique de vos jeux de données en automatisant la vérification des licences via un pipeline Workflow v6, du téléchargement à la génération de rapports.

Contexte et objectifs

La plupart des projets IA réutilisent des jeux de données provenant de sources diverses (open data, partenaires, scrapping). Chaque source est associée à une licence (CC‑BY, MIT, propriétaire, etc.) qui détermine les usages autorisés. Une non‑conformité peut entraîner des risques légaux et opérationnels. Cette recette décrit comment enrichir le pipeline Workflow v6 d’une étape de validation des licences, afin de :

  • détecter automatiquement les incohérences entre la licence déclarée et les exigences du projet ;
  • générer un rapport d’audit exploitable par les équipes produit et juridiques ;
  • bloquer le flux dès qu’une violation critique est identifiée.

Architecture du pipeline

Le pipeline se compose de trois blocs principaux :

  1. Ingestion : téléchargement des artefacts de données (CSV, Parquet, images) depuis le bucket d’entrée.
  2. Validation des licences : extraction des métadonnées de licence, comparaison avec une matrice de conformité définie par l’entreprise.
  3. Rapport d’audit : agrégation des résultats et publication dans un bucket de sortie ou via un webhook Teams/Slack.

Le diagramme ci‑dessous illustre le flux :

[Source] → Ingestion → ValidationLicences → RapportAudit → [Destination]

Chaque étape est implémentée comme un task Workflow v6, ce qui garantit la traçabilité et la reprise en cas d’échec.

Implémentation pas à pas

1. Définir la matrice de conformité

Créez un fichier YAML licence_policy.yaml décrivant les licences acceptées et les restrictions associées.

# licence_policy.yaml
acceptable_licenses:
  - CC-BY-4.0
  - MIT
  - Apache-2.0
restricted_licenses:
  - GPL-3.0: "Usage commercial interdit"
  - Proprietary: "Nécessite approbation juridique"

Ce fichier sera chargé par le task ValidateLicences.

2. Task d’ingestion (déjà présent dans la plupart des pipelines)

# tasks/ingest.py
from workflow_v6 import Task, Artifact

class IngestData(Task):
    def run(self, source_uri: str) -> Artifact:
        # Téléchargement simplifié
        data_path = self.download(source_uri)
        return Artifact(path=data_path)

3. Task de validation des licences

# tasks/validate_licences.py
import yaml
from workflow_v6 import Task, Artifact, ValidationError

class ValidateLicences(Task):
    def __init__(self, policy_path: str):
        with open(policy_path) as f:
            self.policy = yaml.safe_load(f)

    def run(self, data_artifact: Artifact) -> dict:
        # Extraction fictive de la licence depuis les métadonnées du fichier
        licence = self._extract_license(data_artifact.path)
        if licence in self.policy["acceptable_licenses"]:
            return {"status": "ok", "licence": licence}
        elif licence in self.policy["restricted_licenses"]:
            raise ValidationError(
                f"Licence {licence} restreinte : {self.policy['restricted_licenses'][licence]}"
            )
        else:
            raise ValidationError(f"Licence inconnue ou non autorisée : {licence}")

    def _extract_license(self, path: str) -> str:
        # Exemple simplifié : lecture d'un champ JSON « licence » dans un fichier meta.json
        import json, os
        meta_path = os.path.join(os.path.dirname(path), "meta.json")
        with open(meta_path) as f:
            meta = json.load(f)
        return meta.get("licence", "unknown")

4. Task de génération du rapport d’audit

# tasks/report_audit.py
import json
from workflow_v6 import Task, Artifact

class ReportAudit(Task):
    def run(self, validation_result: dict, output_uri: str) -> Artifact:
        report = {
            "validation": validation_result,
            "timestamp": self.now_iso(),
        }
        report_path = self.write_json(report, output_uri)
        return Artifact(path=report_path)

5. Orchestration du pipeline

# pipeline.py
from workflow_v6 import Pipeline
from tasks.ingest import IngestData
from tasks.validate_licences import ValidateLicences
from tasks.report_audit import ReportAudit

pipeline = Pipeline(name="licence-compliance")

pipeline.add_task(IngestData(name="ingest"))
pipeline.add_task(
    ValidateLicences(name="validate", policy_path="licence_policy.yaml")
    .depends_on("ingest")
)
pipeline.add_task(
    ReportAudit(name="report")
    .depends_on("validate")
)

if __name__ == "__main__":
    pipeline.run(params={"source_uri": "s3://raw-data/dataset1/"})

Le pipeline s’arrête automatiquement si ValidateLicences lève une ValidationError, assurant ainsi que les artefacts non conformes ne progressent pas.

Tests et validation

  1. Test unitaire : validez le comportement de ValidateLicences avec des jeux de métadonnées contenant chaque type de licence.
  2. Test d’intégration : exécutez le pipeline sur un petit jeu de données de contrôle et vérifiez que le rapport d’audit reflète correctement le statut.
  3. Monitoring : configurez une alerte Workflow v6 sur le compteur validation_errors pour être notifié dès qu’une licence restreinte apparaît.

Bonnes pratiques et points d’attention

  • Source unique de vérité : centralisez la matrice de conformité dans un dépôt Git afin de versionner les évolutions de politique.
  • Granularité du métadonnées : assurez‑vous que chaque artefact possède un fichier meta.json fiable; sinon, ajoutez une tâche de normalisation pré‑validation.
  • Gestion des exceptions : utilisez les types d’exceptions fournis par Workflow v6 (ValidationError, RetryableError) pour distinguer les blocages définitifs des problèmes transitoires.
  • Sécurité : ne stockez jamais les licences sous forme de texte brut dans des logs accessibles publiquement.
  • Scalabilité : le task ValidateLicences est sans état et peut être parallélisé sur plusieurs workers lorsqu’il traite des milliers d’artefacts.

En intégrant cette étape de validation dès le début du pipeline, vous renforcez la gouvernance des données, réduisez les risques légaux et fournissez aux équipes produit une visibilité claire sur la conformité des sources utilisées.

Envie d’aller plus loin avec WORKFLOW v6 ?

Découvrir WORKFLOW v6