Aller au contenu principal

Gérez vos secrets avec Infisical

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 :

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 :

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.

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.

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.

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

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 :

{
  "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 :

# 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.

astuce

Infisical gère nativement plusieurs environnements : dev (par défaut), staging et production !

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 :

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

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 :

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

infisical secrets set --env staging API_KEY=dsdsfsfsffsf

Petit tour dans l'interface :

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.

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.