
Infisical est une plateforme open source de gestion centralisée des secrets. Elle permet de stocker, distribuer et injecter vos secrets (mots de passe, clés API, tokens) dans vos applications sans jamais les exposer dans le code.
Ce guide vous apprend à comprendre les concepts d’Infisical, déployer votre propre instance et utiliser la CLI pour gérer vos secrets de façon sécurisée et automatisée.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre les concepts : pourquoi centraliser les secrets, comment fonctionne Infisical
- Déployer Infisical en self-hosted avec Docker Compose
- Utiliser la CLI pour créer, lire, modifier et supprimer des secrets
- Injecter les secrets dans vos applications au runtime
- Automatiser le setup pour les pipelines CI/CD
Prérequis
Section intitulée « Prérequis »- Docker et Docker Compose v2+
- 4 Go de RAM disponibles
- Connaissances de base en ligne de commande
Concepts fondamentaux
Section intitulée « Concepts fondamentaux »Avant de manipuler Infisical, il est essentiel de comprendre pourquoi on centralise les secrets et comment Infisical résout ce problème.
Pourquoi centraliser les secrets
Section intitulée « Pourquoi centraliser les secrets »Un secret est toute information sensible donnant accès à un système : mot de passe, clé API, token, certificat. Le problème classique :
| Mauvaise pratique | Risque |
|---|---|
| Secret dans le code | Exposé dans l’historique Git, accessible à tous |
Secret dans .env committé | Visible par toute l’équipe |
| Secret copié par Slack | Aucune traçabilité, impossible à révoquer |
| Même secret dev/prod | Compromission dev = compromission prod |
La solution : un coffre-fort centralisé qui stocke les secrets chiffrés et les distribue uniquement aux applications autorisées, au moment où elles en ont besoin.
Comment fonctionne Infisical
Section intitulée « Comment fonctionne Infisical »Infisical repose sur trois composants principaux :
| Composant | Rôle |
|---|---|
| Serveur Infisical | Stocke les secrets chiffrés, gère les accès |
| PostgreSQL | Base de données persistante |
| Redis | Cache et sessions |
| CLI / SDK | Clients pour récupérer et injecter les secrets |
Organisation des secrets
Section intitulée « Organisation des secrets »Infisical organise les secrets selon cette hiérarchie :
Organisation└── Projet (ex: mon-application) ├── Environnement: dev │ └── Secrets: DATABASE_URL, API_KEY, ... ├── Environnement: staging │ └── Secrets: DATABASE_URL, API_KEY, ... └── Environnement: prod └── Secrets: DATABASE_URL, API_KEY, ...Pourquoi cette structure ?
- Organisation : regroupe tous vos projets
- Projet : une application ou un service
- Environnement : dev, staging, prod avec des secrets différents
- Secret : une paire clé/valeur (ex:
DATABASE_URL=postgres://...)
Machine Identity : l’authentification M2M
Section intitulée « Machine Identity : l’authentification M2M »Comment une application s’authentifie-t-elle pour récupérer ses secrets ? Avec une Machine Identity.
Analogie : c’est comme une carte d’accès électronique. Votre application présente sa carte (token), Infisical vérifie qu’elle a le droit d’accéder à tel environnement de tel projet et lui donne les secrets correspondants.
Fonctionnalités Open Source vs Enterprise
Section intitulée « Fonctionnalités Open Source vs Enterprise »Infisical propose deux éditions : une version Community (open source, MIT) et une version Enterprise avec des fonctionnalités avancées pour les grandes organisations. Pour la plupart des projets, la version open source couvre les besoins essentiels.
Ce qui est inclus en Open Source
Section intitulée « Ce qui est inclus en Open Source »La version gratuite offre un ensemble complet pour gérer vos secrets en self-hosted :
| Fonctionnalité | Description |
|---|---|
| Stockage illimité | Nombre de secrets, projets et environnements illimité |
| Chiffrement E2E | Chiffrement AES-256-GCM côté client |
| CLI et SDKs | Node.js, Python, Go, Java, .NET, Ruby |
| Machine Identities | Authentification M2M avec tokens |
| Injection runtime | infisical run pour injecter les secrets au démarrage |
| Versioning des secrets | Historique des modifications avec rollback |
| Intégrations natives | Docker, Kubernetes, GitHub Actions, GitLab CI, etc. |
| Interface web | Tableau de bord complet pour gérer vos projets |
| RBAC de base | Rôles Admin, Member, Viewer par projet |
| Secret sharing | Partage temporaire de secrets via lien sécurisé |
| Import/Export | Formats dotenv, JSON, YAML |
| Webhooks | Notifications sur changement de secrets |
Ce qui nécessite une licence Enterprise
Section intitulée « Ce qui nécessite une licence Enterprise »Les fonctionnalités suivantes sont réservées à l’édition payante :
| Fonctionnalité | Cas d’usage |
|---|---|
| Dynamic Secrets | Credentials éphémères pour PostgreSQL, MySQL, AWS, etc. |
| Secret Rotation automatique | Changement périodique des mots de passe |
| Audit Logs avancés | Journaux détaillés avec export SIEM |
| SSO/SAML | Authentification via Okta, Azure AD, Google Workspace |
| SCIM Provisioning | Synchronisation automatique des utilisateurs |
| IP Allowlisting | Restriction d’accès par adresse IP |
| PKI & Certificats | Gestion du cycle de vie des certificats TLS |
| Secret Approval Workflows | Validation multi-niveaux avant modification |
| Points-in-Time Recovery | Restauration complète à un instant T |
| Support prioritaire | SLA garanti, accès aux ingénieurs Infisical |
Comment choisir ?
Section intitulée « Comment choisir ? »Posez-vous ces questions pour déterminer quelle édition vous convient :
Choisissez Open Source si :
- Vous débutez avec la gestion centralisée des secrets
- Votre équipe a moins de 50 développeurs
- Vous n’avez pas besoin de SSO entreprise
- Vos credentials sont statiques (pas besoin de rotation automatique)
Envisagez Enterprise si :
- Vous devez intégrer un IdP existant (Okta, Azure AD)
- La conformité exige des audit logs exportables
- Vous gérez des bases de données avec credentials dynamiques
- Vous avez besoin de workflows d’approbation pour les secrets sensibles
Installation avec Docker Compose
Section intitulée « Installation avec Docker Compose »-
Créer le répertoire du projet
Fenêtre de terminal mkdir -p infisical-lab && cd infisical-lab -
Créer le fichier d’environnement
.env # Clé de chiffrement des secrets (OBLIGATOIRE)# Générer avec : openssl rand -hex 16ENCRYPTION_KEY=a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6# Secret pour les tokens JWT# Générer avec : openssl rand -base64 32AUTH_SECRET=votre-secret-jwt-complexe-32-caracteres# URL de l'instanceSITE_URL=http://localhost:8080# Connexion PostgreSQLDB_CONNECTION_URI=postgres://infisical:infisical_password@postgres:5432/infisical?sslmode=disable# Connexion RedisREDIS_URL=redis://redis:6379Pourquoi ces variables ?
Variable Rôle ENCRYPTION_KEYChiffre les secrets stockés en base AUTH_SECRETSigne les tokens d’authentification SITE_URLURL pour les redirections et liens DB_CONNECTION_URIConnexion à PostgreSQL REDIS_URLConnexion à Redis (cache, sessions) -
Créer le fichier Docker Compose
docker-compose.yml services:postgres:image: postgres:16-alpinerestart: unless-stoppedenvironment:POSTGRES_USER: infisicalPOSTGRES_PASSWORD: infisical_passwordPOSTGRES_DB: infisicalvolumes:- postgres_data:/var/lib/postgresql/datahealthcheck:test: ["CMD-SHELL", "pg_isready -U infisical -d infisical"]interval: 10stimeout: 5sretries: 5redis:image: redis:7-alpinerestart: unless-stoppedcommand: redis-server --appendonly yesvolumes:- redis_data:/datahealthcheck:test: ["CMD", "redis-cli", "ping"]interval: 10stimeout: 5sretries: 5infisical:image: infisical/infisical:latestrestart: unless-stoppeddepends_on:postgres:condition: service_healthyredis:condition: service_healthyenv_file:- .envports:- "8080:8080"healthcheck:test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/api/status"]interval: 30stimeout: 10sretries: 3start_period: 60svolumes:postgres_data:redis_data: -
Démarrer les services
Fenêtre de terminal docker compose up -dAttendre environ 60 secondes que tous les services démarrent.
-
Vérifier le statut
Fenêtre de terminal docker compose psRésultat attendu :
NAME STATUS PORTSinfisical-postgres Up (healthy) 5432/tcpinfisical-redis Up (healthy) 6379/tcpinfisical-server Up (healthy) 0.0.0.0:8080->8080/tcp
Installation de la CLI
Section intitulée « Installation de la CLI »La CLI Infisical permet de gérer vos secrets en ligne de commande, sans passer par l’interface web.
curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | sudo -E bashsudo apt update && sudo apt install -y infisicalcurl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.rpm.sh' | sudo -E bashsudo dnf install -y infisicalbrew install infisical/get-cli/infisicalVérification :
infisical --version# infisical version 0.43.xInitialisation automatisée (bootstrap)
Section intitulée « Initialisation automatisée (bootstrap) »Bootstrap via CLI
Section intitulée « Bootstrap via CLI »La commande infisical bootstrap initialise une instance vierge en créant :
- Un compte administrateur
- Une organisation
- Une Machine Identity avec un token d’accès
infisical bootstrap \ --domain http://localhost:8080 \ --email admin@example.com \ --password 'VotreMotDePasse123!' \ --organization "Mon Organisation"Résultat :
{ "message": "Successfully bootstrapped instance", "identity": { "id": "xxx-xxx-xxx", "name": "Instance Admin Identity", "credentials": { "token": "eyJhbGciOiJIUz..." } }, "organization": { "id": "yyy-yyy-yyy", "name": "Mon Organisation" }, "user": { "email": "admin@example.com", "superAdmin": true }}Important : conservez le token de façon sécurisée. C’est votre accès
administrateur à l’instance.
Capturer le token dans une variable
Section intitulée « Capturer le token dans une variable »Pour l’automatisation, extrayez le token :
INFISICAL_TOKEN=$(infisical bootstrap \ --domain http://localhost:8080 \ --email admin@example.com \ --password 'VotreMotDePasse123!' \ --organization "Mon Organisation" \ | jq -r '.identity.credentials.token')
echo "Token capturé : ${INFISICAL_TOKEN:0:20}..."Gérer les secrets avec la CLI
Section intitulée « Gérer les secrets avec la CLI »Une fois le bootstrap effectué, utilisez la CLI pour gérer vos secrets.
Variables d’environnement requises
Section intitulée « Variables d’environnement requises »Configurez la CLI pour qu’elle se connecte à votre instance :
# URL de votre instanceexport INFISICAL_API_URL="http://localhost:8080/api"
# Token d'authentification (obtenu via bootstrap ou Machine Identity)export INFISICAL_TOKEN="eyJhbGciOiJIUz..."Créer un projet
Section intitulée « Créer un projet »Un projet regroupe les secrets d’une application. Pour créer un projet via l’API :
# Récupérer l'ID de l'organisationORG_ID=$(curl -s http://localhost:8080/api/v1/organizations \ -H "Authorization: Bearer $INFISICAL_TOKEN" | jq -r '.[0].id')
# Créer le projetPROJECT=$(curl -s -X POST http://localhost:8080/api/v2/workspace \ -H "Authorization: Bearer $INFISICAL_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"projectName\": \"mon-application\", \"organizationId\": \"$ORG_ID\"}")
PROJECT_ID=$(echo $PROJECT | jq -r '.project.id')echo "Projet créé : $PROJECT_ID"Le projet est créé avec trois environnements par défaut : dev, staging,
prod.
Créer des secrets
Section intitulée « Créer des secrets »infisical secrets set DATABASE_URL="postgres://user:pass@db:5432/myapp" \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080Résultat :
┌──────────────┬────────────────────────────────────────┬────────────────┐│ SECRET NAME │ SECRET VALUE │ STATUS │├──────────────┼────────────────────────────────────────┼────────────────┤│ DATABASE_URL │ postgres://user:pass@db:5432/myapp │ SECRET CREATED │└──────────────┴────────────────────────────────────────┴────────────────┘Créer plusieurs secrets en une commande :
infisical secrets set \ API_KEY="sk-live-abc123" \ REDIS_URL="redis://cache:6379/0" \ JWT_SECRET="super-secret-key" \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080Lister les secrets
Section intitulée « Lister les secrets »infisical secrets \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080Résultat :
┌──────────────┬────────────────────────────────────────┬─────────────┐│ SECRET NAME │ SECRET VALUE │ SECRET TYPE │├──────────────┼────────────────────────────────────────┼─────────────┤│ API_KEY │ sk-live-abc123 │ shared ││ DATABASE_URL │ postgres://user:pass@db:5432/myapp │ shared ││ JWT_SECRET │ super-secret-key │ shared ││ REDIS_URL │ redis://cache:6379/0 │ shared │└──────────────┴────────────────────────────────────────┴─────────────┘Récupérer un secret spécifique
Section intitulée « Récupérer un secret spécifique »infisical secrets get DATABASE_URL \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080Exporter les secrets
Section intitulée « Exporter les secrets »Format dotenv (pour fichiers .env) :
infisical secrets \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ --output dotenv > .envContenu généré :
API_KEY=sk-live-abc123DATABASE_URL=postgres://user:pass@db:5432/myappJWT_SECRET=super-secret-keyREDIS_URL=redis://cache:6379/0Format JSON :
infisical secrets \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ --output jsonModifier un secret
Section intitulée « Modifier un secret »Utilisez set pour modifier un secret existant :
infisical secrets set DATABASE_URL="postgres://newuser:newpass@db:5432/myapp" \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080Injecter les secrets dans une application
Section intitulée « Injecter les secrets dans une application »La fonctionnalité la plus puissante d’Infisical : l’injection runtime. Au lieu de copier les secrets dans des fichiers, la CLI les injecte directement dans les variables d’environnement de votre processus.
Commande infisical run
Section intitulée « Commande infisical run »infisical run \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ -- npm startQue se passe-t-il ?
- La CLI récupère les secrets depuis Infisical
- Elle les injecte comme variables d’environnement
- Elle lance votre commande (
npm start) - L’application accède aux secrets via
process.env.DATABASE_URL
Exemples concrets
Section intitulée « Exemples concrets »Application Node.js :
infisical run \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ -- node server.jsApplication Python :
infisical run \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ -- python app.pyScript shell :
infisical run \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ -- sh -c 'echo "DATABASE_URL=$DATABASE_URL"'Résultat :
2026-03-16 INF Injecting 4 Infisical secrets into your application processDATABASE_URL=postgres://user:pass@db:5432/myappMode watch (développement)
Section intitulée « Mode watch (développement) »En développement, relancez automatiquement l’application quand les secrets changent :
infisical run --watch \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080 \ -- npm run devIntégration CI/CD
Section intitulée « Intégration CI/CD »GitHub Actions
Section intitulée « GitHub Actions »name: Deployon: [push]
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Install Infisical CLI run: | curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | sudo -E bash sudo apt install -y infisical
- name: Run with secrets env: INFISICAL_TOKEN: ${{ secrets.INFISICAL_TOKEN }} run: | infisical run \ --token "$INFISICAL_TOKEN" \ --projectId "${{ vars.PROJECT_ID }}" \ --env production \ --domain "${{ vars.INFISICAL_URL }}" \ -- ./deploy.shGitLab CI
Section intitulée « GitLab CI »deploy: stage: deploy image: ubuntu:22.04 before_script: - apt update && apt install -y curl - curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | bash - apt install -y infisical script: - infisical run --token "$INFISICAL_TOKEN" --projectId "$PROJECT_ID" --env production --domain "$INFISICAL_URL" -- ./deploy.sh variables: INFISICAL_TOKEN: $INFISICAL_TOKENDépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
Connection refused | Serveur non démarré | docker compose ps et vérifier les logs |
401 Unauthorized | Token invalide ou expiré | Vérifier $INFISICAL_TOKEN |
404 Not Found | Mauvais projectId ou env | Vérifier les IDs dans l’URL |
Secret not found | Secret n’existe pas dans cet env | Vérifier --env |
| Bootstrap échoue | Instance déjà initialisée | Utiliser --ignore-if-bootstrapped |
Commandes de diagnostic
Section intitulée « Commandes de diagnostic »# Vérifier le statut du serveurcurl -s http://localhost:8080/api/status | jq
# Vérifier les logsdocker compose logs infisical
# Tester la connectivitéinfisical secrets \ --token "$INFISICAL_TOKEN" \ --projectId "$PROJECT_ID" \ --env dev \ --domain http://localhost:8080Fonctionnalités avancées
Section intitulée « Fonctionnalités avancées »Les fonctionnalités ci-dessous nécessitent une licence Enterprise. Consultez la section Open Source vs Enterprise pour comprendre quand ces options deviennent pertinentes.
Dynamic Secrets
Section intitulée « Dynamic Secrets »Les Dynamic Secrets génèrent des credentials éphémères à la demande. Au lieu d’un mot de passe PostgreSQL statique, Infisical crée un utilisateur temporaire avec une durée de vie limitée.
Avantages :
- Chaque application a ses propres credentials
- Les credentials expirent automatiquement
- Rotation automatique sans intervention
Secret Rotation
Section intitulée « Secret Rotation »La rotation automatique change périodiquement les secrets pour les services qui ne supportent pas les dynamic secrets.
PKI (Public Key Infrastructure)
Section intitulée « PKI (Public Key Infrastructure) »Infisical peut gérer vos certificats TLS : génération, renouvellement, distribution aux applications.
À retenir
Section intitulée « À retenir »- Centraliser — stockez tous vos secrets dans Infisical, jamais dans le code
- Séparer — utilisez des environnements différents (dev/staging/prod)
- Automatiser — utilisez
infisical runpour injecter les secrets au runtime - Sécuriser — protégez le token bootstrap comme un mot de passe root
- Auditer — l’interface web trace qui accède à quoi
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »- Documentation officielle : infisical.com/docs
- GitHub : github.com/Infisical/infisical
- CLI Reference : infisical.com/docs/cli/overview