Как безопасно хранить API-ключи Bybit: короткий список, которому реально можно следовать
Большинство инцидентов с ключами не изощрённые. Ключ оказывается в репозитории, в сообщении чата или в окружении, которое читает больше людей, чем предполагалось.
Инженеры Vizanix · об авторе
- РАЗДЕЛ
- Bybit API
- ОПУБЛИКОВАНО
- 2026-08-28
- ГЛАВ
- 7
- ЧИТАТЬ ДАЛЬШЕ
- 3
- ЯЗЫК
- написано на русском
Биржевой API-ключ — это предъявительский документ. Кто им владеет, может делать всё, что ключу разрешено, откуда позволяет белый список, без всякой дополнительной аутентификации. Отнеситесь к нему соответственно — и почти вся практика следует сама.
Никогда не давайте право на вывод средств
Это единственное правило, которое превращает катастрофу в неудобство. Торговому боту нужны права на торговлю и чтение. Возможность выводить средства с биржи ему не нужна никогда.
Украденный торговый ключ может потерять деньги плохой торговлей — реально, но ограниченно и заметно. Украденный ключ с правом вывода опустошает счёт. Если разработчик просит право на вывод с вашего аккаунта, это конец разговора, а не начало переговоров.
Пользуйтесь белым списком IP
Bybit позволяет привязать ключ к конкретным адресам источника. Ключ, работающий только с вашего сервера, радикально менее полезен тому, кто его скопировал. Это бесплатно и это постоянно пропускают, потому что первый деплой становится чуть сложнее.
Эксплуатационная цена реальна, но мала: при переезде сервера надо не забыть обновить список, а симптом забывчивости — 10018. Свяжите эту ошибку с внятным алертом — и цена исчезает.
Где лежит секрет
В порядке предпочтения:
- Менеджер секретов, если он у вас уже есть.
- Файл, читаемый только служебным пользователем, загружаемый при старте процесса:
chmod 600, владелец — та учётная запись, под которой работает бот. - Переменная окружения, заданная через
EnvironmentFileв systemd-юните — то же самое в другой форме.
И места, где он не должен быть никогда: система контроля версий, слой Docker-образа, командная строка (видна в ps), строка лога, отчёт об ошибке, скриншот в чате поддержки или сообщение боту.
# Читаем при старте, держим в памяти, никогда не печатаем.
def load_secret(path: str) -> str:
st = os.stat(path)
if st.st_mode & 0o077:
raise SystemExit(f"{path} читается группой или всеми — отказываюсь стартовать")
return pathlib.Path(path).read_text().strip()
# В каждом форматтере логов, в каждом обработчике исключений:
def redact(text: str) -> str:
return API_KEY_RE.sub("***", text)Вторая функция важнее, чем кажется. Ключи утекают в логи через трейсбеки исключений, куда попадают заголовки запроса. Вырезание в форматтере логов — единственное место, которое ловит их все.
Ключи не должны ходить через Telegram
Пульт в Telegram действительно полезен — именно так управляется наш собственный исполнитель. Но есть жёсткая граница: бот принимает через Telegram команды, но никогда — секреты.
Ключ, вставленный в чат, существует на серверах Telegram, в истории у каждого участника, в кэшах десктопных клиентов и в резервных копиях этих устройств. Его нельзя развидеть. Если система просит отправить API-ключ боту, эта система спроектирована неправильно.
Правильный порядок: ключи кладёт на сервер тот, кому они принадлежат, а чат-интерфейс может ссылаться на них только по имени.
Один ключ на одну задачу
Отдельные ключи для отдельных ботов и отдельные ключи для мониторинга на чтение. Польза проявляется во время инцидента: можно отозвать тот, что вёл себя неправильно, не останавливая всё остальное, а логи самой биржи скажут, какой компонент что сделал.
Это же делает возможной работу с несколькими аккаунтами. Наш исполнитель поддерживает несколько ключей на пользователя, у каждого своя стратегия, свой набор монет и своя статистика, — и это работает только потому, что ключ является единицей изоляции, а не общей глобальной переменной.
Ротация и наличие плана
Ротируйте по расписанию и немедленно при любом подозрении. Болезненной ротацию делает не криптография, а обнаружение в два часа ночи, что никто не знает, какие сервисы используют этот ключ.
Запишите ответ заранее: какой ключ, какой сервис, какой хост, кто владелец, как отозвать. Инвентарь ключей — скучный документ, который становится очень ценным ровно один раз.
Коротко
- Только торговые права. Никакого вывода средств.
- Белый список IP включён всегда.
- Секрет в файле с правами 600 или в менеджере секретов, загружается при старте.
- Вырезание секретов в форматтере логов, а не в каждом месте вызова.
- Никаких секретов через чат-интерфейсы. Никогда.
- Один ключ на бота, на аккаунт, на задачу.
- Записанный инвентарь и ротация, которую вы реально отрепетировали.
Статья описывает инженерную практику. Это не инвестиционная рекомендация. Vizanix разрабатывает программное обеспечение и не обещает торговую доходность.