<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Segreti on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/segreti/</link>
        <description>Recent content in Segreti on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 21 Jul 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/segreti/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Gestione dei segreti e KMS</title>
        <link>https://www.matteobianchi.eu/p/gestione-segreti-e-kms/</link>
        <pubDate>Tue, 21 Jul 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/gestione-segreti-e-kms/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/gestione-segreti-e-kms/cover.png" alt="Featured image of post Gestione dei segreti e KMS" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/identita-dei-workload/&#34; &gt;identità dei workload&lt;/a&gt; elimina le chiavi del cloud, ma
restano i segreti che il cloud non gestisce per te: la password del database, il token dell&amp;rsquo;API di
pagamento, la chiave di un partner, un certificato privato. Metterli in chiaro nel codice, in un file
&lt;code&gt;.env&lt;/code&gt; committato, o in una variabile d&amp;rsquo;ambiente leggibile da chiunque ispezioni il processo, è un
errore classico e devastante. Servono due strumenti distinti ma collegati: un &lt;strong&gt;secrets manager&lt;/strong&gt; per
custodire i segreti, e un &lt;strong&gt;KMS&lt;/strong&gt; per gestire le chiavi che li cifrano.&lt;/p&gt;
&lt;h2 id=&#34;secrets-manager-la-cassaforte&#34;&gt;Secrets manager: la cassaforte
&lt;/h2&gt;&lt;p&gt;Un secrets manager (AWS Secrets Manager, Azure Key Vault, GCP Secret Manager, HashiCorp Vault)
conserva i segreti &lt;strong&gt;cifrati a riposo&lt;/strong&gt;, li espone solo a identità autorizzate via IAM, ne tiene le
&lt;strong&gt;versioni&lt;/strong&gt; e può &lt;strong&gt;ruotarli&lt;/strong&gt; automaticamente.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    APP[Applicazione] --&amp;gt;|&amp;#34;chiede il segreto&amp;lt;br/&amp;gt;(autenticata via IAM)&amp;#34;| SM[Secrets Manager]
    SM --&amp;gt;|&amp;#34;segreto decifrato&amp;lt;br/&amp;gt;in memoria, a richiesta&amp;#34;| APP
    SM -.cifra/decifra con.-&amp;gt; KMS[(KMS)]
    style SM fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Il valore non sta più nel codice: l&amp;rsquo;applicazione lo chiede a runtime, autenticandosi con la sua
