La sécurité doit être intégrée au pipeline. Ce module détaille Trivy, Snyk, Semgrep, Vault, Cosign attestations et politiques d’admission.
Table of Contents
Objectifs
- Automatiser SAST, DAST et scans de dépendances dans la CI/CD.
- Gérer les secrets via Vault/KMS et sécuriser les déploiements Kubernetes.
- Mettre en place des politiques Kyverno/OPA et des attestations Cosign.
1. Scans intégrés
- SAST : Semgrep ou Snyk Code (
semgrep --config auto). - Dependency scanning : Trivy FS, Snyk CLI, OWASP Dependency-Check.
- DAST : OWASP ZAP, Burp Suite (pipeline staging).
Exemple GitHub Actions :
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Semgrep SAST
uses: semgrep/semgrep-action@v1
- name: Trivy FS
uses: aquasecurity/trivy-action@v1
with:
scan-type: fs
severity: HIGH,CRITICAL
ignore-unfixed: true
- name: Trivy image
uses: aquasecurity/trivy-action@v1
with:
scan-type: image
image-ref: ghcr.io/${{ github.repository }}:${{ github.sha }}
2. Vault & secrets
- Déployer HashiCorp Vault (Helm chart) ou AWS/GCP Secrets Manager.
- Configurer auto-unseal (Cloud KMS) et policies :
path "secret/data/app/*" { capabilities = ["read", "list"] } - CI/CD : utiliser
vault write auth/approle/loginou GitHub OIDC pour obtenir un token.
3. Admission control
- Kyverno policies (ex. interdire Conteneurs root, imposer des labels, vérifier signatures).
- OPA Gatekeeper pour la conformité (CIS, Pod Security Standards).
Policy Kyverno pour injection de sidecar :
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-labels
spec:
validationFailureAction: enforce
rules:
- name: force-owner-label
match:
resources:
kinds:
- Pod
validate:
message: "Label owner obligatoire"
pattern:
metadata:
labels:
owner: "?*"
4. Attestations Cosign & provenance
cosign attest --predicate sbom.json --type https://spdx.dev/Document ghcr.io/acme/webapp:${GIT_COMMIT}
cosign verify-attestation ghcr.io/acme/webapp:${GIT_COMMIT} --type https://spdx.dev/Document --key k8s://kube-system/cosign-pub
OPA Rego exemple :
package admission
violation["image non attestée"] {
input.review.object.kind == "Pod"
some container
container := input.review.object.spec.containers[_]
not input.verifyImages[container.image]
}
5. Rapport et conformité
- Collecter les résultats SAST/DAST dans un tableau (
docs/security-report.md). - Automatiser un audit CIS Kubernetes (kubebench, kube-hunter) trimestriel.
- Mettre en place un pipeline “compliance as code” (Checkov, tfsec) sur les modules Terraform.
6. Lab guidé
- Ajouter l’étape SAST (Semgrep), SCA (Trivy) et DAST (ZAP) dans la pipeline du module 4.
- Déployer Vault, créer une AppRole et intégrer la récupération du secret dans la pipeline.
- Appliquer la policy Kyverno
require-labelset une policyverify-signed-images. - Signer l’image + attestation et vérifier via policy d’admission.
- Générer un rapport de vulnérabilités, indexer dans GitHub Security ou GitLab Security Dashboard.
Challenge optionnel
- Configurer un pipeline DevSecOps complet sur GitLab Ultimate (vuln management).
- Utiliser Tern ou Grype pour l’analyse de multi-stage Dockerfile.
- Mettre en place Security Hub (AWS) ou Security Command Center (GCP) connecté aux pipelines.
Solution détaillée
- Scans : la pipeline doit échouer si Semgrep ou Trivy trouve une vulnérabilité critique. Exportez les rapports en JSON (
sast-report.json,trivy-report.json). - Vault :
vault login -method=approle role_id=... secret_id=...fonctionne,vault kv get secret/data/app/api-keyrenvoie les secrets. Dans la pipeline, utilisezexport VAULT_TOKEN. - Admission : un Pod sans label owner est refusé (
Error from server (Forbidden)). Un Pod avec image non signée est bloqué. - Attestations :
cosign verify-attestationrenvoieVerified OK. Documenter la commande et la sortie dansdocs/security.md. - Audit : conservez les rapports sous
artifacts/securityet créez un ticket Jira si vulnérabilité critique.
Ces éléments doivent être audités régulièrement (ex. weekly security review).
Pièges fréquents
- Ignorer les dépendances transitive : activez
--ignore-unfixed=falserégulièrement. - Vault sans rotation : configurez
vault leaseet PKI pour certs courts. - Policies appliquées seulement sur Pods : pensez aux autres ressources (CronJob, Deployment via match resources).
Ressources
Checklist
- ✅ Pipeline intègre SAST/SCA/DAST.
- ✅ Secrets gérés via Vault/KMS, pas dans le code.
- ✅ Policies d’admission appliquées (Kyverno/OPA).
- ✅ Rapports sécurité archivés et suivis.


