NIS2 / SecNumCloud¶
Type de document : Preuve de conformité
Réglementations : Directive NIS2 (UE) 2022/2555 · SecNumCloud (ANSSI)
Version Repod : 1.x
Date : 2026-05-23
Version complète en anglais
La matrice de conformité complète est disponible en anglais : NIS2 & SecNumCloud Compliance →
Vue d'ensemble NIS2¶
La directive NIS2 (Network and Information Security, version 2) est entrée en vigueur dans les États membres de l'UE le 18 octobre 2024. L'article 21 exige des mesures techniques et organisationnelles proportionnées aux risques, couvrant :
- Analyse de risques et politiques de sécurité des SI
- Gestion des incidents
- Continuité d'activité
- Sécurité de la chaîne d'approvisionnement ← directement adressé par Repod
- Gestion des vulnérabilités
- Contrôle d'accès
- Cryptographie
Repod adresse les exigences de sécurité de la chaîne d'approvisionnement et de gestion des vulnérabilités pour les organisations distribuant des paquets Linux en interne.
Matrice de conformité Article 21¶
Sécurité de la chaîne d'approvisionnement¶
| Exigence | Statut | Comment Repod y répond |
|---|---|---|
| Vérifier l'intégrité des logiciels avant déploiement | ✅ | Vérification SHA-256 par rapport à l'index Packages.gz source |
| Scanner les vulnérabilités connues avant déploiement | ✅ | Scan CVE Grype (NVD, GitHub Advisory, CISA KEV) à chaque upload |
| Bloquer / réviser les paquets vulnérables | ✅ | Politique CVE configurable : block (quarantaine) ou review (file RSSI) |
| Maintenir un inventaire logiciel | ✅ | SBOM CycloneDX 1.5 + SPDX 2.3 par paquet et par dépôt |
| Tracer qui a introduit quel composant | ✅ | Audit trail immuable : upload journalisé avec user, rôle, horodatage, IP |
| Signature GPG des paquets distribués | ✅ | Signature GPG intégrée ; vérifiée par apt/dnf côté client |
| Analyse antivirus des artefacts | ✅ | ClamAV avec mise à jour quotidienne des signatures |
Contrôle d'accès¶
| Exigence | Statut | Comment Repod y répond |
|---|---|---|
| Contrôle d'accès basé sur les rôles | ✅ | 5 rôles : reader, uploader, maintainer, auditor, admin |
| Moindre privilège | ✅ | CI/CD → uploader uniquement ; RSSI → auditor ; pas de sur-provisionnement |
| Séparation des responsabilités (approbation CVE) | ✅ | Seuls admin et maintainer peuvent approuver les paquets signalés |
| Authentification multifacteur | ❌ | MFA non implémenté en v1 — mitiger avec LDAP + MFA de l'IdP |
| Intégration annuaire d'entreprise | ✅ | LDAP / Active Directory avec mappage groupe → rôle |
Gestion des vulnérabilités¶
| Exigence | Statut | Comment Repod y répond |
|---|---|---|
| Détection des CVE sur les artefacts | ✅ | Grype v0.112.0 sur chaque upload et à la demande |
| Enrichissement contextuel (EPSS, KEV) | ✅ | Score EPSS + statut CISA KEV pour chaque CVE |
| SLA de traitement par sévérité | ✅ | Critique : 0 jour ; Haute : 30 j ; Moyenne : 90 j (configurables) |
| Processus de décision formalisé | ✅ | File de revue RSSI avec justification obligatoire et audit trail |
Journalisation et audit¶
| Exigence | Statut | Comment Repod y répond |
|---|---|---|
| Journalisation de toutes les actions sensibles | ✅ | 19 types d'événements en JSONL immuable |
| Rétention configurable | ✅ | Rétention par défaut 90 jours, modifiable |
| Accès restreint aux journaux | ✅ | Rôles admin, maintainer, auditor uniquement |
| Format interopérable avec SIEM | ✅ | JSONL — compatible Elastic, Splunk, Loki, QRadar |
SecNumCloud (ANSSI)¶
| Exigence | Statut | Implémentation |
|---|---|---|
| Inventaire des composants logiciels | ✅ | CycloneDX 1.5 + SPDX 2.3 |
| Journaux d'audit | ✅ | JSONL immuable, rétention configurable |
| Contrôle d'accès | ✅ | RBAC, moindre privilège |
| Séparation des environnements | ⚠️ | Conteneurs Docker — isolation réseau à renforcer |
| Chiffrement des données au repos | ❌ | Volume /repos non chiffré par défaut — gérer au niveau OS/infrastructure |
| Chiffrement en transit | ⚠️ | Délégué au reverse proxy |
| Gestion des clés | ⚠️ | GPG intégré, secret JWT validé — HSM non inclus |
Preuves exportables pour audit¶
TOKEN=$(curl -s -X POST http://localhost:8000/auth/token \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"VotreMotDePasse!"}' | jq -r .access_token)
# 1. SBOM complet du dépôt (CycloneDX)
curl -H "Authorization: Bearer $TOKEN" \
"http://localhost:8000/sbom/export?format=cyclonedx" \
-o repod-sbom-$(date +%Y%m%d).cdx.json
# 2. Journal d'audit du mois
for day in $(seq -f "%02g" 1 31); do
file="/opt/repod/repos/audit/$(date +%Y-%m)-$day.jsonl"
[ -f "$file" ] && cat "$file"
done > audit-$(date +%Y-%m).jsonl
# 3. Toutes les décisions CVE
grep '"action":"SECURITY_DECISION"' \
/opt/repod/repos/audit/*.jsonl | python3 -m json.tool