qvib.pro
EN

Секреты и ключи

Утёкший ключ = взлом и счёт за чужой трафик. Держи секреты вне кода и репозитория.

бесплатно любой

Почему это важно

Ключ API, токен или пароль БД в коде — это не «строчка», это открытая дверь к твоим деньгам, данным и инфраструктуре. Боты круглосуточно сканируют GitHub, npm, Docker Hub и pastebin-ы регулярными выражениями вида sk-..., AKIA..., ghp_... — публичный ключ находят за секунды-минуты, ещё до того как ты успел его удалить.

Живой сценарий. Разработчик закоммитил config.js с ключом OpenAI и AWS-кредами, через 4 минуты запушил фикс с удалением. Поздно: бот уже выкачал ключ из истории коммитов. К утру — счёт на сотни долларов за чужой трафик к модели и поднятые в его AWS майнинг-инстансы. История git помнит всё: даже git rm + новый коммит не убирает секрет из прошлых ревизий.

Что делать (по шагам)

  1. Вынеси все секреты в .env и сразу добавь файл в .gitignore — до первого коммита:
# .gitignore
.env
.env.*
!.env.example   # шаблон без значений — коммитить можно
# .env  (НЕ коммитится)
OPENAI_API_KEY=sk-...
DATABASE_URL=postgres://user:pass@host:5432/db
  1. Отдельный scope-токен на каждый проект с минимально нужными правами (read-only там, где не нужна запись).
  2. Ротация по расписанию и немедленно при любом подозрении. Если ключ хоть раз попал в git/чат/скриншот — считай его скомпрометированным и перевыпусти.
  3. Для команды — менеджер секретов (1Password / HashiCorp Vault / Doppler), а не переписка и не закреп в чате.
  4. Поставь pre-commit-страховку, чтобы секрет физически не ушёл в коммит:
pip install pre-commit detect-secrets
detect-secrets scan > .secrets.baseline   # завести базлайн
# затем добавить хук detect-secrets в .pre-commit-config.yaml
  1. Если ключ уже утёк в историю — мало удалить файл. Ротируй ключ, затем чисти историю git filter-repo (или BFG) и форс-пушь по согласованию с командой.

Чего НЕ делать

  • Не коммить ключи в git — даже «временно», даже в приватный репозиторий (приватный может стать публичным).
  • Не вставляй токены в чаты, ИИ-боты, Issues, скриншоты и публичные репозитории.
  • Не давай один «всемогущий» ключ всем сервисам сразу — компрометация одного = компрометация всего.
  • Не хардкодь секреты «на минутку для теста» — именно такие коммиты и утекают.
  • Не клади .env в Docker-образ слоем COPY . . — он останется в слоях образа.

Как проверить себя

  • В репозитории нет ни одного реального ключа: git grep -nE "(sk-|AKIA|ghp_|xox|-----BEGIN)" ничего боевого не находит.
  • .env есть в .gitignore, а git ls-files | grep -i env не показывает боевой .env.
  • У каждого токена ограниченный scope и понятно, какой именно проект его использует.
  • Знаю, как и где перевыпустить каждый ключ (есть ссылка/процедура).
  • Прогнал репозиторий сканером секретов хотя бы раз.

Инструменты