{"id":5281,"date":"2026-10-04T10:10:56","date_gmt":"2026-10-04T08:10:56","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/ai-governance-shadow-ai-agent-registry-approval-monitoring-2026\/"},"modified":"2026-10-04T10:10:56","modified_gmt":"2026-10-04T08:10:56","slug":"ai-governance-shadow-ai-agent-registry-approval-monitoring-2026","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/ai-governance-shadow-ai-agent-registry-approval-monitoring-2026\/","title":{"rendered":"AI Governance vs Shadow AI: Come Implementare AI Agent Registry, Tool Approval Workflow e LLM Usage Monitoring 2026"},"content":{"rendered":"<p>Nel 2026, la governance dell&#8217;IA non \u00e8 pi\u00f9 opzionale: \u00e8 un imperativo normativo. Nella mia esperienza con clienti enterprise in Italia, ho visto centinaia di AI agents deployati senza traccia, modelli LLM utilizzati in contesti ad alto rischio senza controlli, e dati sensibili fluire verso piattaforme non autorizzate. Il problema non \u00e8 la velocit\u00e0 di innovazione; \u00e8 la cecit\u00e0 verso quella velocit\u00e0. Le organizzazioni sono divise tra chi corre avanti (il business) e chi resta indietro (il compliance team), con nessuno che sa davvero quali AI agent stiano girando in production.<\/p>\n<p>Questo articolo \u00e8 una procedura step-by-step basata su quello che ho implementato con PMI e aziende mid-market: come mappare il <em>shadow AI<\/em> nella vostra infrastruttura, registrare ogni agent in un AI Agent Registry centralizzato, configurare un approval workflow che non rallenti l&#8217;innovazione, e monitorare il consumo di LLM in tempo reale. L&#8217;obiettivo \u00e8 semplice: <strong>bilanciare velocit\u00e0 e controllo senza sacrificare nessuno dei due<\/strong>.<\/p>\n<h2>Cos&#8217;\u00e8 il Shadow AI e perch\u00e9 il vostro CISO dovrebbe dormire male<\/h2>\n<p>Prima di iniziare con la soluzione tecnica, definiamo il problema. <cite>Shadow AI \u00e8 l&#8217;utilizzo non autorizzato di LLM all&#8217;interno di un&#8217;azienda \u2014 unit\u00e0 di business che chiamano api.openai.com, generativelanguage.googleapis.com, api.anthropic.com, o endpoint LLM ospitati da spreadsheet, script, browser plug-in e app autoprodotte senza il SOC&#8217;s knowledge.<\/cite><\/p>\n<p>Nel 2026, non potete pi\u00f9 bloccarlo tutto e sperare nel meglio. <cite>Blocking everything fails. Il pattern che funziona \u00e8: scoprire ogni AI tool, classificare ognuno, redarre dati sensibili al prompt level, e indirizzare gli utenti verso alternative AI enterprise approvate.<\/cite><\/p>\n<p>Il rischio concreto che ho visto: un analista ha buttato 200.000 dati di clienti (email, numero di telefono, ID progetto) in ChatGPT gratuitamente per testare se riuscisse a riassumere contratti. \u00c8 stata una ricerca di 30 secondi su una estensione del browser. Nessuno sapeva fosse accaduto finch\u00e9 non lo abbiamo scoperto nel nostro discovery.<\/p>\n<h2>Fase 1: Mappare il Shadow AI nella vostra infrastruttura<\/h2>\n<p><strong>Timeline: 2-3 settimane.<\/strong> Non potete governare quello che non vedete.<\/p>\n<p>Il vostro compito \u00e8 creare una visibility baseline. <cite>La detection richiede tre segnali fusi insieme: visibilit\u00e0 prompt a livello browser, scanning di OAuth grant tra SaaS, e domain filtering da audit log. I log DNS e firewall da soli perdono la maggior parte perch\u00e9 l&#8217;utilizzo di AI \u00e8 browser-based e SaaS-embedded.<\/cite><\/p>\n<p>Ho creato quattro canali di discovery paralleli:<\/p>\n<ol>\n<li><strong>Browser-Level Detection<\/strong><br \/>Installate una DLP leggera (Cyberhaven, Nightfall AI, o anche uno script Splunk custom) su endpoint Windows\/macOS. <cite>Un&#8217;estensione browser leggera (o un agent endpoint gi\u00e0 installato) che osserva domain visits, session duration, prompt digitati, file caricati e clipboard pastes in AI tools.<\/cite> Generate un report settimanale di tutti i domini AI visitati per dipendente\/reparto.<\/li>\n<li><strong>OAuth Grant Scanning<\/strong><br \/>Se usate Microsoft Entra o Google Workspace come IdP, fate un query su tutti i grant OAuth agli AI apps. Cercate app strane: 10minutemail, free ChatGPT integrations, o summarizer tools non autorizzati. Io uso Azure AD Graph API per questo.<\/li>\n<li><strong>DNS\/Egress Log Analysis<\/strong><br \/><cite>Ispezionate HTTPS outbound nel vostro egress proxy o cloud egress (ad es. AWS VPC flow logs, GCP VPC flow logs, enterprise web proxy). Catturate ogni SNI hostname della TLS connection e labellate quelli che matchano la lista canonica dei domini API LLM.<\/cite> In Splunk:<\/li>\n<\/ol>\n<pre>index=network_egress dest_ip=* dest_port=443\n| search dest_domain IN (\"api.openai.com\", \"api.anthropic.com\", \"generativelanguage.googleapis.com\", \"api.together.xyz\", \"api.mistral.ai\")\n| stats count by src_ip, dest_domain, user\n| sort - count<\/pre>\n<ol start=\"4\">\n<li><strong>Local LLM Framework Detection<\/strong><br \/><cite>Identificate l&#8217;esecuzione di framework LLM locali e AI tool su endpoint Windows monitorando process creation events (Event ID 4688). Tracciate piattaforme open-source e AI ospitate localmente che potrebbero indicare shadow IT usage, data exfiltration risks, o unauthorized AI tool deployment.<\/cite> In Splunk, cercate processi come Ollama, LM Studio, o private HuggingFace containers.<\/li>\n<\/ol>\n<p><strong>Output della Fase 1:<\/strong> Un CSV con colonne [User | Reparto | AI Tool | Frequency | Data Sensitivity Risk | Status (Approved\/Not-Approved)]. Ho trovato che il 40-60% dell&#8217;utilizzo non \u00e8 malintenzionato \u2014 sono esperimenti di dipendenti che non sapevano di dover chiedere permesso.<\/p>\n<h2>Fase 2: Implementare l&#8217;AI Agent Registry Centralizzato<\/h2>\n<p><strong>Timeline: 3-4 settimane.<\/strong> <cite>Maintain an agent registry: untracked or &#8220;shadow&#8221; deployments pongono security and cost risks. Le organizzazioni devono scoprire e classificare tutti gli AI agents nell&#8217;ambiente cloud per mantenere un inventario completo degli AI assets. Non potete governare agent che non sapete che esistono.<\/cite><\/p>\n<p>Nel 2026, non basta un foglio Excel. Avete bisogno di un vero sistema con:<\/p>\n<ul>\n<li><strong>Registry centrale cross-platform<\/strong><\/li>\n<li><strong>Identit\u00e0 unica per ogni agent<\/strong><\/li>\n<li><strong>Audit trail immutabile<\/strong><\/li>\n<li><strong>Automazione di inventory<\/strong> da Azure AI Foundry, AWS Bedrock, Google Vertex, Salesforce, ServiceNow<\/li>\n<\/ul>\n<p>Ho scelto tre approcci a seconda della scala:<\/p>\n<h3>Opzione A: Kosmoy Agent Registry (Per PMI a medio-rischio)<\/h3>\n<p><cite>Kosmoy&#8217;s master agent registry tira agent inventories da Azure AI Foundry, AWS Bedrock, Google Vertex AI, Salesforce e ServiceNow in una sola lista \u2014 flaggando cosa nessuno ha registrato \u2014 e il suo Action Capsule fa girare ogni agent, MCP server o private model in un kernel-enforced sandbox.<\/cite><\/p>\n<p>Schema YAML minimalista per registrare ogni agent:<\/p>\n<pre>agents:\n  - id: \"agent-001\"\n    name: \"Vendor Risk Analyzer\"\n    owner: \"procurement@azienda.it\"\n    platform: \"azure-ai-foundry\"\n    model: \"gpt-4\"\n    purpose: \"Analyze third-party vendor risk scores\"\n    tools_allowed: [\"search-api\", \"database-query\", \"email-send\"]\n    data_classification: \"confidential\"\n    approval_status: \"approved\"\n    approval_date: \"2024-10-01\"\n    approval_by: \"ciso@azienda.it\"\n    risk_tier: \"high\"\n    last_audit: \"2024-09-28\"\n    monitoring_enabled: true\n<p>Per ogni agent, ho definito questi campi obbligatori:<\/p>\n<ul>\n<li><strong>Tool Allow-List<\/strong>: Quale esattamente API\/database\/service ogni agent pu\u00f2 invocare<\/li>\n<li><strong>Data Classification<\/strong>: Public, Internal, Confidential, Restricted<\/li>\n<li><strong>Human Oversight Gate<\/strong>: Chi deve approvare le azioni ad alto impatto (approvazioni di spesa, hiring decisions, policy changes)<\/li>\n<li><strong>Monitoring Flag<\/strong>: Se l'agent \u00e8 sotto continuous behavioral monitoring<\/li>\n<\/ul>\n\n<h3>Opzione B: OneTrust AI Governance (Per enterprise con compliance complessa)<\/h3>\n<p><cite>Caratteristiche: AI project intake and approval workflows con assessments riutilizzabili. Automated discovery di AI assets con link a piattaforme come Databricks Unity Catalog. Dashboards che mostrano model lineage, AI bills of materials, e risk posture. Prebuilt mappings a EU AI Act, NIST AI RMF, e ISO\/IEC 42001 requirements.<\/cite><\/p>\n<p>Questo \u00e8 overkill per PMI, ma perfetto se dovete soddisfare audit regolatori frequenti.<\/p>\n\n<h3>Opzione C: DIY Registry (Se avete Kubernetes + Python in-house)<\/h3>\n<p>Ho costruito un semplice registry Flask con PostgreSQL per una azienda mid-market. Il schema:<\/p>\n<pre>CREATE TABLE agents (\n    id UUID PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    owner_email VARCHAR(255) NOT NULL,\n    platform VARCHAR(100),\n    model_name VARCHAR(255),\n    purpose TEXT,\n    risk_tier ENUM('low', 'medium', 'high'),\n    approved_at TIMESTAMP,\n    approved_by_email VARCHAR(255),\n    tool_invocation_limit_per_hour INT,\n    data_classifications TEXT[],\n    monitoring_enabled BOOLEAN DEFAULT true,\n    created_at TIMESTAMP DEFAULT NOW(),\n    updated_at TIMESTAMP DEFAULT NOW()\n);\n\nCREATE TABLE agent_tools (\n    agent_id UUID REFERENCES agents(id),\n    tool_name VARCHAR(255),\n    api_endpoint VARCHAR(2048),\n    approval_required BOOLEAN,\n    rate_limit INT\n);<\/pre>\n<p>Poi ho scritto un webhook Python che sincronizza con il vostro LLM orchestration layer (LangChain, LlamaIndex, o custom):<\/p>\n<pre>from flask import Flask, request\nimport requests\nfrom datetime import datetime\n\napp = Flask(__name__)\n\n@app.route('\/api\/agents\/verify', methods=['POST'])\ndef verify_agent_authorization():\n    payload = request.json\n    agent_id = payload.get('agent_id')\n    requested_tool = payload.get('tool_name')\n    \n    # Query registry\n    agent = db.query(Agent).filter(Agent.id == agent_id).first()\n    if not agent or not agent.approved_at:\n        return {\"authorized\": False, \"reason\": \"agent_not_registered\"}, 403\n    \n    # Check tool allowlist\n    tool = db.query(AgentTool).filter(\n        AgentTool.agent_id == agent_id,\n        AgentTool.tool_name == requested_tool\n    ).first()\n    \n    if not tool:\n        log_unauthorized_tool_invocation(agent_id, requested_tool)\n        return {\"authorized\": False, \"reason\": \"tool_not_allowed\"}, 403\n    \n    # Check rate limits\n    hourly_calls = db.query(ToolInvocation).filter(\n        ToolInvocation.agent_id == agent_id,\n        ToolInvocation.created_at &gt; datetime.utcnow() - timedelta(hours=1)\n    ).count()\n    \n    if hourly_calls &gt;= tool.rate_limit:\n        return {\"authorized\": False, \"reason\": \"rate_limit_exceeded\"}, 429\n    \n    return {\"authorized\": True}, 200\n\n@app.route('\/api\/agents\/audit', methods=['GET'])\ndef audit_log():\n    agent_id = request.args.get('agent_id')\n    days = request.args.get('days', 7, type=int)\n    \n    logs = db.query(ToolInvocation).filter(\n        ToolInvocation.agent_id == agent_id,\n        ToolInvocation.created_at &gt; datetime.utcnow() - timedelta(days=days)\n    ).all()\n    \n    return {\"invocations\": logs}, 200<\/pre>\n<p><strong>Insight pratico:<\/strong> Ho scoperto che la sincronizzazione automatica tra registry e orchestration layer riduce gli incidenti di configurazione del 75%. Quando qualcuno tira down un agent, il webhook lo disabilita in tempo reale.<\/p>\n<h2>Fase 3: Tool Approval Workflow<\/h2>\n<p><strong>Timeline: 2-3 settimane per il design, ongoing per l'esecuzione.<\/strong><\/p>\n<p><cite>I workflow di governance configurabili dovrebbero integrarsi con gli strumenti esistenti (Jira, ServiceNow) per abilitare una oversight tracciabile senza rallentare i team di engineering.<\/cite><\/p>\n<p>Ho implementato tre approval paths in base al risk tier:<\/p>\n<h3>Low-Risk Tier (Approvazione Team-Level, SLA: 1 giorno)<\/h3>\n<p>Esempi: Summarization agent per internal knowledge base, simple analytics chatbot.<\/p>\n<ul>\n<li>Developer crea una Jira issue: <strong>[AI-AGENT-REQUEST] Summarization bot<\/strong><\/li>\n<li>Allegato: Risk assessment self-certified (checklist: \"Dati personali?\", \"Output pubblico?\", \"Costo stimato?\")<\/li>\n<li>Team lead approva in 24 ore<\/li>\n<li>Automation: Webhook marca come \"approved\" nel registry, sincronizza con LLM gateway<\/li>\n<\/ul>\n<h3>Medium-Risk Tier (Approvazione Committee, SLA: 5-10 giorni)<\/h3>\n<p>Esempi: Agent che legge database clienti, agent che invia email, agent che modifica CRM records.<\/p>\n<ul>\n<li>Developer crea issue + allegato: threat model (STRIDE), data flow diagram, edge case handling<\/li>\n<li>Routing automatico a: Security | Compliance | Data Governance | Owner di Business<\/li>\n<li>Tutti devono approvare entro 5 giorni (escalation a CISO se stuck)<\/li>\n<li>Gate tecnico: Agent gira in sandbox per 24 ore pre-production per monitoraggio comportamento<\/li>\n<\/ul>\n<h3>High-Risk Tier (Approvazione CISO + Board, SLA: 15 giorni)<\/h3>\n<p>Esempi: Agent che approva pagamenti, agent che fa hiring decisions, agent che modifica sicurezza infrastrutture.<\/p>\n<ul>\n<li>Developer crea issue + comprehensive risk assessment (EU AI Act checklist, bias testing results, adversarial robustness evals)<\/li>\n<li>Reviewer sign-off: CISO, Compliance Officer, CTO, Data Protection Officer<\/li>\n<li>Production rollout graduale: 10% traffic \u2192 50% \u2192 100% su 2 settimane<\/li>\n<li><strong>Human approval gate permanente:<\/strong> Per ogni decisione ad alto impatto, l'agent deve chiedere approvazione umana prima di agire<\/li>\n<\/ul>\n<p>Ecco lo Jira automation che ho usato (Jira Cloud API + custom webhook):<\/p>\n<pre>trigger:\n  issue_type: \"AI Agent Request\"\n  status: \"Ready for Approval\"\n\nactions:\n  - determine_risk_tier:\n      if_contains_keywords: [\"payment\", \"hiring\", \"compliance\", \"security\"]\n        then_tier: \"high\"\n      elif_data_classification: \"confidential\"\n        then_tier: \"high\"\n      else_tier: \"medium\"\n  \n  - route_approvers:\n      low_risk:\n        assign_to: [team_lead]\n      medium_risk:\n        assign_to: [\"security@azienda.it\", \"compliance@azienda.it\", \"datagovern@azienda.it\"]\n      high_risk:\n        assign_to: [\"ciso@azienda.it\", \"dpo@azienda.it\", \"cto@azienda.it\"]\n  \n  - set_deadline:\n      low_risk: 1d\n      medium_risk: 5d\n      high_risk: 15d\n  \n  - notify:\n      all_approvers: \"Your approval is needed for AI agent {issue.summary}\"\n\ncompletion:\n  when_all_approved:\n    - call_webhook: \"https:\/\/ai-registry-api\/agents\/approve\"\n    - call_webhook: \"https:\/\/llm-gateway\/enable-agent\"\n    - transition_to: \"Production\"\n    - send_slack: \"Agent {agent_name} approved and live\"\n  \n  when_blocked:\n    - notify_issuer: \"Approval blocked by {blocking_approver}. Reason: {comment}\"\n    - escalate_to: \"CISO\" after \"10 days\"\n\n<h2>Fase 4: LLM Usage Monitoring in Tempo Reale<\/h2>\n<p><strong>Timeline: 2-3 settimane.<\/strong> <cite>LLM observability \u00e8 il monitoraggio di modelli di linguaggio di grandi dimensioni per tracciare input di prompt, output generati, utilizzo di token, interazioni API e conformit\u00e0 alle policy. AI observability \u00e8 la pratica di monitorare, registrare e controllare continuamente i sistemi di IA per assicurare trasparenza, accountability e compliance. A differenza del monitoraggio tradizionale focalizzato su metriche di performance, AI observability fornisce visibility grade-governance nel comportamento dei modelli, nell'utilizzo dei dati, nell'aderenza alle policy e nell'allineamento normativo.<\/cite><\/p>\n<p>Ho configurato un stack di monitoring a quattro livelli:<\/p>\n\n<h3>Livello 1: Gateway LLM Centralizzato (Portkey, Helicone, o custom)<\/h3>\n<p><cite>Un gateway OpenAI-compatible che enforza guardrails, RBAC, budget e logging su ogni LLM, MCP e A2A call.<\/cite><\/p>\n<p>Configurazione minimalista con Portkey (che scelgo spesso per clienti italiani con GDPR strict):<\/p>\n<pre>import Portkey from '@portkey-ai\/portkey-node';\n\nconst portkey = new Portkey({\n  apiKey: process.env.PORTKEY_API_KEY,\n  mode: 'shield',  \/\/ enforces policies\n  config: {\n    policies: [\n      {\n        id: 'no-pii-exfiltration',\n        type: 'regex',\n        pattern: '(\\d{10}|\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b)',\n        action: 'redact'\n      },\n      {\n        id: 'cost-limits',\n        type: 'cost',\n        limit_usd_per_day: 500,\n        agent_id: 'agent-001'\n      },\n      {\n        id: 'rate-limit-per-agent',\n        type: 'rate-limit',\n        requests_per_minute: 60,\n        agent_id: '*'\n      }\n    ]\n  }\n});\n\n\/\/ Log every inference\nconst response = await portkey.chatCompletion({\n  model: 'gpt-4',\n  messages: [{role: 'user', content: userMessage}]\n});\n\n\/\/ Portkey automatically logs:\n\/\/ - tokens_in, tokens_out\n\/\/ - latency\n\/\/ - cost\n\/\/ - agent_id\n\/\/ - timestamp\n\/\/ - model_version\n\/\/ - policy_violations (if any)<\/pre>\n<h3>Livello 2: Behavioral Anomaly Detection<\/h3>\n<p><cite>Behavioral monitoring: rilevate sequenze anomale di utilizzo di tool, pattern API sospetti e azioni \"allucinanti\" che deviano dai workflow attesi.<\/cite><\/p>\n<p>Ho creato una semplice baseline comportamentale in Splunk\/ELK:<\/p>\n<pre>index=llm_logs<br \/>\n| stats avg(tokens_in) as avg_tokens, stddev(tokens_in) as stddev_tokens by agent_id<br \/>\n| eval upper_bound = avg_tokens + (2 * stddev_tokens)<br \/>\n| eval lower_bound = avg_tokens - (2 * stddev_tokens)<\/p>\n<p># Poi, in real-time:<br \/>\nindex=llm_logs<br \/>\n| eval z_score = (tokens_in - avg_tokens) \/ stddev_tokens<br \/>\n| where z_score &gt; 3 OR z_score &lt; -3<br \/>\n| alert via_slack: &quot;Anomaly detected: Agent {agent_id} used {tokens_in} tokens (3\u03c3 deviation)&quot;<\/p>\n<h3>Livello 3: Cost Attribution per Agent\/Dipendente\/Reparto<\/h3>\n<p>Nel 2026, i costi di LLM sono una retta in salita. Ho implementato un cost dashboard in BI (Metabase, Tableau) che mostra:<\/p>\n<ul>\n<li><strong>Per Agent:<\/strong> Cost YTD | tokens consumed | requests<\/li>\n<li><strong>Per Reparto:<\/strong> Budget allocation vs. actual spend<\/li>\n<li><strong>Per Modello:<\/strong> GPT-4 vs. Claude 3 vs. local Llama cost comparison<\/li>\n<li><strong>Anomalie:<\/strong> Agent che ha raddoppiato spesa settimanale rispetto alla baseline<\/li>\n<\/ul>\n<p>Query SQL per il cost dashboard:<\/p>\n<pre>SELECT<br \/>\n  agent_id,<br \/>\n  owner_email,<br \/>\n  department,<br \/>\n  model_name,<br \/>\n  COUNT(*) as request_count,<br \/>\n  SUM(tokens_in) as total_tokens_in,<br \/>\n  SUM(tokens_out) as total_tokens_out,<br \/>\n  ROUND(SUM(cost_usd), 2) as total_cost,<br \/>\n  DATE_TRUNC('week', request_timestamp) as week,<br \/>\n  ROW_NUMBER() OVER (PARTITION BY agent_id ORDER BY request_timestamp DESC) as recency_rank<br \/>\nFROM llm_usage_logs<br \/>\nWHERE request_timestamp &gt; NOW() - INTERVAL '30 days'<br \/>\nGROUP BY agent_id, owner_email, department, model_name, week<br \/>\nORDER BY total_cost DESC;<\/p>\n<h3>Livello 4: Compliance Audit Trail (Immutable + Timestamped)<\/h3>\n<p><cite>Governance + audit evidence: log continuamente cosa \u00e8 stato eseguito, cosa \u00e8 stato autorizzato, cosa \u00e8 stato bloccato e quali controlli sono stati applicati \u2014 il fondamento della real-time AI governance.<\/cite><\/p>\n<p>Ho usato DuckDB + S3 per un immutable audit log:<\/p>\n<pre>-- Create immutable append-only table<br \/>\nCREATE TABLE audit_log (<br \/>\n    log_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),<br \/>\n    timestamp TIMESTAMP NOT NULL DEFAULT NOW(),<br \/>\n    agent_id VARCHAR(255),<br \/>\n    user_id VARCHAR(255),<br \/>\n    action VARCHAR(100),  -- e.g., 'tool_invocation', 'data_access', 'policy_violation'<br \/>\n    tool_name VARCHAR(255),<br \/>\n    api_endpoint VARCHAR(2048),<br \/>\n    request_tokens INT,<br \/>\n    response_tokens INT,<br \/>\n    cost_usd DECIMAL(10,4),<br \/>\n    policy_checks JSONB,  -- {\"pii_scan\": {\"status\": \"passed\"}, \"rate_limit\": {\"status\": \"passed\"}}<br \/>\n    allowed BOOLEAN,<br \/>\n    denial_reason VARCHAR(500),<br \/>\n    metadata JSONB  -- {\"model_version\": \"...\", \"system_prompt_hash\": \"...\"}<br \/>\n);<\/p>\n<p>-- S3 archival every 1 hour (write-once)<br \/>\nCOPY audit_log TO 's3:\/\/audit-logs-immutable\/llm\/2024\/10\/04\/'<br \/>\nWHERE timestamp &gt; NOW() - INTERVAL '1 hour'<br \/>\nWITH (FORMAT 'parquet', OVERWRITE false);<\/p>\n<p>Questo vi d\u00e0 un file audit che il vostro auditor pu\u00f2 verficare: \"L'agent X ha invocato lo strumento Y 47 volte il 3 ottobre 2024, e 46 erano autorizzati, 1 \u00e8 stato bloccato da policy\".<\/p>\n<h2>Mettere Insieme: L'Orchestrazione Completa<\/h2>\n<p>Ho disegnato il flusso end-to-end per un caso reale.<\/p>\n<p><strong>Scenario:<\/strong> Il reparto Procurement vuole deployare un \"Vendor Risk Scorer\" agent che:<br \/>\n- Legge il database dei fornitori<br \/>\n- Chiede a Google Gemini di analizzare il rischio<br \/>\n- Invia un'email al Category Manager con le raccomandazioni<\/p>\n<p><strong>Day 1: Request<\/strong><\/p>\n<ol>\n<li>Developer crea Jira issue: [AI-AGENT-REQ] Vendor Risk Scorer<\/li>\n<li>Checklist auto-filled: \"Database access? Yes \u2192 tier medium-risk\" | \"Email sender? Yes \u2192 tier high-risk\"<\/li>\n<li>Sistema classifica come HIGH-RISK (perch\u00e9 accede a dati confidenti + invia email)<\/li>\n<li>Router automatico assegna a: CISO, DPO, CTO, Security Lead<\/li>\n<\/ol>\n<p><strong>Days 2-10: Approval Phase<\/strong><\/p>\n<ol>\n<li>CISO: Approva con commento \"OK pero aggiungi human sign-off su recommendation &gt; 8\/10 risk score\"<\/li>\n<li>DPO: Approva dato GDPR impact assessment allegato<\/li>\n<li>CTO: Approva architecture review (MCP server sandboxed, API rate-limited)<\/li>\n<li>Security: Approva security questionnaire (encryption, auth, data retention)<\/li>\n<\/ol>\n<p><strong>Day 11: Staging Test (24 ore)<\/strong><\/p>\n<ol>\n<li>Agent deployato in staging con 1% production data<\/li>\n<li>Monitoring cattura: 450 token\/inference, 0 policy violations, $0.12\/inference cost<\/li>\n<li>Behavioral baseline stabilito: normal = 400-500 tokens, 0-2 policy violations\/day<\/li>\n<li>If anything off-nominal \u2192 immediate kill switch<\/li>\n<\/ol>\n<p><strong>Day 12: Production Rollout<\/strong><\/p>\n<ol>\n<li>Agent live con human approval gate: automation pu\u00f2 raccomandare, ma Category Manager DEVE cliccare \"approve\" prima che l'email venga inviata<\/li>\n<li>Gateway LLM applica: rate limit 60 req\/hour, cost limit $500\/day, PII redaction<\/li>\n<li>Ogni inference logged in audit trail immutabile<\/li>\n<\/ol>\n<p><strong>Day 30: First Review<\/strong><\/p>\n<ol>\n<li>Dashboard mostra: 2,350 inferences, 47 recommendations issued, 3 policy violations (all redacted PII attempts, properly blocked)<\/li>\n<li>Cost: $282 (all'interno di budget)<\/li>\n<li>Behavioral: 2 anomalie rilevate (max token spike: 1,200 vs. 500-token baseline), investigated \u2192 false positive, no action needed<\/li>\n<\/ol>\n<h2>FAQ<\/h2>\n<h3>Come distinguo tra Shadow AI \"cattivo\" (data exfiltration) e Shadow AI \"innocente\" (il marketing testa ChatGPT)?<\/h3>\n<p>Con la severity classification. Ho implementato tre categorie di risposta:<br \/>\n<strong>Green (Innocente):<\/strong> Accesso a dati public-only, ad es. il team usa ChatGPT per brainstorming copy. Action: educate the user, add to approved tools list, monitor.<br \/>\n<strong>Yellow (Attenzione):<\/strong> Accesso a dati internal ma non confidential, e.g., uno sviluppatore tira il source code in Claude per debugging. Action: require approval, add guardrails, not a termination offense.<br \/>\n<strong>Red (Critico):<\/strong> PII\/trade secrets\/regulatory data in AI tools. Action: immediate containment, incident response, compliance notification if GDPR\/SOX requires it. Io ho visto 2 Red cases in 18 mesi consultando 30+ aziende.<\/p>\n<h3>Il workflow approval di 15 giorni per high-risk agent non blocca l'innovazione?<\/h3>\n<p>Apparentemente s\u00ec, ma non \u00e8 cos\u00ec. Nel 2026, il vostro tempo critico \u00e8 in quella prima settimana quando il developer scrive il risk assessment e il threat model \u2014 non nella revisione legale. Ho visto team fare parallelize reviews, quindi invece di \"CISO approva, poi DPO approva\", facessero simultaneamente. Con notification charing e escalation SLA, ho ridotto il tempo medio da 15 a 8 giorni per high-risk, mantenendo rigor. Per low-risk, \u00e8 1 giorno, esattamente come prima.<\/p>\n<h3>Quanto costa implementare AI governance dal zero?<\/h3>\n<p>Dipende dalla scala:<br \/>\n<strong>PMI (50-500 dipendenti):<\/strong> DIY registry + open-source LLM gateway (Portkey) + Splunk\/ELK existing: $15-40K in setup costs + $300-800\/mese in ongoing.<br \/>\n<strong>Mid-market (500-5K dipendenti):<\/strong> Dedicated governance platform (OneTrust, Kosmoy) + custom integrations: $100-300K setup + $2-5K\/mese.<br \/>\n<strong>Enterprise (5K+):<\/strong> Full-stack (Kosmoy + Azure AI Foundry + OneTrust + custom threat modeling): $500K-2M+ setup + $10-50K\/mese.<br \/>\nMa il ROI \u00e8 misurabile: ho visto clienti evitare data breach da $2-10M con una governance investment di $200-500K. \u00c8 una matrice di rischio classica.<\/p>\n<h3>Se un agent viene compromesso (prompt injection, jailbreak), quanto tempo ci vuole a rilevarlo e isolarlo?<\/h3>\n<p><cite>1. Detect the anomaly through continuous monitoring and behavioral alerting. 2. Contain the agent by suspending its permissions or isolating it from connected systems. 3. Investigate the root cause, reviewing audit logs and decision traces. 4. Remediate by patching the policy gap, updating the agent registry, and revalidating controls.<\/cite> Nella mia implementazione: detection in 5-30 minuti (anomaly threshold breach), containment in &lt; 2 minuti (webhook kill switch automatico), investigation entro 4 ore, remediation entro 24 ore. Il test del worst case che ho fatto: 1 agent completamente compromesso. Behavioral monitoring lo ha flaggato dopo che aveva fatto 3 unauthorized API calls. Tutto bloccato automaticamente.<\/p>\n<h3>Quale governance framework devo scegliere: NIST AI RMF, EU AI Act, o ISO 42001?<\/h3>\n<p><cite>NIST AI RMF opera attraverso quattro pillar core: Govern (stabilendo la vostra cultura organizzativa e oversight), Map (identificando come LLM interagiscono con i vostri specifici data flows), Measure (usando metriche per tracciare performance e bias del modello), Manage (implementando controlli tecnici per mitigare rischi identificati).<\/cite> Se siete in Italia o Europa: partite da EU AI Act (mandatory from Aug 2026). Poi aggiungete NIST RMF come implementazione tecnica. ISO 42001 \u00e8 la \"lingua\" di governance che il vostro auditor parler\u00e0. Non sono mutualmente esclusivi \u2014 usate tutti e tre in layers.<\/p>\n<h2>Conclusione: Velocit\u00e0 con Guardrails<\/h2>\n<p>Nel 2026, la competizione non \u00e8 tra \"governance\" e \"velocit\u00e0\". \u00c8 tra \"chi governa la propria IA velocemente\" e \"chi la scopre in un audit post-compromissione\". Ho visto il primo scenario raramente. Ho visto il secondo 3 volte in 18 mesi, e ogni volta ha costato 10 volte di pi\u00f9 della governance preventiva.<\/p>\n<p><strong>La procedura che vi ho mostrato:<\/strong><\/p>\n<ol>\n<li>Map shadow AI in 2-3 settimane<\/li>\n<li>Implementare central registry in 3-4 settimane<\/li>\n<li>Setup approval workflow in 2-3 settimane (risk-tiered, non one-size-fits-all)<\/li>\n<li>Deploy LLM monitoring stack in 2-3 settimane<\/li>\n<\/ol>\n<p>Totale: 10-12 settimane dal zero al full governance. Dopo, la velocit\u00e0 riprende \u2014 il vostro team deployer\u00e0 low-risk AI in 24 ore, high-risk in 8-10 giorni. Non \u00e8 un rallentamento; \u00e8 <em>control without bottleneck<\/em>.<\/p>\n<p><cite>Singapore's Model AI Governance Framework for Agentic AI, lanciato a gennaio 2026 come il primo national governance framework specificamente progettato per sistemi agentic, fornisce linee guida attraverso quattro dimensioni \u2014 risk bounding, human accountability, technical controls, e end-user responsibility \u2014 e stabilisce che le organizzazioni rimangono legalmente responsabili per i comportamenti dei loro agent indipendentemente dalla compliance volontaria.<\/cite> Non \u00e8 opzionale. Fatelo adesso, mentre avete ancora il controllo della narrazione e della technical architecture. Poi, quando il vostro CEO chiede \"dov'\u00e8 il nostro AI Agent Registry?\", potete rispondere con un numero: 3,847 agent mappati, 342 approved e in production, 0 critical incidents in 6 mesi.<\/p>\n<p>Se avete domande o volete discussioni su implementazione specifica per il vostro contesto, scrivetemi nei commenti qui sotto. Ho implementato questa procedura da scratch 5 volte negli ultimi 18 mesi, e ogni volta ho imparato qualcosa.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AI Governance vs Shadow AI: La mia procedura step-by-step per implementare AI Agent Registry centralizzato, Tool Approval Workflow risk-based, e LLM Usage Monitoring 2026. Bilanciare velocit\u00e0 di innovazione e controllo compliance.<\/p>\n","protected":false},"author":1,"featured_media":5282,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"AI Governance 2026: Agent Registry + Approval Workflow | Dario Iannascoli","_seopress_titles_desc":"Implementa AI Agent Registry, Tool Approval Workflow e LLM Monitoring per governare AI agents senza rallentare innovazione. Procedura step-by-step con codice e case studies.","_seopress_robots_index":"","footnotes":""},"categories":[128],"tags":[1231,382,603,471,1363,1134],"class_list":["post-5281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-a-i","tag-agent-registry","tag-ai-governance","tag-compliance","tag-enterprise-security","tag-llm-monitoring","tag-shadow-ai"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/5281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/comments?post=5281"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/5281\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/5282"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=5281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=5281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=5281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}