<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Workload Identity on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/workload-identity/</link>
        <description>Recent content in Workload Identity on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 14 Jul 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/workload-identity/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>L&#39;identità dei workload</title>
        <link>https://www.matteobianchi.eu/p/identita-dei-workload/</link>
        <pubDate>Tue, 14 Jul 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/identita-dei-workload/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/identita-dei-workload/cover.png" alt="Featured image of post L&#39;identità dei workload" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Un&amp;rsquo;applicazione nel cloud deve spesso leggere un database, scrivere su uno storage, chiamare un&amp;rsquo;altra
API. Per farlo le serve un&amp;rsquo;identità. La via sbagliata — e purtroppo comunissima — è creare un utente
IAM, generare una &lt;strong&gt;chiave statica&lt;/strong&gt; (access key / service account key) e incollarla in un file di
configurazione o in una variabile d&amp;rsquo;ambiente. Quella chiave non scade mai, finisce nei log, nei
repository Git, nei backup, nelle immagini dei container: è la causa numero uno di credenziali cloud
rubate. Le &lt;strong&gt;identità di workload&lt;/strong&gt; esistono per non doverla mai creare.&lt;/p&gt;
&lt;h2 id=&#34;il-meccanismo-la-macchina-è-lidentità&#34;&gt;Il meccanismo: la macchina È l&amp;rsquo;identità
&lt;/h2&gt;&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    APP[Applicazione&amp;lt;br/&amp;gt;su una VM / container] --&amp;gt;|&amp;#34;chiede credenziali&amp;#34;| MD[Metadata service&amp;lt;br/&amp;gt;locale della piattaforma]
    MD --&amp;gt;|&amp;#34;credenziali temporanee&amp;lt;br/&amp;gt;a scadenza&amp;#34;| APP
    APP --&amp;gt;|&amp;#34;usa le credenziali&amp;#34;| API[API del cloud]
    ROLE[Ruolo assegnato&amp;lt;br/&amp;gt;alla macchina] -.definisce i permessi.-&amp;gt; MD
    style ROLE fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Invece di dare una chiave all&amp;rsquo;applicazione, si assegna un &lt;strong&gt;ruolo alla macchina&lt;/strong&gt; che la ospita (una
istanza, un container, una funzione). La piattaforma espone un &lt;em&gt;metadata service&lt;/em&gt; locale da cui
l&amp;rsquo;applicazione ottiene, a richiesta, credenziali &lt;strong&gt;temporanee&lt;/strong&gt; che scadono dopo minuti o ore e vengono
rinnovate in automatico. Nessun segreto a lunga vita esiste mai: se la macchina viene spenta, le
credenziali muoiono con lei.&lt;/p&gt;
&lt;h2 id=&#34;i-nomi-nei-tre-provider&#34;&gt;I nomi nei tre provider
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AWS   → IAM Role su EC2/ECS/Lambda (via Instance Metadata Service, usa IMDSv2!)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP   → service account allegato alla risorsa + metadata server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Azure → Managed Identity (system- o user-assigned)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Il concetto è identico: un&amp;rsquo;identità legata alla risorsa, credenziali effimere servite localmente. Su
AWS è importante forzare &lt;strong&gt;IMDSv2&lt;/strong&gt; (la versione del metadata service che richiede un token), perché la
v1 è stata sfruttata in attacchi SSRF per rubare credenziali dalle istanze.&lt;/p&gt;
&lt;h2 id=&#34;oltre-il-cloud-la-federazione&#34;&gt;Oltre il cloud: la federazione
&lt;/h2&gt;&lt;p&gt;E se il workload gira &lt;em&gt;fuori&lt;/em&gt; dal cloud — in una pipeline CI/CD su GitHub, in un cluster on-premise?
Qui entra la &lt;strong&gt;federazione (workload identity federation)&lt;/strong&gt;: il sistema esterno presenta un token
firmato OIDC che attesta la sua identità (&amp;ldquo;sono la pipeline X del repo Y&amp;rdquo;), e il cloud lo scambia con
credenziali temporanee, senza che nessuna chiave statica cambi mai di mano. È il modo moderno di far
parlare CI, Kubernetes esterni e altri cloud con il tuo ambiente, in sicurezza.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; una chiave statica in un file è semplicissima e funziona ovunque. Ruoli, metadata service, federazione OIDC: non sto aggiungendo pezzi fragili per risolvere un problema che una buona gestione dei segreti già coprirebbe?&lt;/summary&gt;
&lt;p&gt;No, e la distinzione è importante: la gestione dei segreti (che vedremo nel prossimo capitolo) riduce
il rischio di una chiave, ma l&#39;identità di workload lo &lt;em&gt;elimina alla radice&lt;/em&gt; — sono complementari,
non alternative. Una chiave statica, per quanto ben custodita in un vault, ha tre proprietà che nessuna
gestione può togliere: &lt;em&gt;esiste&lt;/em&gt;, quindi può essere letta; &lt;em&gt;non scade&lt;/em&gt;, quindi se trapela
resta valida finché qualcuno non se ne accorge e la revoca manualmente; e &lt;em&gt;deve viaggiare&lt;/em&gt; dal
vault all&#39;applicazione, moltiplicando i punti in cui può trapelare (log, dump di memoria, variabili
d&#39;ambiente ispezionabili, immagini di container). L&#39;identità di workload rende la chiave statica
&lt;em&gt;inesistente&lt;/em&gt;: l&#39;applicazione non possiede mai un segreto a lunga vita, ottiene credenziali che
scadono in minuti e si rinnovano da sole. Se un attaccante le ruba, ha una finestra brevissima, non un
accesso permanente; e la revoca è automatica allo spegnimento della macchina. Sui &#34;pezzi fragili&#34;: il
metadata service e la federazione OIDC non li costruisci tu, li fornisce la piattaforma, già
irrobustiti — l&#39;unica tua accortezza è usare la variante sicura (IMDSv2) e configurare bene le condizioni
della federazione. In cambio elimini l&#39;intera categoria di incidenti &#34;chiave statica trovata nel repo
Git&#34;, che è tra le più frequenti in assoluto. La chiave in un file è semplice come lasciare la porta
aperta è semplice: la complessità che eviti oggi la paghi come breach domani.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Le identità di workload eliminano le chiavi statiche: la macchina riceve un ruolo, ottiene credenziali
temporanee da un metadata service locale, e all&amp;rsquo;esterno la federazione OIDC scambia token firmati con
credenziali effimere. Nessun segreto a lunga vita da custodire. Ma qualche segreto — password di
database, chiavi di terze parti, certificati — resterà sempre inevitabile: come conservarlo è il tema
della &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/gestione-segreti-e-kms/&#34; &gt;gestione dei segreti e KMS&lt;/a&gt;, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
