Aller au contenu

Gérez vos secrets avec Infisical

Mise à jour :

logo ansible

Désormais la sécurité des données est primordiale, la gestion efficace des secrets - tels que les mots de passe, les clés API et les tokens d’accès - est devenue une nécessité absolue pour les équipes de développement. C’est là qu’Infisical entre en jeu. En tant que plateforme open source de SecretOps, Infisical offre une solution complète pour gérer de manière sécurisée les secrets et les configurations.

Infisical est une solution open source qui peut être installée dans vos infrastructures. Infisical propose en effet plusieurs options de déploiement, y compris des déploiements sur des clusters Kubernetes, ce qui renforce sa flexibilité et sa fiabilité.

À propos d’Infisical

Infisical se présente comme une plateforme end-to-end dédiée à la gestion sécurisée des secrets et des configurations. Cette plateforme est conçue pour les équipes de toutes tailles​​.

Le cœur de l’offre d’Infisical réside dans son tableau de bord centralisé. Grâce à cette interface, les utilisateurs peuvent gérer efficacement l’ensemble de leurs secrets - qu’il s’agisse de mots de passe, de tokens d’API ou de clés d’accès - pour différents environnements comme le développement, le staging, et la production​​. Cette approche centralisée simplifie la complexité habituellement associée à la gestion des secrets, rendant le processus plus transparent et facilement contrôlable pour les équipes de développement.

Fonctionnalités d’Infisical

Infisical est doté de plusieurs fonctionnalités clés qui le rendent particulièrement efficace et adapté aux besoins modernes de gestion des secrets.

Vue d’ensemble de l’environnement

Cette fonctionnalité permet aux utilisateurs de comparer et de gérer les secrets entre différents environnements. Elle est essentielle pour maintenir la cohérence et assurer que rien n’est manquant ou différent dans les environnements de développement, de staging et de production, augmentant ainsi la sécurité et la fiabilité des déploiements.

Compatibilité Universelle

Infisical est conçu pour être utilisé sur n’importe quelle plateforme et avec une grande variété de frameworks. Cette universalité facilite l’intégration d’Infisical dans des environnements de travail diversifiés, permettent ainsi aux développeurs de travailler avec les outils et les technologies qu’elles préfèrent.

Intégration avec l’Infrastructure

Infisical se distingue par sa capacité à s’intégrer de manière native avec l’infrastructure existante. Avec plus de 50 intégrations disponibles, la plateforme peut synchroniser les secrets avec des services de CI/CD et des services tiers, garantissant ainsi une gestion des secrets cohérente et sécurisée à travers toute l’infrastructure. Infisical propose des intégrations aux principaux outils DevOps dont : Docker, Kubernetes, Terraform, Ansible, AWS, Digital Ocean, GitHub Actions, GitLab CI/CD, CircleCI, React… Le reste de la liste est disponible sur le site d’infisical.

Test d’Infisical avec Docker

Pour tester localement infisical, je fais le choix de la simplicité avec Docker-Compose, mais rassurez-vous la documentation du produit explique comment l’installer via Docker-Compose, Kubernetes ou sur des instances AWS EC2 ou Digital Ocean.

Il faut dans un premier temps créer un répertoire qui va recevoir les fichiers nécessaires à son paramétrage :

Terminal window
mkdir infisical && cd infisical
wget -O .env https://raw.githubusercontent.com/Infisical/infisical/main/.env.example
wget -O docker-compose.yml https://raw.githubusercontent.com/Infisical/infisical/main/docker-compose.yml
mkdir nginx && wget -O ./nginx/default.conf https://raw.githubusercontent.com/Infisical/infisical/main/nginx/default.dev.conf

Vous pouvez ensuite éditer le fichier d’environnement pour ajouter les informations d’intégration avec Gitlab par exemple par exemple.

Une fois ces paramètres remplis, on peut lancer la stack Infisical :

Terminal window
docker-compose -f docker-compose.yml up -d
[+] Running 3/3
Container infisical-mongo Started 0.6s
Container infisical-backend Started 0.7s
Container infisical-dev-redis Started

Après le lancement, vérifiez l’installation en accédant à http://localhost depuis votre navigateur. Créez ensuite votre premier compte utilisateur.

Infisical Interface

Avec ces étapes, vous pouvez facilement déployer Infisical en local, profitant d’une solution pour tester ce gestionnaire de secrets depuis votre infrastructure. Par la suite, vous pourrez passer à un autre type d’hébergement comme sur un cluster kubernetes par exemple.

La CLI Infisical

