V tomto cvičení si vyzkoušíme základní síťové stavební kameny Azure a jejich praktické použití při zabezpečení:
- Virtual Network (VNet) jako základní síťový prostor
- subnety jako logické členění uvnitř VNetu
- VNet peering pro propojení dvou sítí
- NSG (Network Security Group) pro řízení provozu
- Private Link / Private Endpoint pro privátní přístup ke službě Azure Storage
Budeme kombinovat:
- Azure Portal pro vizuální konfiguraci
- Azure Cloud Shell pro bootstrap a ověření prostředí
Rozumět rozdílům mezi:
- VNet = síťová hranice
- subnet = logické členění uvnitř VNetu
- peering = konektivita mezi dvěma sítěmi
- NSG = pravidla, komunikace mezi subnety
- Private Endpoint = privátní síťový vstup ke konkrétní službě
- Private Link = mechanismus, kterým je služba dostupná privátně ve VNetu
Abychom se mohli soustředit na síťové principy a ne na mechanické zakládání resources, vytvoříme základní prostředí pomocí připraveného bootstrap skriptu.
- Přihlaste se do Azure Portalu.
- V horní liště klikněte na ikonu Cloud Shell.
- Pokud Cloud Shell otevíráte poprvé, dokončete jeho inicializaci.
- Můžete použít PowerShell nebo Bash prostředí.

V Cloud Shellu vytvořte pracovní adresář:
mkdir ~/clouddrive/azure-networking-seminar
cd ~/clouddrive/azure-networking-seminarManage files -> Open file share.
Překopírujte skripty:
- 00-bootstrap.sh
- 01-verify.sh
- 99-cleanup.sh
Skripty se nahrají do složky ~/clouddrive/azure-networking-seminar odkud je budeme následně spouštět.
./00-bootstrap.shSkript vytvoří:
- resource group
- dva VNety
- subnety
- 2x NSG
- Storage Account s demo blobem
- Private DNS zone pro Blob Private Link
Spusťte kontrolní skript:
./01-verify.sh# Část 2 - Kontrola připraveného prostředí v Azure Portalu
Po doběhnutí 00-bootstrap.sh v Azure Portalu otevřete resource group rg-aznet-lab
Máte připravené dva oddělené síťové prostory:
vnet-appvnet-data
Tyto VNety zatím nejsou propojené.
Ve VNetu vnet-app najdete:
snet-websnet-private
Ve VNetu vnet-data najdete:
snet-data
Subnet je logické členění uvnitř VNetu.
Komunikace mezi subnety není blokována.
Na vybrané subnety jsou už navázané:
nsg-webnsg-dataZatím v nich nejsou přidaná naše vlastní pravidla. Azure v každém NSG vytváří automaticky výchozí pravidla.
- Storage Account
- Private DNS zone
privatelink.blob.core.windows.net(zatím jen příprava)
Výchozí prostředí je záměrně nekompletní — sítě existují, ale nejsou propojené ani zabezpečené. V částech 3–8 postupně dobudujeme funkční a bezpečnou síťovou architekturu:
- VNet Peering (Část 3) — propojíme
vnet-appavnet-data, aby spolu mohly komunikovat. Bez peeringu jsou sítě zcela izolované. - NSG pravidla (Část 4) — samotný peering by povolil veškerý provoz. Přidáme pravidla, která omezí komunikaci pouze na nezbytné porty (TCP 443), a vše ostatní zakážeme.
- Private Endpoint (Část 6) — místo veřejného endpointu Storage Accountu připojíme službu přímo do privátní sítě.
- Zakázání veřejného přístupu (Část 7) — bez tohoto kroku by Private Endpoint nedával bezpečnostní smysl, protože Storage Account by byl stále dostupný veřejně.
- DNS (Část 8) — aby aplikace mohla používat stejné logické jméno služby a přitom se uvnitř sítě přeložilo na privátní IP, je nutné správně nakonfigurovat Private DNS zónu.
Výsledkem je prostředí, kde:
- dvě sítě jsou propojené s řízeným provozem
- cloudová služba je dostupná pouze privátně, bez expozice na internet
Nyní vytvoříme VNet peering mezi vnet-app a vnet-data.
Nastavuje se pro obě strany peeringu z jednoho místa:
- Otevřete resource
vnet-app - Přejděte do sekce Peerings
- Klikněte na Add
- Vytvořte propojení na
vnet-data
- Remote virtual network summary = konfigurace cílového VNET směrem k "našemu" VNETu (Peering link name = DataToApp-peering)
- Local virtual network summary = konfigurace "našeho" VNETusměrem k peerovanému (Peering link name = AppToData-peering)
Samotný peering pro bezpečnou komunikaci nestačí. Potřebujeme určit, jaký provoz je mezi sítěmi/subnety povolen.
Chceme, aby:
- webová vrstva ve
snet-webmohla komunikovat do data vrstvy vesnet-data - pouze na TCP portu 443
- jiný provoz nechceme povolit!
Přejděte do sekce v menu:
- Inbound security rules
- Source: IP Addresses
- Source IP addresses/CIDR ranges:
10.10.1.0/24 - Source port ranges:
* - Destination: Any
- Service: Custom
- Destination port ranges:
443 - Protocol: TCP
- Action: Allow
- Priority:
200 - Name:
Allow-Web-To-Data-443
Vytvořte další pravidlo, které zakazuje veškerou další komunikaci:

