Почему это критично
API-ключ — это цифровая подпись, дающая право управлять вашим аккаунтом на бирже без пароля и 2FA. Если он утечёт — злоумышленник может торговать и, если вы не настроили ограничения правильно, вывести все средства.
Хорошая новость: даже при компрометации ключа правильная конфигурация делает ущерб минимальным или нулевым.
Шаг 1: права доступа — принцип минимальных привилегий
При создании API-ключа биржа предлагает набор разрешений. Правило простое: давайте только то, что нужно боту прямо сейчас.
| Разрешение | Когда нужно | Когда НЕ нужно |
|---|---|---|
| Чтение (Read) | Всегда | — |
| Спот-торговля | Спот-бот | Фьючерсный бот |
| Фьючерсная торговля | Фьючерсный бот | Спот-бот |
| Маржинальная торговля | Маржин-бот | Обычный бот |
| Вывод средств | Никогда для бота | Всегда |
Шаг 2: IP-вайтлист
Привяжите API-ключ к конкретным IP-адресам. Тогда даже если ключ похитят — с чужого IP он не сработает.
На Binance: создание ключа → «Restrict access to trusted IPs only» → ввести IP сервера, где работает бот.
Если бот работает на вашем компьютере с динамическим IP — это проблема. Решения:
- Арендовать VPS с фиксированным IP (от 3–5 $ в месяц).
- Использовать VPN с выделенным IP.
- Ограничить IP хотя бы диапазоном вашего провайдера (менее безопасно).
Шаг 3: хранение секретов
Самое частое место утечки — это исходный код. Ключи в коде видны всем, у кого есть доступ к репозиторию.
Переменные окружения (.env)
# .env — добавьте в .gitignore немедленно!
BINANCE_API_KEY=abc123...
BINANCE_SECRET=xyz789...
import os
from dotenv import load_dotenv
load_dotenv() # читает .env в переменные окружения
api_key = os.environ["BINANCE_API_KEY"]
secret = os.environ["BINANCE_SECRET"]
.env должен быть в .gitignore до первого коммита. Если он уже попал в Git — немедленно отзовите ключ на бирже и создайте новый.
Системные переменные (production)
На сервере лучше задавать переменные окружения через systemd, Docker secrets или платформу (например GitHub Actions Secrets, Vault):
# systemd service
[Service]
Environment=BINANCE_API_KEY=abc123...
Environment=BINANCE_SECRET=xyz789...
ExecStart=/usr/bin/python3 /opt/bot/main.py
Шифрованное хранилище (продвинутый уровень)
Для командной разработки используйте HashiCorp Vault или AWS Secrets Manager. Бот получает секрет по токену доступа, и сам секрет никогда не оказывается в переменных окружения на диске.
Шаг 4: архитектура «без доступа к выводу»
Когда вы нанимаете разработчика для создания бота — возникает закономерный вопрос: как убедиться, что он не украдёт средства?
Правильная схема работы:
- Разработчик пишет и тестирует бота на своей инфраструктуре с тестовыми ключами или testnet.
- Готовый бот устанавливается на ваш сервер (не разработчика).
- Вы сами создаёте API-ключ с разрешением только «Торговля», без «Вывода средств».
- IP-вайтлист прописан на IP вашего сервера.
- Разработчик получает ключ только после подписания NDA.
При такой схеме разработчик физически не может вывести ваши средства — даже если захочет. Он может совершать ордера (в рамках стратегии бота), но не переводить деньги.
Шаг 5: мониторинг и ротация
- Включите уведомления на почту/телефон при входе с нового IP и при создании ордеров выше порогового объёма.
- Проверяйте историю API-активности в разделе «Безопасность» на бирже раз в неделю.
- Ротируйте ключи каждые 3–6 месяцев — создайте новый, замените в боте, удалите старый.
- Если заметили подозрительную активность — немедленно деактивируйте ключ через веб-интерфейс биржи.
Чеклист перед запуском бота
- ☐ Разрешение «Вывод средств» — выключено.
- ☐ IP-вайтлист — прописан IP сервера.
- ☐ Ключ не в коде и не в репозитории.
- ☐
.envв.gitignore. - ☐ Бот работает на вашем, а не на чужом сервере.
- ☐ Включены email-уведомления биржи.
- ☐ Задан дневной стоп-лосс в самом боте.
Если вам нужен бот, спроектированный с учётом всех этих требований — обсудим архитектуру. Работаем под NDA, ключи на ваш сервер.