Passer au contenu principal

Secrets

Kazzle dispose d’un coffre-fort chiffré intégré pour stocker les clés API, identifiants de base de données, tokens et autres valeurs sensibles dont votre app a besoin. Les secrets sont chiffrés au repos avec AES-256-GCM en utilisant des clés de chiffrement de données enveloppées par KMS — les valeurs en clair ne touchent jamais la base de données.

Concepts

Les Collections regroupent les secrets connexes (par ex. stripe-keys, database-credentials). Chaque collection a un slug (minuscules, tirets) que vous référencez dans les fichiers de config et les commandes CLI. Les Environnements sont des portées optionnelles au sein d’une collection (par ex. production, staging). Les secrets peuvent être limités à un environnement spécifique ou rester au niveau de la collection comme valeurs par défaut. Ordre de résolution : lors de la résolution des secrets pour une collection + environnement donnés, les secrets spécifiques à l’environnement remplacent les secrets au niveau de la collection portant le même nom. Cela vous permet de partager la plupart des secrets entre environnements tout en remplaçant des valeurs spécifiques par environnement.

Gérer les secrets

Dans l’app

Ouvrez Paramètres > Vault pour créer des collections, environnements et secrets via l’interface.

Avec l’IA

L’IA peut créer des collections, créer des environnements, stocker des secrets, les déplacer entre portées et les supprimer pour vous. L’IA voit les noms et métadonnées des secrets mais pas les valeurs chiffrées.

Avec la CLI

# Exécuter une commande avec secrets injectés comme variables d'env
kazzle run --collection=stripe-keys --env=production -- bun run server.ts

# Exporter les secrets sous forme de lignes KEY=value
kazzle secrets.export --collection=stripe-keys --env=production

Référencer les secrets depuis votre app

Pointez la propriété env d’un composant vers une collection et environnement de secrets dans kazzle.config.ts. Chaque secret dans cette portée est injecté comme variable d’env de processus dont le nom correspond au nom du secret :
import { defineConfig } from './kazzle.types';

export default defineConfig({
  components: [
    {
      name: 'API Server',
      type: 'process',
      path: './server',
      env: {
        collection: 'stripe-keys',
        environment: 'production'
      }
    }
  ]
});
env.collection et env.environment sont des slugs, pas des noms d’affichage. Utilisez env.include pour injecter uniquement un sous-ensemble des secrets de la collection :
env: {
  collection: 'stripe-keys',
  environment: 'production',
  include: ['STRIPE_SECRET_KEY']
}

Comment les secrets deviennent des variables d’env

Quand les secrets sont résolus pour un composant :
  1. La collection est trouvée par slug dans votre espace
  2. Les secrets limités à l’environnement spécifié sont chargés
  3. Les secrets au niveau de la collection (sans environnement) sont inclus comme valeurs par défaut
  4. Les secrets spécifiques à l’environnement remplacent ceux au niveau de la collection portant le même nom
  5. Les références de secrets à l’intérieur des valeurs sont résolues
  6. Les noms de secrets sont convertis au format de variable d’env : majuscules, les caractères non alphanumériques deviennent des tirets bas
Un secret nommé Stripe Secret Key devient STRIPE_SECRET_KEY. Chaque secret a un mode de corps qui détermine comment il est injecté :
  • Les secrets string (clés API, tokens, URI) sont injectés comme chaînes scalaires simples
  • Les secrets json (config structurée) sont injectés comme chaînes JSON
  • Les secrets fields (identifiants de connexion, sacs de champs typés) sont injectés comme chaînes JSON

Quand les secrets sont injectés

ContexteInjecté ?Détails
Deploy (composant process)OuiAjouté comme variables d’env d’exécution en production
Deploy (composant UI)PartielSeuls les secrets préfixés VITE_* sont passés au moment de la compilation
CLI (kazzle run)OuiInjecté dans l’environnement de la commande
CLI (secrets.export)OuiExporté sous forme de lignes KEY=value
Aperçu devPas encoreLe starter d’aperçu ne résout pas encore l’env du composant — utilisez kazzle run pour l’instant

Références de template

Les valeurs de secrets peuvent référencer d’autres champs de secrets avec la même syntaxe que Kazzle utilise ailleurs :
postgresql://${secret.123e4567-e89b-12d3-a456-426614174000.username}:${secret.123e4567-e89b-12d3-a456-426614174000.password}@db.example.com:5432/mydb
Formats supportés :
  • ${secret.<uuid>.<field>} — champ spécifique ou chemin JSON. Utilisez ce format pour l’env/config de l’app.
  • ${secret.<uuid>} — corps entier du secret. À utiliser uniquement quand un outil demande explicitement le secret brut entier ; ne l’utilisez pas dans l’env/config de l’app.
Les références sont résolues après le chargement des secrets. Les références circulaires ou cassées échouent au lieu de revenir silencieusement à une valeur par défaut.