Перейти до основного вмісту

Секрети

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

Концепції

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

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

У додатку

Відкрийте Параметри > Сейф, щоб створювати колекції, середовища та секрети через інтерфейс.

З 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 (компонент процесу)ТакДодається як змінні середовища виконання у виробництві
Deploy (компонент UI)ЧастковоЛише секрети з префіксом VITE_* передаються під час збірки
CLI (kazzle run)ТакІнжектується в середовище команди
CLI (secrets.export)ТакЕкспортується як рядки KEY=value
Попередній перегляд розробкиЩе ніСтартер попереднього перегляду ще не розв’язує 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/конфігурації додатку.
  • ${secret.<uuid>} — все тіло секрету. Використовуйте лише коли інструмент явно просить весь сирий секрет; не використовуйте це в env/конфігурації додатку.
Посилання розв’язуються після завантаження секретів. Циклічні або розірвані посилання призводять до помилки замість мовчазного повернення до значення за замовчуванням.