I built a secure Hub‑and‑Spoke network architecture in Microsoft Azure to demonstrate my ability to design cloud networks that are scalable, well‑segmented, and aligned with enterprise best practices. The hub hosts shared services like Bastion, DNS, and peerings, while each spoke contains isolated workloads with tightly governed traffic paths.
This project highlights my knowledge of cloud networking, routing design, Zero Trust principles, and operational governance. It also shows that I can build environments that are secure, predictable, and ready for real‑world workloads.
Architecture Diagram
Project Screenshots
Methodologies Used
Hub-and-spoke Topology Design
Cost Optimization
Network Segmentation
Infrastructure as Code (IaC)
Bastion Access
Route Architecture
Traffic Flow Modeling
Step-by-Step Walkthrough
1. Create the Resource Group
Create a new resource group in the same region for all project resources.
2. Build the Virtual Networks
Create hub-vnet (10.0.0.0/16) with:
SharedServicesSubnet (10.0.1.0/24)
ManagementSubnet (10.0.2.0/24)
AzureBastionSubnet (10.0.3.0/26)
Create spoke1-vnet (10.1.0.0/16) with:
WebSubnet (10.1.1.0/24)
AppSubnet (10.1.2.0/24)
Create spoke2-vnet (10.2.0.0/16) with:
WebSubnet (10.2.1.0/24)
DataSubnet (10.2.2.0/24)
3. Configure Hub‑Spoke VNet Peering
Peer hub ↔ spoke1 (two connections).
Peer hub ↔ spoke2 (two connections).
Do not peer the spokes to each other.
4. Create and Apply Network Security Groups
Create NSGs for:
hub ManagementSubnet
spoke1 WebSubnet
spoke1 AppSubnet
spoke2 WebSubnet
Add rules to allow required HTTP/HTTPS/SSH traffic and deny all else.
Associate each NSG with its corresponding subnet.
5. Create a Route Table (UDR)
Create a route table for spoke1.
Add a default route (0.0.0.0/0) pointing to a simulated NVA IP in the hub.
Private DNS: Centralized name resolution via hub DNS servers.
Azure Bastion: Secure, agentless admin access without public IPs.
IP Addressing Plan:/16 VNets with /24 subnets for scalable, non‑overlapping segmentation.
Challenges & Solutions
Challenge: B-series SKU VMs are unavailable in East US region.
Solution: The most affordable VM series SKU available in East US was the D-series SKU. I was bound to the East US region, as the networking services within Azure are region-locked. This taught me to always check regional SKU availability before planning deployments.
Challenge: Bastion Developer SKU is unavailable in East US region.
Solution: I upgraded to the Bastion Basic SKU but was unable to connect to my VMs because the RDP session connection was unstable. I tried accessing my VM using Bastion on both Mozilla FireFox and Google Chrome, as well as both browsers on Incognito mode. I cleared my browser cookies and reset my router- none of this worked. I decided to upgrade to Bastion Standard SKU to use the Native Client SHH capability, which resolved the issue.
Challenge: VMs were rebuilt multiple times.
Solution: I had to return to this project more than once after sessions took me longer than I expected. In the future, I will use ARM templates (or Bicep) to ensure consistent, repeatable VM deployments and reduce rebuild time.
Results & Metrics
Hub‑to‑Spoke Connectivity: Successful ICMP and SSH communication from hub VM to spoke VM, confirming correct peering and NSG rules.
DNS Resolution: Private DNS zone resolved VM hostnames across all VNets, demonstrating centralized name resolution.
Effective Routing: Next Hop analysis showed traffic flowing through hub as expected; UDR applied correctly to spoke1 WebSubnet.
Zero Public Exposure: All VMs accessed via Bastion Developer SKU with no public IPs, reducing attack surface to zero.
Cost Efficiency: Total project cost remained under $1; all core components (VNets, NSGs, peering) incurred no ongoing charges.
Security Enforcement: IP Flow Verify confirmed:
SSH from hub → allowed
HTTP from internet → allowed
RDP from internet → denied
Key Takeaways
Azure Resource Organization: I learned how to structure a small cloud environment using Resource Groups, VNets, subnets, and role‑appropriate naming conventions to keep everything clean, predictable, and scalable.
Secure Access: Implementing Azure Bastion reinforced the importance of eliminating public RDP exposure and using platform-managed access for hardened entry into VMs.
Network Segmentation: Designing subnets with clear purposes (management, workload, jump host) helped me understand how segmentation reduces blast radius and improves operational clarity.
Operational Reliability: Rebuilding VMs while preserving the network fabric taught me how to maintain stability, avoid configuration drift, and recover cleanly without breaking dependencies.
Identity‑Aligned VM Access: Instead of relying on local admin accounts or exposing RDP, I used Azure Bastion and my Entra ID identity to access VMs. This reinforced the shift toward identity‑based administration even in small environments, without needing full RBAC role design for this project.
Documentation Discipline: Capturing architecture, configuration, and validation steps strengthened my ability to communicate technical decisions clearly.