Политики
Правила allow/deny для контроля выполнения команд
~7 мин чтения
Архитектура
Политики хранятся в PostgreSQL и синхронизируются с агентами через WebSocket. Каждый агент получает набор правил при подключении и кэширует их локально для быстрого анализа.
Database Schema
⚡ Real-time sync
Изменения в политике применяются к агентам мгновенно через WebSocket. Не требуется перезапуск агента.
Типы правил
ALLOW
Команда разрешена без дополнительной проверки
docker ps*DENY
Команда заблокирована навсегда
rm -rf *Policy DSL
Правила используют glob-паттерны для матчинга команд. Звёздочка (*) соответствует любым символам.
docker ps*ALLOWMatches
✓ docker ps✓ docker ps -a✓ docker ps --format jsonNot Matches
✗ docker run✗ docker rm*rm -rf*DENYMatches
✓ rm -rf /var/log✓ sudo rm -rf /tmp✓ /bin/rm -rf file.txtNot Matches
✗ rm file.txt✗ rm -r dir✗ rm -f filecat .env*DENYMatches
✓ cat .env✓ cat .env.local✓ cat .env.productionNot Matches
✗ cat env.txt✗ cat .envbackup✗ cat file.env.baknpm installALLOWMatches
✓ npm install✓ npm install express✓ npm install --save-dev jestNot Matches
✗ npm uninstall✗ npm update✗ yarn installPriority System
Правила обрабатываются в порядке убывания priority. Правило с более высоким priority перезаписывает правило с низким. DENY всегда имеет приоритет над ALLOW при одинаковом priority.
Пример приоритизации
*priority:100Block everything (default deny)docker*priority:200Allow all docker commandsdocker*rm*priority:300But block docker rmdocker rm -f stoppedpriority:400Except specific safe case# Evaluation for "docker rm -f stopped":
100: DENY *
200: ALLOW docker* (matches)
300: DENY docker*rm* (matches, higher priority)
400: ALLOW docker rm -f stopped (matches, highest priority)
→ Result: ALLOW (priority 400)
API
# Создать политику
curl -X POST https://flowlink.flow-masters.ru/api/v1/policies \
-H "Content-Type: application/json" \
-d '{
"name": "Production",
"description": "Production server rules"
}'
# Ответ: {"id": "pol_abc123", "name": "Production", ...}
# Добавить правило
curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/pol_abc123/rules \
-H "Content-Type: application/json" \
-d '{
"rule_type": "deny",
"pattern": "rm -rf *",
"priority": 200,
"description": "Block recursive delete"
}'
# Привязать к агенту
curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/bind \
-H "Content-Type: application/json" \
-d '{
"policy_id": "pol_abc123",
"agent_id": "my-server"
}'
# Получить все политики
curl -X GET https://flowlink.flow-masters.ru/api/v1/policies \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
# Получить правила политики
curl -X GET https://flowlink.flow-masters.ru/api/v1/policies/pol_abc123/rules \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Default Policy
При регистрации агента автоматически создаётся Default Policy с базовыми правилами защиты. Она привязывается ко всем новым агентам.
Default Policy Rules
docker ps*ALLOW100List containersdocker imagesALLOW100List imagesls*ALLOW100List filescat *ALLOW100Read files (no .env)*rm -rf*DENY200Block recursive delete*docker*privileged*DENY300Block privileged docker*.env*DENY200Block .env accesscurl * | bashDENY300Block pipe to bashПримеры политик
Политика для Web разработки
Разрешить типичные команды для web-разработки
npm install*100npm run*100yarn*100docker-compose up*100docker-compose build*100*rm -rf node_modules*200Политика управления Docker
Разрешить управление Docker контейнерами
docker ps*100docker images100docker build*100docker run*100docker stop*100docker*rm*200docker*privileged*300docker*v /:/*300Kubernetes Policy
Безопасная работа с kubectl
kubectl get*100kubectl describe*100kubectl logs*100kubectl apply -f*100kubectl delete*200kubectl*production*300Тестирование политик
Используйте Playground API для тестирования политик без выполнения команд:
# Тестировать политику
curl -X POST https://flowlink.flow-masters.ru/api/playground/scan \
-H "Content-Type: application/json" \
-d '{
"command": "rm -rf /var/log",
"agent_id": "my-server",
"dry_run": true
}'
# Ответ с анализом политики:
{
"command": "rm -rf /var/log",
"shield_result": {
"level": "L4",
"decision": "BLOCKED",
"reason": "Destructive command: recursive force delete"
},
"policy_result": {
"matched_rule": {
"pattern": "*rm -rf*",
"type": "DENY",
"priority": 200,
"policy_id": "pol_abc123"
},
"decision": "DENY"
},
"final_decision": "BLOCKED"
}Best Practices
Use default deny
Начните с правила DENY * и добавляйте ALLOW для нужных команд
Priority spacing
Используйте шаг 100 для priority (100, 200, 300) для простоты добавления
Specific over general
Более конкретные паттерны должны иметь более высокий priority
Test in playground
Всегда тестируйте новые правила в Playground перед применением
Document policies
Добавляйте description к каждому правилу для будущей отладки
Audit regularly
Проверяйте и обновляйте политики регулярно