Перейти к основному содержанию

Секреты

Kazzle имеет встроенное зашифрованное хранилище для сохранения API-ключей, учетных данных базы данных, токенов и других конфиденциальных значений, необходимых вашему приложению. Секреты зашифрованы в покое с помощью AES-256-GCM с использованием ключей шифрования данных, обернутых KMS — открытые значения никогда не попадают в базу данных.

Концепции

Коллекции группируют связанные секреты вместе (например stripe-keys, database-credentials). Каждая коллекция имеет slug (строчные буквы, через дефис), на который вы ссылаетесь в файлах конфигурации и командах CLI. Окружения — это необязательные области видимости в коллекции (например production, staging). Секреты могут быть привязаны к конкретному окружению или оставлены на уровне коллекции как значения по умолчанию. Порядок разрешения: при разрешении секретов для данной коллекции + окружения секреты, специфичные для окружения, переопределяют секреты уровня коллекции с тем же именем. Это позволяет вам делиться большинством секретов между окружениями, переопределяя конкретные значения для каждого окружения.

Управление секретами

В приложении

Откройте Settings > Vault для создания коллекций, окружений и секретов через интерфейс.

С помощью AI

AI может создавать коллекции, создавать окружения, сохранять секреты, перемещать их между областями видимости и удалять их для вас. AI видит имена секретов и метаданные, но не зашифрованные значения.

С помощью CLI

# Запустить команду с секретами, внедренными как переменные окружения
kazzle run --collection=stripe-keys --env=production -- bun run server.ts

# Экспортировать секреты как строки KEY=value
kazzle secrets.export --collection=stripe-keys --env=production

Ссылки на секреты из вашего приложения

Укажите env компонента на коллекцию секретов и окружение в kazzle.config.ts. Каждый секрет в этой области видимости внедряется как переменная окружения процесса, имя которой совпадает с именем секрета:
import { defineConfig } from './kazzle.types';

export default defineConfig({
  components: [
    {
      name: 'API Server',
      type: 'process',
      path: './server',
      env: {
        collection: 'stripe-keys',
        environment: 'production'
      }
    }
  ]
});
env.collection и env.environment — это slugs, а не отображаемые имена. Используйте env.include для внедрения только подмножества секретов коллекции:
env: {
  collection: 'stripe-keys',
  environment: 'production',
  include: ['STRIPE_SECRET_KEY']
}

Как секреты становятся переменными окружения

Когда секреты разрешаются для компонента:
  1. Коллекция находится по slug в вашем пространстве
  2. Загружаются секреты, привязанные к указанному окружению
  3. Секреты уровня коллекции (без окружения) включаются как значения по умолчанию
  4. Секреты, специфичные для окружения, переопределяют секреты уровня коллекции с тем же именем
  5. Ссылки на секреты внутри значений разрешаются
  6. Имена секретов преобразуются в формат переменной окружения: прописные буквы, неалфавитно-цифровые символы становятся подчеркиваниями
Секрет с именем Stripe Secret Key становится STRIPE_SECRET_KEY. Каждый секрет имеет режим тела, который определяет, как он внедряется:
  • Секреты string (API-ключи, токены, URI) внедряются как простые скалярные строки
  • Секреты json (структурированная конфигурация) внедряются как JSON-строки
  • Секреты fields (учетные данные для входа, типизированные наборы полей) внедряются как JSON-строки

Когда секреты внедряются

КонтекстВнедрено?Детали
Deploy (компонент процесса)ДаДобавлено как переменные окружения выполнения в production
Deploy (компонент UI)ЧастичноТолько секреты с префиксом VITE_* передаются во время сборки
CLI (kazzle run)ДаВнедрено в окружение команды
CLI (secrets.export)ДаЭкспортировано как строки KEY=value
Dev previewЕще нетСтартер предпросмотра еще не разрешает компонент env — используйте kazzle run пока

Ссылки на шаблоны

Значения секретов могут ссылаться на другие поля секретов с использованием того же синтаксиса, который Kazzle использует в других местах:
postgresql://${secret.123e4567-e89b-12d3-a456-426614174000.username}:${secret.123e4567-e89b-12d3-a456-426614174000.password}@db.example.com:5432/mydb
Поддерживаемые форматы:
  • ${secret.<uuid>.<field>} — конкретное поле или путь JSON. Используйте этот формат для env/config приложения.
  • ${secret.<uuid>} — все тело секрета. Используйте только когда инструмент явно запрашивает весь необработанный секрет; не используйте это в env/config приложения.
Ссылки разрешаются после загрузки секретов. Циклические или неработающие ссылки приводят к ошибке вместо молчаливого отката.