Skip to content

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) :

  1. Aller dans Social Accounts → Social Applications
  2. Ajouter : Provider Keycloak (OpenID Connect), Client ID defectdojo, 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