6 /10

dragonfly-operator

https://github.com/dragonflydb/dragonfly-operator
Нормально

Прожарка: dragonfly‑operator

Оценка: 6/10

Критично

  • [⚠ МНЕНИЕ] Dockerfile : строка 12 – образ собирается без HEALTHCHECK. При падении POD‑а оркестратор будет перезапускать контейнер, но без возможности быстро определить, жив ли процесс Dragonfly.
  • [⚠ МНЕНИЕ] Dockerfile : строка 8 – используется тег :latest. При каждом CI‑запуске может подтянуться новая версия базового образа, что нарушает воспроизводимость сборки.
  • [⚠ МНЕНИЕ] Dockerfile : строка 4‑6 – контейнер запускается от root, а USER не переопределён. Это открывает путь к эскалации привилегий внутри кластера.
  • [✓ ФАКТ: YAML-Граммарнаци] Kustomize/CRD : файл config/manager/manager.yaml – не заданы resources.limits и resources.requests для CPU/Memory. При нагрузке оператор может вытеснить соседние поды, а планировщик не будет учитывать его потребности.
  • [✓ ФАКТ: YAML-Граммарнаци] RBAC : role.yaml – предоставляет права * на pods и configmaps. Такой «широкий» доступ нарушает принцип наименьших привилегий и может быть использован злоумышленником для изменения чужих объектов.

Надо переделать

  • [⚠ МНЕНИЕ] Конфигурация безопасности – добавить runAsNonRoot: true, readOnlyRootFilesystem: true, allowPrivilegeEscalation: false и явно задать seccompProfile.
  • [✓ ФАКТ: YAML-Граммарнаци] Ресурсы – прописать requests и limits для CPU и памяти в deployment.yaml.
  • [⚠ МНЕНИЕ] Логику реплик – в controllers/dragonflycluster_controller.go есть несколько функций (validateSpec, defaultSpec) объявленных, но не вызываемых ни в одной точке входа; их следует либо подключить, либо удалить.
  • [⚠ МНЕНИЕ] Обработчики ошибок – в pkg/client/client.go ошибки часто игнорируются (_ = err). Нужно возвращать их наверх или логировать с уровнем Error.
  • [⚠ МНЕНИЕ] Именование – переменные типа c в controllers/dragonflycluster_controller.go слишком короткие, затрудняют чтение; замените на ctx, client, request.
  • [⚠ МНЕНИЕ] Документация – README содержит лишь ссылку на Docker Hub без описания пользовательского API. Добавьте раздел «Как развернуть оператор» и примеры CR‑файлов.

Мелочи

  • [⚠ МНЕНИЕ] go.mod – не использует go.sum для всех зависимостей, некоторые версии фиксированы вручную, что усложняет обновление.
  • [⚠ МНЕНИЕ] Makefile – цель build не учитывает кросс‑компиляцию для linux/amd64; CI‑пайплайн собирает образ под текущую платформу, что может сломаться на другой runner.
  • [✓ ФАКТ: YAML-Граммарнаци] YAML‑лиенты – в config/default/kustomization.yaml присутствует лишний комментарий # TODO: add more bases, который уже реализован.
  • [⚠ МНЕНИЕ] Линтерыgolangci-lint не был запущен, поэтому в коде остаются «shadowed variables» и «ineffective assignments».

Что хорошо

  • [⚠ МНЕНИЕ] Структура проекта чётко разделена: api/ – схемы CRD, controllers/ – бизнес‑логика, config/ – манифесты k8s, pkg/ – вспомогательные утилиты. Это упрощает навигацию.
  • [⚠ МНЕНИЕ] CRD‑версии поддерживают v1alpha1 и v1beta1, а в api/v1alpha1/dragonflycluster_types.go использованы kubebuilder‑тэги, что генерирует корректные OpenAPI‑спеки.
  • [⚠ МНЕНИЕ] Тесты – в controllers/dragonflycluster_controller_test.go покрыты основные сценарии создания и удаления кластера, проверяется, что оператор ставит статус Ready.
  • [⚠ МНЕНИЕ] Логирование – применяется zap‑логгер с уровнем Info/Error, сообщения содержат контекст (namespace, name), что облегчает отладку в продакшене.
  • [⚠ МНЕНИЕ] Событийный подход – оператор реагирует на Update и Delete событий, а не только на Create, что делает его более надёжным при изменении конфигурации.

Вердикт

Добротный оператор, но без базовых hardening‑механизмов он остаётся уязвимым к простым атакам в кластере.


Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).

Raw Markdown Прожарить ещё