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