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

Розвантаження секретів

MirApi надає два способи тримати upstream API-облікові дані поза кодом і поза логами. Обидва підходи ін’єктують заголовок Authorization у upstream запит на рівні проксі — ваш backend код ніколи не потребує тримати відкриті секрети.

Варіант 1: Ефемерна передача (X-Identity-Key)

Section titled “Варіант 1: Ефемерна передача (X-Identity-Key)”

Передайте ваш API-ключ у заголовку X-Identity-Key. MirApi зчитує його в пам’ять, ін’єктує як Authorization до upstream, і ніколи не записує в логи або постійне сховище.

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Identity-Key: Bearer sk_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"amount": 2000, "currency": "usd", "source": "tok_visa"}'

Що відбувається:

  1. X-Identity-Key: Bearer sk_live_... зчитується з вашого заголовка
  2. Заголовок видаляється зі стрипінгу (не пересилається як X-Identity-Key)
  3. Authorization: Bearer sk_live_... ін’єктується у upstream запит
  4. Stripe отримує стандартний заголовок Authorization
  5. Значення ключа ніколи не записується в жодний лог
Terminal window
# Stripe
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Identity-Key: Bearer sk_live_..." \
-d '{"amount": 2000, "currency": "usd", "source": "tok_visa"}'
# OpenAI
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.openai.com/v1/chat/completions" \
-H "X-Identity-Key: Bearer sk-proj-..." \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Привіт"}]}'
# Twilio (Basic auth)
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.twilio.com/2010-04-01/Accounts/$SID/Messages" \
-H "X-Identity-Key: Basic $TWILIO_B64" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "To=+380501234567&From=+19876543210&Body=Привіт"

Варіант 2: Зашифроване сховище (X-Proxy-Master-Key)

Section titled “Варіант 2: Зашифроване сховище (X-Proxy-Master-Key)”

Зберігайте upstream облікові дані зашифрованими у базі даних MirApi. При запиті надайте парольну фразу дешифрування в X-Proxy-Master-Key. Шлюз розшифровує облікові дані та ін’єктує як Authorization.

Цей підхід більш безпечний для продакшену тому що:

  • Ваш додаток зберігає лише майстер-парольну фразу (не upstream API ключі)
  • Ротація upstream облікових даних виконується в дашборді MirApi — без деплою коду
  • Кількома обліковими даними можна керувати централізовано

Налаштування зашифрованих облікових даних

Section titled “Налаштування зашифрованих облікових даних”
  1. Відкрийте дашборд MirApi → Credentials → Додати облікові дані
  2. Вкажіть:
    • Назва: Мітка (наприклад, stripe-production)
    • Шаблон цільового хоста: api.stripe.com (або підрядковий збіг)
    • Значення: Ваш API-ключ (sk_live_...)
    • Парольна фраза шифрування: Ваш майстер-ключ
  3. Дашборд шифрує значення за допомогою AES-GCM і зберігає лише шифротекст

Використання зашифрованих облікових даних

Section titled “Використання зашифрованих облікових даних”
Terminal window
# Шлюз підбирає облікові дані за цільовим хостом ("api.stripe.com" збігається з збереженим шаблоном)
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Proxy-Master-Key: my-master-passphrase" \
-H "Content-Type: application/json" \
-d '{"amount": 2000, "currency": "usd", "source": "tok_visa"}'

Кастомні заголовки та шаблони авторизації

Section titled “Кастомні заголовки та шаблони авторизації”

За замовчуванням проксі підставляє розшифрований секрет у заголовок Authorization з префіксом Bearer . Тепер цю поведінку можна гнучко перевизначити за допомогою двох необов’язкових HTTP-заголовків:

  • X-Proxy-Auth-Header — визначає ім’я HTTP-заголовка, куди буде інжектовано ключ (наприклад, X-API-Key). За замовчуванням: Authorization.
  • X-Proxy-Auth-Template — задає формат значення авторизації, де заповнювач {{secret}} замінюється розшифрованим ключем. За замовчуванням: Bearer {{secret}}.

Приклад 1: Кастомний заголовок авторизації (для Anthropic API)

Section titled “Приклад 1: Кастомний заголовок авторизації (для Anthropic API)”

Якщо цільовий сервіс очікує сирий API-ключ у заголовку X-API-Key (без префікса Bearer):

Terminal window
curl -X POST https://proxy.mirapi.io/v1/messages \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.anthropic.com/v1/messages" \
-H "X-Proxy-Master-Key: my-master-passphrase" \
-H "X-Proxy-Auth-Header: X-API-Key" \
-H "X-Proxy-Auth-Template: {{secret}}" \
-H "Content-Type: application/json" \
-d '{"model": "claude-3-5-sonnet", "messages": [{"role": "user", "content": "Hello!"}]}'
  • Результат на upstream: Проксі надішле запит із заголовком X-API-Key: <розшифрований_секрет>.

Приклад 2: Авторизація через Basic Auth

Section titled “Приклад 2: Авторизація через Basic Auth”

Якщо цільовий сервіс потребує авторизації за схемою Basic:

Terminal window
curl -X GET https://proxy.mirapi.io/v1/accounts \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.somebank.com/v1/accounts" \
-H "X-Proxy-Master-Key: my-master-passphrase" \
-H "X-Proxy-Auth-Template: Basic {{secret}}"
  • Результат на upstream: Проксі надішле запит із заголовком Authorization: Basic <розшифрований_секрет>.

Явний вибір облікових даних

Section titled “Явний вибір облікових даних”
Terminal window
# Продакшн облікові дані
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Proxy-Master-Key: my-master-passphrase" \
-H "X-Credential-ID: 4a2e5d18-df99-4d66-a212-3cb5d9f0f9b3" \
-d '{"amount": 2000}'
# Staging облікові дані
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Proxy-Master-Key: my-master-passphrase" \
-H "X-Credential-ID: 9b7c3f21-aa44-4e9d-bc01-1234567890ab" \
-d '{"amount": 100}'

Ротація скомпрометованого ключа вимагає лише оновлення у дашборді — без змін у коді:

  1. Знайдіть облікові дані у дашборді
  2. Оновіть значення новим API-ключем (перешифрується з тією самою парольною фразою)
  3. Всі наступні запити одразу використовують новий ключ

Route Target Auth у каскадній маршрутизації

Section titled “Route Target Auth у каскадній маршрутизації”

При використанні каскадних маршрутів (X-Route-Key), різні цілі в каскаді можуть вимагати окремих облікових даних для авторизації. Замість використання одного загального ідентифікаційного ключа, ви можете пов’язати кожну ціль маршруту з її власним credential_id у вашій базі даних.

Під час виконання запиту, якщо ви надасте X-Proxy-Master-Key у заголовку запиту, шлюз динамічно розшифрує облікові дані для конкретної цілі за допомогою цієї майстер-парольної фрази та застосує користувацькі auth_header та auth_template, налаштовані для цієї цілі. Детальніше дивіться у Посібнику з каскадної маршрутизації.


X-Identity-KeyX-Proxy-Master-Key
СховищеПередається з кожним запитом, не зберігаєтьсяЗберігається зашифрованим у БД
НалаштуванняЖодного — просто додайте заголовокПотребує налаштування у дашборді
Ротація ключівЗмініть значення у вашому менеджері секретівЗмініть тільки в дашборді MirApi
Найкраще дляРозробка, прості сценарії або ключі вже у вашому менеджері секретівПродакшн мультисервісні середовища