L’utilisation de la CLI d’Infisical permet de gérer efficacement les secrets dans divers environnements, allant du développement local aux scénarios de CI/CD et de production. Voici un aperçu des principales fonctionnalités et de l’utilisation de la CLI Infisical :

Installation de la CLI Infisical

La CLI d’infisical peut être installé sur la plupart des distributions Linux, MacOS et Windows

Installation sur Linux

Je vais détailler l’installation sur une machine tournant sur Ubuntu, mais pour les autres plateformes tout est très bien expliqué dans la documentation.

Terminal window
curl -1sLf \
'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' \
| sudo -E bash
Executing the setup script for the 'infisical/infisical-cli' repository ...
OK: Checking for required executable 'curl' ...
OK: Checking for required executable 'apt' ...
OK: Detecting your OS distribution and release using system methods ...
^^^^: ... Detected/provided for your OS/distribution, version and architecture:
>>>>:
>>>>: ... distro=pop version=22.04 codename=jammy arch=x86_64
>>>>:
OK: Checking for apt dependency 'apt-transport-https' ...
OK: Checking for apt dependency 'ca-certificates' ...
OK: Checking for apt dependency 'gnupg' ...
OK: Checking for apt signed-by key support ...
OK: Importing 'infisical/infisical-cli' repository GPG keys ...
OK: Checking if upstream install config is OK ...
OK: Installing 'infisical/infisical-cli' repository via apt ...
OK: Updating apt repository metadata cache ...
OK: The repository has been installed successfully - You're ready to rock!
sudo apt update && sudo apt install -y infisical
infisical --version
infisical version 0.14.3

Voilà tout est prêt pour se connecter à notre installation locale. Mais avant jetons un coup d’oeil à la documentation de la CLI.

Terminal window
man inifisical
INFISICAL(1) Infisical CLI is used to inject environment variables into any process INFISICAL(1)
NAME
infisical - Infisical CLI is used to inject environment variables into any process
SYNOPSIS
infisical [options...] [argument...]
DESCRIPTION
Infisical is a simple, end-to-end encrypted service that enables teams to sync and manage their environment variables across their development life cycle.
OPTIONS
--domain
Point the CLI to your own backend [can also set via environment variable name: INFISICAL_API_URL]
--l --log-level
log level (trace, debug, info, warn, error, fatal)
--telemetry
Infisical collects non-sensitive telemetry data to enhance features and improve user experience. Participation is voluntary
COMMANDS
export
...
Terminal window
infisical login --help
Login into your Infisical account
Usage:
infisical login
Flags:
-h, --help help for login
-i, --interactive login via the command line
Global Flags:
--domain string Point the CLI to your own backend [can also set via environment variable name: INFISICAL_API_URL] (default "https://app.infisical.com/api")
-l, --log-level string log level (trace, debug, info, warn, error, fatal) (default "info")
--telemetry Infisical collects non-sensitive telemetry data to enhance features and improve user experience. Participation is voluntary (default true)

C’est déjà un excellent signe de la qualité du produit.

Connexion à notre installation locale d’Infisical

On tente la connexion :

Terminal window
infisical login --domain http://localhost/api
Self Hosting
Domain: http://localhost
Logging in via browser... To login via interactive mode run [infisical login -i]
Ouverture dans une session de navigateur existante.
>>>> Welcome to Infisical! You are now logged in as robert.stephane.28@gmail.com <<<<
Quick links
- Learn to inject secrets into your application at https://infisical.com/docs/cli/usage
- Stuck? Join our slack for quick support https://infisical.com/slack

Lors de la première invocation la CLI demande à quel type d’instance doit-il se connecter. J’ai donc répondu self-hosted. Une fenêtre s’est ouverte dans mon navigateur, la CLI a récupéré les infos de connexion. Ces informations sont enregistrées localement dans un fichier ~/.infisical/infisical-config.json dont voici le contenu :

Terminal window
{
"loggedInUserEmail": "robert.stephane.28@gmail.com",
"LoggedInUserDomain": "http://localhost/api",
"loggedInUsers": [
{
"email": "robert.stephane.28@gmail.com",
"domain": "http://localhost/api"
}
]
}

Aucune information compromettante !

Une autre méthode de connexion plus directe consiste à créer une variable d’environnement dans votre fichier de shell. Par exemple dans mon fichier .zshrc j’ai ajouté ceci :

Terminal window
# Set backend host
export INFISICAL_API_URL="http://localhost/api"

Enregistrement de secrets dans un projet

Pour ajouter des secrets à un projet infisical, il faut initialiser le dossier du projet.

