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

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

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 “Явний вибір облікових даних”
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. Всі наступні запити одразу використовують новий ключ

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