Пользовательские определения ресурсов (CRD) NeuVector
NeuVector предоставляет полный набор пользовательских определений ресурсов (CRD), которые обеспечивают декларативное управление политиками безопасности через подход “Политика как код”. Эти CRD позволяют командам определять, версионировать и управлять политиками безопасности вместе с развертыванием приложений.
Обзор
CRD NeuVector позволяют:
- Определять политики безопасности декларативно, используя нативные ресурсы Kubernetes
- Версионировать и отслеживать политики безопасности вместе с кодом приложения
- Автоматизировать развертывание политик безопасности в нескольких кластерах
- Реализовывать рабочие процессы GitOps для управления безопасностью
- Обеспечивать согласованные политики безопасности в CI/CD конвейерах
Поддерживаемые CRD
Основные CRD политик безопасности
NvSecurityRule
Правила безопасности с областью действия на уровне пространства имен для политик конкретных приложений.
NvSecurityRule
определяет политики безопасности, которые применяются к рабочим нагрузкам в определенном пространстве имен. Эти правила ограничены пространством имен, где они развернуты, и могут влиять только на цели в этом пространстве имен.
Ключевые возможности:
- Принуждение в рамках пространства имен
- Правила входящего/исходящего сетевого трафика
- Контроль процессов и доступа к файлам
- Интеграция политик DLP и WAF
Пример:
apiVersion: neuvector.com/v1
kind: NvSecurityRule
metadata:
name: web-app-security
namespace: production
spec:
target:
policymode: Protect
selector:
name: nv.web-app.production
criteria:
- key: service
value: web-app.production
op: "="
- key: domain
value: production
op: "="
ingress:
- action: allow
name: allow-http
selector:
name: ingress-controller
criteria:
- key: service
value: nginx-ingress
op: "="
ports: tcp/80,tcp/443
applications:
- HTTP
- SSL
egress:
- action: allow
name: allow-database
selector:
name: nv.database.production
criteria:
- key: service
value: database.production
op: "="
ports: tcp/5432
applications:
- PostgreSQL
NvClusterSecurityRule
Правила безопасности на уровне кластера для глобальных политик.
NvClusterSecurityRule
определяет политики безопасности, которые применяются ко всему кластеру, независимо от границ пространств имен. Эти правила идеально подходят для обеспечения глобальных стандартов безопасности и базовой защиты.
Ключевые возможности:
- Принуждение на уровне кластера
- Глобальные базовые линии безопасности
- Управление политиками между пространствами имен
- Поддержка федеративных политик
Пример:
apiVersion: neuvector.com/v1
kind: NvClusterSecurityRule
metadata:
name: global-ssh-restriction
namespace: neuvector
spec:
target:
selector:
name: containers
criteria:
- key: container
value: "*"
op: "="
ingress:
- action: deny
name: deny-external-ssh
selector:
name: external
criteria: []
ports: tcp/22
applications:
- SSH
process:
- action: deny
name: ssh
path: /bin/ssh
NvGroupDefinition
Ресурс определения группы для модульного управления политиками.
NvGroupDefinition
позволяет определять переиспользуемые критерии группы, на которые могут ссылаться правила безопасности. Это способствует модульности и согласованности между политиками.
Ключевые возможности:
- Переиспользуемые определения групп
- Централизованное управление группами
- Поддержка ссылок по имени
- Упрощенное обслуживание политик
Пример:
apiVersion: neuvector.com/v1
kind: NvGroupDefinition
metadata:
name: production-web-services
namespace: neuvector
spec:
selector:
name: nv.web-services.production
comment: "Группа веб-сервисов продакшена"
criteria:
- key: service
value: web-services.production
op: "="
- key: domain
value: production
op: "="
CRD контроля допуска
NvAdmissionControlSecurityRule
Политики контроля допуска Kubernetes для валидации рабочих нагрузок.
NvAdmissionControlSecurityRule
определяет политики контроля допуска, которые валидируют и потенциально блокируют развертывания рабочих нагрузок на основе критериев безопасности.
Ключевые возможности:
- Интеграция контроля допуска
- Правила валидации рабочих нагрузок
- Принуждение безопасности во время развертывания
- Проверка соответствия
Пример:
apiVersion: neuvector.com/v1
kind: NvAdmissionControlSecurityRule
metadata:
name: local
namespace: neuvector
spec:
config:
enable: true
mode: protect
client_mode: service
rules:
- action: deny
criteria:
- name: namespace
op: containsAny
path: namespace
value: "kube-system,kube-public"
comment: "Блокировка развертываний в системные пространства имен"
Специализированные CRD безопасности
NvDlpSecurityRule
Политики предотвращения утечки данных (DLP).
NvDlpSecurityRule
определяет политики защиты данных для предотвращения утечки конфиденциальных данных и обеспечения соблюдения требований к обработке данных.
Ключевые возможности:
- Обнаружение конфиденциальных данных
- Предотвращение утечки данных
- Обеспечение соответствия
- Сопоставление пользовательских шаблонов
NvComplianceProfile
Конфигурации сканирования и отчетности по соответствию.
NvComplianceProfile
определяет стандарты соответствия и конфигурации сканирования для соблюдения нормативных и безопасностных фреймворков.
Ключевые возможности:
- Определения стандартов соответствия
- Автоматизированное сканирование
- Конфигурации отчетности
- Пользовательские проверки соответствия
NvVulnerabilityProfile
Политики сканирования и управления уязвимостями.
NvVulnerabilityProfile
определяет политики оценки уязвимостей и конфигурации управления рисками.
Ключевые возможности:
- Политики сканирования уязвимостей
- Правила оценки рисков
- Рабочие процессы устранения
- Пользовательские критерии уязвимостей
NvWafSecurityRule
Политики межсетевого экрана веб-приложений (WAF).
NvWafSecurityRule
определяет правила защиты веб-приложений и политики фильтрации трафика.
Ключевые возможности:
- Защита веб-приложений
- Правила фильтрации трафика
- Обнаружение шаблонов атак
- Пользовательские правила WAF
Спецификация политики
Спецификация цели
Все правила безопасности требуют спецификации цели, которая определяет, к каким рабочим нагрузкам применяется политика:
target:
policymode: Protect # Discover, Monitor, или Protect
selector:
name: group-name
criteria:
- key: service
value: service-name
op: "="
- key: domain
value: namespace
op: "="
Режимы политики:
- Discover: Изучать и регистрировать все действия без принуждения
- Monitor: Регистрировать нарушения политики, но разрешать трафик
- Protect: Активно блокировать нарушения политики
Сетевые правила
Сетевые правила контролируют входящий и исходящий трафик:
ingress:
- action: allow|deny
name: rule-name
selector:
name: source-group
criteria:
- key: selector-key
value: selector-value
op: operator
ports: "tcp/80,tcp/443"
applications: ["HTTP", "SSL"]
priority: 0
Поддерживаемые приложения:
- ActiveMQ, Apache, Cassandra, Consul, CouchDB, DHCP, DNS
- ElasticSearch, etcd, GRPC, HTTP, Kafka, Memcached, MongoDB
- MySQL, nginx, PostgreSQL, RabbitMQ, Redis, SSH, SSL
- И многие другие…
Правила процессов
Правила процессов контролируют, какие процессы могут выполняться:
process:
- action: allow|deny
name: process-name
path: /path/to/process
allow_update: true|false
Правила доступа к файлам
Правила доступа к файлам контролируют операции файловой системы:
file:
- behavior: monitor_change|block_access
filter: /path/to/file/or/directory
recursive: true|false
app: ["allowed-applications"]
Профили процессов
Профили процессов определяют поведенческие базовые линии:
process_profile:
baseline: default|shield|basic|zero-drift
mode: Discover|Monitor|Protect
Операторы селекторов
Селекторы CRD поддерживают различные операторы для гибкого сопоставления:
Оператор | Описание | Пример |
---|---|---|
= |
Точное совпадение | value: "web-app" |
!= |
Не равно | value: "test" |
contains |
Содержит подстроку | value: "web" |
prefix |
Начинается с | value: "app-" |
regex |
Регулярное выражение | value: "^web-.*" |
!regex |
Отрицательное регулярное выражение | value: "^(?!test).*" |
Ссылка по имени
Используйте атрибут name_referral
для ссылки на определения групп:
selector:
name: predefined-group
name_referral: true
# criteria будет игнорироваться и найдено из NvGroupDefinition
Лучшие практики
Организация политик
-
Используйте NvGroupDefinition для переиспользуемых групп:
# Определить один раз apiVersion: neuvector.com/v1 kind: NvGroupDefinition metadata: name: web-tier spec: selector: name: nv.web-tier.production
-
Используйте правила с областью действия пространства имен для политик приложений:
# Специфично для приложения в пространстве имен apiVersion: neuvector.com/v1 kind: NvSecurityRule metadata: name: app-security namespace: production
-
Используйте правила на уровне кластера для глобальных политик:
# Глобальная базовая безопасность apiVersion: neuvector.com/v1 kind: NvClusterSecurityRule metadata: name: baseline-security
Соглашения по именованию
- Используйте описательные имена правил:
web-to-database-access
- Следуйте согласованному именованию групп:
nv.service.namespace
- Избегайте зарезервированных префиксов:
fed.
,nv.ip.
,host:
,workload:
Валидация политик
# Шаблон валидного имени группы
name: "^[a-zA-Z0-9]+[.:a-zA-Z0-9_-]*$"
# Формат сервиса для обнаруженных групп
name: "nv.service-name.namespace"
Стратегия миграции
-
Экспорт из стейджинга:
kubectl get nvsecurityrule -o yaml > staging-policies.yaml
-
Модификация для продакшена:
# Изменить режим политики target: policymode: Protect # было: Monitor
-
Применение к продакшену:
kubectl apply -f production-policies.yaml
Интеграция RBAC
CRD NeuVector интегрируются с Kubernetes RBAC:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: neuvector-policy-manager
rules:
- apiGroups: ["neuvector.com"]
resources: ["nvsecurityrules", "nvclustersecurityrules"]
verbs: ["get", "list", "create", "update", "delete"]
RBAC с областью действия пространства имен
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-team-policies
namespace: development
subjects:
- kind: User
name: dev-team-lead
roleRef:
kind: ClusterRole
name: neuvector-policy-manager
Устранение неполадок
Распространенные проблемы
1. Отклонение импорта политики:
Error: group criteria mismatch
Решение: Убедитесь, что критерии группы совпадают между источником и назначением.
2. Нарушения границ пространства имен:
Error: cross-namespace policy creation denied
Решение: Используйте NvClusterSecurityRule для политик между пространствами имен.
3. Недопустимые имена групп:
Error: invalid group name format
Решение: Следуйте соглашению по именованию: ^[a-zA-Z0-9]+[.:a-zA-Z0-9_-]*$
Команды валидации
# Валидация синтаксиса CRD
kubectl apply --dry-run=client -f policy.yaml
# Проверка статуса политики
kubectl get nvsecurityrule -n production
# Просмотр деталей политики
kubectl describe nvsecurityrule web-app-security -n production
# Проверка событий на ошибки
kubectl get events -n neuvector | grep NeuVector
Отладка применения политик
-
Проверка логов контроллера:
kubectl logs -n neuvector deployment/neuvector-controller-pod
-
Проверка создания группы:
# В консоли NeuVector: Policy -> Groups
-
Проверка режима политики:
# Убедитесь, что целевая группа находится в правильном режиме (Discover/Monitor/Protect)
Соображения производительности
- Ограничивайте количество одновременных применений CRD
- Используйте пакетные операции для множественных обновлений политик
- Мониторьте использование ресурсов контроллером во время обновлений политик
- Реализуйте постепенное развертывание для больших изменений политик
Примеры интеграции
Рабочий процесс GitOps
# .github/workflows/security-policies.yml
name: Deploy Security Policies
on:
push:
paths: ['policies/**']
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy policies
run: kubectl apply -f policies/
Интеграция CI/CD конвейера
#!/bin/bash
# validate-policies.sh
set -e
echo "Валидация политик NeuVector..."
for policy in policies/*.yaml; do
kubectl apply --dry-run=client -f "$policy"
done
echo "Применение политик к стейджингу..."
kubectl apply -f policies/ --namespace=staging
echo "Запуск тестов безопасности..."
./run-security-tests.sh
echo "Продвижение в продакшен..."
kubectl apply -f policies/ --namespace=production