Прежде чем начать, убедитесь, что у вас есть административный доступ к кластеру Kubernetes и установлен kubectl, настроенный на работу с этим кластером. Также предполагается, что Kubeflow уже развернут (например, с помощью манифестов или инструмента kfctl). Мы будем двигаться от периметра к внутренним компонентам.
Шаг 1: Защита доступа к панели управления и API (Утро). Самый очевидный вектор атаки — веб-интерфейс Central Dashboard и API. По умолчанию они часто доступны через службу типа LoadBalancer или NodePort без аутентификации.
- Включите аутентификацию и авторизацию. Интегрируйте Kubeflow с вашим Identity Provider (IdP) через Dex (компонент, уже входящий в состав Kubeflow). Отредактируйте конфигурацию Dex, чтобы он использовал OIDC-провайдер, например, Google Workspace, Azure AD, Keycloak или GitLab. Это заменит статичные пользователей по умолчанию на централизованное управление учетными записями.
- Настройте HTTPS. Если вы используете Ingress для доступа к Kubeflow, обязательно настройте TLS-сертификат от доверенного центра (Let's Encrypt) или используйте собственный. Никогда не оставляйте трафик незашифрованным. Обновите свой Ingress-ресурс, указав секрет с сертификатом.
- Ограничьте доступ по IP. Если ваша модель использования не требует доступа из любой точки мира, настройте правила сетевой политики на уровне Ingress-контроллера или cloud-провайдера, разрешающие подключение только с доверенных IP-адресов (офис, VPN).
- Проверьте и настройте ClusterRoleBindings и RoleBindings. Убедитесь, что стандартные роли типа cluster-admin не назначены чрезмерно широко. Используйте принцип наименьших привилегий. Для большинства пользователей должно быть достаточно прав только в их собственном профиле-неймспейсе.
- Создавайте отдельные неймспейсы для production-задач и экспериментов. Ограничьте возможность создания ресурсов в критичных неймспейсах.
- Рассмотрите возможность использования Pod Security Standards (PSS) или Pod Security Admission (PSA) в Kubernetes, чтобы применять базовые политики безопасности (например, запрет на запуск от root) ко всем подам, создаваемым в неймспейсах Kubeflow.
- Шифрование секретов в etcd. Убедитесь, что в вашем кластере Kubernetes включено шифрование секретов на уровне REST (EncryptionConfiguration). Это предотвратит прямой доступ к конфиденциальным данным (паролям, ключам API) из хранилища etcd.
- Использование внешних секретов. Вместо хранения секретов в Kubernetes Secret (которые по умолчанию кодированы в base64, а не зашифрованы) используйте интеграцию с внешними системами, такими как HashiCorp Vault, AWS Secrets Manager или Azure Key Vault. Для этого существуют инструменты вроде External Secrets Operator.
- Защита Persistent Volumes. Данные для обучения, артефакты моделей и логи часто хранятся на томах. Убедитесь, что эти тома зашифрованы. В облачных средах (GCP, AWS, Azure) активируйте шифрование для managed disk services. Для on-premise решений рассмотрите использование dm-crypt или аналогичных технологий.
- Внедрение Network Policies. Kubernetes Network Policies — это брандмауэр на уровне pod. Создайте политики, которые явно разрешают только необходимый трафик между компонентами Kubeflow и блокируют все остальное. Например, поды Jupyter Notebook не должны инициировать соединения с базой данных метаданных Pipelines, если в этом нет прямой необходимости.
- Изолируйте среду выполнения обучения. Если используются специализированные ноды (например, с GPU) для обучения моделей, рассмотрите возможность их размещения в отдельном пуле нод и применения более строгих политик.
- Включите аудит Kubernetes. Настройте политику аудита кластера, чтобы фиксировать важные события, особенно связанные с доступом к секретам, изменением RBAC и созданием привилегированных подов.
- Настройте централизованный сбор логов. Убедитесь, что логи всех компонентов Kubeflow (центральный дашборд, pipelines, notebooks) собираются в систему вроде Elasticsearch, Loki или облачного решения (Stackdriver, CloudWatch). Настройте алерты на подозрительную активность (множественные неудачные попытки входа).
- Установите сканеры уязвимостей для образов контейнеров. Интегрируйте инструменты вроде Trivy или Clair в ваш CI/CD пайплайн для сканирования образов, используемых в компонентах Kubeflow и ваших собственных пайплайнах ML, на наличие известных уязвимостей.
Комментарии (7)