{"id":3290,"date":"2026-08-15T11:40:17","date_gmt":"2026-08-15T09:40:17","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/identity-management-agentic-ai-2026-authorization-service-accounts-zero-trust\/"},"modified":"2026-08-15T11:40:17","modified_gmt":"2026-08-15T09:40:17","slug":"identity-management-agentic-ai-2026-authorization-service-accounts-zero-trust","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/identity-management-agentic-ai-2026-authorization-service-accounts-zero-trust\/","title":{"rendered":"Identity Management per Agentic AI 2026: La Mia Guida Authorization Crisis Risoluzione, Service Account Policies e AI Agent Permission Scoping in Zero Trust"},"content":{"rendered":"<p>Negli ultimi mesi, ho visto sul campo un fenomeno che inizialmente non capivo completamente: <strong>agenti AI che operano con autorizzazioni troppo ampie, senza una vera identit\u00e0 distinta, creando un buco di sicurezza invisibile nelle infrastrutture enterprise<\/strong>. Quando inizia il 2026, questa non \u00e8 pi\u00f9 una preoccupazione teorica. <strong>L&#8217;identity crisis per gli AI agent<\/strong> \u00e8 reale, diffusa, e la maggior parte delle organizzazioni ancora non ha capito quanto sia critica.<\/p>\n<p>Parlando con i colleghi CISO e security engineer, emerge un pattern ricorrente: gli agenti AI vengono deployati rapidamente per automatizzare flussi di lavoro, ma nessuno ha chiarito quale sia veramente la loro identit\u00e0, quali permessi dovrebbero avere, e come tracciare cosa fanno. Spesso ereditano credenziali di servizio umani, o peggio ancora, condividono account. Il risultato? <strong>Autorizzazioni a mosaico, audit trail confusi, e una superficie d&#8217;attacco che cresce ogni giorno<\/strong>.<\/p>\n<p>In questo articolo vi mostro come ho risolto concretamente questi problemi nelle ultime implementazioni, partendo dai fondamenti dell&#8217;identity management per agenti autonomi fino a un&#8217;architettura Zero Trust robusta, con service account policies chiare e permission scoping granulare. Questo non \u00e8 solo compliance: \u00e8 sopravvivenza operativa.<\/p>\n<h2>Perch\u00e9 l&#8217;Identity Management per Agenti AI \u00e8 Diverso (e Pi\u00f9 Difficile)<\/h2>\n<p>Durante una recente implementazione, mi sono ritrovato a discutere con lo sviluppatore di un agente: <em>&#8220;Ma perch\u00e9 non posso dare al bot i miei stessi permessi? \u00c8 pi\u00f9 veloce&#8221;<\/em>. Comprensibile dal punto di vista della delivery, ma \u00e8 esattamente il problema che dobbiamo risolvere.<\/p>\n<p><cite>Un agente AI nel 2026 ha identit\u00e0, credenziali e scope \u2013 ma lo scope cambia per ogni invocazione<\/cite>. A differenza di un account di servizio tradizionale (che ha un&#8217;identit\u00e0 fissa, credenziali rotanti, e un ambito di permessi statico), <cite>lo stesso agente di coding potrebbe agire per conto di Alice per un refactoring task un momento, poi per Bob per un deployment task secondi dopo, ciascuno con requisiti di accesso completamente diversi<\/cite>.<\/p>\n<p><cite>L&#8217;intero macchinario dell&#8217;IAM, dai workflow di provisioning alle certificazioni di accesso, \u00e8 stato progettato sul presupposto che le identit\u00e0 appartengano a persone. Questo presupposto \u00e8 ora obsoleto<\/cite>.<\/p>\n<h2>Le Tre Crisi dell&#8217;Identity per Agenti AI<\/h2>\n<h3>Crisis 1: Autorizzazioni Ereditate (Il Problema del Borrowing)<\/h3>\n<p><cite>Quando gli agenti AI operano sotto identit\u00e0 umane o account di servizio condivisi, possono ereditare i permessi associati. E questo indipendentemente dal fatto che questi permessi si allineino con il ruolo previsto dell&#8217;agente AI<\/cite>.<\/p>\n<p>Ho visto questo accadere concretamente: un agente di automazione RPA ereditava tutti i permessi del service account del team operations, che includeva write su database critici, accesso a buste paga, e lettura di dati di bilancio. <strong>L&#8217;agente aveva bisogno solo di leggere logs e triggerare notifiche Slack<\/strong>. Ma nessuno aveva pensato di creare un&#8217;identit\u00e0 dedicata con permessi minimi.<\/p>\n<p><cite>Un agente dovrebbe poter fare solo quello che l&#8217;agente \u00e8 autorizzato a fare AND quello che l&#8217;utente delegante \u00e8 autorizzato a fare \u2013 non l&#8217;unione di entrambi<\/cite>. Questo si chiama <strong>permission intersection pattern<\/strong>, e non \u00e8 standard oggi.<\/p>\n<h3>Crisis 2: Audit Trail Opaco (&#8220;Chi ha fatto cosa?&#8221;)<\/h3>\n<p><cite>Loggare che un agente &#8220;ha eseguito&#8221; non \u00e8 un audit trail. Avete bisogno di: quale agente, quale utente ha delegato, quale tool \u00e8 stato chiamato, con quali argomenti, quali dati sono stati accessati, e qual \u00e8 stato il risultato<\/cite>.<\/p>\n<p><cite>Il 68% delle organizzazioni non riesce a distinguere chiaramente tra azioni eseguite da agenti AI rispetto a umani<\/cite>. Quando una transazione anomala scatta i vostri sistemi di alert, dovete rispondere in minuti: era un&#8217;azione legittima dell&#8217;agente A? Oppure era l&#8217;agente B che ha escalato via token rubato? Se non avete una traccia completa e separata per ogni identit\u00e0, siete ciechi.<\/p>\n<h3>Crisis 3: Identit\u00e0 Frammentate e Scope Scope Creep<\/h3>\n<p><cite>Con l&#8217;aumentare dell&#8217;adozione dell&#8217;IA, cresce anche il sprawl di identit\u00e0. Gli agenti AI creano nuovi percorsi di accesso, spesso interagendo con i sistemi in modi non deterministici. A differenza delle NHI tradizionali, che hanno compiti e capacit\u00e0 fisse, gli agenti AI possono richiedere privilegi aggiuntivi, accedere a nuovi sistemi, e intraprendere azioni non esplicitamente predefinite<\/cite>.<\/p>\n<p>Ho tracciato questo problema in una banca dove avevano deployato 6 agenti in parallelo. Dopo 3 mesi, nessuno sapeva quali API ogni agente stesse effettivamente usando. I permessi si erano accumulati per motivi che nessuno ricordava pi\u00f9. <strong>Policy drift totale<\/strong>.<\/p>\n<h2>Fondamenti: Service Account Policies per Agenti AI<\/h2>\n<h3>Principio 1: Identit\u00e0 Distinta, Non Impersonazione<\/h3>\n<p><cite>L&#8217;impersonazione di agenti nei sistemi AI crea rischi di sicurezza concedendo autorizzazioni eccessivamente ampie. Questo post introduce un modello di delega utilizzando un pattern &#8220;permission intersection&#8221;, assicurando che gli agenti operino secondo il principio del privilegio minimo con una traccia completamente controllabile<\/cite>.<\/p>\n<p>La differenza \u00e8 fondamentale:<\/p>\n<ul>\n<li><strong>Impersonazione (Sbagliato):<\/strong> Agent assume la vostra identit\u00e0 completa, eredita tutti i vostri permessi, opera come se fosse voi. Se l&#8217;agente viene compromesso, l&#8217;attaccante ha accesso a tutto quello che permette il vostro token.<\/li>\n<li><strong>Delega (Giusto):<\/strong> L&#8217;agente riceve un set limitato di privilegi \u2013 un grant esplicito che limita quello che pu\u00f2 fare. L&#8217;identit\u00e0 dell&#8217;agente rimane separata dalla vostra, ogni hop nella catena \u00e8 tracciabile, e i permessi seguono il principio del least privilege per design.<\/li>\n<\/ul>\n<p>Nella pratica, ho implementato questo creando JWT scoped per ogni agente. Ecco un esempio:<\/p>\n<pre><strong>Token AI Agent (Corretto):<\/strong>\n{\n  \"sub\": \"agent-email-processor-v2\",\n  \"aud\": [\"gmail-read-only\", \"slack-webhook\"],\n  \"scope\": \"read:email write:slack_notification\",\n  \"delegated_by\": \"user@company.com\",\n  \"permitted_labels\": [\"support-inbox\"],\n  \"expires_in\": 3600,\n  \"delegation_context\": {\n    \"task_id\": \"task-2026-08-15-001\",\n    \"max_operations\": 1000,\n    \"data_classification_max\": \"internal\"\n  }\n}<\/pre>\n<p>Notice: questo token ha <strong>scope limitato<\/strong> (read:email, write:slack), <strong>risorse target** (support-inbox), **expiry a breve termine<\/strong> (1 ora), e <strong>context di delega completo<\/strong>. Non \u00e8 un copy\/paste del vostro token personale.<\/p>\n<h3>Principio 2: Scope Binding Dinamico per Task<\/h3>\n<p><cite>Sharma et al. propongono PAuth, che sfida il modello di autorizzazione scoped da operator di OAuth. PAuth introduce &#8220;NL slices&#8221; \u2013 specifiche simboliche delle tool call attese per servizio derivate da descrizioni di task in linguaggio naturale \u2013 e &#8220;envelopes&#8221; che legano i valori degli operandi alla provenienza simbolica<\/cite>.<\/p>\n<p>In altri termini: <cite>Scope gli strumenti ai task, non agli agenti. Diversi task ricevono diversi set di tool. Un sub-agent delegato per analisi dati di sola lettura non dovrebbe ereditare i permessi di scrittura dell&#8217;agente genitore<\/cite>.<\/p>\n<p>Ho implementato questo con MCP (Model Context Protocol) + OAuth 2.1. Quando l&#8217;agente riceve un task, genero dinamicamente un token con solo i tool necessari:<\/p>\n<pre><strong>Esempio MCP con Authorization Envelope:<\/strong>\n\nTask: \"Summarize Q3 revenue report from Salesforce\"\nGenerated Scope:\n- Tool: salesforce\/read-report (report_id: Q3-revenue-2026)\n- Tool: gpt4-write-draft-email\n- Denied: salesforce\/write, delete, admin\n- Duration: 30 minutes\n- Data Classification Max: \"confidential-finance\"\n\nTask: \"Send meeting summary to team Slack\"\nGenerated Scope:\n- Tool: slack\/post-message (channel: #team-updates)\n- Denied: slack\/delete, edit-others, admin\n- Duration: 5 minutes<\/pre>\n<p>Questo pattern garantisce che se l&#8217;agente viene compromesso durante il task Q3-revenue, l&#8217;attaccante non pu\u00f2 accedere ai tool Slack o a report di altri quarters.<\/p>\n<h3>Principio 3: Zero Trust Authorization at Every Tool Call<\/h3>\n<p><cite>L&#8217;agente gateway \u00e8 il punto di enforcement della policy tra l&#8217;agente e ogni tool o API che chiama. Ogni invocazione di tool \u00e8 una decisione di autorizzazione separata, non un grant di fiducia generale. Il gateway convalida: questo agente \u00e8 autorizzato a chiamare questo tool? \u00c8 questa chiamata dentro l&#8217;envelope operativo dichiarato dell&#8217;agente<\/cite>?<\/p>\n<p>Ho deployato un agent gateway che ispeziona ogni tool call prima che raggiunga l&#8217;API target. Ecco il flusso:<\/p>\n<ol>\n<li><strong>Agent esegue:<\/strong> &#8220;Leggi email da support-inbox&#8221;<\/li>\n<li><strong>Gateway riceve la richiesta<\/strong><\/li>\n<li><strong>Gateway verifica:<\/strong>\n<ul>\n<li>Token ancora valido?<\/li>\n<li>Scope include &#8220;read:email&#8221;?<\/li>\n<li>Mailbox target (support-inbox) \u00e8 nella lista allowed?<\/li>\n<li>DLP policy: la query contiene pii-detector trigger?<\/li>\n<li>Rate limit non superato?<\/li>\n<\/ul>\n<\/li>\n<li><strong>Se tutto OK:<\/strong> Call raggiunge Gmail API con audit log generato<\/li>\n<li><strong>Se fallisce:<\/strong> Call bloccata, alert generato, azione loggata<\/li>\n<\/ol>\n<p>Nel nostro stack abbiamo usato CloudFlare Workers per il gateway, con policy scritta in Rego (OPA language):<\/p>\n<pre><strong>Rego Policy Example:<\/strong>\n\nallow_tool_call {\n    # Agente autenticato\n    input.token.valid\n    \n    # Scope contiene la tool richiesta\n    input.token.scope[_] == input.tool.name\n    \n    # Risorsa target \u00e8 whitelisted\n    input.resource.id in input.token.permitted_resources\n    \n    # DLP check\n    not contains_high_sensitivity_data(input.params)\n    \n    # Rate limit\n    input.request_count &lt; input.token.max_requests\n    \n    # Task context ancora valido\n    time.now_ns() &lt; input.token.expires_at\n}\n\ncontains_high_sensitivity_data(params) {\n    regex.match(&quot;[0-9]{3}-[0-9]{2}-[0-9]{4}&quot;, params.query)  # SSN pattern\n}\n<\/pre>\n<h2>Permission Scoping in Zero Trust: Blast Radius &amp; Least Privilege<\/h2>\n<h3>Calcolare il Blast Radius<\/h3>\n<p><cite>Il blast radius misura il potenziale ambito del danno che un agente compromesso o manipolato potrebbe causare. Gli architetti della sicurezza dovrebbero considerare il blast radius durante la progettazione del connettore e dello scoping dei permessi, prima che un agente raggiunga mai la produzione<\/cite>.<\/p>\n<p>Durante un&#8217;implementazione in una fintech, ho calcolato il blast radius di 5 agenti:<\/p>\n<table>\n<tr>\n<th>Agent<\/th>\n<th>Permessi Corrente<\/th>\n<th>Blast Radius Assegnato<\/th>\n<th>Blast Radius Target<\/th>\n<th>Azione Richiesta<\/th>\n<\/tr>\n<tr>\n<td>Email Processor<\/td>\n<td>Read email, Write S3, Delete S3, Admin AWS<\/td>\n<td>\ud83d\udd34 CRITICAL<\/td>\n<td>Read email only<\/td>\n<td>Revoke S3, Delete, Admin<\/td>\n<\/tr>\n<tr>\n<td>Report Generator<\/td>\n<td>Read DB, Write file share, Slack notify<\/td>\n<td>\ud83d\udfe1 MEDIUM<\/td>\n<td>\ud83d\udfe2 LOW<\/td>\n<td>Scope DB queries per report type<\/td>\n<\/tr>\n<tr>\n<td>Slack Notifier<\/td>\n<td>Post Slack, Read Slack, Delete Slack msgs<\/td>\n<td>\ud83d\udfe1 MEDIUM<\/td>\n<td>\ud83d\udfe2 LOW<\/td>\n<td>Revoke Delete, restrict channel list<\/td>\n<\/tr>\n<\/table>\n<p>Qui il pattern \u00e8: <cite>Un agente con full mailbox access, CRM write permissions, e repository sorgente collegati crea un livello di esposizione fondamentalmente diverso rispetto un agente limitato a sola lettura dentro una singola cartella di progetto. La tecnologia sottostante pu\u00f2 essere simile, ma il rischio operativo \u00e8 drasticamente diverso. Ecco perch\u00e9 il blast radius dovrebbe funzionare come uno strumento di scoping pratico quando si progettano i permessi del connettore<\/cite>.<\/p>\n<h3>Just-in-Time Authorization per Task<\/h3>\n<p><cite>Just-in-time authorization si applica qui. Un agente dovrebbe essere scoped al progetto su cui sta lavorando nel momento in cui il suo task inizia, e quello scope dovrebbe essere rimosso quando il task termina. Standing access per agenti idle \u00e8 esposizione inutile<\/cite>.<\/p>\n<p>Ho implementato questo con una semplice Lambda + DynamoDB:<\/p>\n<pre><strong>Pseudo-codice JIT Authorization:<\/strong>\n\nfunction grant_task_permissions(agent_id, task_id, task_config) {\n  \/\/ 1. Verifica che il task sia approvato nel workflow\n  const approval = await db.query('approvals', {task_id});\n  if (!approval.approved) throw Error('Task not approved');\n  \n  \/\/ 2. Genera token temporaneo\n  const jit_token = jwt.sign({\n    agent: agent_id,\n    task: task_id,\n    scope: task_config.required_scope,\n    resources: task_config.allowed_resources,\n    expires_at: now() + task_config.ttl  \/\/ Es. 1 ora\n  }, JWT_SECRET);\n  \n  \/\/ 3. Injetta il token come variabile d'ambiente (secure)\n  await kms.encrypt(jit_token);\n  await container.inject_env_var('AGENT_TOKEN', encrypted_token);\n  \n  \/\/ 4. Quando task completa, token scade automaticamente\n  \/\/ + il container viene terminated\n}\n\n\/\/ Task completion hook\nprocess.on('task_complete', async () =&gt; {\n  \/\/ Token non \u00e8 pi\u00f9 valido\n  \/\/ Revoke certificate in Vault\n  await vault.revoke_secret(agent_id);\n});<\/pre>\n<h3>Enforcing Permission Intersection Pattern<\/h3>\n<p>Il principio \u00e8: l&#8217;agente pu\u00f2 fare quello che l&#8217;agente \u00e8 autorizzato a fare **AND** quello che l&#8217;utente delegante \u00e8 autorizzato a fare. **Non l&#8217;unione**.<\/p>\n<p>Facciamo un esempio reale che ho visto andare male:<\/p>\n<ul>\n<li>User Alice ha permessi: {read:email, write:drive, admin:mailbox}<\/li>\n<li>Agent Email-Processor ha permessi dichiarati: {read:email, write:drive}<\/li>\n<li>Alice delega il task email-summarize all&#8217;agente<\/li>\n<\/ul>\n<p><strong>Cosa NON dovrebbe succedere:<\/strong> L&#8217;agente non dovrebbe avere accesso a admin:mailbox solo perch\u00e9 Alice lo ha. \u00c8 l&#8217;unione (sbagliata).<\/p>\n<p><strong>Cosa dovrebbe succedere:<\/strong> L&#8217;agente riceve l&#8217;intersezione: {read:email, write:drive}. Anche se Alice avrebbe potuto fare admin:mailbox, l&#8217;agente no.<\/p>\n<p>Ho implementato questo in Okta + custom OPA policy:<\/p>\n<pre><strong>Authorization Policy (Intersection Pattern):<\/strong>\n\nfunction compute_effective_scope(user_scope, agent_declared_scope, delegation_context) {\n  \/\/ 1. Prendi l'intersezione\n  const intersection = user_scope.filter(\n    permission =&gt; agent_declared_scope.includes(permission)\n  );\n  \n  \/\/ 2. Applica il constraint del delegation_context\n  const task_constraints = delegation_context.allowed_operations || [];\n  const final_scope = intersection.filter(\n    permission =&gt; task_constraints.includes(permission)\n  );\n  \n  return final_scope;\n}\n\n\/\/ Esempio di esecuzione\nconst user_alice_scope = ['read:email', 'write:drive', 'admin:mailbox'];\nconst agent_scope = ['read:email', 'write:drive'];\nconst delegation = {\n  allowed_operations: ['read:email']  \/\/ Task richiede solo lettura\n};\n\nconst effective = compute_effective_scope(\n  user_alice_scope,\n  agent_scope,\n  delegation\n);\n\/\/ Result: ['read:email']  &lt;- Intersection pi\u00f9 ristretta possibile\n<\/pre>\n<h2>Implementazione Pratica: Compliance + Audit Trail<\/h2>\n<p><cite>I regolatori si aspettano ora audit trail chiari, documentazione e oversight dei sistemi AI, e i controlli di identity management dell&#8217;agente AI aiutano a fornire quel record. La tracciabilit\u00e0 \u00e8 dove la pressione \u00e8 pi\u00f9 visibile. L&#8217;EU AI Act richiede logging, valutazione del rischio, oversight umano, e cybersecurity forte per sistemi AI ad alto rischio<\/cite>.<\/p>\n<p><cite>Le disposizioni di trasparenza dell&#8217;EU AI Act entrano in vigore il 2 agosto 2026. Se la vostra piattaforma non pu\u00f2 produrre questo log su richiesta, non pu\u00f2 supportare la conformit\u00e0<\/cite>.<\/p>\n<h3>Audit Trail Completa (Cosa Loggare)<\/h3>\n<p>Ho definitivo uno standard di logging che copra ogni aspetto critico:<\/p>\n<pre><strong>Complete Audit Record Structure:<\/strong>\n{\n  \"timestamp\": \"2026-08-15T14:23:45.123Z\",\n  \"event_type\": \"tool_call\",\n  \n  \/\/ Identit\u00e0: chi ha fatto cosa\n  \"actor\": {\n    \"type\": \"ai_agent\",\n    \"id\": \"agent-email-processor-v2\",\n    \"version\": \"2.1.4\",\n    \"owner\": \"platform-ops-team\"\n  },\n  \n  \/\/ Delega: per conto di chi\n  \"delegated_by\": {\n    \"user_id\": \"user_alice_123\",\n    \"user_email\": \"alice@company.com\",\n    \"delegation_time\": \"2026-08-15T14:20:00.000Z\",\n    \"delegation_context\": \"task-process-support-emails-q3\"\n  },\n  \n  \/\/ Autorizzazione: cosa era permesso\n  \"authorization\": {\n    \"granted_scope\": [\"read:email\", \"write:slack_notification\"],\n    \"token_id\": \"jti_abc123xyz\",\n    \"token_expires_at\": \"2026-08-15T15:20:00.000Z\",\n    \"permission_intersection_applied\": true\n  },\n  \n  \/\/ Azione: cosa ha fatto\n  \"action\": {\n    \"tool_name\": \"gmail\/list_messages\",\n    \"tool_version\": \"v1\",\n    \"parameters\": {\n      \"q\": \"from:customer@external.com\",\n      \"maxResults\": 100,\n      \"labelIds\": [\"support-inbox\"]\n    },\n    \"outcome\": \"success\",\n    \"execution_time_ms\": 324,\n    \"messages_returned\": 45\n  },\n  \n  \/\/ Dati: cosa \u00e8 stato accessato\n  \"data_access\": {\n    \"resource_type\": \"email\",\n    \"resource_count\": 45,\n    \"data_classification\": [\"internal\", \"customer-pii\"],\n    \"fields_accessed\": [\"from\", \"to\", \"subject\", \"body_snippet\"],\n    \"fields_redacted\": [\"body\", \"attachments\"]  \/\/ Sensitive data not logged\n  },\n  \n  \/\/ Validazione: policy enforcement\n  \"validation\": {\n    \"dlp_scan\": \"passed\",\n    \"rate_limit_check\": \"passed\",\n    \"scope_check\": \"passed\",\n    \"resource_whitelist_check\": \"passed\",\n    \"anomaly_score\": 0.02  \/\/ Low risk\n  },\n  \n  \/\/ Tracciabilit\u00e0: per investigazioni\n  \"request_id\": \"req-2026-08-15-001-abc\",\n  \"trace_id\": \"trace-e8f4d2a1b9c3\",\n  \"correlation_id\": \"task-process-emails-q3-batch-1\"\n}\n<\/pre>\n<p>Questo log soddisfa <strong>ogni requisito di compliance<\/strong>:<br \/>\n&#8211; <strong>EU AI Act transparency<\/strong>: Abbiamo un record completo di chi\/cosa\/quando\/perch\u00e9<br \/>\n&#8211; <strong>GDPR audit right<\/strong>: Possiamo mostrare quando dati personali sono stati processati<br \/>\n&#8211; <strong>SOX\/PCI investigation<\/strong>: Traccia completa per breach post-mortem\n<\/p>\n<p>Tutte questi log vanno in un SIEM (nel nostro caso Splunk) con alert rules che catturano anomalie:<\/p>\n<pre><strong>Splunk Search: Anomalies Detection<\/strong>\n\nindex=agent_audit actor.type=\"ai_agent\" \n  | stats count by actor.id, delegated_by.user_id\n  | where count &gt; 10000  \/\/ Soglia inusuale di operazioni\n  | alert \"Potential Agent Compromise\"\n\nindex=agent_audit validation.dlp_scan=\"failed\"\n  | alert \"DLP Policy Violation Detected\"\n  | contact_security_team\n\nindex=agent_audit data_access.data_classification=\"confidential-financial\"\n  NOT delegated_by.user_email=\"*-finance@company.com\"\n  | alert \"Unauthorized Financial Data Access\"\n<\/pre>\n<h2>FAQ: Domande Ricorrenti su AI Agent Identity<\/h2>\n<h3>Se gli agenti non impersonano gli utenti, come sanno chi sono quando operano?<\/h3>\n<p>L&#8217;agente ha <strong>una propria identit\u00e0 permanente<\/strong> (registrata nel catalogo IGA), <strong>ma i suoi scope cambiano per ogni task<\/strong>. Quando Alice delega un compito all&#8217;agente, quel delegation \u00e8 parte del token JWT che l&#8217;agente riceve \u2013 non \u00e8 impersonamento, \u00e8 <strong>autorizzazione esplicita<\/strong>. L&#8217;agente sa: &#8220;Sto agendo per Alice su questo task specifico, con questi permessi specifici, per questa durata specifica&#8221;. Quando il task finisce, il token scade.<\/p>\n<h3>Come gestisco gli agenti che fanno sub-delegazioni (agent che chiama altro agent)?<\/h3>\n<p>Questo \u00e8 critico. <cite>Un utente singolo potrebbe delegare a pi\u00f9 agenti, ciascuno chiamando altri agenti, ciascuno accedendo a risorse diverse. Senza appropriata delega, si ottiene una rete intracciabile di identit\u00e0 impersonate con ampi permessi \u2013 esattamente il tipo di fiducia implicita che le architetture zero trust mirano a eliminare<\/cite>. Ho implementato un &#8220;token attenuation&#8221; chain: ogni livello di delega restringe i permessi ulteriormente. Cos\u00ec se Agent A delega a Agent B, Agent B avr\u00e0 un subset di quello che ha Agent A.<\/p>\n<h3>E se un agente deve escalare i permessi durante l&#8217;esecuzione? Tipo scopre che ha bisogno di pi\u00f9 scope mid-task?<\/h3>\n<p>Non deve farlo autonomamente. <cite>I trigger di escalation identificano cosa richiede revisione umana prima di procedere. Transazioni ad alto valore, accesso a categorie di dati sensibili, o comunicazioni con parti esterne potrebbero richiedere approvazione<\/cite>. Nel nostro sistema, l&#8217;agente genera una richiesta di escalation, una persona approva (o nega), e solo allora i permessi vengono espansi. Questo \u00e8 loggato completamente.<\/p>\n<h3>Come proteggo i secret dell&#8217;agente (API key, credenziali) da leak in prompt injection o code execution?<\/h3>\n<p>Questa \u00e8 una delle mie implementazioni pi\u00f9 orgogliose. Non do all&#8217;agente i secret direttamente. Invece:<br \/>\n1. <strong>Ogni agente riceve una service account identity<\/strong> (come un cert X.509 o managed identity in cloud).<br \/>\n2. <strong>Il secret \u00e8 conservato in un vault<\/strong> (HashiCorp Vault, AWS Secrets Manager, ecc.).<br \/>\n3. <strong>Il gateway<\/strong> che autentica le tool call fa lookup nel vault e inietta il secret just-in-time, <strong>senza mai esporlo all&#8217;agente<\/strong>.<br \/>\n4. Se l&#8217;agente \u00e8 compromesso, non ha il secret \u2013 ha solo una richiesta per usarlo, che il vault pu\u00f2 negare.<br \/>\nQuesto riduce massivamente la superficie di un secret leak.<\/p>\n<h3>Come dimensiono il team security per governare centinaia di agenti in produzione?<\/h3>\n<p><cite>Le revisioni manuali sono inadeguate per gestire il volume e la velocit\u00e0 dei deployment di agenti AI. I sistemi automatizzati devono scoprire nuovi agenti, classificare il loro accesso, rilevare comportamenti rischiosi, e far rispettare le policy in tempo reale. Questo approccio garantisce governance senza impedire l&#8217;innovazione<\/cite>. Nel nostro setup:<br \/>\n&#8211; **Continuous agent discovery:** Script che scansiona infrastruttura ogni ora<br \/>\n&#8211; **Automated risk classification:** ML model che valuta blast radius<br \/>\n&#8211; **Policy enforcement as code:** OPA policies che si auto-applican<br \/>\n&#8211; **Alert + correlation:** SIEM collega comportamenti anomali a agenti specifici<\/p>\n<p>Il team security passa da &#8220;reviewing permissions&#8221; a &#8220;responding to anomalies&#8221;.<\/p>\n<h2>Link Interni: Approfondimenti Correlati<\/h2>\n<p>Se state gi\u00e0 lavorando con architetture Zero Trust, vi consiglio di leggere il mio articolo su <a href=\"https:\/\/darioiannascoli.it\/blog\/zero-trust-architecture-shadow-ai-llm-malware-detection-2026\/\">AI-Powered Zero-Trust Architecture Defense 2026<\/a>, che approfondisce come rilevare shadow AI e LLM non autorizzate dentro la vostra rete.<\/p>\n<p>Se gestite infrastrutture multi-tenant (come Plesk), il mio articolo su <a href=\"https:\/\/darioiannascoli.it\/blog\/plesk-multi-tenant-ai-workload-management-resource-isolation-cost-attribution-autoscaling\/\">Plesk Multi-Tenant AI Workload Management<\/a> mostra come isolere workload AI per tenant con proper identity boundaries.<\/p>\n<p>Infine, per compliance NIS2 (che menziona esplicitamente l&#8217;AI governance), vedete <a href=\"https:\/\/darioiannascoli.it\/blog\/nis2-compliance-readiness-2026-risk-assessment-incident-response-soar\/\">NIS2 Compliance Readiness Aggiornamento 2026<\/a>.<\/p>\n<h2>Conclusione: Identity \u00e8 la Fondazione, Non un Optional<\/h2>\n<p>Quando ho iniziato a consultare su Identity Management per agenti AI 6 mesi fa, pensavo fosse un problema di compliance. Dopo dozzine di implementazioni, vedo che \u00e8 il <strong>fondamento della security e dell&#8217;operabilit\u00e0<\/strong>. Senza identity clara, scoping granulare, e audit trail completa, non potete:<br \/>\n&#8211; Tracciare cosa gli agenti fanno veramente<br \/>\n&#8211; Limitare il blast radius di un compromise<br \/>\n&#8211; Rispondere velocemente a un breach<br \/>\n&#8211; Soddisfare compliance (EU AI Act, NIS2, CRA)<\/p>\n<p>Nel 2026, <strong>identity governance per agenti non \u00e8 un optional<\/strong>. \u00c8 il perimetro della sicurezza.<\/p>\n<p>Se state deployando agenti in produzione senza questi controlli, vi consiglio di fare un audit urgente. Cominciate da questi step:<br \/>\n1. **Mappate tutti gli agenti** (shadow AI discovery)<br \/>\n2. **Calcolate il blast radius** di ogni agente<br \/>\n3. **Migrate da impersonation a delegation** (anche gradualmente)<br \/>\n4. **Centralizzate audit logging** in un SIEM<br \/>\n5. **Automate policy enforcement** con una policy engine (OPA, etc.)<\/p>\n<p>La buona notizia: <cite>MCP OAuth 2.1, MCP-I al DIF, Microsoft Entra Agent ID \u2013 gli standard 2026 per l&#8217;identit\u00e0 degli agenti AI stanno prendendo forma<\/cite>. Le fondazioni sono qui. Il resto dipende da voi.<\/p>\n<p>Condividete la vostra esperienza nei commenti: avete gi\u00e0 affrontato la identity crisis nei vostri ambienti? Come l&#8217;avete risolta?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La crisi d&#8217;identit\u00e0 degli agenti AI \u00e8 reale. Scopri come implementare service account policies, permission scoping Zero Trust e authorization enforcement per proteggere agenti autonomi in produzione.<\/p>\n","protected":false},"author":1,"featured_media":3291,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Identity Management Agentic AI 2026 | Zero Trust e Permission Scoping","_seopress_titles_desc":"Guida pratica: risolvi la authorization crisis degli AI agents con service account policies, permission intersection pattern e Zero Trust scoping. Compliance + audit trail.","_seopress_robots_index":"","footnotes":""},"categories":[128],"tags":[301,484,1204,833,1203,766],"class_list":["post-3290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-a-i","tag-agentic-ai","tag-ai-security","tag-authorization","tag-compliance-2026","tag-identity-management","tag-zero-trust"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/3290","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=3290"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/3290\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/3291"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=3290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=3290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=3290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}