Monday, October 26, 2026

How does a Policy Governance layer look like in AI application?

 For your Python-based AI Network Troubleshooting Platform, I recommend implementing Data Governance as a centralized governance and policy enforcement layer that controls how data is collected, accessed, stored, processed, shared with AI agents, and retained.

Your application is more complex than a traditional chatbot because it combines network device access, LLM reasoning, MCP servers, external tools, user management, and custom agents. Data governance therefore needs to cover both traditional application data and agentic AI execution.

The key architectural principle should be:

Every user, agent, MCP server, and tool must operate within explicitly defined data access permissions, with auditable enforcement at every trust boundary.

1. Proposed data governance architecture

Logical architecture. Governance is a cross-cutting control plane; enforcement also occurs inside the API, AI core, tool gateway, database, and device connectors.

You do not necessarily need another container for every governance capability. Start with a reusable Python governance package shared by the API and AI core, then introduce a dedicated policy service when independent deployment or scaling becomes necessary.

2. Ten governance capabilities to implement

Capability

Purpose

Recommended implementation

1. Data classification

Identify sensitivity of device data, prompts, credentials, logs

Classification labels and metadata

2. Identity management

Authenticate users and service identities

OIDC/JWT, service identities

3. Authorization

Control which data and actions are accessible

RBAC + ABAC

4. Data isolation

Prevent cross-user, tenant, or project access

PostgreSQL RLS and tenant scoping

5. AI governance

Control what agents and LLMs can access

Agent policy enforcement

6. MCP governance

Restrict tool discovery, invocation, and outputs

MCP tool gateway

7. Data protection

Protect sensitive information

Encryption, masking, secret management

8. Data lineage

Track data from source to answer

Trace IDs and provenance records

9. Audit and monitoring

Record sensitive actions and policy decisions

Append-only audit events and alerts

10. Lifecycle management

Govern retention, deletion, and archival

Retention policies and cleanup jobs

3. Data classification for network troubleshooting

Your application should classify network information before storing it or passing it to agents.

Classification

Example

Default handling

Public

Product documentation, generic troubleshooting guides

Accessible to authorized application users

Internal

Device inventory, interface status, topology

Organization-scoped access

Confidential

Configuration files, internal IP addresses, routing details

Restricted roles, selective masking

Restricted

Passwords, SNMP community strings, private keys, TACACS secrets

Never expose to LLM context; secure secret storage

Classification should attach to individual data objects, not just database tables.

For example:

{
  "resource_type": "device_configuration",
  "device_id": "router-101",
  "tenant_id": "tenant-A",
  "classification": "confidential",
  "owner": "network-operations",
  "allowed_purposes": ["troubleshooting"],
  "retention_days": 30
}

The 30-day value is illustrative; production retention should be based on your organization's policy.

4. Authorization: RBAC combined with ABAC

For your application, Admin and User roles alone will not be sufficient.

I suggest starting with these roles:

Role

Permissions

Platform Admin

Manage platform configuration and governance

Organization Admin

Manage users, devices, and policies within an organization

Network Operator

Troubleshoot assigned devices and run approved commands

AI Agent Developer

Create and configure custom agents

Standard User

Run permitted troubleshooting conversations

Auditor

Read governance logs and policy evidence

RBAC determines broad permissions, while ABAC evaluates additional attributes such as device ownership, environment, classification, and action risk.

Example:

A Network Operator asks an agent to execute show running-config on a production router.

The policy engine evaluates:

{
  "subject": {
    "role": "network_operator",
    "tenant_id": "tenant-A"
  },
  "resource": {
    "type": "network_device",
    "device_id": "router-101",
    "tenant_id": "tenant-A",
    "environment": "production"
  },
  "action": "read_configuration",
  "context": {
    "purpose": "troubleshooting",
    "approval": false
  }
}

The decision might be allow_with_redaction if the operator has configuration-read permission. Sensitive credentials are removed before the result enters the LLM context.

A configuration-changing command should require a separate permission and potentially human approval.

Important: User authorization must also constrain agents. An agent should never acquire greater access merely because its MCP server or device connector uses a privileged service account.

5. MCP server and custom agent governance

This is one of the most important areas in your architecture.

User Request

AI Agent

Policy Check

Network Device

MCP Tool

Allowed Action

Every MCP invocation is authorized before execution; tool results are classified and filtered again before reaching the model.

For custom agents, introduce an Agent Registry with versioned definitions and approval states.

Each agent should declare its allowed tools, permitted data classifications, resource scope, execution limits, and whether it can perform write operations.

Example:

