23. Frameworks de conformité : RGPD, SOC 2, ISO 27001, PCI-DSS, NIST CSF#
La conformité réglementaire n’est pas synonyme de sécurité, mais elle en est un plancher structurant. Comprendre les exigences techniques de chaque framework permet de construire un programme de sécurité cohérent, d’éviter la duplication des efforts et de démontrer sa posture à des clients, des auditeurs et des partenaires.
RGPD technique#
Le Règlement Général sur la Protection des Données (RGPD, GDPR en anglais) impose des obligations techniques précises, pas seulement juridiques.
Principes techniques du RGPD#
Minimisation des données (Article 5.1.c) : collecter uniquement les données strictement nécessaires à la finalité déclarée. Techniquement : champs de formulaire minimalistes, pas de logging d’IP si non nécessaire, pas de tracking cross-site sans base légale.
Pseudonymisation (Article 4.5) : remplacer les identifiants directs par des pseudonymes, de sorte qu’il soit impossible d’identifier la personne sans information supplémentaire maintenue séparément.
Différence pseudonymisation vs anonymisation :
Pseudonymisation : réversible avec la clé ou la table de correspondance — les données restent des données personnelles au sens du RGPD.
Anonymisation : irréversible — les données sortent du périmètre du RGPD (k-anonymat, l-diversité, differential privacy).
Chiffrement : le RGPD ne l’impose pas explicitement mais le recommande fortement comme mesure technique appropriée (Article 32). En pratique : chiffrement au repos (AES-256), en transit (TLS 1.2+), et idéalement des colonnes sensibles en base de données.
Droit à l’effacement (Article 17) : deux approches techniques possibles :
Suppression réelle : DELETE en base + suppression des sauvegardes dans les délais légaux (plus difficile avec les backups).
Pseudonymisation de substitution : remplacement de toutes les données personnelles par des valeurs génériques (« Utilisateur supprimé ») — recevable si l’identification est réellement impossible.
DPIA (Data Protection Impact Assessment)#
La DPIA (Article 35) est obligatoire pour les traitements à risque élevé : surveillance à grande échelle, traitement de données sensibles, scoring automatisé.
Structure d’une DPIA :
## DPIA — [Nom du traitement]
### Description du traitement
- Finalité : ...
- Données collectées : ...
- Durée de conservation : ...
- Destinataires : ...
### Nécessité et proportionnalité
- Base légale : consentement / contrat / intérêt légitime / ...
- Minimisation : justification de chaque donnée collectée
### Évaluation des risques
| Risque | Vraisemblance | Gravité | Score |
|--------|--------------|---------|-------|
| Accès non autorisé | 3 | 4 | 12 |
| Fuite via tiers | 2 | 5 | 10 |
### Mesures de mitigation
- Chiffrement AES-256 au repos
- TLS 1.3 en transit
- Accès restreint par RBAC
- Logs d'accès audités
### Résidu de risque acceptable
Score résiduel : 4 — acceptable avec les mesures en place.
DPO (Data Protection Officer)#
Le DPO est obligatoire pour les organismes publics, les entreprises traitant à grande échelle des données sensibles, et ceux réalisant une surveillance systématique à grande échelle. Son rôle est consultatif — il conseille, vérifie, forme — mais n’est pas responsable de la conformité (c’est le responsable de traitement).
SOC 2 — Trust Service Criteria#
SOC 2 (System and Organization Controls 2) est un standard d’audit américain (AICPA) qui certifie que les contrôles d’une organisation répondent aux Trust Service Criteria (TSC).
Les cinq TSC#
Critère |
Symbole |
Description |
|---|---|---|
Sécurité |
CC |
Contrôles protégeant contre l’accès non autorisé (obligatoire) |
Disponibilité |
A |
Système disponible selon les engagements |
Intégrité du traitement |
PI |
Traitement complet, précis, valide |
Confidentialité |
C |
Protection des informations confidentielles |
Vie privée |
P |
Protection des données personnelles |
Le critère CC (Common Criteria, sécurité) est le seul obligatoire. Les autres sont optionnels selon les engagements contractuels.
SOC 2 Type I vs Type II#
Type I : photo à un instant T — les contrôles sont correctement conçus à la date d’audit. Plus rapide (2-4 mois), moins valorisant commercialement.
Type II : film sur une période (généralement 6 à 12 mois) — les contrôles fonctionnent réellement dans la durée. Plus crédible, exigé par la plupart des grandes entreprises.
Utilité commerciale : SOC 2 Type II est devenu une exigence de fait pour les éditeurs SaaS B2B américains. Sans rapport SOC 2, beaucoup d’entreprises refusent de signer avec un fournisseur.
ISO 27001 — SMSI#
ISO 27001 est le standard international pour les Systèmes de Management de la Sécurité de l’Information (SMSI). La version en vigueur est ISO 27001:2022.
Structure#
Corps principal (clauses 4-10) : exigences du SMSI selon le cycle PDCA :
Plan : contexte, parties prenantes, politique, objectifs, risques
Do : mise en oeuvre des contrôles, sensibilisation
Check : surveillance, audit interne, revue de direction
Act : amélioration continue, actions correctives
Annexe A — 93 contrôles, 4 thèmes :
Thème |
Contrôles |
Exemples |
|---|---|---|
Organisationnel (5.x) |
37 |
Politique sécurité, gestion des incidents, continuité |
Personnes (6.x) |
8 |
Sensibilisation, accords de confidentialité |
Physique (7.x) |
14 |
Contrôle d’accès physique, destruction des supports |
Technologique (8.x) |
34 |
Authentification, chiffrement, journalisation, gestion des vulnérabilités |
Déclaration d’applicabilité (SoA)#
La SoA (Statement of Applicability) liste les 93 contrôles de l’Annexe A, justifie l’inclusion ou l’exclusion de chaque contrôle, et documente l’état de mise en oeuvre.
## Déclaration d'applicabilité — [Organisation] — v2.1 — 2024-01-15
| Contrôle | Titre | Applicable | Justification | État |
|----------|-------|------------|---------------|------|
| 5.1 | Politiques de sécurité | Oui | Exigence légale et contractuelle | Implémenté |
| 5.9 | Inventaire des actifs | Oui | Requis pour la gestion des risques | En cours |
| 7.3 | Sécurisation des bureaux | Non | Télétravail intégral — sans objet | Exclu |
| 8.7 | Protection contre les malwares | Oui | Risque élevé identifié | Implémenté |
Certification ISO 27001 : audit externe par un organisme accrédité (BSI, Bureau Veritas, SGS…). Audit de certification (2 étapes) + surveillance annuelle + recertification tous les 3 ans.
PCI-DSS v4.0#
PCI-DSS (Payment Card Industry Data Security Standard) est le standard de sécurité pour toute organisation qui stocke, traite ou transmet des données de titulaires de cartes bancaires.
Les 12 exigences#
Installer et maintenir un pare-feu
Ne pas utiliser les valeurs par défaut des fournisseurs
Protéger les données stockées des titulaires
Chiffrer les transmissions sur réseaux publics
Protéger tous les systèmes contre les malwares
Développer et maintenir des systèmes et applications sécurisés
Restreindre l’accès aux données selon le besoin d’en connaître
Identifier et authentifier l’accès aux composants système
Restreindre l’accès physique aux données de titulaires
Consigner et surveiller tous les accès aux ressources et données
Tester régulièrement les systèmes et processus de sécurité
Maintenir une politique de sécurité de l’information
Scope et segmentation#
Le CDE (Cardholder Data Environment) est le périmètre contenant les données de cartes. La segmentation réseau (VLAN, pare-feu) réduit le scope et simplifie la conformité.
Systèmes in-scope : CDE + systèmes connected (peuvent atteindre le CDE)
Systèmes out-of-scope : isolés du CDE par segmentation validée
Exigences techniques notables de PCI-DSS v4.0#
TLS 1.2 minimum obligatoire (TLS 1.0 et 1.1 interdits depuis 2018)
Scan ASV trimestriel : scan de vulnérabilités externe par un Approved Scanning Vendor
Test de pénétration annuel (interne + externe, niveau réseau + applicatif)
Authentification multi-facteurs pour tous les accès non-console aux composants CDE
Journalisation : tous les accès aux données de titulaires, durée de rétention 12 mois
SAQ (Self-Assessment Questionnaire)#
Pour les petits marchands, l’auto-évaluation est possible :
SAQ A : acceptation de paiement entièrement externalisée (Stripe, PayPal), périmètre très réduit
SAQ D : tous les marchands et prestataires qui ne rentrent pas dans les autres catégories — périmètre complet
NIST Cybersecurity Framework 2.0#
Le NIST CSF 2.0 (2024) est le framework de référence américain pour la gestion du risque cybersécurité. La version 2.0 ajoute une sixième fonction : Govern.
Les 6 fonctions#
Fonction |
Code |
Description |
|---|---|---|
Govern |
GV |
Établir la gouvernance, les politiques, les rôles, la gestion des risques |
Identify |
ID |
Comprendre les actifs, les risques, les vulnérabilités |
Protect |
PR |
Déployer les contrôles de protection |
Detect |
DE |
Détecter les événements et incidents |
Respond |
RS |
Répondre aux incidents détectés |
Recover |
RC |
Rétablir les capacités après un incident |
Profils et tiers de maturité#
Profil courant : état actuel des pratiques de sécurité. Profil cible : état souhaité, défini par rapport aux exigences business et aux risques. Gap analysis : écart entre les deux profils, base du plan d’action.
Tiers de maturité (1 à 4) :
Tier 1 (Partiel) : pratiques ad hoc, peu de conscience du risque
Tier 2 (Risque informé) : pratiques définies mais pas systématiques
Tier 3 (Répétable) : pratiques formalisées, approuvées par la direction
Tier 4 (Adaptatif) : amélioration continue, partage de threat intelligence
Chevauchements entre frameworks#
Les frameworks partagent de nombreux contrôles sous-jacents. Une implémentation bien structurée couvre plusieurs frameworks simultanément.
Contrôle technique |
RGPD |
SOC 2 CC |
ISO 27001 |
PCI-DSS |
NIST CSF |
|---|---|---|---|---|---|
Chiffrement au repos |
Art.32 |
CC6.1 |
8.24 |
Req.3 |
PR.DS |
MFA |
— |
CC6.3 |
8.5 |
Req.8 |
PR.AA |
Journalisation/audit |
Art.32 |
CC7.2 |
8.15 |
Req.10 |
|
Gestion vulnérabilités |
— |
CC7.1 |
8.8 |
Req.6/11 |
ID.RA |
Plan de réponse aux incidents |
Art.33 |
CC7.3 |
5.26 |
Req.12 |
RS |
Gestion des accès |
— |
CC6.2 |
5.18 |
Req.7 |
PR.AA |
Tests de pénétration |
— |
CC4.1 |
8.8 |
Req.11 |
ID.RA |
Cellule 1 — Heatmap de mapping frameworks#
# Mapping ISO 27001 Annexe A (catégories simplifiées) × SOC 2 TSC × NIST CSF
# Valeurs : 0 = non couvert, 1 = partiellement couvert, 2 = totalement couvert
categories_iso = [
"Politiques sécurité (5.1)",
"Gestion des actifs (5.9)",
"Contrôle d'accès (8.2-5.18)",
"Cryptographie (8.24)",
"Sécurité physique (7.x)",
"Sécurité opérations (8.x)",
"Sécurité communications (8.20)",
"Acquisition/dev/maint (8.25)",
"Relations fournisseurs (5.19)",
"Gestion incidents (5.26)",
"Continuité d'activité (5.29)",
"Conformité (5.36)"
]
soc2_tsc = ["CC - Sécurité", "A - Disponibilité", "PI - Intégrité", "C - Confidentialité", "P - Vie privée"]
nist_csf = ["GV - Govern", "ID - Identify", "PR - Protect", "DE - Detect", "RS - Respond", "RC - Recover"]
# Matrice ISO ↔ SOC2
couverture_soc2 = np.array([
[2, 0, 0, 1, 1], # Politiques
[1, 1, 1, 1, 0], # Actifs
[2, 0, 0, 2, 1], # Contrôle d'accès
[2, 0, 0, 2, 1], # Cryptographie
[1, 0, 0, 0, 0], # Sécurité physique
[2, 2, 2, 1, 0], # Opérations
[2, 1, 1, 2, 0], # Communications
[2, 0, 2, 1, 0], # Dev/maint
[1, 1, 0, 1, 0], # Fournisseurs
[2, 1, 0, 0, 0], # Incidents
[1, 2, 1, 0, 0], # Continuité
[1, 0, 1, 1, 2], # Conformité
])
# Matrice ISO ↔ NIST CSF
couverture_nist = np.array([
[2, 1, 1, 0, 0, 0], # Politiques
[1, 2, 1, 0, 0, 0], # Actifs
[1, 1, 2, 1, 0, 0], # Contrôle d'accès
[0, 1, 2, 0, 0, 0], # Cryptographie
[0, 1, 2, 0, 0, 0], # Sécurité physique
[1, 1, 2, 2, 1, 1], # Opérations
[0, 0, 2, 2, 0, 0], # Communications
[1, 1, 2, 1, 0, 0], # Dev/maint
[1, 1, 1, 0, 1, 0], # Fournisseurs
[1, 0, 0, 2, 2, 1], # Incidents
[0, 0, 1, 0, 1, 2], # Continuité
[2, 1, 1, 0, 0, 0], # Conformité
])
fig, axes = plt.subplots(1, 2, figsize=(16, 7))
cmap = sns.color_palette(["#EEEEEE", "#FFD54F", "#4CAF50"], as_cmap=False)
# Heatmap ISO ↔ SOC2
sns.heatmap(
couverture_soc2,
annot=True, fmt="d", cmap=["#EEEEEE", "#FFD54F", "#4CAF50"],
vmin=0, vmax=2, linewidths=0.5, linecolor="white",
xticklabels=soc2_tsc, yticklabels=categories_iso,
ax=axes[0], cbar=False
)
axes[0].set_title("ISO 27001 Annexe A ↔ SOC 2 TSC", fontweight="bold")
axes[0].set_xticklabels(axes[0].get_xticklabels(), rotation=30, ha="right", fontsize=9)
axes[0].set_yticklabels(axes[0].get_yticklabels(), fontsize=9)
# Heatmap ISO ↔ NIST CSF
sns.heatmap(
couverture_nist,
annot=True, fmt="d", cmap=["#EEEEEE", "#FFD54F", "#4CAF50"],
vmin=0, vmax=2, linewidths=0.5, linecolor="white",
xticklabels=nist_csf, yticklabels=categories_iso,
ax=axes[1], cbar=False
)
axes[1].set_title("ISO 27001 Annexe A ↔ NIST CSF 2.0", fontweight="bold")
axes[1].set_xticklabels(axes[1].get_xticklabels(), rotation=30, ha="right", fontsize=9)
axes[1].set_yticklabels(axes[1].get_yticklabels(), fontsize=9)
# Légende manuelle
import matplotlib.patches as mpatches
patches = [
mpatches.Patch(color="#EEEEEE", label="0 — Non couvert"),
mpatches.Patch(color="#FFD54F", label="1 — Partiellement couvert"),
mpatches.Patch(color="#4CAF50", label="2 — Totalement couvert"),
]
fig.legend(handles=patches, loc="lower center", ncol=3, fontsize=10, bbox_to_anchor=(0.5, -0.04))
fig.suptitle("Mapping des frameworks de conformité — ISO 27001 comme référence", fontsize=13, fontweight="bold")
plt.subplots_adjust(wspace=0.05, bottom=0.15)
plt.show()
Cellule 2 — Radar de maturité NIST CSF 2.0 : trois profils#
# Radar de maturité sécurité NIST CSF 2.0 — 3 profils organisationnels
fonctions = ["Govern", "Identify", "Protect", "Detect", "Respond", "Recover"]
N = len(fonctions)
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
profils = {
"Startup (Tier 1-2)": [1.5, 1.0, 1.5, 1.0, 1.0, 0.5],
"PME (Tier 2-3)": [2.5, 2.5, 3.0, 2.0, 2.0, 2.0],
"Entreprise (Tier 3-4)": [3.5, 3.5, 3.8, 3.5, 3.5, 3.5],
}
couleurs = ["#FF9800", "#2196F3", "#4CAF50"]
max_val = 4.0
sns.set_theme(style="white", palette="muted", font_scale=1.1)
fig, axes = plt.subplots(1, 3, figsize=(15, 5), subplot_kw=dict(polar=True))
for idx, (nom, valeurs) in enumerate(profils.items()):
ax = axes[idx]
couleur = couleurs[idx]
v_plot = valeurs + valeurs[:1]
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(fonctions, size=10)
ax.set_ylim(0, max_val)
ax.set_yticks([1, 2, 3, 4])
ax.set_yticklabels(["Tier 1", "Tier 2", "Tier 3", "Tier 4"], size=7, color="gray")
ax.plot(angles, v_plot, "o-", color=couleur, linewidth=2, markersize=5)
ax.fill(angles, v_plot, alpha=0.25, color=couleur)
# Ligne de référence niveau cible = 3
ref = [3] * N + [3]
ax.plot(angles, ref, "--", color="gray", linewidth=1, alpha=0.5)
score_moyen = sum(valeurs) / len(valeurs)
ax.set_title(f"{nom}\nScore moyen : {score_moyen:.1f}/4", fontweight="bold", pad=15, fontsize=10)
fig.suptitle("Maturité NIST CSF 2.0 — Comparaison de profils organisationnels\n(ligne pointillée = objectif Tier 3)",
fontsize=12, fontweight="bold")
plt.subplots_adjust(wspace=0.5)
plt.show()
print("Résumé des scores de maturité NIST CSF 2.0 :")
for nom, valeurs in profils.items():
score = sum(valeurs) / len(valeurs)
lacunes = [f for f, v in zip(fonctions, valeurs) if v < 2.5]
print(f"\n {nom}")
print(f" Score moyen : {score:.1f}/4")
if lacunes:
print(f" Fonctions sous Tier 2.5 : {', '.join(lacunes)}")
else:
print(f" Toutes les fonctions >= Tier 2.5")
Résumé des scores de maturité NIST CSF 2.0 :
Startup (Tier 1-2)
Score moyen : 1.1/4
Fonctions sous Tier 2.5 : Govern, Identify, Protect, Detect, Respond, Recover
PME (Tier 2-3)
Score moyen : 2.3/4
Fonctions sous Tier 2.5 : Detect, Respond, Recover
Entreprise (Tier 3-4)
Score moyen : 3.6/4
Toutes les fonctions >= Tier 2.5
Cellule 3 — Simulation DPIA scoring CNIL#
# Évaluation DPIA selon les critères CNIL (RGPD Article 35)
# Simulation de 3 traitements avec scoring de risque
criteres_cnil = [
"Évaluation ou scoring",
"Décision automatisée",
"Surveillance systématique",
"Données sensibles (Art.9/10)",
"Données à grande échelle",
"Croisement de données",
"Personnes vulnérables",
]
# 3 traitements à évaluer
traitements = {
"CRM marketing\n(score prospect)": [2, 2, 0, 0, 2, 2, 1],
"Système RH\n(évaluation performance)": [3, 3, 2, 1, 1, 2, 0],
"App santé\n(suivi médical)": [1, 1, 1, 3, 3, 2, 3],
}
# Pondérations CNIL (adaptation)
poids = [1.5, 2.0, 1.5, 2.0, 1.5, 1.0, 2.0]
seuil_dpia = 8.0 # Score pondéré au-dessus duquel la DPIA est obligatoire
sns.set_theme(style="whitegrid", palette="muted", font_scale=1.1)
fig, axes = plt.subplots(1, 3, figsize=(16, 6))
couleurs_traitement = ["#2196F3", "#FF9800", "#F44336"]
for idx, (nom, scores) in enumerate(traitements.items()):
ax = axes[idx]
couleur = couleurs_traitement[idx]
# Score pondéré
score_total = sum(s * p for s, p in zip(scores, poids))
score_max = 3 * sum(poids)
score_pct = score_total / score_max * 100
# Barplot horizontal
bars = ax.barh(criteres_cnil, scores, color=couleur, alpha=0.75)
ax.set_xlim(0, 4)
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(["Nul", "Faible", "Moyen", "Élevé"], fontsize=9)
for bar, score in zip(bars, scores):
label = ["—", "Faible", "Moyen", "Élevé"][score]
ax.text(score + 0.05, bar.get_y() + bar.get_height() / 2,
label, va="center", fontsize=8, color="white" if score > 1 else couleur)
dpia_requis = score_total >= seuil_dpia
couleur_titre = "#F44336" if dpia_requis else "#4CAF50"
statut = "DPIA OBLIGATOIRE" if dpia_requis else "DPIA recommandée"
ax.set_title(f"{nom}\nScore pondéré : {score_total:.1f}/{score_max:.0f} ({score_pct:.0f}%)\n{statut}",
fontweight="bold", fontsize=10, color=couleur_titre)
ax.set_xlabel("Niveau de risque")
ax.set_yticklabels(criteres_cnil, fontsize=9)
# Ligne de seuil (normalisée à l'échelle)
ax.axvline(x=2, color="gray", linestyle=":", linewidth=1, alpha=0.5)
fig.suptitle("Scoring DPIA — Évaluation selon les 7 critères CNIL\n(traitement nécessitant une DPIA si score pondéré ≥ 8.0)",
fontsize=12, fontweight="bold")
plt.subplots_adjust(wspace=0.5)
plt.show()
print("Résultats de l'évaluation DPIA :")
for nom, scores in traitements.items():
score_total = sum(s * p for s, p in zip(scores, poids))
dpia = "OBLIGATOIRE" if score_total >= seuil_dpia else "Recommandée"
print(f" {nom.replace(chr(10), ' - '):35s} : {score_total:.1f} pts — DPIA {dpia}")
/tmp/ipykernel_19878/3084224098.py:57: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.
ax.set_yticklabels(criteres_cnil, fontsize=9)
/tmp/ipykernel_19878/3084224098.py:57: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.
ax.set_yticklabels(criteres_cnil, fontsize=9)
/tmp/ipykernel_19878/3084224098.py:57: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.
ax.set_yticklabels(criteres_cnil, fontsize=9)
Résultats de l'évaluation DPIA :
CRM marketing - (score prospect) : 14.0 pts — DPIA OBLIGATOIRE
Système RH - (évaluation performance) : 19.0 pts — DPIA OBLIGATOIRE
App santé - (suivi médical) : 23.5 pts — DPIA OBLIGATOIRE
Résumé#
Ce chapitre a couvert les cinq frameworks de conformité majeurs et leurs exigences techniques.
Points clés :
RGPD : la pseudonymisation est différente de l’anonymisation (réversible → toujours des données personnelles) ; le droit à l’effacement peut être implémenté par pseudonymisation de substitution ; la DPIA est obligatoire pour les traitements à risque élevé (3 critères CNIL ou plus à niveau élevé).
SOC 2 : le critère CC (sécurité) est le seul obligatoire ; Type II (sur période) est bien plus valorisé commercialement que Type I (à un instant T) ; devenu une exigence de facto pour les SaaS B2B.
ISO 27001:2022 : 93 contrôles en 4 thèmes (Organisationnel, Personnes, Physique, Technologique) ; la SoA documente l’inclusion/exclusion justifiée de chaque contrôle ; la certification est triannuelle avec surveillances annuelles.
PCI-DSS v4.0 : 12 exigences couvrant la totalité du cycle de vie des données de carte ; la segmentation réseau réduit le scope (CDE isolé) ; TLS 1.2+ obligatoire, scan ASV trimestriel, pentest annuel.
NIST CSF 2.0 : 6 fonctions avec l’ajout de Govern en v2.0 ; les profils courant/cible permettent une gap analysis structurée ; les tiers de maturité (1-4) guident la progression.
Mapping inter-frameworks : les contrôles techniques se recoupent largement — une implémentation bien structurée couvre simultanément RGPD (Art.32), SOC 2 CC, ISO 27001 Annexe A, PCI-DSS et NIST CSF. Éviter la duplication en maintenant une référence commune (ISO 27001 ou NIST CSF).
DPIA : l’évaluation quantitative des 7 critères CNIL permet d’objectiver l’obligation de DPIA et de prioriser les mesures de mitigation selon le profil de risque du traitement.