# TP – Introduction à la sécurité dans un pipeline CI/CD GitLab
## Objectifs pédagogiques
- Comprendre pourquoi il est important d'intégrer la sécurité dans les outils de développement modernes.
- Découvrir les grandes étapes d’un pipeline CI/CD (intégration et déploiement continu).
- Apprendre à utiliser GitLab CI/CD pour automatiser l’analyse de code, le scan de dépendances et la gestion des images Docker.
- Identifier des vulnérabilités simples et comprendre comment les corriger.
## Préparation de l’environnement (via GitLab.com ou Docker local simplifié)
**Option 1 – GitLab.com (recommandée)**
- Créez un compte sur https://gitlab.com
- Créez un nouveau projet vide et clonez-le en local.
- Installez Node.js (si besoin) et initialisez un petit projet avec un fichier `app.js`, `package.json` et `Dockerfile`.
**Option 2 – Docker local (si GitLab.com indisponible)**
- Installer Docker Desktop sur votre machine.
- On vous fournira une archive contenant GitLab CE et un runner à lancer avec Docker.
- Cette méthode est plus complexe et peut nécessiter de l’aide en lab.
## Étapes du TP (à faire par ordre)
### Étape 1 : Initialisation d’un pipeline GitLab simple
- Créez un fichier `.gitlab-ci.yml` avec :
```yaml
stages:
- build
build:
stage: build
image: node:18-alpine
script:
- npm install
- echo "Build terminé"
```
- Commitez et poussez le fichier sur GitLab.
- Observez si le pipeline se déclenche correctement.
### Étape 2 : Analyse de code simple (SAST)
- Ajoutez cette ligne en haut du fichier `.gitlab-ci.yml` :
```yaml
include:
- template: Security/SAST.gitlab-ci.yml
```
- Re-poussez le fichier pour relancer le pipeline.
- Allez dans l’onglet **Security > Vulnerabilities** de GitLab et observez les failles détectées.
### Étape 3 : Scan des dépendances (SCA)
- Ajoutez cette ligne dans `include` :
```yaml
- template: Security/Dependency-Scanning.gitlab-ci.yml
```
- Ajoutez une vieille dépendance vulnérable (ex : lodash@4.17.4) dans `package.json` pour générer des vulnérabilités visibles.
- Poussez les modifications, observez les résultats dans **Security Dashboard**.
### Étape 4 : Scanner une image Docker (optionnel si temps)
- Fourniture d’un `Dockerfile` de base :
```dockerfile
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "app.js"]
```
- Ajoutez le template GitLab :
```yaml
- template: Security/Container-Scanning.gitlab-ci.yml
```
- Le job construira l’image et la scannera pour des failles connues.
>npm install devrait idéalement être fait après le COPY package.json package-lock.json ./ et avant le COPY . . pour optimiser les couches Docker et profiter du cache, mais pour ce niveau, le COPY . . puis npm install est suffisant. C'est plus une optimisation qu'une erreur fonctionnelle.
### Étape 5 (bonus) : Lire un secret depuis GitLab CI
- Dans **Settings > CI/CD > Variables**, ajoutez :
- `DB_PASSWORD` = `SuperSecret123` (protégée, masquée)
- Ajoutez dans `.gitlab-ci.yml` :
```yaml
show_secret:
stage: build
script:
- echo "Le mot de passe est : $DB_PASSWORD"
```
- Observez que GitLab masque automatiquement la variable dans les logs.
## Attendus du livrable
- Le `.gitlab-ci.yml` avec les includes et jobs fonctionnels.
- Une capture d’écran de l’onglet Security avec au moins 2 failles visibles.
- Une explication simple : quelles failles ont été détectées ? Que signifient-elles ?
- (Bonus) Extrait d’un job utilisant une variable protégée.
livrable à envoyer sur: [efrei-devsecops@barry-thien.fr](https://youtu.be/xvFZjo5PgG0?si=_EdLvwebDqel7CEH)
## Barème indicatif (sur 10)
- Pipeline de base fonctionnel : 2 pts
- SAST intégré et compris : 2 pts
- SCA intégré + dépendance vulnérable visible : 2 pts
- Interprétation correcte d’au moins 1 vulnérabilité : 2 pts
- Présentation claire (captures, explications, structure) : 2 pts
> Ce TP a pour but de vous initier aux bonnes pratiques DevSecOps sans entrer dans la complexité d’un environnement complet de production.