- Source: IP Addresses
- Source IP addresses/CIDR ranges:
10.10.1.0/24 - Source port ranges:
* - Destination: Any
- Service: Custom
- Destination port ranges:
* - Protocol: Any
- Action: Deny
- Priority:
300 - Name:
Deny-Web-To-Data-All
-Zpracování security rules probíhá postupně podle priority - první match končí zpracování dalších pravidel
-Při vytvoření VNETPeering se automaticky přidá i pravidlo které naopak komunikaci mezi VNETy povoluje ( priority 6500)
Pro další část labu máme připravený Storage Account s demo blobem.
Bootstrap skript vytvořil:
- Blob container
demo - blob
readme.txt
Na konci skriptu 00-bootstrap byla vypsána také:
- Blob service endpoint
- Blob URL
Typicky ve tvaru: https://.blob.core.windows.net/ https://.blob.core.windows.net/demo/readme.txt
Rozdílný scénář než v případě peeringu:
- nepropojujeme dvě sítě mezi sebou
- ale připojujeme konkrétní službu privátně do sítě
Otevřete v Azure Portalu váš Storage Account (vytvořený bootstrap skriptem).
Přejděte do:
- Security + networking → Networking → Private endpoint
- Klikněte na + Create Private endpoint
- Resource group:
rg-aznet-lab - Name:
pe-storage-blob - Network interface name:
pe-storage-blob-nic - Region: stejný region jako VNet (West Europe)
- Connection method: Connect to an Azure resource in my directory
- Resource type:
Microsoft.Storage/storageAccounts - Resource: váš Storage Account
- Target sub-resource:
blob
- Virtual network:
vnet-app - Subnet:
snet-private - Private IP configuration: Dynamically allocate IP address
- Integrate with private DNS zone: Yes
- Private DNS zone:
privatelink.blob.core.windows.net
Tato DNS zóna byla připravena bootstrap skriptem. Integrace zajistí, že se název Storage Accountu uvnitř sítě přeloží na privátní IP.
Pokračujte přes Review + create → Create.
Po vytvoření Private Endpointu si v resource group rg-aznet-lab všimněte nových resources:
- Private Endpoint
pe-storage-blob - Network Interface (NIC) — Azure ji vytvořil automaticky
- NIC má přiřazenou privátní IP z rozsahu subnetu
snet-private
Ověřte DNS záznam v portálu:
- Otevřete Private DNS zone
privatelink.blob.core.windows.net - V sekci Virtual network links ověřte, že existuje link na
vnet-app— bez něj zóna pro zdroje v síti není viditelná - V sekci DNS recordsets uvidíte A záznam s názvem vašeho Storage Accountu směřující na privátní IP (z rozsahu
10.x.x.x) — tento záznam Azure vytvořil automaticky při vytvoření Private Endpointu
Spustťe jesště jednou 01-verify.sh a zkontrolujte sekci DNS - resolving by měl ukazovat na interní rozsah, ale neukazuje :-)
Proč verify skript přesto ukazuje veřejnou IP?
DNS záznam v portálu je správně — A záznam na privátní IP existuje. Problém je v tom, odkud se dotazujete.
Cloud Shell neběží uvnitř tvého VNetu — používá Microsoft-spravovanou síť. Jeho DNS dotazy jdou přes veřejný Azure DNS, který vaši Private DNS zónu nevidí, a přeloží název na veřejnou IP.
CNAME řetěz ve výstupu skriptu je přesto správně:
blob.core.windows.net→blob.privatelink.core.windows.netTo znamená, že Private Endpoint existuje a je správně přiřazen. Chybí jen poslední překlad na privátní IP, protože Cloud Shell stojí mimo váš VNet.Pro skutečný funkční test by bylo potřeba VM uvnitř
vnet-app— z ní bynslookupvrátil privátní IP místo veřejné.
Aby dával celý scénář bezpečnostní smysl, je potřeba zakázat veřejný přístup ke Storage Accountu. Bez tohoto kroku by byl Storage Account stále dostupný z internetu i přesto, že máme Private Endpoint.
Nejprve zkuste v prohlížeči otevřít Blob URL ze sekce 5:
https://<storage-account>.blob.core.windows.net/demo/readme.txt
Následně proveďte změny:
- Otevřete váš Storage Account
- Přejděte do Security + networking → Networking
- Otevřete záložku Public access
- Klikněte na Manage
- Nastavte Public network access:
Disable - Klikněte na Save
Zkuste v prohlížeči opět otevřít Blob URL:
https://<storage-account>.blob.core.windows.net/demo/readme.txt
Měli byste obdržet chybu AuthorizationFailure — Storage Account již z internetu není dostupný.
Aplikace obvykle stále používá stejné logické jméno služby a ani po vytvoření Private linku není potřeba nic měnit:
https://<storage-account>.blob.core.windows.net
Po vytvoření Private Endpointu a správném DNS se tento název uvnitř sítě přeloží přes privatelink.blob.core.windows.net na privátní IP Private Endpointu — bez jakékoli změny v kódu aplikace.
V laboratoři jsme si ukázali dvě různé situace:
Použili jsme:
- VNet
- subnety
- VNet peering
- NSG
Použili jsme:
- Azure Storage
- Blob endpoint
- Private Endpoint
- Private DNS zone
- omezení public network access
Hlavní závěry
- VNet je síťová hranice
- subnet je logické členění uvnitř VNetu
- peering řeší konektivitu
- NSG řeší bezpečnostní politiku
- Private Link řeší privátní přístup ke službě
- DNS je u Private Linku klíčová část návrhu
Po skončení laboratoře můžete smazat veškeré resources group pomocí cleanup skriptu:
99-cleanup.sh nebo smazáním Resource group v administračním UI.
- Kdy by stačil jeden VNet a více subnetů, a kdy už dává smysl více VNetů?
- Proč peering sám o sobě neřeší bezpečnost?
- Jaký je rozdíl mezi Private Endpoint a Service Endpoint?
- Proč u Private Linku nestačí jen vytvořit endpoint a je potřeba řešit i DNS?
- Proč je rozdíl mezi public endpointem omezeným firewallem a private-only přístupem?







