Код-ревью Junior Облако и контейнеры обновлено

Ревью: Dockerfile сервиса

Вопрос

Найдите проблемы безопасности в Dockerfile.

FROM python:latest
ENV DB_PASSWORD=Sup3rS3cret
ADD https://example.com/tools/agent.tar.gz /opt/
RUN curl -sSL https://get.example.sh | bash
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 22 8000
CMD ["python", "app.py"]

Коротко

Хороший Dockerfile: закреплённая минимальная база, многоэтапная сборка, .dockerignore, зависимости по lock-файлу, без секретов и SSH, USER без привилегий.

Что должен найти ревьюер

  1. Безопасностьстрока 1
    Тег latest и полный образ: невоспроизводимо и много лишних пакетов. Закрепить версию slim или distroless, лучше по digest.
  2. Безопасностьстрока 2
    Пароль в ENV: виден в образе, в docker inspect, в логах. Передавать при запуске из хранилища секретов.
  3. Безопасностьстрока 3
    ADD по URL без проверки контрольной суммы: подмена файла на сервере попадёт в образ.
  4. Безопасностьстрока 4
    curl | bash выполняет непроверенный скрипт при сборке.
  5. Безопасностьстрока 5
    COPY . копирует всё, включая .git, .env и ключи, если нет .dockerignore.
  6. Безопасностьстрока 8
    Открыт порт 22: SSH в контейнере не нужен и расширяет поверхность атаки.
  7. Безопасностьстрока 9
    Нет USER: приложение работает от root.

Разбор

Хороший Dockerfile: закреплённая минимальная база, многоэтапная сборка, .dockerignore, зависимости по lock-файлу, без секретов и SSH, USER без привилегий.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.