core code helper

Як безпечно передати паролі й API-ключі в Docker-контейнер?

Поставити питання
Запитано Активність 22 перегляди Є найкраща відповідь
0

Зараз у нас усі секрети (пароль бази, ключ платіжного API, SMTP) лежать у .env, який підхоплюється в docker-compose.yml через env_file. Колега каже, що змінні середовища — це небезпечно і треба інакше.

Наскільки це реальна проблема і який варіант кращий для невеликого проєкту на одному сервері?

Тарас Гнатюкзапитання · 3 жовтня 2026 р.

2 відповіді

0
Найкраща відповідь — на думку автора питання

Змінні середовища — не ідеал, але для одного сервера це прийнятний варіант, якщо дотримуватись кількох правил. Реальні ризики такі:

  • docker inspect показує всі змінні — будь-хто з доступом до Docker на хості їх побачить;
  • змінні потрапляють у дочірні процеси і часто — в логи помилок або crash-репорти;
  • .env випадково комітять у Git або копіюють в образ через COPY . ..

Мінімум для вашого випадку:

  1. .env у .gitignore і .dockerignore, права chmod 600, власник — користувач, від якого працює деплой.
  2. Жодних секретів у Dockerfile (ENV, ARG) — вони назавжди залишаються в шарах образу.
  3. Доступ до Docker на сервері — лише в тих, кому справді треба: група docker фактично дорівнює root.

Краще — Compose secrets: секрет монтується файлом у /run/secrets/ і не видно в docker inspect.

services:
  api:
    image: ghcr.io/acme/api:1.4.2
    secrets: [db_password, payments_key]
    environment:
      DB_PASSWORD_FILE: /run/secrets/db_password

secrets:
  db_password:
    file: ./secrets/db_password.txt
  payments_key:
    file: ./secrets/payments_key.txt

Офіційні образи Postgres, MySQL і багато інших розуміють змінні з суфіксом _FILE. У своєму застосунку додайте читання з файлу, якщо задано *_FILE.

Коли проєкт виросте — менеджер секретів (Vault, AWS Secrets Manager, Doppler, Infisical) з ротацією і аудитом доступу. Але для одного сервера Compose secrets + дисципліна з .env закривають основні ризики.

Наталія Кравецьвідповідь ·
0

Ще порада з практики: перевірте історію Git, чи не потрапляв туди .env колись раніше. git log --all --full-history -- .env покаже. Якщо потрапляв — секрети вважайте скомпрометованими і змініть їх: видалення файлу з репозиторію не видаляє його з історії.

Для автоматичного контролю додайте в CI сканер секретів (gitleaks або trufflehog) — він зловить ключі ще до мерджу.

Андрій Мельниквідповідь ·

Знаєте відповідь?

Увійдіть через Google — і зможете відповідати, голосувати й ставити власні питання. Це безкоштовно.

Увійти через Google