agent:
  name: network-diagnostics
  version: "1.0"
  owner: network-operations
  status: approved

  permissions:
    allowed_tools:
      - get_interface_status
      - get_device_logs
      - get_routing_table
    denied_tools:
      - reload_device
      - change_configuration

  data_access:
    maximum_classification: confidential
    tenant_scope: current_user

  execution:
    max_tool_calls: 10
    require_approval_for_writes: true

These definitions must be enforced server-side, not merely inserted into an agent's system prompt.

For MCP specifically, enforce tool allowlists, trusted server registration, input validation, output sanitization, tool-call limits, and explicit approval for high-risk operations. Treat MCP responses as untrusted data because malicious or compromised device output could contain prompt-injection instructions.

6. PostgreSQL data governance model

You can extend your existing PostgreSQL database rather than introducing a separate governance database initially.

I recommend these logical table groups:

Group

Suggested tables

Identity

users, roles, permissions, user_roles

Organizations

tenants, teams, memberships

Network inventory

devices, device_groups, device_access

Agent registry

agents, agent_versions, agent_permissions

MCP registry

mcp_servers, mcp_tools, tool_permissions

Data governance

data_assets, classifications, retention_policies

Policies

policies, policy_versions, policy_decisions

Audit

audit_events, tool_executions, data_access_events

AI lineage

conversation_traces, agent_runs, data_lineage

Use PostgreSQL Row-Level Security to enforce tenant boundaries, with carefully configured application roles that cannot bypass RLS.

For sensitive operational records, consider separating application transaction data from immutable or tamper-evident audit storage.

7. Data lineage and AI observability

A traditional audit log recording only username and timestamp is insufficient for an agentic troubleshooting application.

For each troubleshooting request, you should be able to reconstruct:

Example execution trace

  1. User: Network Operator submits a BGP troubleshooting question.

  2. Agent: Routing Diagnostics Agent v1.2 is selected.

  3. Policy: User and agent are authorized for router-101.

  4. Tool: MCP invokes get_bgp_neighbors.

  5. Data: Device response is classified and sanitized.

  6. LLM: Model generates a diagnosis using approved context.

  7. Audit: Trace, policy decisions, tool calls, and source references are recorded.

Capture correlation IDs across NGINX, API, AI core, and MCP tools. Record model and prompt versions, tool versions, device identifiers, policy decisions, latency, and outcome status.

Avoid indiscriminately logging raw prompts or full device outputs because those may contain credentials or sensitive infrastructure information.

8. Recommended Python technology stack

Requirement

Technology

API enforcement

FastAPI dependencies and middleware

Policy engine

Open Policy Agent (OPA) or Casbin

Identity

OIDC provider, JWT validation, TACACS+ integration where appropriate

Database isolation

PostgreSQL RLS

Secret management

HashiCorp Vault or cloud secret manager

AI observability

OpenTelemetry and Langfuse

Metrics

Prometheus and Grafana

Structured logging

Python structlog

Data validation

Pydantic

Encryption

TLS and encrypted database/storage volumes

For your current containerized architecture, Casbin may be simpler for initial embedded authorization, while OPA becomes attractive when you need consistent policy decisions across independent containers and MCP services.

Neither tool alone supplies classification, retention, audit, or lineage. Those must be designed separately.

9. Suggested implementation sequence

Implementation checklist

0 / 18 completed

Phase 1 — Foundation

Phase 2 — Agent and MCP controls

Phase 3 — Protection and lineage

Phase 4 — Enterprise governance

10. My recommendation for your first version

I would prioritize five mandatory controls before expanding the platform:

  1. Central authorization: RBAC + ABAC for users, agents, devices, and MCP tools.

  2. Tenant isolation: PostgreSQL RLS and tenant-aware access checks at every boundary.

  3. MCP and agent guardrails: Strict tool allowlists, approval for writes, and execution limits.

  4. Data protection: Classification, credential redaction, encryption, and secrets management.

  5. End-to-end auditability: Correlate user requests, agent reasoning steps, tool executions, policy decisions, and network data sources.

This provides a practical governance foundation aligned with concepts from NIST AI RMF, NIST SP 800-53, and ISO/IEC 42001, although implementing these controls alone does not establish compliance.

The next architectural decision is whether you want data governance embedded within the existing four containers or a separate centralized Governance Service with its own APIs and policy engine.

For your platform, I would lean toward a hybrid: centralized policy definitions and decisions, but distributed enforcement within FastAPI, the AI core, and the MCP gateway. This avoids governance becoming a single bypassable checkpoint while preserving a consistent policy model.

I can next detail the production-ready database schema, Python package structure, FastAPI middleware, authorization policies, MCP governance gateway, and Docker Compose changes for this architecture.

No comments:

Post a Comment