identità di workload. Così il segreto si cambia senza ridistribuire l&amp;rsquo;app, e ogni accesso è tracciato.&lt;/p&gt;
&lt;h2 id=&#34;kms-e-la-crittografia-a-busta&#34;&gt;KMS e la crittografia a busta
&lt;/h2&gt;&lt;p&gt;Il KMS (Key Management Service) non conserva i tuoi dati: gestisce le &lt;strong&gt;chiavi&lt;/strong&gt;. Il meccanismo
centrale è la &lt;strong&gt;crittografia a busta (envelope encryption)&lt;/strong&gt;: invece di cifrare gigabyte di dati con la
chiave master (che non lascia mai il KMS), si genera una &lt;strong&gt;chiave dati&lt;/strong&gt; usa-e-getta, con questa si
cifrano i dati, e si conserva solo la chiave dati a sua volta cifrata dalla master.&lt;/p&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;lnt&#34;&gt;1
&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;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;4
&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&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. KMS genera una Data Key  → in chiaro (DK) + cifrata dalla master (DK_enc)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. Cifri i dati con DK      → poi CANCELLI DK dalla memoria
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Salvi insieme ai dati:   DK_enc  (la chiave dati cifrata)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. Per decifrare: mandi DK_enc al KMS → ti ridà DK → decifri → scarti DK
&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;Formalmente, con dati $D$, chiave dati $K$ e chiave master $M$:&lt;/p&gt;
&lt;p&gt;$$ C = \text{Enc}&lt;em&gt;K(D), \qquad K&lt;/em&gt;{enc} = \text{Enc}_M(K) $$&lt;/p&gt;
&lt;p&gt;si archivia la coppia $(C, K_{enc})$ e la master $M$ resta sempre dentro il KMS. Il vantaggio: la
chiave master, la più preziosa, non esce mai e non tocca mai i dati; ruotarla o revocarla ha effetto
immediato; e i permessi d&amp;rsquo;uso delle chiavi passano per l&amp;rsquo;IAM, quindi puoi dire &lt;em&gt;chi&lt;/em&gt; può decifrare
&lt;em&gt;cosa&lt;/em&gt; senza dare a nessuno la chiave in mano.&lt;/p&gt;
&lt;h2 id=&#34;rotazione-il-segreto-che-cambia&#34;&gt;Rotazione: il segreto che cambia
&lt;/h2&gt;&lt;p&gt;Un segreto che non cambia mai è un segreto che, se trapela, resta valido per sempre. La &lt;strong&gt;rotazione&lt;/strong&gt;
periodica — automatica dove possibile — limita la finestra d&amp;rsquo;esposizione. I secrets manager moderni
ruotano le credenziali di database generando la nuova, aggiornandola sul database e nel segreto in modo
coordinato, senza downtime.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se l&#39;applicazione deve comunque leggere il segreto in chiaro per usarlo, e un attaccante che compromette l&#39;app può leggerlo dalla memoria, a cosa serve tutta l&#39;infrastruttura di secrets manager e KMS?&lt;/summary&gt;
&lt;p&gt;Serve a moltissimo, perché cambia completamente la &lt;em&gt;superficie&lt;/em&gt; e la &lt;em&gt;durata&lt;/em&gt;
dell&#39;esposizione, anche se è vero che nessun sistema può nascondere un segreto all&#39;applicazione che lo
deve usare. Senza secrets manager, il segreto è esposto &lt;em&gt;ovunque e sempre&lt;/em&gt;: nel codice sorgente
(quindi in Git, nella cronologia, in ogni clone, in ogni fork), nei file di configurazione, nelle
immagini dei container, nei backup, nei log di deploy. Un attaccante non ha bisogno di compromettere
l&#39;app in esecuzione: gli basta trovare il repository, un backup o un&#39;immagine. Con il secrets manager, il
segreto esiste in chiaro solo &lt;em&gt;in memoria, nel processo vivo, per il tempo d&#39;uso&lt;/em&gt;: per rubarlo
devi compromettere quel processo specifico in quel momento, che è enormemente più difficile che trovare
una stringa in un file. In più ottieni tre cose che il segreto in chiaro non dà: &lt;em&gt;tracciamento&lt;/em&gt;
(sai chi e quando ha letto il segreto, quindi un accesso anomalo si vede), &lt;em&gt;rotazione&lt;/em&gt; (se
sospetti una fuga, cambi il segreto in un punto solo e tutte le app lo prendono nuovo, senza
ridistribuire nulla), e &lt;em&gt;controllo d&#39;accesso&lt;/em&gt; (solo le identità autorizzate via IAM lo leggono,
non &#34;chiunque abbia accesso al filesystem&#34;). Sul KMS il discorso è ancora più netto: la chiave master
non entra &lt;em&gt;mai&lt;/em&gt; nella memoria dell&#39;applicazione — l&#39;app manda al KMS la chiave dati cifrata e
riceve quella in chiaro, ma la master resta nel modulo hardware del provider, irraggiungibile anche se
l&#39;app è completamente compromessa. La sicurezza perfetta non esiste; ridurre l&#39;esposizione da &#34;sempre, in
mille posti&#34; a &#34;solo in memoria, nel momento d&#39;uso, tracciata e revocabile&#34; è esattamente il lavoro che
conta.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;I segreti inevitabili vanno in un secrets manager — cifrati, versionati, ruotabili, serviti a runtime
all&amp;rsquo;identità autorizzata — e il KMS gestisce le chiavi con la crittografia a busta, tenendo la master
sempre al sicuro. Questo meccanismo di cifratura non riguarda solo i segreti: è la base per proteggere
&lt;em&gt;tutti&lt;/em&gt; i dati a riposo e in transito. È il tema della &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/crittografia-dati-cloud/&#34; &gt;crittografia dei dati nel
cloud&lt;/a&gt;, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