Terminal window
infisical init
Example Project

Il récupère les projets existants dans l’instance. Cela crée un fichier .infisical.json contenant les paramètres locaux du projet, sans données sensibles.

Pour enregistrer des secrets, on utilise la commande secrets, qui permet les opérations CRUD habituelles : create, read, update et delete.

Un petit tour dans l’aide :

Terminal window
infisical secrets --help
Used to create, read update and delete secrets
Usage:
infisical secrets
infisical secrets [command]
Examples:
infisical secrets
Available Commands:
delete Used to delete secrets by name
generate-example-env Used to generate a example .env file
get Used to retrieve secrets by name
set Used set secrets
Flags:
--env string Used to select the environment name on which actions should be taken on (default "dev")
--expand Parse shell parameter expansions in your secrets (default true)
-h, --help help for secrets
--include-imports Imported linked secrets (default true)
--path string get secrets within a folder path (default "/")
--secret-overriding Prioritizes personal secrets, if any, with the same name over shared secrets (default true)
-t, --tags string filter secrets by tag slugs
--token string Fetch secrets using the Infisical Token
Global Flags:
--domain string Point the CLI to your own backend [can also set via environment variable name: INFISICAL_API_URL] (default "https://app.infisical.com/api")
-l, --log-level string log level (trace, debug, info, warn, error, fatal) (default "info")
--telemetry Infisical collects non-sensitive telemetry data to enhance features and improve user experience. Participation is voluntary (default true)
Use "infisical secrets [command] --help" for more information about a command.

On tente la création de plusieurs secrets

Terminal window
infisical secrets set API_KEY=sjdgwkeudyjwe DOMAIN=bob.com HASH=jebhfbwe
┌─────────────┬───────────────┬────────────────┐
SECRET NAME SECRET VALUE STATUS
├─────────────┼───────────────┼────────────────┤
API_KEY sjdgwkeudyjwe SECRET CREATED
DOMAIN bob.com SECRET CREATED
HASH jebhfbwe SECRET CREATED
└─────────────┴───────────────┴────────────────┘

On tente la récupération :

Terminal window
infisical secrets get API_KEY
┌─────────────┬───────────────┬─────────────┐
SECRET NAME SECRET VALUE SECRET TYPE
├─────────────┼───────────────┼─────────────┤
API_KEY sjdgwkeudyjwe shared
└─────────────┴───────────────┴─────────────┘

On tente la création de la clé d’API dans l’environnement staging

Terminal window
infisical secrets set --env staging API_KEY=dsdsfsfsffsf

Petit tour dans l’interface :

Infisical new secrets

On voit bien que la variable a été défini pour l’environnement staging.

Scan d’un dossier de projet

Infisical possède une commande pour scanner la présence de secrets dans un projet Git.

Terminal window
infisical scan -v # En mode verbose
8:46AM INF scanning for exposed secrets...
8:46AM INF 18 commits scanned.
8:46AM INF scan completed in 1.14s
8:46AM WRN leaks found: 24
Finding: "private_key_id": "cxcxcxcxcxcx",
Secret: cxcxcxcxcxcxcxcxcxcx
RuleID: generic-api-key
Entropy: 3.727567
File: gitlab-runner-sr-dbfa12bf9353.json
Line: 4
Commit: aac3ac32a2646702da63f1b6afc9622ef2263f8c
Author: Stéphane ROBERT
Email: stephane.robert@test.com
Date: 2023-10-04T05:44:13Z
Fingerprint: aac3ac32a2646702da63f1b6afc9622ef2263f8c:gitlab-runner-sr-dbfa12bf9353.json:generic-api-key:4
...

Je l’ai lancé sur mon projet qui héberge cette documentation. À lancer dans vos projets avant de commiter et à ajouter dans vos pipelines CI/CD.

Conclusion

Cette exploration, certes incomplète d’Infisical met en lumière une plateforme de gestion des secrets innovante et robuste, parfaitement adaptée aux exigences de sécurité des environnements de développement modernes. Que ce soit pour une utilisation on-premise ou dans le cloud, Infisical se distingue par sa facilité d’intégration dans divers environnements et avec de multiples technologies.

L’approche open source d’Infisical et son engagement envers la communauté de développeurs en font non seulement un outil fiable, mais aussi un produit en constante évolution, s’adaptant aux défis changeants de la cybersécurité.

En somme, Infisical se présente comme une belle alternative à HashiCorp Vault pour les développeurs à la recherche d’une gestion sécurisée, efficace et souple de leurs secrets.