Skip to main content

Policy Engine

FieldValue
Document IDASCEND-GOV-006
Version1.0.0
Last UpdatedDecember 19, 2025
AuthorAscend Engineering Team
PublisherOW-KAI Technologies Inc.
ClassificationEnterprise Client Documentation
ComplianceSOC 2 CC6.1/CC6.2, PCI-DSS 7.1/8.3, HIPAA 164.312, NIST 800-53 AC-2/SI-4

Reading Time: 12 minutes | Skill Level: Advanced

Overview

The ASCEND Policy Engine provides real-time policy evaluation with sub-200ms performance. Policies define governance rules for AI agent actions, supporting natural language creation and comprehensive risk scoring.

Policy Architecture

+---------------------------------------------------------------------------------+
| POLICY EVALUATION FLOW |
+---------------------------------------------------------------------------------+
| |
| ACTION SUBMITTED |
| | |
| v |
| +------------------------+ |
| | POLICY CACHE CHECK | <-- Cache TTL: 300s (60s for high-risk) |
| +------------------------+ |
| | |
| v (cache miss) |
| +------------------------+ |
| | PATTERN MATCHING | Resource, Namespace, Verb patterns |
| +------------------------+ |
| | |
| v |
| +------------------------+ |
| | CONDITION EVALUATION | Time, Role, Environment conditions |
| +------------------------+ |
| | |
| v |
| +------------------------+ |
| | RISK SCORING | 4 categories: Financial, Data, Security, Compliance|
| +------------------------+ |
| | |
| v |
| +------------------------+ |
| | FINAL DECISION | ALLOW | DENY | REQUIRE_APPROVAL | ESCALATE |
| +------------------------+ |
| |
+---------------------------------------------------------------------------------+

Policy Decisions

DecisionDescriptionTypical Use Case
ALLOWAction permittedLow-risk operations
DENYAction blockedPolicy violations
REQUIRE_APPROVALHuman approval neededMedium-risk operations
ESCALATESecurity team reviewCritical operations
CONDITIONALDepends on contextTime/role-based rules

Creating Policies

REST API

curl -X POST "https://pilot.owkai.app/api/mcp-governance/policies" \
-H "Authorization: Bearer owkai_..." \
-H "Content-Type: application/json" \
-d '{
"policy_name": "Production Database Protection",
"natural_language_description": "Block any database deletions in production",
"resource_patterns": ["database:*", "rds:*", "dynamodb:*"],
"namespace_patterns": ["database", "storage"],
"verb_patterns": ["delete", "drop", "truncate"],
"actions": "DENY",
"conditions": {
"environment": "production"
},
"priority": 100,
"is_active": true
}'

Natural Language Creation

curl -X POST "https://pilot.owkai.app/api/mcp-governance/policies/generate" \
-H "Authorization: Bearer owkai_..." \
-H "Content-Type: application/json" \
-d '{
"description": "Require approval for financial transactions over $10,000 during business hours"
}'

Response:

{
"policy_id": 45,
"policy_name": "High-Value Transaction Approval",
"decision": "REQUIRE_APPROVAL",
"resource_patterns": ["financial:*", "payment:*"],
"conditions": {
"time_range": {
"start_hour": 9,
"end_hour": 17,
"timezone": "UTC"
}
},
"parsed_from_nl": true,
"confidence": 0.85,
"approval_level": 2
}

Risk Categories

4-Category Risk Scoring

# Source: policy_engine.py:46
class RiskCategory(str, Enum):
FINANCIAL = "financial" # Financial impact assessment
DATA = "data" # Data sensitivity assessment
SECURITY = "security" # Security risk assessment
COMPLIANCE = "compliance" # Regulatory compliance risk

Category Weights

CategoryWeightBase Scores
Security35%low: 25, medium: 50, high: 80, critical: 95
Data30%low: 20, medium: 45, high: 75, critical: 90
Compliance20%low: 10, medium: 35, high: 65, critical: 85
Financial15%low: 15, medium: 40, high: 70, critical: 95

Context Multipliers

# Source: policy_engine.py:377
CONTEXT_MULTIPLIERS = {
'production': 1.5, # Production environment
'staging': 1.2, # Staging environment
'development': 0.8, # Development environment
'admin_user': 1.4, # Administrative users
'service_account': 1.3, # Service accounts
'external_access': 2.0, # External access
'after_hours': 1.3, # After business hours
'bulk_operation': 1.6 # Bulk operations
}

Policy Conditions

Time-Based Conditions

{
"conditions": {
"time_range": {
"start_hour": 9,
"end_hour": 17,
"timezone": "UTC"
}
}
}

Role-Based Conditions

{
"conditions": {
"user_role": "admin"
}
}

Environment Conditions

{
"conditions": {
"environment": "production"
}
}

Combined Conditions

