<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>VPC on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/vpc/</link>
        <description>Recent content in VPC on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 11 Aug 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/vpc/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>La rete virtuale: VPC e subnet</title>
        <link>https://www.matteobianchi.eu/p/rete-virtuale-vpc/</link>
        <pubDate>Tue, 11 Aug 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/rete-virtuale-vpc/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/rete-virtuale-vpc/cover.png" alt="Featured image of post La rete virtuale: VPC e subnet" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Protette identità e dati, resta la rete — e nel cloud la rete non è un dato di fatto preesistente: la
&lt;strong&gt;disegni tu&lt;/strong&gt;, da un foglio bianco. Una &lt;strong&gt;rete virtuale privata (VPC)&lt;/strong&gt; è il tuo spazio di
indirizzamento isolato, in cui decidi quali porzioni (subnet) sono raggiungibili da Internet e quali
no, come scorre il traffico e cosa è permesso. Una rete disegnata male espone a Internet cose che
dovevano restare nascoste; una disegnata bene mette diversi strati tra l&amp;rsquo;attaccante e i dati.&lt;/p&gt;
&lt;h2 id=&#34;subnet-pubbliche-e-private&#34;&gt;Subnet pubbliche e private
&lt;/h2&gt;&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    IGW[Internet Gateway] --&amp;gt; PUB[&amp;#34;Subnet PUBBLICA&amp;lt;br/&amp;gt;(load balancer, bastion)&amp;#34;]
    PUB --&amp;gt; PRIV[&amp;#34;Subnet PRIVATA&amp;lt;br/&amp;gt;(app server)&amp;#34;]
    PRIV --&amp;gt; DATA[&amp;#34;Subnet DATI&amp;lt;br/&amp;gt;(database) — nessuna via diretta a Internet&amp;#34;]
    PRIV -.uscita verso Internet.-&amp;gt; NAT[NAT Gateway] --&amp;gt; IGW
    style DATA fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;La distinzione fondamentale: una &lt;strong&gt;subnet pubblica&lt;/strong&gt; ha una rotta diretta verso l&amp;rsquo;Internet gateway —
ci metti solo ciò che &lt;em&gt;deve&lt;/em&gt; essere raggiungibile da fuori (un load balancer, al limite un bastion). Una
&lt;strong&gt;subnet privata&lt;/strong&gt; non ha quella rotta: le sue risorse non sono raggiungibili da Internet. Se devono
&lt;em&gt;uscire&lt;/em&gt; (per aggiornamenti, API esterne) lo fanno tramite un &lt;strong&gt;NAT gateway&lt;/strong&gt;, che permette connessioni
in uscita ma non in entrata. I database stanno nel livello più interno, senza alcuna via verso
Internet.&lt;/p&gt;
&lt;h2 id=&#34;il-firewall-distribuito-security-group&#34;&gt;Il firewall distribuito: security group
&lt;/h2&gt;&lt;p&gt;Nel cloud il firewall non è una scatola al bordo della rete: è &lt;strong&gt;distribuito&lt;/strong&gt;, attaccato a ogni
risorsa. I &lt;strong&gt;security group&lt;/strong&gt; (NSG su Azure, firewall rules su GCP) sono insiemi di regole che dicono
quale traffico può entrare e uscire da una risorsa:&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;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&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;Security group del database:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  INBOUND: consenti 5432 (PostgreSQL) SOLO dal security group degli app server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  INBOUND: nient&amp;#39;altro
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  → il database accetta connessioni solo dalle app, mai da Internet né da altro
&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;La pratica potente è &lt;strong&gt;referenziare altri security group invece di indirizzi IP&lt;/strong&gt;: &amp;ldquo;accetta dal
security group degli app server&amp;rdquo; resta corretto anche se gli IP cambiano e scala automaticamente. Di
default i security group &lt;strong&gt;negano tutto l&amp;rsquo;inbound&lt;/strong&gt;: apri solo ciò che serve, verso le sorgenti
giuste.&lt;/p&gt;
&lt;h2 id=&#34;nacl-il-secondo-livello&#34;&gt;NACL: il secondo livello
&lt;/h2&gt;&lt;p&gt;Oltre ai security group (che sono &lt;em&gt;stateful&lt;/em&gt; e stanno sulla risorsa), le &lt;strong&gt;network ACL&lt;/strong&gt; operano al
livello della subnet, sono &lt;em&gt;stateless&lt;/em&gt; e valutano il traffico in ingresso/uscita della sottorete
intera. Sono più grezze ma utili come secondo strato: per esempio bloccare interi range di indirizzi a
livello di subnet, sotto i security group più fini.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; con identità forte e dati cifrati, la segmentazione di rete non è un residuo del vecchio mondo perimetrale? Se l&#39;IAM decide chi accede, le subnet private servono ancora?&lt;/summary&gt;
&lt;p&gt;Servono, perché identità e rete difendono da fallimenti diversi e si rinforzano a vicenda — è
esattamente la difesa in profondità. L&#39;IAM protegge l&#39;accesso &lt;em&gt;autenticato e autorizzato&lt;/em&gt; alle API
del cloud; la rete protegge la &lt;em&gt;raggiungibilità&lt;/em&gt; stessa dei servizi, che è un piano diverso.
Pensa a un database: l&#39;IAM (o le sue credenziali) controlla chi può autenticarsi; ma se il database è in
una subnet privata senza rotta verso Internet, un attaccante che ha rubato le credenziali &lt;em&gt;non può
nemmeno raggiungerlo&lt;/em&gt; da fuori — deve prima entrare nella rete, un ostacolo in più. Viceversa, se il
database fosse esposto a Internet, basterebbe una falla nell&#39;autenticazione, una password debole, un
exploit del protocollo, per comprometterlo, e l&#39;IAM non c&#39;entrerebbe nulla. La rete riduce la
&lt;em&gt;superficie d&#39;attacco&lt;/em&gt;: ciò che non è raggiungibile non può essere attaccato, punto, qualunque sia
lo stato dell&#39;autenticazione. Inoltre molte minacce non passano per l&#39;IAM del cloud: vulnerabilità nei
servizi in ascolto, movimenti laterali dopo una compromissione iniziale, scansioni di massa. La
segmentazione limita il movimento laterale — compromesso un server, l&#39;attaccante trova muri invece di
una rete piatta. Il &#34;nuovo mondo&#34; non abolisce la rete: la fonde con l&#39;identità nel modello Zero Trust,
dove &lt;em&gt;entrambe&lt;/em&gt; devono concedere l&#39;accesso. L&#39;errore del vecchio mondo era fidarsi della sola
rete; l&#39;errore opposto, fidarsi della sola identità, è altrettanto fragile. La risposta giusta è:
tutti e due.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Nel cloud la rete la disegni tu: subnet pubbliche per ciò che deve stare in Internet, private per il
resto, database nel livello più interno, e un firewall distribuito — i security group — che di default
nega tutto e apre solo il necessario, referenziando altri gruppi invece degli IP. Disegnata la rete
interna, resta il punto più delicato: cosa esporre verso l&amp;rsquo;esterno e come. È il prossimo capitolo,
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/esposizione-perimetro-cloud/&#34; &gt;esposizione e perimetro&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
