Aller au contenu principal

Contrôles de sécurité de la CI

Version anglaise : en/ci-security-gates.md.

Les mêmes contrôles existent dans .forgejo/workflows/ci.yml et .gitlab-ci.yml. Les constats de gravité haute ou critique font échouer le pipeline ; le job build dépend de tous les jobs de sécurité.

Job (Forgejo / GitLab)OutilPérimètreCondition d'échec
security-sast / banditBandit 1.8services/control-plane/src, sdks/python/srcgravité haute, confiance moyenne ou plus
security-semgrep / semgrepSemgrep, règles p/owasp-top-ten, p/python, p/typescriptdépôt entier hors sous-chartsgravité ERROR
security-deps-python / pip-auditpip-audit 2.7backend et SDK Pythontoute vulnérabilité connue
security-deps-node / npm-auditnpm audit --audit-level=highportal, sdks/typescripthaute ou critique
security-secrets / gitleaksGitleaks 8.21historique git et arborescencetout secret détecté
security-fs / trivy-fs, trivy-configTrivy 0.58 (fs et config deploy/)dépendances, secrets, IaChaute ou critique
build (étape trivy image scan) / trivy-imageTrivy 0.58 (image, exceptions dans .trivyignore, une par ligne avec justification, responsable et date de revue)vulnérabilités des images publiéeshaute ou critique
build (étape cosign sign and attest) / sbom-signcosign avec la clé COSIGN_PRIVATE_KEY, sans journal Rekor ; la publication échoue sans clé car Kyverno (eai-verify-image-signatures) n'accepte que cette clé pour harbor.*/eai/*signature et attestations SPDX et CycloneDXabsence de clé
security-manifests / manifestskubeconform (strict, catalogue CRD datree), Kyverno CLI, pytestchart rendu avec les trois fichiers de valeursschéma invalide, refus d'admission, invariant de sécurité
security-dast / zap-baselineOWASP ZAP baseline 2.15portail et API de la pile composerègle FAIL de deploy/ci/zap-baseline.conf

Notes​

  • ZAP tourne avec -I : les avertissements sont rapportés, seules les règles marquées FAIL cassent le build (cookies sans HttpOnly ou SameSite, clickjacking, X-Content-Type-Options, fuite X-Powered-By, CORS mal configuré, divulgation d'erreurs). HSTS et cookies Secure sont ignorés sur la pile compose en HTTP et contrôlés à la bordure TLS.
  • Une exception Bandit se justifie dans le code (# nosec Bxxx avec la raison), une exception Semgrep par # nosemgrep: <règle> ; une vulnérabilité de dépendance sans correctif s'ignore avec un identifiant explicite (pip-audit --ignore-vuln, .trivyignore) et une date de revue.
  • Reproduction locale des contrôles hors ligne : helm lint, helm template, kubeconform, kyverno test deploy/policies/kyverno/tests, opa test deploy/policies/opa -v, terraform fmt -check -recursive deploy/terraform, pytest services/control-plane/tests -k platform.