Documentation Infrastructure Indio

Présentation

Indio est une infrastructure complète gérée en Infrastructure as Code : provisioning Terraform (providers VMware vSphere/NSX, NetBox, AWS, Elastic) et configuration Ansible, sur un socle VMware (vCenter + vSAN, 2 hôtes ESXi + witness) avec micro-segmentation réseau NSX-T. Toutes les VM sont clonées depuis un template durci unique et suivent une convention de nommage commune par segment réseau.

Cette documentation couvre l'ensemble des briques du projet : plateforme de virtualisation et stockage, réseau, identité/sécurité, données, supervision, pipeline de logs SOC/SIEM, Kubernetes, services métiers et intégration cloud AWS — plateforme, procédures manuelles reconstituées, explication du code Terraform/Ansible, schémas, pièges rencontrés et dette technique résiduelle.

Source de vérité vivante

Cette documentation décrit l'architecture telle qu'elle ressort du code IaC (Terraform/Ansible) versionné sur GitLab, complétée par l'historique opérationnel du projet et par des vérifications en direct (lecture seule) contre l'infrastructure réelle. Pour l'état live de l'inventaire (VM existantes, IP attribuées), NetBox reste la référence — l'infrastructure évolue par itérations rapides et certaines VM documentées ici peuvent avoir été redéployées ou décommissionnées depuis. Voir Historique des décommissionnements.

Avant toute reprise d'exploitation, lire le registre de dette technique

État résiduel & points de vigilance consolide tout ce qui est connu comme non corrigé, incomplet ou incertain à date de fin de projet (dont un finding critique sur le bastion Guacamole) — à lire avant d'agir sur l'infrastructure, pas seulement pour la comprendre.

Vue d'ensemble de l'infrastructure

flowchart TB
    Internet(["Internet"]) --- Forti["FortiGate<br/>(SNAT 10.15.91.14)"]
    Forti --- T0["T0-Edge (NSX, BGP)"]

    subgraph Admin["Zone Admin (T1-Admin) — DFW allow par défaut"]
        Plateforme["Plateforme<br/>vCenter · ESXi ×2 + witness · vSAN<br/>vSAN File Service · Nexus"]
        Identite["Identité<br/>FreeIPA/AD · Vault-PKI · Keycloak<br/>Bastion Guacamole"]
        Donnees["Données<br/>PostgreSQL+repmgr · MySQL"]
        Supervision["Supervision<br/>Zabbix HA · Grafana · NTP"]
        K8s["Kubernetes<br/>kubeadm + Calico"]
        Services["Services métiers<br/>NetBox · GLPI · OCS · Veeam · Postfix"]
    end

    subgraph DMZ["Zone DMZ (T1-DMZ) — deny-all scopé"]
        Proxy["Squid + unbound<br/>(2 nœuds, VIP, NIC admin dédié)"]
    end

    subgraph SOC["Zone SOC (T1-SOC) — deny-all scopé"]
        Kafka["Kafka<br/>(cluster réel, 5 topics)"]
        Syslogng["syslog-ng<br/>(archivage froid)"]
        ELK["ELK<br/>(Elasticsearch/Logstash/Kibana)"]
        SOCTools["MISP / TheHive / Cortex<br/>(VM nues)"]
    end

    T0 --- Admin
    T0 --- DMZ
    T0 --- SOC

    Proxy -.->|"HTTPS whitelisté"| Internet
    Plateforme -->|AWS KMS auto-unseal + S3| AWS[("Cloud AWS")]

    Admin -->|logs, ~53 VM| Kafka
    Kafka --> Syslogng
    Kafka -.->|pont Logstash<br/>non construit| ELK
    Syslogng -.->|rsync .gz<br/>statut au 07-19 incertain| Plateforme

Diagramme simplifié — cardinalités et détails complets sur les pages de chaque brique.

Organisation des dépôts

Chaque brique fonctionnelle vit dans son propre dépôt GitLab, sous le groupe indio/iac/ (https://gitlab.infra.indio/indio/iac/<projet>.git), cloné localement sous /root/<projet>/ avec la structure :

<projet>/
├── *.tf                  # Provisioning Terraform (VMs, réseau, ressources cloud)
├── terraform.tfvars.example   # Modèle de variables (le .tfvars réel est gitignoré)
└── ansible/
    ├── site.yml / *.yml  # Playbooks
    ├── roles/
    └── group_vars/

Deux projets n'ont aucune trace git locale ni distante (haproxy, aws-s3-siem) — voir État résiduel & points de vigilance.

Grandes briques

Domaine Composants Page
Plateforme vCenter, ESXi, vSAN, vSAN File Service, template Packer, configuration de base, Nexus vCenter & hôtes ESXi
Réseau NSX, HAProxy, Squid/unbound (DMZ) NSX
Identité & Sécurité FreeIPA, trust AD, durcissement AD, Vault/PKI, Keycloak, bastion Guacamole FreeIPA & trust AD
Données PostgreSQL (repmgr + keepalived), MySQL PostgreSQL
Supervision Zabbix (HA), Grafana, NTP Zabbix
SOC / SIEM Vue d'ensemble du pipeline, ELK, Kafka, syslog-ng, MISP, TheHive, Cortex Vue d'ensemble SOC
Kubernetes Cluster kubeadm + Calico Cluster k8s
Services métiers NetBox, GLPI, OCS Inventory, Veeam, n8n, Postfix NetBox
Cloud AWS (S3, KMS) AWS

Zones réseau (NSX)

L'infrastructure est découpée en zones NSX (T1 dédiés, tous raccordés à un T0-Edge en BGP) :

Zone Politique DFW par défaut Segments
Admin (T1-Admin) Allow par défaut seg-service, seg-data, seg-supervision, seg-identite, seg-sauvegarde, seg-storage, seg-admin
DMZ (T1-DMZ) Deny-all scopé (allow ciblés) seg-proxy, seg-proxy-dns
SOC (T1-SOC) Deny-all scopé (allow ciblés) seg-soc-admin, seg-soc

Détails complets : NSX.

Convention de nommage

Les VM suivent le schéma IND<SEGMENT><NNN> (ex. INDSOC001, INDDATA002). Voir Convention de nommage.

Gestion des secrets

Aucun secret (mot de passe, clé privée, token) n'est versionné en clair dans les dépôts IaC, ni reproduit dans cette documentation. Voir Gestion des secrets pour le mécanisme (Vault, ansible-vault, gitignore).

Comment lire cette documentation

Chaque page suit autant que possible la même structure : Rôle (à quoi ça sert dans l'infra Indio), Architecture (schéma + description), Provisioning Terraform / Configuration Ansible (explication du code, pas juste une liste de fichiers), Procédure manuelle (étapes faites à la main, non capturées par l'IaC — souvent la partie la plus utile pour reproduire un composant), Procédure de déploiement, Contrôle de santé, et Points d'attention (pièges réels, incidents, limites connues). Les incertitudes et divergences constatées entre l'historique et l'état vérifié en direct sont signalées explicitement plutôt que masquées — voir par exemple vSAN File Service pour un cas concret.