Розвантаження секретів
MirApi надає два способи тримати upstream API-облікові дані поза кодом і поза логами. Обидва підходи ін’єктують заголовок Authorization у upstream запит на рівні проксі — ваш backend код ніколи не потребує тримати відкриті секрети.
Варіант 1: Ефемерна передача (X-Identity-Key)
Section titled “Варіант 1: Ефемерна передача (X-Identity-Key)”Передайте ваш API-ключ у заголовку X-Identity-Key. MirApi зчитує його в пам’ять, ін’єктує як Authorization до upstream, і ніколи не записує в логи або постійне сховище.
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"}'Що відбувається:
X-Identity-Key: Bearer sk_live_...зчитується з вашого заголовка- Заголовок видаляється зі стрипінгу (не пересилається як
X-Identity-Key) Authorization: Bearer sk_live_...ін’єктується у upstream запит- Stripe отримує стандартний заголовок
Authorization - Значення ключа ніколи не записується в жодний лог
Варіанти використання
Section titled “Варіанти використання”# Stripecurl -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"}'
# OpenAIcurl -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 “Налаштування зашифрованих облікових даних”- Відкрийте дашборд MirApi → Credentials → Додати облікові дані
- Вкажіть:
- Назва: Мітка (наприклад,
stripe-production) - Шаблон цільового хоста:
api.stripe.com(або підрядковий збіг) - Значення: Ваш API-ключ (
sk_live_...) - Парольна фраза шифрування: Ваш майстер-ключ
- Назва: Мітка (наприклад,
- Дашборд шифрує значення за допомогою AES-GCM і зберігає лише шифротекст
Використання зашифрованих облікових даних
Section titled “Використання зашифрованих облікових даних”# Шлюз підбирає облікові дані за цільовим хостом ("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 “Явний вибір облікових даних”# Продакшн облікові дані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}'Ротація секретів
Section titled “Ротація секретів”Ротація скомпрометованого ключа вимагає лише оновлення у дашборді — без змін у коді:
- Знайдіть облікові дані у дашборді
- Оновіть значення новим API-ключем (перешифрується з тією самою парольною фразою)
- Всі наступні запити одразу використовують новий ключ
Порівняння
Section titled “Порівняння”X-Identity-Key | X-Proxy-Master-Key | |
|---|---|---|
| Сховище | Передається з кожним запитом, не зберігається | Зберігається зашифрованим у БД |
| Налаштування | Жодного — просто додайте заголовок | Потребує налаштування у дашборді |
| Ротація ключів | Змініть значення у вашому менеджері секретів | Змініть тільки в дашборді MirApi |
| Найкраще для | Розробка, прості сценарії або ключі вже у вашому менеджері секретів | Продакшн мультисервісні середовища |