Керування секретами: безпечне зберігання паролів і ключів у проєктах
Коротко: API-ключі, паролі й сертифікати не мають бути в репозиторії Git; зберігайте їх у змінних середовища або менеджерах секретів і регулярно ротуйте.
Докладніше: Секрет (secret) — будь-яка інформація, що дає доступ: пароль бази даних, API-ключ, токен, закритий ключ. Майже щодня ключі збираються з публічних репозиторіїв (боти сканують GitHub за секунди) і використовуються для зловживань (рахунки за хмару, виведення даних).
Подробиці
Що не працює
- Секрети у вихідному коді або у файлах конфігурації в репозиторії.
- В образах Docker чи фронтенд-коді (бачить кожен користувач).
- У чаті, електронній пошті, тікетах, скриншотах.
- Одні й ті самі ключі для розробки та production, для всіх сервісів.
- Безстроково чинні, надто потужні ключі.
Як зробити краще
- Змінні середовища (файл
.envлокально, у.gitignore), секрети CI (GitHub Actions secrets), налаштування хостингу (Vercel, Netlify). - Менеджери секретів: HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Google Secret Manager, 1Password/Bitwarden Secrets, Doppler, SOPS (зашифровані файли в репозиторії).
- Найменші привілеї: ключі з мінімальними правами, окремі для середовищ і сервісів.
- Ротація: регулярне оновлення, короткоживучі токени, негайне відкликання у разі підозри.
- Журналюйте та відстежуйте доступ.
- Два рівні доступу (не один ключ на все).
Захист від витоків
- Хуки pre-commit і сканери: gitleaks, trufflehog, secret scanning GitHub та захист push.
- У разі випадкового коміту: негайно відкликати/оновити ключ (видалення з історії недостатньо, дані вже скопійовано); подальше очищення історії (
git filter-repo) — лише як додатковий захід. - Перевіряйте журнали, щоб у них не виводилися секрети; не робіть повідомлення про помилки надто докладними.
- Надавайте файли-приклади (
.env.example) без реальних значень.
Практика для невеликих проєктів
Використовуйте .env локально та налаштування платформи хостингу для production. Створюйте окремі ключі на кожен сервіс, записуйте їх у менеджер паролів (не у файли), задавайте сповіщення про бюджет у хмарних сервісах і за можливості обмеження за IP чи прив’язку до домену для API-ключів. Публічний ключ браузера (наприклад, для карт) має бути обмежений вашим доменом.
Див. також: Файли env, Найменші привілеї, Менеджер паролів