Phase 4.7 — DefectDojo
Provisionnement de la VM via OpenTofu, configuration via Ansible.
Vue d'ensemble
DefectDojo agrège les résultats SAST (Semgrep, Bandit), SCAN (Trivy) et DAST (OWASP ZAP) issus des pipelines CI/CD.
| Rôle | Valeur |
|---|---|
| VM | 204 — defectdojo (192.168.1.33) |
| Nœud Proxmox | pve02 |
| Groupe Ansible | defectdojo |
| URL | https://defectdojo.mounik.ovh |
| Auth | OIDC via Keycloak |
| Stack | Django + Celery + PostgreSQL + Redis (Docker Compose) |
1. Provisionnement OpenTofu
# defectdojo.tf — appel au module vm
module "defectdojo" {
source = "./modules/vm"
name = "defectdojo"
target_node = "pve02"
vmid = 204
cores = 2
memory = 4096
balloon = 2048
disk_size = "50G"
ip = "192.168.1.33"
ssh_key = local.ssh_key
depends_on = [module.monitoring]
}
Exécution :
cd homelab-proxmox/opentofu
tofu plan -target=module.defectdojo -out=tfplan
tofu apply tfplan
2. Configuration Ansible
Le playbook ansible/playbooks/07-defectdojo.yml applique le rôle defectdojo :
ansible-playbook -i inventory/homelab.yml playbooks/07-defectdojo.yml
Le rôle defectdojo :
1. Installe Docker, docker-compose-v2 et Git
2. Clone django-DefectDojo dans /opt/defectdojo
3. Déploie le fichier .env (template Jinja2 — DB, OIDC, admin)
4. Lance install.sh --stack=docker-compose
5. Démarre les conteneurs via docker_compose_v2
Variables sensibles : dd_admin_password, dd_db_password, dd_oidc_secret (via Vault).
3. Intégration Keycloak (OIDC)
Dans l'interface DefectDojo (https://defectdojo.mounik.ovh/admin) :
- Aller dans Social Accounts → Social Applications
- Ajouter : Provider
Keycloak (OpenID Connect), Client IDdefectdojo, Secret key (secret OIDC)
4. Token API
curl -X POST https://defectdojo.mounik.ovh/api/v2/api-token/ \
-H "Content-Type: application/json" \
-d '{"username": "mounik", "password": "<admin_password>"}'
Stocké dans les variables CI/CD GitLab : DD_URL, DD_API_TOKEN.
5. Vérification
docker-compose -f /opt/defectdojo/docker-compose.yml ps
curl -X GET https://defectdojo.mounik.ovh/api/v2/ \
-H "Authorization: Token <DD_API_TOKEN>"
Pour aller plus loin
- Phase 2 — OpenTofu — provisioning de toutes les VMs
- Phase 7 — Pipeline DevSecOps — SAST/DAST/SCAN vers DefectDojo
- Playbooks Ansible — dans
ansible/du dépôt