{
"conditions": {
"time_range": {"start_hour": 6, "end_hour": 22},
"user_role": "admin",
"environment": "production"
}
}

Pattern Matching

Wildcard Patterns

# Matches any resource starting with "customer"
"resource_patterns": ["customer*"]

# Matches any database resource
"resource_patterns": ["database:*", "db:*"]

Exact Matching

# Matches exactly "customers.pii"
"resource_patterns": ["customers.pii"]

Contains Matching

# Matches any resource containing "financial"
"resource_patterns": ["*financial*"]

List Policies

curl "https://pilot.owkai.app/api/mcp-governance/policies" \
-H "Authorization: Bearer owkai_..."

Response:

{
"policies": [
{
"id": 45,
"policy_name": "Production Database Protection",
"policy_status": "deployed",
"is_active": true,
"priority": 100,
"resource_patterns": ["database:*"],
"verb_patterns": ["delete", "drop"],
"actions": "DENY",
"created_at": "2025-12-15T10:00:00Z"
}
],
"total": 1
}

Policy Evaluation API

Evaluate Action

curl -X POST "https://pilot.owkai.app/api/mcp-governance/evaluate" \
-H "Authorization: Bearer owkai_..." \
-H "Content-Type: application/json" \
-d '{
"action_type": "database.delete",
"resource": "customers.inactive",
"namespace": "database",
"environment": "production",
"user_role": "developer"
}'

Response:

{
"evaluation_id": "eval_a1b2c3d4e5f6g7h8",
"decision": "DENY",
"risk_score": {
"total_score": 85,
"category_scores": {
"security": 80,
"data": 90,
"compliance": 85,
"financial": 70
},
"risk_level": "HIGH",
"requires_approval": true,
"approval_level": 3
},
"matched_policies": [
{
"policy_id": "45",
"policy_name": "Production Database Protection",
"confidence": 0.95,
"decision": "DENY"
}
],
"evaluation_time_ms": 45.2,
"recommendations": [
"Action blocked by Production Database Protection policy",
"Enhanced security monitoring recommended"
]
}

Unified Policy Service

Agent and MCP Actions

# Source: services/unified_policy_evaluation_service.py:40
class UnifiedPolicyEvaluationService:
"""
Evaluates both agent and MCP actions using SAME policy engine
ensuring consistent risk scoring and governance.
"""

async def evaluate_agent_action(self, action, user_context):
"""Evaluate agent action with policy engine."""
pass

async def evaluate_mcp_action(self, action, user_context):
"""Evaluate MCP action with SAME policy engine."""
pass

Policy Fusion (Hybrid Risk)

# 80% CVSS + 20% Policy Risk for agent actions
if action.cvss_score:
fused_risk = int(
(action.cvss_score * 10 * 0.8) +
(policy_risk_score * 0.2)
)
else:
# 100% policy risk for MCP actions
fused_risk = policy_risk_score

Policy Statistics

curl "https://pilot.owkai.app/api/mcp-governance/policies/statistics" \
-H "Authorization: Bearer owkai_..."

Response:

{
"total_policies": 25,
"active_policies": 22,
"deployed_policies": 20,
"created_today": 3,
"evaluations_24h": 15420,
"avg_evaluation_time_ms": 42.5,
"cache_hit_rate": 78.5
}

Performance Metrics

curl "https://pilot.owkai.app/api/mcp-governance/policies/performance" \
-H "Authorization: Bearer owkai_..."

Response:

{
"total_evaluations": 125000,
"avg_evaluation_time_ms": 38.5,
"cache_hit_rate": 82.3,
"cache_entries": 1250,
"performance_target_met": true,
"last_updated": "2025-12-15T10:30:00Z"
}

Cache Management

Clear Cache

curl -X POST "https://pilot.owkai.app/api/mcp-governance/policies/cache/clear" \
-H "Authorization: Bearer owkai_..."

Response:

{
"entries_cleared": 1250,
"cache_hit_rate_before_clear": 82.3
}

Best Practices

1. Use Specific Patterns

# Good - specific and targeted
{
"resource_patterns": ["database:customers.pii"],
"verb_patterns": ["delete", "drop"]
}

# Bad - too broad
{
"resource_patterns": ["*"],
"verb_patterns": ["*"]
}

2. Set Appropriate Priorities

# Higher priority (processed first)
{"priority": 100, "policy_name": "Security Block"}

# Lower priority (fallback)
{"priority": 10, "policy_name": "Default Allow"}

3. Use Natural Language for Complex Rules

# Let the engine parse complex rules
{
"description": "Require two approvals for any production database write operations during business hours for non-admin users"
}

4. Monitor Performance

# Check cache hit rate regularly
metrics = client.get_policy_performance()
if metrics.cache_hit_rate < 70:
print("Consider adjusting cache TTL")

Next Steps


Document Version: 1.0.0 | Last Updated: December 2025