<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: PETER Samuel</title>
    <description>The latest articles on Forem by PETER Samuel (@peter_samuel_052b9056e236).</description>
    <link>https://forem.com/peter_samuel_052b9056e236</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1594317%2Fa0551730-4df0-4548-8e12-9b5e3b154802.png</url>
      <title>Forem: PETER Samuel</title>
      <link>https://forem.com/peter_samuel_052b9056e236</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/peter_samuel_052b9056e236"/>
    <language>en</language>
    <item>
      <title>Implementing High Availability with Azure Traffic Manager: A Practical Guide</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Mon, 13 Oct 2025 23:55:40 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/implementing-high-availability-with-azure-traffic-manager-a-practical-guide-3nhf</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/implementing-high-availability-with-azure-traffic-manager-a-practical-guide-3nhf</guid>
      <description>&lt;p&gt;&lt;strong&gt;What We're Building&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this hands-on exercise, we'll create a high-availability solution for web applications using Azure Traffic Manager. Many organizations face the challenge of keeping their web applications available during regional outages or maintenance. We're going to solve this by deploying web apps across two different Azure regions and setting up automatic failover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our Approach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll work through four main tasks:&lt;/p&gt;

&lt;p&gt;Creating web applications in two Azure regions&lt;/p&gt;

&lt;p&gt;Setting up a Traffic Manager profile&lt;/p&gt;

&lt;p&gt;Configuring endpoints for failover&lt;/p&gt;

&lt;p&gt;Testing our high-availability setup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 1: Creating the Web Applications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's start by creating our first web application in the East US region.&lt;/p&gt;

&lt;p&gt;Open the Azure portal and select "Create a resource," then choose "Web App." If you don't see it immediately, use the search box to find it.&lt;/p&gt;

&lt;p&gt;Now we'll configure our first web app with these settings:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subscription&lt;/strong&gt;: Your Azure subscription&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource group&lt;/strong&gt;: Create new named "Contoso-RG-TM1"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: ContosoWebAppEastUS followed by your initials&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish&lt;/strong&gt;: Code&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime stack:&lt;/strong&gt; ASP.NET V4.8&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk89clcdpym9ldgg1jn9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk89clcdpym9ldgg1jn9j.png" alt=" " width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operating system:&lt;/strong&gt; Windows&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Region:&lt;/strong&gt; East US&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows Plan:&lt;/strong&gt; Create new named "ContosoAppServicePlanEastUS"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing Plan:&lt;/strong&gt; Standard S1&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegmcu0rxrxt5h4ny8kry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegmcu0rxrxt5h4ny8kry.png" alt=" " width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;"Monitoring"&lt;/strong&gt; tab and select "No" for Application Insights to keep things simple for this exercise.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnmo0kivyo34jcg2cw1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnmo0kivyo34jcg2cw1e.png" alt=" " width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review your settings and create the web app&lt;/strong&gt;. Azure will now deploy your first web application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz1q764wo1ljsyan5d1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz1q764wo1ljsyan5d1t.png" alt=" " width="699" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkg0vxy6ja33woi7ai31b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkg0vxy6ja33woi7ai31b.png" alt=" " width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's create our second web app in West Europe for redundancy. Repeat the same process but with these different settings:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource group&lt;/strong&gt;: Create new named "Contoso-RG-TM2"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: ContosoWebAppWestEurope followed by your initials&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Region&lt;/strong&gt;: West Europe&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows Plan&lt;/strong&gt;: Create new named "ContosoAppServicePlanWestEurope"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mhz04jfzl08xump69ux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mhz04jfzl08xump69ux.png" alt=" " width="751" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitcdyiiwvrc5efucffnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitcdyiiwvrc5efucffnc.png" alt=" " width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7qbv9jyt92lwds9hmft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7qbv9jyt92lwds9hmft.png" alt=" " width="659" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxq6kphe49ojggtpftmi4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxq6kphe49ojggtpftmi4.png" alt=" " width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 2: Creating the Traffic Manager Profile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now we'll create the Traffic Manager profile that will handle our traffic routing.&lt;/p&gt;

&lt;p&gt;From the Azure portal home, select** "Create a resource"** and search for &lt;strong&gt;"Traffic Manager profile."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click** "Create"** and configure the profile with these settings:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: TMProfile followed by your initials&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routing method&lt;/strong&gt;: Priority&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subscription&lt;/strong&gt;: Your subscription&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource group:&lt;/strong&gt; Contoso-RG-TM1&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource group location&lt;/strong&gt;: East US&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd22olaqs7ckr0tcw7ck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd22olaqs7ckr0tcw7ck.png" alt=" " width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Review and create the profile. This sets up our traffic management foundation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w612t84mrcc047jfui9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w612t84mrcc047jfui9.png" alt=" " width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To verify both web apps are ready, go to "All services" in the left navigation, select "Web," then "App Services." You should see both web applications listed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 3: Adding Traffic Manager Endpoints&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With our Traffic Manager profile ready, we need to connect our web apps as endpoints.&lt;/p&gt;

&lt;p&gt;Find your Traffic Manager profile in "&lt;strong&gt;All resources&lt;/strong&gt;" and select it. Under** "Settings,"** &lt;strong&gt;choose "Endpoints,"&lt;/strong&gt; then click &lt;strong&gt;"Add."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzdcmnjg4wi8xx2jbh6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzdcmnjg4wi8xx2jbh6n.png" alt=" " width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gmtgdqvykztw5il58os.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gmtgdqvykztw5il58os.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure our primary endpoint:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type:&lt;/strong&gt; Azure endpoint&lt;/p&gt;

&lt;p&gt;**Name: **myPrimaryEndpoint&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target resource type&lt;/strong&gt;: App Service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target resource:&lt;/strong&gt; ContosoWebAppEastUS (East US)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priority:&lt;/strong&gt; 1&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5k52kn92sutq3r6aia6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5k52kn92sutq3r6aia6.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click** "Add"** to create the primary endpoint.&lt;/p&gt;

&lt;p&gt;Now let's add our failover endpoint using the same process:&lt;/p&gt;

&lt;p&gt;**Name: **myFailoverEndpoint&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target resource:&lt;/strong&gt; ContosoWebAppWestEurope (West Europe)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Priority:&lt;/strong&gt; 2&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc205n65q2d64nm7k7k0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc205n65q2d64nm7k7k0q.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The priority setting means traffic will automatically route to our West Europe endpoint if the primary East US endpoint becomes unhealthy.&lt;/p&gt;

&lt;p&gt;For better security, let's update the monitoring settings. Go to &lt;strong&gt;"Configuration"&lt;/strong&gt; under Settings, change the protocol to &lt;strong&gt;HTTPS and port to 443,&lt;/strong&gt; then save.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0vqyan9okkv5xnrm93t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0vqyan9okkv5xnrm93t.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a few minutes, both endpoints should show &lt;strong&gt;"Online"&lt;/strong&gt; status, indicating they're ready to handle traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rew0nuhh7yrwiqgawlr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rew0nuhh7yrwiqgawlr.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 4: Testing Our Traffic Manager Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now for the exciting part - testing our high-availability solution!&lt;/p&gt;

&lt;p&gt;Go to your Traffic Manager profile overview and copy the DNS name.&lt;/p&gt;

&lt;p&gt;Open a new browser tab and paste the DNS name (contoso-tmprofile.trafficmanager.net) into the address bar.&lt;/p&gt;

&lt;p&gt;If you see a 404 error, don't worry - this is common with new web apps.&lt;/p&gt;

&lt;p&gt;Simply disable and re-enable the profile from the overview page, then refresh.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7od97zqektsh8usvxpd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7od97zqektsh8usvxpd5.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Currently,&lt;/strong&gt; all traffic is routing to our primary East US endpoint because we set it to priority 1.&lt;/p&gt;

&lt;p&gt;Now let's test our failover capability. We'll simulate an outage by disabling the primary endpoint.&lt;/p&gt;

&lt;p&gt;On the Traffic Manager overview, click the number "2" next to Endpoints.&lt;/p&gt;

&lt;p&gt;Find myPrimaryEndpoint and click the edit (pencil) icon.&lt;/p&gt;

&lt;p&gt;Uncheck &lt;strong&gt;"Enable Endpoint"&lt;/strong&gt; and save.&lt;/p&gt;

&lt;p&gt;The primary endpoint should now show as disabled.&lt;/p&gt;

&lt;p&gt;Open a new browser session and navigate to your Traffic Manager DNS name again. You should still see your web application working, but now it's being served from the West Europe endpoint!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cleaning Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're finished testing, remember to clean up your resources to avoid ongoing charges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Cloud Shell in the Azure portal and run&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;text&lt;br&gt;
Remove-AzResourceGroup -Name 'Contoso-RG-TM1' -Force -AsJob&lt;br&gt;
Remove-AzResourceGroup -Name 'Contoso-RG-TM2' -Force -AsJob&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9lxzejibtej6bklo9baf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9lxzejibtej6bklo9baf.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What We Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Through this exercise, we've built a robust high-availability solution that can automatically handle regional outages. The key takeaways are:&lt;/p&gt;

&lt;p&gt;Azure Traffic Manager provides DNS-level load balancing across global regions&lt;/p&gt;

&lt;p&gt;Priority routing ensures traffic goes to your preferred endpoints first&lt;/p&gt;

&lt;p&gt;Automatic health monitoring and failover keep your applications available&lt;/p&gt;

&lt;p&gt;Geographic redundancy protects against regional disruptions&lt;/p&gt;

&lt;p&gt;This solution is particularly valuable for e-commerce sites, business applications, and any service where downtime means lost revenue or productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to explore further, consider:&lt;/p&gt;

&lt;p&gt;Trying different routing methods like weighted or geographic routing&lt;/p&gt;

&lt;p&gt;Adding custom domains and SSL certificates&lt;/p&gt;

&lt;p&gt;Setting up monitoring and alerts for your endpoints&lt;/p&gt;

&lt;p&gt;Implementing nested Traffic Manager profiles for complex scenarios&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember,&lt;/strong&gt; the best disaster recovery plan is one you've tested thoroughly - and now you have the skills to build and test these solutions in Azure.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>disasterrecovery</category>
      <category>highavailability</category>
    </item>
    <item>
      <title>Mastering High Availability: My Azure Load Balancer Implementation Journey</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Wed, 01 Oct 2025 16:45:36 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/mastering-high-availability-my-azure-load-balancer-implementation-journey-5hab</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/mastering-high-availability-my-azure-load-balancer-implementation-journey-5hab</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Challenge: Ensuring Application Reliability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today's digital landscape, application downtime is not an option. Whether you're running an e-commerce platform, internal business applications, or customer-facing services, a single server failure can mean lost revenue, decreased productivity, and damaged reputation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This was the challenge I set out to solve by implementing Azure's&lt;/strong&gt; Internal Load Balancer - a solution that ensures applications remain available even when individual servers fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Load Balancing&lt;/strong&gt;&lt;br&gt;
At its core, load balancing is about distributing network traffic across multiple servers. Think of it like a traffic controller at a busy intersection:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without load balancer&lt;/strong&gt;: One server handles all traffic (single point of failure)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With load balancer&lt;/strong&gt;: Traffic automatically routes to available servers (high availability)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Implementation Approach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building the Foundation: Virtual Network&lt;br&gt;
&lt;strong&gt;I started by creating a secure network environment&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0o072uunu5eg0dd63qv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0o072uunu5eg0dd63qv.png" alt=" " width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjzej5yau55pxd5wqci9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjzej5yau55pxd5wqci9.png" alt=" " width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual Network&lt;/strong&gt;: IntLB-VNet with IP range 10.1.0.0/16&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzhqjijrutods0ocaxpix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzhqjijrutods0ocaxpix.png" alt=" " width="727" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87ngd5gsjamzty3oahm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87ngd5gsjamzty3oahm9.png" alt=" " width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Segmented Subnets&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend subnet&lt;/strong&gt; (10.1.0.0/24) for web servers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend subnet&lt;/strong&gt; (10.1.2.0/24) for load balancer&lt;/p&gt;

&lt;p&gt;Bastion subnet for secure management&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyre823589peaa9fq43w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyre823589peaa9fq43w.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwmt13jtxk4oc98i6eyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwmt13jtxk4oc98i6eyv.png" alt=" " width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphsrzpk9b71h5j43uz2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphsrzpk9b71h5j43uz2o.png" alt=" " width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This segmentation follows security best practices, separating different components into their own network spaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating the Backend Servers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of using automated templates, I manually created three virtual machines to better understand the process:&lt;/p&gt;

&lt;p&gt;web1, web2, web3 - Identical Windows Server configurations&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Availability Set&lt;/strong&gt;: Ensures VMs are distributed across multiple physical servers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Public IPs&lt;/strong&gt;: Enhanced security through internal-only access&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0a63ak2zbpm5agikanu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0a63ak2zbpm5agikanu.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mt0kozsswnlv0r4peb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mt0kozsswnlv0r4peb2.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F334hey3ddsh8moy4zhm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F334hey3ddsh8moy4zhm8.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3cdwfdy7ktf0fao18wy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3cdwfdy7ktf0fao18wy.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The manual creation process, while more time-consuming, provided valuable insights into Azure VM configuration and networking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Web Servers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each VM required individual configuration:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secure Connection&lt;/strong&gt;: Using Azure Bastion for browser-based remote access&lt;/p&gt;

&lt;p&gt;IIS Installation: PowerShell commands to install web server functionality&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom Test Pages&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;web1: "Hello from Web Server 1"&lt;/p&gt;

&lt;p&gt;web2: "Hello from Web Server 2"&lt;/p&gt;

&lt;p&gt;web3: "Hello from Web Server 3"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F248wct6wqg0qupsd7bzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F248wct6wqg0qupsd7bzg.png" alt=" " width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cowbjwimbuuvf6m4nar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cowbjwimbuuvf6m4nar.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2koipcw8ghjiod062br.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2koipcw8ghjiod062br.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This hands-on approach revealed how enterprise applications are typically deployed across multiple servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Load Balancer Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Components Created&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend Pool&lt;/strong&gt;: Group containing all three web servers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1fi9flchs2fwv614lxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1fi9flchs2fwv614lxi.png" alt=" " width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6d8rlxl39eh96gmwfig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6d8rlxl39eh96gmwfig.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96pdn0d3inpxlwmi1cfv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96pdn0d3inpxlwmi1cfv.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6irh386yxbk9c6sfgyd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6irh386yxbk9c6sfgyd0.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeyjvmsfd0j8ruwpdf0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeyjvmsfd0j8ruwpdf0p.png" alt=" " width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsdyh9sldyrb9bujzi6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsdyh9sldyrb9bujzi6g.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotfudcgmz9ja40zz3lyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotfudcgmz9ja40zz3lyh.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F264x4fl2zm5cbtps8tq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F264x4fl2zm5cbtps8tq2.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Health Probe&lt;/strong&gt;: Regular checks to ensure servers are responsive&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figdudor7sb7ippo97tuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figdudor7sb7ippo97tuv.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql7wrs2zwd1q2tk7qsh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql7wrs2zwd1q2tk7qsh2.png" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Load Balancing Rule&lt;/strong&gt;: Distributes HTTP traffic on port 80&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbszhnv9ng8bbt8xmptj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbszhnv9ng8bbt8xmptj.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbshapvpd0mc8awn6a4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbshapvpd0mc8awn6a4e.png" alt=" " width="769" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend IP&lt;/strong&gt;: Internal IP address (10.1.0.7) for accessing the service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Internal Load Balancer?&lt;/strong&gt;&lt;br&gt;
I chose an internal load balancer because:&lt;/p&gt;

&lt;p&gt;The application doesn't need direct internet access&lt;/p&gt;

&lt;p&gt;Enhanced security through network isolation&lt;/p&gt;

&lt;p&gt;Perfect for internal business applications&lt;/p&gt;

&lt;p&gt;Cost-effective compared to public load balancers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing and Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most exciting part was testing the solution:&lt;/p&gt;

&lt;p&gt;Connected to a test VM within the same network&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41x6yi5x9of15f4yd9lz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41x6yi5x9of15f4yd9lz.png" alt=" " width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdec1pps7cxmfxa6oixy3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdec1pps7cxmfxa6oixy3.png" alt=" " width="724" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2igiua8bnfplyv781u7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2igiua8bnfplyv781u7.png" alt=" " width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmymxooe2ou2m23vt3i55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmymxooe2ou2m23vt3i55.png" alt=" " width="745" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Accessed the load balancer IP (10.1.0.7)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu565ut13ysbcq7912x2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu565ut13ysbcq7912x2o.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnu7zlyqm5qx3zhmkv7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnu7zlyqm5qx3zhmkv7y.png" alt=" " width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd3k839wmrtz0nvsyq0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd3k839wmrtz0nvsyq0s.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6b5d6ugl69kd47fv2q2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6b5d6ugl69kd47fv2q2e.png" alt=" " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb5gfygbubfgg0me8ci5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb5gfygbubfgg0me8ci5.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observed traffic distribution across all three servers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohf73di52emkm3nljpjv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohf73di52emkm3nljpjv.png" alt=" " width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwz03w5az58u1yq9nfhpj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwz03w5az58u1yq9nfhpj.png" alt=" " width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The magic happened when refreshing the browser - each request was served by a different backend VM, demonstrating perfect load distribution.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>loadbalancing</category>
      <category>highavailability</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Building Azure's Private Cloud Highway: My ExpressRoute Implementation</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Mon, 29 Sep 2025 10:13:55 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/building-azures-private-cloud-highway-my-expressroute-implementation-bhd</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/building-azures-private-cloud-highway-my-expressroute-implementation-bhd</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Challenge of Cloud Connectivity&lt;/strong&gt;&lt;br&gt;
Many businesses face a critical problem when moving to the cloud: how to connect their offices to Azure securely and reliably. Standard internet connections expose sensitive data to risks and suffer from unpredictable performance. This becomes especially critical for financial institutions, healthcare organizations, and enterprises handling large data transfers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discovering the Solution&lt;/strong&gt;: Azure ExpressRoute&lt;br&gt;
During my Azure networking certification journey, I implemented ExpressRoute - Microsoft's solution for private cloud connectivity. Unlike traditional VPNs that use the public internet, ExpressRoute creates a dedicated private connection between your network and Azure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Makes ExpressRoute Different&lt;/strong&gt;&lt;br&gt;
ExpressRoute bypasses the public internet entirely. Your data travels through a dedicated connection provided by partners like Equinix, AT&amp;amp;T, or Verizon. This approach offers three key advantages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Data never touches the public internet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Predictable Performance&lt;/strong&gt;: Consistent latency and throughput&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Higher Reliability&lt;/strong&gt;: 99.95% uptime guarantee&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Implementation Journey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Creating the Resource Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started by creating the foundational resource group in East US 2 region:&lt;/p&gt;

&lt;p&gt;Resource Group Name: ExpressRouteResourceGroup&lt;/p&gt;

&lt;p&gt;Location: East US 2&lt;/p&gt;

&lt;p&gt;This resource group served as the container for all ExpressRoute components, ensuring organized management and clean resource grouping.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc89ayvm1adbza29mtgke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc89ayvm1adbza29mtgke.png" alt=" " width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zo3kgrwfmgmzfsjjqv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zo3kgrwfmgmzfsjjqv9.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsspscqrm7jlyt3i5nd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsspscqrm7jlyt3i5nd6.png" alt=" " width="766" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Leveraging Existing Virtual Network&lt;/strong&gt;&lt;br&gt;
Since I already had the virtual network infrastructure in place, I used my existing virtual network:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual Network:&lt;/strong&gt; CoreServicesVNet&lt;/p&gt;

&lt;p&gt;This approach reflects real-world scenarios where organizations build on existing Azure networking infrastructure&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Creating the ExpressRoute Circuit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdic9fwn79z1ethlfp29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdic9fwn79z1ethlfp29.png" alt=" " width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the foundation in place, I configured the ExpressRoute circuit with these specifications:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Group:&lt;/strong&gt; ExpressRouteResourceGroup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provider:&lt;/strong&gt; Equinix&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peering Location:&lt;/strong&gt; Seattle&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bandwidth:&lt;/strong&gt; 50 Mbps&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SKU:&lt;/strong&gt; Standard&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; East US 2&lt;/p&gt;

&lt;p&gt;This circuit represents the logical connection that will eventually link to physical infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjjykc1i0jk6a3m01zwh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjjykc1i0jk6a3m01zwh.png" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrfstwrfp116riqi6igk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrfstwrfp116riqi6igk.png" alt=" " width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem4fdsba31sb2cv7mugd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem4fdsba31sb2cv7mugd.png" alt=" " width="785" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fcug0t57amo3m1xhhl4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fcug0t57amo3m1xhhl4.png" alt=" " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: The Critical Service Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After creating the circuit, I retrieved the service key - a unique identifier that connects Azure with the connectivity provider. This key must be shared with your provider to initiate the physical circuit provisioning.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03b7b0ymdxbos8pldbgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03b7b0ymdxbos8pldbgx.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8btl4ebi3djrbwti6r9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8btl4ebi3djrbwti6r9.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68lu16sxlzq0ezrt123y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68lu16sxlzq0ezrt123y.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Reality of Enterprise Connectivity&lt;/strong&gt;&lt;br&gt;
Here's what most people don't realize: creating the ExpressRoute circuit in Azure is only the beginning. The provider status shows "Not provisioned" because the physical infrastructure hasn't been built yet.&lt;/p&gt;

&lt;p&gt;In the real world, this triggers a 30-60 day process where providers like Equinix:&lt;/p&gt;

&lt;p&gt;Build dedicated fiber optic connections&lt;/p&gt;

&lt;p&gt;Establish cross-connects at peering locations&lt;/p&gt;

&lt;p&gt;Test end-to-end connectivity&lt;/p&gt;

&lt;p&gt;Hand off to Microsoft&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters for Businesses&lt;/strong&gt;&lt;br&gt;
For organizations handling sensitive data or requiring guaranteed performance, ExpressRoute transforms cloud operations:&lt;/p&gt;

&lt;p&gt;Financial institutions can process transactions with consistent low latency&lt;br&gt;
Healthcare organizations can transfer patient data while maintaining compliance&lt;br&gt;
Global enterprises can connect offices worldwide with reliable performance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Implementation Insights&lt;/strong&gt;&lt;br&gt;
The implementation taught me several crucial lessons:&lt;/p&gt;

&lt;p&gt;Start with proper resource group organization in your target region&lt;/p&gt;

&lt;p&gt;ExpressRoute integrates seamlessly with existing virtual networks&lt;/p&gt;

&lt;p&gt;Plan ahead: ExpressRoute provisioning takes time&lt;/p&gt;

&lt;p&gt;Choose providers strategically based on your locations&lt;/p&gt;

&lt;p&gt;Monitor both provider and circuit status during deployment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Business Impact&lt;/strong&gt;&lt;br&gt;
While ExpressRoute requires more planning and investment than standard connections, the benefits justify the cost for enterprises where downtime means lost revenue or security breaches mean regulatory penalties.&lt;/p&gt;

&lt;p&gt;This infrastructure isn't just about technology - it's about building the foundation for digital transformation at scale.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>djangocms</category>
      <category>networking</category>
    </item>
    <item>
      <title>Configuring Azure ExpressRoute Gateway: A Step-by-Step Guide with Real-World Benefits</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Fri, 26 Sep 2025 10:14:22 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/configuring-azure-expressroute-gateway-a-step-by-step-guide-with-real-world-benefits-fhd</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/configuring-azure-expressroute-gateway-a-step-by-step-guide-with-real-world-benefits-fhd</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
In today's hybrid cloud environments, secure and reliable connectivity between on-premises infrastructure and cloud services is crucial. Azure ExpressRoute provides a dedicated private connection that bypasses the public internet, offering enhanced security, reliability, and performance. In this comprehensive guide, I'll walk you through configuring an ExpressRoute Gateway based on Microsoft's AZ-700 certification lab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why ExpressRoute Matters in Modern Enterprises&lt;/strong&gt;&lt;br&gt;
The Problem with Traditional Internet Connections&lt;br&gt;
Many organizations initially connect to Azure using VPN over the public internet, which presents several challenges:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Concerns&lt;/strong&gt;: Data traversing public networks is vulnerable to interception&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unpredictable Performance&lt;/strong&gt;: Internet congestion leads to variable latency and throughput&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limited Reliability&lt;/strong&gt;: Typical SLAs of 99.9% may not meet enterprise requirements&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bandwidth Constraints&lt;/strong&gt;: Shared internet connections can't guarantee consistent performance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ExpressRoute Solution&lt;/strong&gt;&lt;br&gt;
Azure ExpressRoute addresses these challenges by providing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private Connectivity&lt;/strong&gt;: Dedicated circuit between your network and Azure&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Data never touches the public internet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Predictable Performance&lt;/strong&gt;: Consistent latency and throughput guarantees&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Higher Availability&lt;/strong&gt;: 99.95% SLA for dedicated connections&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global Reach&lt;/strong&gt;: Connect across regions with ExpressRoute Global Reach&lt;/p&gt;

&lt;p&gt;Lab Environment Setup&lt;br&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Before we begin, ensure you have&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Azure subscription with appropriate permissions&lt;/p&gt;

&lt;p&gt;Basic understanding of Azure networking concepts&lt;/p&gt;

&lt;p&gt;Approximately 60 minutes for deployment (including 45-minute gateway wait time)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Creating the Virtual Network and Gateway Subnet&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Foundation&lt;/strong&gt;: Virtual Network (VNet)&lt;/p&gt;

&lt;p&gt;azurecli&lt;/p&gt;

&lt;h1&gt;
  
  
  Create the resource group
&lt;/h1&gt;

&lt;p&gt;az group create --name ContosoResourceGroup --location eastus&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Steps:&lt;/strong&gt;&lt;br&gt;
Navigate to Virtual Networks&lt;/p&gt;

&lt;p&gt;Search "virtual network" in Azure Portal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmorp5bhx1z6belsbgfp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmorp5bhx1z6belsbgfp8.png" alt=" " width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select "Virtual networks" from results&lt;/p&gt;

&lt;p&gt;Create New Virtual Network&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0flik5hrpiyoztsn28b5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0flik5hrpiyoztsn28b5.png" alt=" " width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basics Tab&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; CoreServicesVNet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Group:&lt;/strong&gt; ContosoResourceGroup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Region:&lt;/strong&gt; East US&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4d8leykugcb744yh5oex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4d8leykugcb744yh5oex.png" alt=" " width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configure IP Address Space&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IPv4 address space&lt;/strong&gt;: 10.20.0.0/16&lt;/p&gt;

&lt;p&gt;Click "+ Add subnet" for gateway configuration&lt;/p&gt;

&lt;p&gt;Create Gateway Subnet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subnet purpose&lt;/strong&gt;: Virtual Network Gateway&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Address space&lt;/strong&gt;: 10.20.0.0/27&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical Note&lt;/strong&gt;: The subnet name automatically populates as GatewaySubnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feit91hu53imy7s4ptr6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feit91hu53imy7s4ptr6g.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Validate and Create&lt;/p&gt;

&lt;p&gt;Review configuration&lt;/p&gt;

&lt;p&gt;Click "Create" after validation passes&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62vhffcy81pl8m1sa6wg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62vhffcy81pl8m1sa6wg.png" alt=" " width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43vds8rcbhy6dutwwmey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43vds8rcbhy6dutwwmey.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Challenges &amp;amp; Solutions:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge         **&lt;/strong&gt;Solution**&lt;br&gt;
IP address conflicts    Use non-overlapping CIDR ranges (10.20.0.0/16)&lt;br&gt;
Subnet size too small   Gateway subnet requires /27 or larger&lt;br&gt;
Region availability issues  Choose regions with ExpressRoute support&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Creating the Virtual Network Gateway&lt;/strong&gt;&lt;br&gt;
Understanding Gateway Types&lt;br&gt;
&lt;strong&gt;Azure offers two primary gateway types&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gateway Type  Use Case    Key Characteristics&lt;/strong&gt;&lt;br&gt;
VPN Gateway Internet-based encrypted connections    Lower cost, easier setup&lt;br&gt;
ExpressRoute Gateway    Private dedicated connections   Higher performance, enhanced security&lt;br&gt;
Implementation Steps:&lt;br&gt;
Navigate to Virtual Network Gateways&lt;/p&gt;

&lt;p&gt;Search "&lt;strong&gt;virtual network gateway&lt;/strong&gt;" in Azure Portal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq868po4nbj1exsbebevo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq868po4nbj1exsbebevo.png" alt=" " width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select "&lt;strong&gt;Virtual network gateways" from results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create New Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click "+ Create" to start configuration&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwfjnoeaoqknd3o2tz5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwfjnoeaoqknd3o2tz5k.png" alt=" " width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure Gateway Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Details&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Resource Group: ContosoResourceGroup&lt;/p&gt;

&lt;p&gt;Instance Details:&lt;/p&gt;

&lt;p&gt;Name: CoreServicesVnetGateway&lt;/p&gt;

&lt;p&gt;Region: East US&lt;/p&gt;

&lt;p&gt;Gateway type: ExpressRoute ⚠️ (Critical selection!)&lt;/p&gt;

&lt;p&gt;SKU: Standard&lt;/p&gt;

&lt;p&gt;Virtual network: CoreServicesVNet&lt;/p&gt;

&lt;p&gt;Subnet: GatewaySubnet (auto-populated)&lt;/p&gt;

&lt;p&gt;Validation and Deployment&lt;/p&gt;

&lt;p&gt;Click "Review + create"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnioui9q4p1he4i7scocd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnioui9q4p1he4i7scocd.png" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait for validation (green checkmark)&lt;/p&gt;

&lt;p&gt;Click "Create" to start deployment&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ezfdwaefqt9rixots24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ezfdwaefqt9rixots24.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 45-Minute Wait: What's Happening?&lt;/strong&gt;&lt;br&gt;
During this extended deployment period, Azure is:&lt;/p&gt;

&lt;p&gt;Provisioning dedicated infrastructure for your gateway&lt;/p&gt;

&lt;p&gt;Establishing routing infrastructure within Azure backbone&lt;/p&gt;

&lt;p&gt;Configuring high-availability components&lt;/p&gt;

&lt;p&gt;Setting up management and monitoring capabilities&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9msz0bwnt32zuipbtm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9msz0bwnt32zuipbtm8.png" alt=" " width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-World Benefits&lt;/strong&gt; and Use Cases&lt;br&gt;
Enterprise Scenario: Financial Services Company&lt;br&gt;
Challenge: A financial institution needed secure, low-latency connectivity for real-time trading applications between their data center and Azure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Implemented ExpressRoute with Standard SKU gateway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Latency reduced from 45ms (VPN) to 8ms (ExpressRoute)&lt;/p&gt;

&lt;p&gt;Achieved 99.95% uptime guarantee&lt;/p&gt;

&lt;p&gt;Met regulatory compliance requirements for data protection&lt;/p&gt;

&lt;p&gt;Healthcare Organization Use Case&lt;br&gt;
Requirement: Secure transfer of patient data between hospital networks and Azure for AI-powered diagnostics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits Realized&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;HIPAA compliance through private connectivity&lt;/p&gt;

&lt;p&gt;Consistent performance for large medical imaging transfers&lt;/p&gt;

&lt;p&gt;Enhanced security for sensitive patient data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Configuration Considerations&lt;/strong&gt;&lt;br&gt;
SKU Selection Guide&lt;br&gt;
SKU Maximum Connections BGP Routes  Typical Use Cases&lt;br&gt;
Standard    4   4,000   Medium enterprises, dev/test&lt;br&gt;
High Performance    4   4,000   Production workloads&lt;br&gt;
Ultra Performance   16  10,000  Large enterprises, mission-critical&lt;br&gt;
Cost Optimization Strategies&lt;br&gt;
Right-size your gateway: Choose appropriate SKU for your needs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitor utilization&lt;/strong&gt;: Use Azure Monitor to track performance&lt;/p&gt;

&lt;p&gt;Consider hybrid approach: Combine ExpressRoute with VPN for backup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting Common Issues&lt;/strong&gt;&lt;br&gt;
Deployment Failures&lt;br&gt;
Problem: Gateway deployment fails after 45 minutes&lt;br&gt;
Solution:&lt;/p&gt;

&lt;p&gt;Verify VNet and subnet exist&lt;/p&gt;

&lt;p&gt;Check resource group permissions&lt;/p&gt;

&lt;p&gt;Ensure region supports ExpressRoute&lt;/p&gt;

&lt;p&gt;Connectivity Issues&lt;br&gt;
Problem: Gateway deployed but no connectivity&lt;br&gt;
Solution:&lt;/p&gt;

&lt;p&gt;Verify ExpressRoute circuit provisioning&lt;/p&gt;

&lt;p&gt;Check BGP peering configuration&lt;/p&gt;

&lt;p&gt;Validate route filters and network security groups&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Features to Explore&lt;/strong&gt;&lt;br&gt;
ExpressRoute Global Reach&lt;br&gt;
Enable direct connectivity between on-premises sites through Azure backbone, reducing latency and costs for multi-site organizations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ExpressRoute FastPath&lt;/strong&gt;&lt;br&gt;
Bypass the gateway for improved performance for traffic within the same virtual network.&lt;/p&gt;

&lt;p&gt;Monitoring and Management Best Practices&lt;br&gt;
Set up alerts for gateway health metrics&lt;/p&gt;

&lt;p&gt;Implement Azure Monitor for performance tracking&lt;/p&gt;

&lt;p&gt;Use Network Watcher for troubleshooting connectivity issues&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regularly review utilization and performance metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Configuring an Azure ExpressRoute Gateway is a critical skill for cloud architects and network engineers. While the 45-minute deployment time requires patience, the benefits of dedicated, secure connectivity justify the investment for production workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;:&lt;br&gt;
ExpressRoute provides superior performance and security compared to VPN&lt;/p&gt;

&lt;p&gt;Proper subnet planning is crucial for successful deployment&lt;/p&gt;

&lt;p&gt;Gateway SKU selection impacts both performance and cost&lt;/p&gt;

&lt;p&gt;Monitoring and management are essential for maintaining optimal performance&lt;/p&gt;

&lt;p&gt;By following this guide, you've taken a significant step toward mastering Azure networking solutions and preparing for the AZ-700 certification.&lt;/p&gt;

&lt;p&gt;Next Steps&lt;br&gt;
Practice with different SKU types to understand performance characteristics&lt;/p&gt;

&lt;p&gt;Explore ExpressRoute Direct for massive data transfer requirements&lt;/p&gt;

&lt;p&gt;Experiment with coexistence of ExpressRoute and VPN for hybrid scenarios&lt;/p&gt;

&lt;p&gt;Study route filtering and network security integration&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article is based on Microsoft's AZ-700 Designing and Implementing Microsoft Azure Networking Solutions certification materials. All screenshots and configurations are from hands-on lab experience.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tags: #Azure #ExpressRoute #Networking #CloudComputing #AZ700 #DevOps #HybridCloud&lt;/p&gt;

&lt;p&gt;Skill Level: Intermediate&lt;/p&gt;

&lt;p&gt;Time Required: 60 minutes (including deployment time)&lt;/p&gt;

</description>
      <category>azure</category>
      <category>virtualnetwork</category>
      <category>azuregateway</category>
      <category>expressroute</category>
    </item>
    <item>
      <title>From Zero to Cloud Network Hero: My AZ-700 Virtual WAN Lab Journey</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Thu, 25 Sep 2025 09:19:37 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/from-zero-to-cloud-network-hero-my-az-700-virtual-wan-lab-journey-1j0n</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/from-zero-to-cloud-network-hero-my-az-700-virtual-wan-lab-journey-1j0n</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Moment Everything Clicked&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"I'm supposed to create my Virtual WAN in East US but then put the hub in West US? That seems backwards..."&lt;/p&gt;

&lt;p&gt;That was my initial confusion when I started the AZ-700 Virtual WAN lab. As someone relatively new to Azure networking, the concepts felt abstract until I actually built something hands-on. In this article, I'll take you through my journey from confusion to clarity, complete with screenshots and practical explanations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Even is Azure Virtual WAN&lt;/strong&gt;? (And Why Should You Care)&lt;br&gt;
Before we dive into the lab, let me save you the confusion I experienced. Azure Virtual WAN is essentially Microsoft's answer to complex global networking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think of it like this&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional networking&lt;/strong&gt;: Building individual roads between every city (manual, complex)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual WAN&lt;/strong&gt;: Creating a highway system with on-ramps everywhere (automated, scalable)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem It Solves&lt;/strong&gt;:&lt;br&gt;
Imagine your company has offices in Seattle, New York, and London. Each needs to connect to Azure resources securely. Without Virtual WAN, you'd be configuring VPNs and routes manually for each location. With Virtual WAN, it's all managed through a single interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lab Scenario&lt;/strong&gt;: Building Contoso's Global Network&lt;br&gt;
Our mission: Create a Virtual WAN for Contoso that can connect their West Coast research team to Azure resources efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 1: Creating the Virtual WAN&lt;/strong&gt; - Laying the Foundation&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4q5896zwwpjzjpa1sdyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4q5896zwwpjzjpa1sdyv.png" alt=" " width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Actually Did&lt;/strong&gt;:&lt;br&gt;
Created a Virtual WAN named ContosoVirtualWAN&lt;/p&gt;

&lt;p&gt;Selected Standard type for full functionality&lt;/p&gt;

&lt;p&gt;Chose a resource group to keep everything organized&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopjclbo293fpclk54mih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopjclbo293fpclk54mih.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeg9jaa1kep77ial2jay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeg9jaa1kep77ial2jay.png" alt=" " width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Aha!" Moment&lt;/strong&gt;:&lt;br&gt;
The Virtual WAN itself isn't a physical thing living in a data center. It's a global management overlay - think of it as the mission control center that will coordinate all our networking components across different regions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Step Matters&lt;/strong&gt;:&lt;br&gt;
This single resource becomes the brain of our entire network operation. Instead of managing multiple disconnected networks, we now have one pane of glass for global connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 2: Creating the Virtual Hub&lt;/strong&gt; - The Regional Gateway&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoxnfd0likm0z0wxs5f4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoxnfd0likm0z0wxs5f4.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I Actually Did:&lt;br&gt;
Created a hub named ContosoVirtualWANHub-WestUS&lt;/p&gt;

&lt;p&gt;Placed it in West US (strategic for West Coast users)&lt;/p&gt;

&lt;p&gt;Allocated IP space 10.60.0.0/24 for the hub&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qa55q2gt3d1w1w0req3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qa55q2gt3d1w1w0req3.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enabled Site-to-site VPN capabilities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlg9c8msznn8g8msc4b4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlg9c8msznn8g8msc4b4.png" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbw3zummx9q8zr9yxm68n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbw3zummx9q8zr9yxm68n.png" alt=" " width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7iif4bgwd2nwlkaotio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7iif4bgwd2nwlkaotio.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Aha!" Moment&lt;/strong&gt;:&lt;br&gt;
Here's where the East US/West US confusion cleared up! The Virtual WAN is the global manager, while the hub is the regional connector. They can be in different regions because they serve different purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-World Benefit&lt;/strong&gt;:&lt;br&gt;
If Contoso has a research team in Seattle, they connect directly to the West US hub instead of routing through Virginia. This means:&lt;/p&gt;

&lt;p&gt;✅ Lower latency for West Coast users&lt;/p&gt;

&lt;p&gt;✅ Better performance for real-time applications&lt;/p&gt;

&lt;p&gt;✅ Redundancy if East US has issues&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Waiting Game&lt;/strong&gt;:&lt;br&gt;
This step takes about 30 minutes because Azure is provisioning actual VPN gateways behind the scenes. Perfect time for a coffee break! ☕&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 3: Connecting the VNet -&lt;/strong&gt; Bringing Cloud Resources Online&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuwse2fjzgyeeeueyw2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuwse2fjzgyeeeueyw2m.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Actually Did&lt;/strong&gt;:&lt;br&gt;
Connected ResearchVNet to our Virtual Hub&lt;/p&gt;

&lt;p&gt;Named the connection ContosoVirtualWAN-to-ResearchVNet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdf0hswsdkp3icjymonw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdf0hswsdkp3icjymonw.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configured route propagation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Aha!" Moment&lt;/strong&gt;:&lt;br&gt;
This is where the magic happens! By connecting the Virtual Network to our hub, we're essentially creating an on-ramp to our global highway system. Any resource in ResearchVNet can now communicate securely with any other connected resource.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Azure Handles Automatically&lt;/strong&gt;:&lt;br&gt;
Route propagation between regions&lt;/p&gt;

&lt;p&gt;Security policy enforcement&lt;/p&gt;

&lt;p&gt;Optimal path selection&lt;/p&gt;

&lt;p&gt;Traffic encryption&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Impact&lt;/strong&gt;:&lt;br&gt;
Researchers can now access their tools and data as if they're on the same local network, regardless of where they're physically located.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧹 The Most Important Step: Cleanup&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I Almost Skipped Thi&lt;/strong&gt;s:&lt;br&gt;
"&lt;strong&gt;I'm learning, why worry about cleanup?&lt;/strong&gt;" Then I remembered: Azure resources cost money when they're running!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Did&lt;/strong&gt;:&lt;br&gt;
Navigated to Resource Groups&lt;/p&gt;

&lt;p&gt;Selected ContosoResourceGroup&lt;/p&gt;

&lt;p&gt;Clicked "Delete resource group"&lt;/p&gt;

&lt;p&gt;Typed the name to confirm&lt;/p&gt;

&lt;p&gt;Watched everything disappear (satisfying!)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;:&lt;br&gt;
Always set up budget alerts in your Azure subscription. It's easy to forget about running resources when you're focused on learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Key Takeaways From My Journey&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Global vs Regional Thinking&lt;/strong&gt;:
Virtual WAN = Global management plane (the strategy)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Virtual Hub&lt;/strong&gt; = Regional execution point (the tactics)&lt;/p&gt;

&lt;p&gt;2.** Automation is Powerful**:&lt;br&gt;
What would take days of manual configuration now happens with a few clicks. Azure handles the complex routing behind the scenes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Performance Matters&lt;/strong&gt;:
Placing hubs close to users isn't just nice-to-have—it's critical for modern applications.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;4.** Cost Awareness**:&lt;br&gt;
Always clean up your learning environments. Cloud resources aren't free!&lt;/p&gt;

&lt;p&gt;🚀** Ready to Start Your Own Journey?**&lt;br&gt;
This lab transformed my understanding of cloud networking from theoretical to practical. The best part? You can recreate this exact experience through Microsoft's free learning resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Steps for Your Learning&lt;/strong&gt;:&lt;br&gt;
Try creating multiple hubs in different regions&lt;/p&gt;

&lt;p&gt;Experiment with Point-to-site VPN for remote users&lt;/p&gt;

&lt;p&gt;Explore ExpressRoute for dedicated private connections&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge Yourself&lt;/strong&gt;:&lt;br&gt;
What networking problems does your organization face? How could Virtual WAN solve them?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📚 Resources That Helped Me&lt;/strong&gt;:&lt;br&gt;
Microsoft Learn AZ-700 Path&lt;/p&gt;

&lt;p&gt;Azure Virtual WAN Documentation&lt;/p&gt;

&lt;p&gt;Cloud Skills Challenge: Azure Networking&lt;/p&gt;

</description>
      <category>az700</category>
      <category>azurefunctions</category>
      <category>networking</category>
      <category>virtualnetwork</category>
    </item>
    <item>
      <title>Mastering Azure VNet Peering: How I Connected Isolated Cloud Networks Like a Pro</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Wed, 24 Sep 2025 13:28:45 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/mastering-azure-vnet-peering-how-i-connected-isolated-cloud-networks-like-a-pro-49pl</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/mastering-azure-vnet-peering-how-i-connected-isolated-cloud-networks-like-a-pro-49pl</guid>
      <description>&lt;p&gt;&lt;strong&gt;The "Aha!" Moment That Changed Everything&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll never forget the moment I ran Test-NetConnection after setting up VNet peering and saw TcpTestSucceeded: True - after hours of failed connections, everything finally worked! Here's my real journey through Azure networking, complete with screenshots of every step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Setting Up My Test Environment (The Manual Way)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Why I Ditched the Templates&lt;/strong&gt;:&lt;br&gt;
The lab provided ARM templates, but I chose manual creation to really understand what was happening behind the scenes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Actually Did&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Created TestVM in ManufacturingVnet:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Group&lt;/strong&gt;: ContosoResourceGroup&lt;/p&gt;

&lt;p&gt;Location: UK West (to match my VNet)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F139unpwqrrxpu0gakycz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F139unpwqrrxpu0gakycz.png" alt=" " width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ql0th7wrx57y4p70u58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ql0th7wrx57y4p70u58.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual Network&lt;/strong&gt;: ManufacturingVnet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subnet&lt;/strong&gt;: default (10.30.0.0/24)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplnmoqx4xqrrpucuhn9m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplnmoqx4xqrrpucuhn9m.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24js49uckfj8w4fmjmzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24js49uckfj8w4fmjmzw.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verified TestVM1 in CoreServicesVnet&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztqooacynrwmm4csyoda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztqooacynrwmm4csyoda.png" alt=" " width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Already existed from previous lab&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: The RDP Struggle &amp;amp; Finding Better Solutions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem Every Azure Admin Faces&lt;/strong&gt;:&lt;br&gt;
RDP connections failed repeatedly with that frustrating "can't connect" message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjhr7ewgkd33k6j5czgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjhr7ewgkd33k6j5czgb.png" alt=" " width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gd9ug90mwkdfa2e2h3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gd9ug90mwkdfa2e2h3p.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylq09xoy08yhlp8fzsmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylq09xoy08yhlp8fzsmk.png" alt=" " width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizug0tq1sughf528vvzt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizug0tq1sughf528vvzt.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Workaround That Actually Worked Better&lt;/strong&gt;:&lt;br&gt;
Discovered Azure Run Command:&lt;/p&gt;

&lt;p&gt;TestVM → Operations → Run command → RunPowerShellScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60x9aow7b6inugduar12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60x9aow7b6inugduar12.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Used Serial Console as Backup:&lt;/p&gt;

&lt;p&gt;Perfect for when RDP fails&lt;/p&gt;

&lt;p&gt;Direct command-line access&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: The Baseline Test - Proving Isolation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting TestVM1's IP&lt;/strong&gt;:&lt;br&gt;
powershell&lt;br&gt;
ipconfig&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98tnhz17lo7y8clu8hvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98tnhz17lo7y8clu8hvx.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Expected Failure&lt;/strong&gt;:&lt;br&gt;
powershell&lt;br&gt;
Test-NetConnection 10.20.20.4 -port 3389&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgn546qxkota2y0rld9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgn546qxkota2y0rld9w.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This proved the networks were completely isolated - which was exactly what we expected at this stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Building the Network Bridge&lt;/strong&gt; - VNet Peering&lt;br&gt;
&lt;strong&gt;The Magic Configuration&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CoreServicesVnet → Peerings → + Add&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2eexeutw3668ta0yp4a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2eexeutw3668ta0yp4a6.png" alt=" " width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peering link name&lt;/strong&gt;: ManufacturingVnet-to-CoreServicesVnet&lt;/p&gt;

&lt;p&gt;Virtual network: ManufacturingVnet&lt;/p&gt;

&lt;p&gt;Allow access: Enabled&lt;/p&gt;

&lt;p&gt;Automatic Reverse Peering Created:&lt;/p&gt;

&lt;p&gt;CoreServicesVnet-to-ManufacturingVnet&lt;/p&gt;

&lt;p&gt;Clicked "Sync" and Watched the Status Change:&lt;/p&gt;

&lt;p&gt;From "Initiated" to "Connected"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bzktdw20uaakxozixqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bzktdw20uaakxozixqx.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynx1p1ii0i55jhua1v0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynx1p1ii0i55jhua1v0w.png" alt=" " width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m29vs3jektxeumtsfl1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m29vs3jektxeumtsfl1.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoqmzfza73qjrc84slwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoqmzfza73qjrc84slwy.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1p547u6854zd85xzy7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1p547u6854zd85xzy7n.png" alt=" " width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: The Moment of Truth&lt;/strong&gt; - Testing Connectivity&lt;br&gt;
&lt;strong&gt;Running the Exact Same Command&lt;/strong&gt;:&lt;br&gt;
powershell&lt;br&gt;
Test-NetConnection 10.20.20.4 -port 3389&lt;br&gt;
The Beautiful Result:&lt;br&gt;
text&lt;br&gt;
TcpTestSucceeded: True&lt;br&gt;
ComputerName: 10.20.20.4&lt;br&gt;
RemotePort: 3389&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge92lhvt00s9rukd0p3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge92lhvt00s9rukd0p3f.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8cpkyk7tooeaos3tqdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8cpkyk7tooeaos3tqdy.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd6jyn20lus088lw67axk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd6jyn20lus088lw67axk.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Cleanup &amp;amp; Cost Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Removing Resources Properly:&lt;br&gt;
powershell&lt;br&gt;
Remove-AzResourceGroup -Name 'ContosoResourceGroup' -Force -AsJob&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Lessons That Made Me a Better Cloud Engineer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Insights&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Manual configuration &amp;gt; templates for learning&lt;/p&gt;

&lt;p&gt;Run Command is incredibly powerful for administration&lt;/p&gt;

&lt;p&gt;Peering must be bidirectional to work properly&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Value Realized&lt;/strong&gt;:&lt;br&gt;
Cost savings by eliminating VPN gateways&lt;/p&gt;

&lt;p&gt;Performance boost through Azure backbone&lt;/p&gt;

&lt;p&gt;Security enhancement with private connectivity&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters for Your Organization&lt;/strong&gt;&lt;br&gt;
If you're managing multiple Azure environments, VNet peering isn't just technical - it's business-critical for:&lt;/p&gt;

&lt;p&gt;Application integration between different teams&lt;/p&gt;

&lt;p&gt;Hybrid cloud strategies&lt;/p&gt;

&lt;p&gt;Compliance and security requirements&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to Help Others Succeed&lt;/strong&gt;&lt;br&gt;
I'm passionate about making cloud networking accessible. If your organization is facing similar challenges, I'd love to:&lt;/p&gt;

&lt;p&gt;Share more detailed configurations&lt;/p&gt;

&lt;p&gt;Help troubleshoot specific scenarios&lt;/p&gt;

&lt;p&gt;Collaborate on Azure networking projects&lt;/p&gt;

&lt;p&gt;What networking challenges are you facing? Share your experiences below!&lt;/p&gt;

</description>
      <category>peering</category>
      <category>networking</category>
      <category>network</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Simplifying Azure Private DNS: How I Made Cloud Networking Easy Enough for Anyone to Understand</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Mon, 22 Sep 2025 14:24:24 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/simplifying-azure-private-dns-how-i-made-cloud-networking-easy-enough-for-anyone-to-understand-3cj1</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/simplifying-azure-private-dns-how-i-made-cloud-networking-easy-enough-for-anyone-to-understand-3cj1</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Problem: Cloud Networking Can Be Confusing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I first looked at Azure Private DNS, the technical documentation felt like reading a foreign language. Terms like "DNS zones," "auto-registration," and "name resolution" made my head spin. But as I worked through the AZ-700 lab, I discovered something important: this isn't as complicated as it looks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Actually Did (In Plain English)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Goal&lt;/strong&gt;: Create a Private "Phone Book" for Azure VMs&lt;br&gt;
Imagine you have two computers in your office. Instead of remembering their complex IP addresses (like 192.168.1.15), you want to call them by name ("Accounting-PC" and "HR-PC"). That's exactly what I set up in Azure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Simple 4-Step Process:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;: Created the "Phone Book" (Private DNS Zone)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvroei7ks141ovudsc63p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvroei7ks141ovudsc63p.png" alt=" " width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Made a private directory called "contoso.com"&lt;/p&gt;

&lt;p&gt;Think of this as creating a company address book that only internal employees can access&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcum4lricq59os2vddwyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcum4lricq59os2vddwyh.png" alt=" " width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Connected the Network (Virtual Network Link)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Linked my Azure network to this phone book&lt;/p&gt;

&lt;p&gt;Turned on "auto-registration" - meaning new computers automatically get listed&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd0o9g24lkaf0grcvzh9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd0o9g24lkaf0grcvzh9.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fa6pfktr3n6r6dotinm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fa6pfktr3n6r6dotinm.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73hf6em1zlj0oshqlr20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73hf6em1zlj0oshqlr20.png" alt=" " width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Added Computers (Virtual Machines)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Created two servers: vm1 and vm2 (I named them simply instead of TestVM1/TestVM2)&lt;/p&gt;

&lt;p&gt;Important: I created these manually to show it works regardless of method&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rd9nsr0zxnbboxtdljs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rd9nsr0zxnbboxtdljs.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fogxl5vzi5953vc6kfv12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fogxl5vzi5953vc6kfv12.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hlfjjgz4jgzjirgn59y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hlfjjgz4jgzjirgn59y.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jb6217hczvy1ja2gyic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jb6217hczvy1ja2gyic.png" alt=" " width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsbbc6k6us9ry6vy1elh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsbbc6k6us9ry6vy1elh.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Tested the System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From vm1, I tried to "call" vm2 using its name: ping vm2.contoso.com&lt;/p&gt;

&lt;p&gt;The call didn't connect (firewall blocked it - which is good for security!)&lt;/p&gt;

&lt;p&gt;But when I checked the "phone book" lookup: nslookup vm2.contoso.com - it worked perfectly!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhj8l2co7pwitsltl8s4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhj8l2co7pwitsltl8s4n.png" alt=" " width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1zb45d4g6eqphqg31yj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1zb45d4g6eqphqg31yj.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vmluimlnaarvtmm7tp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vmluimlnaarvtmm7tp5.png" alt=" " width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jhv913rnjxq7klpkixa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jhv913rnjxq7klpkixa.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60uk7chbjasqgpp97yni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60uk7chbjasqgpp97yni.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1yo7anaorafvtkgyor1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1yo7anaorafvtkgyor1.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54cqsp35e20l9my88khx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54cqsp35e20l9my88khx.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pythyh0erq8dcsq84y5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pythyh0erq8dcsq84y5.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48zf2nqzv5lmxbchqawk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F48zf2nqzv5lmxbchqawk.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegxjhr46ys9vy9kskpu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegxjhr46ys9vy9kskpu6.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters for Businesses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For CEOs and Decision Makers:&lt;br&gt;
Cost Savings: No more maintaining expensive on-premises DNS servers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Private DNS zones are only accessible within your Azure network&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;: New servers automatically register themselves - zero manual work&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For IT Teams&lt;/strong&gt;:&lt;br&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Same familiar DNS concepts, but in the cloud&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: Azure handles the infrastructure maintenance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration&lt;/strong&gt;: Works seamlessly with existing Azure services&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Aha!" Moment&lt;/strong&gt;&lt;br&gt;
The breakthrough came when I realized: This isn't about technology - it's about communication. Whether you're using automated templates or manual creation (like I did with vm1/vm2), the principle remains the same: make internal networking as simple as using contacts in your phone.&lt;/p&gt;

&lt;p&gt;What Organizations Should Take Away&lt;br&gt;
You don't need to be a cloud expert to implement basic Azure networking&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual configuration&lt;/strong&gt; works just as well as automated templates - choose what your team is comfortable with&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private DNS&lt;/strong&gt; is like building your company's internal directory - essential for organized communication&lt;/p&gt;

&lt;p&gt;Your Turn to Comment&lt;br&gt;
I'd love to hear from other professionals:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEOs&lt;/strong&gt;: What networking challenges is your organization facing?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IT Managers&lt;/strong&gt;: Have you implemented similar solutions? What was your experience?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginners&lt;/strong&gt;: What parts of this explanation helped you understand? What's still confusing?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The biggest lesson?&lt;/strong&gt; Cloud networking doesn't have to be complicated when you break it down into human terms.&lt;/p&gt;

</description>
      <category>azurefunctions</category>
      <category>azurenetwork</category>
      <category>practicalclas</category>
      <category>programming</category>
    </item>
    <item>
      <title>Designing a Global Azure Network Infrastructure: A Hands-On Guide to the AZ-700</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Fri, 19 Sep 2025 13:43:37 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/designing-a-global-azure-network-infrastructure-a-hands-on-guide-to-the-az-700-5b10</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/designing-a-global-azure-network-infrastructure-a-hands-on-guide-to-the-az-700-5b10</guid>
      <description>&lt;p&gt;Step into the role of a Network Engineer at Contoso Ltd. and learn how to design and implement a scalable, secure, and globally distributed network in Microsoft Azure. This practical walkthrough covers the core skills tested in the AZ-700 certification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction: Why This Project Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ever wondered how large enterprises structure their cloud networks for performance, security, and growth? It all starts with a robust Virtual Network (VNet) design.&lt;/p&gt;

&lt;p&gt;In this guide, I'll take you through a real-world scenario: migrating the fictional company Contoso Ltd. to Azure. You'll get hands-on experience designing and implementing a global network infrastructure from the ground up, which is a fundamental skill for the AZ-700: Designing and Implementing Microsoft Azure Networking Solutions certification.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll understand not just how to click buttons in the Azure portal, but why each decision is critical for building a resilient cloud environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Blueprint&lt;/strong&gt;: Contoso's Global Network Scenario&lt;br&gt;
Before a single resource is created, a successful cloud migration requires a solid architectural plan. For Contoso Ltd., this meant designing a global network that would support diverse business units with varying needs for scale, security, and connectivity. Our blueprint is built on three core virtual networks, each serving a distinct strategic purpose.&lt;/p&gt;

&lt;p&gt;1.** CoreServicesVnet** (East US | 10.20.0.0/16)&lt;br&gt;
This network is the beating heart of Contoso's IT infrastructure in Azure. Hosted in the East US region, it's designed to be the central hub for mission-critical applications. It will house:&lt;/p&gt;

&lt;p&gt;Public-facing web services and applications.&lt;/p&gt;

&lt;p&gt;Sensitive database servers containing company and customer data.&lt;/p&gt;

&lt;p&gt;Shared services like Active Directory domain controllers and DNS servers that other networks will depend on.&lt;/p&gt;

&lt;p&gt;A future VPN gateway for secure hybrid connectivity back to the on-premises datacenter.&lt;/p&gt;

&lt;p&gt;The large /16 address space was chosen deliberately to accommodate significant anticipated growth and complex subnetting, ensuring we never run out of IP addresses for core services.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ManufacturingVnet&lt;/strong&gt; (West Europe | 10.30.0.0/16)&lt;br&gt;
Located in West Europe to be near Contoso's physical manufacturing plants, this network is engineered for the Internet of Things (IoT). Its primary function is to handle a massive influx of data from countless sensors on the factory floor, monitoring everything from temperature to assembly line efficiency. The /16 address space provides the immense scale needed to segment these devices into multiple dedicated subnets, allowing for better traffic management and security isolation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ResearchVnet&lt;/strong&gt; (Southeast Asia | 10.40.0.0/16)&lt;br&gt;
This network supports the innovation engine of Contoso: the Research &amp;amp; Development team. Deployed in Southeast Asia to be close to this team, it has a simple, stable requirement. The small R&amp;amp;D team needs a secure environment for a predictable number of virtual machines used for testing and development. The /16 space might seem oversized, but it follows best practices for future-proofing and consistency, even if the current need is only a single subnet.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Golden Rule&lt;/strong&gt;: A Non-Overlapping Architecture&lt;br&gt;
The entire design hinges on one critical rule: no address space can overlap. The on-premises network (10.10.0.0/16) and the three Azure VNets (10.20.0.0/16, 10.30.0.0/16, 10.40.0.0/16) are all completely separate. This careful planning is what will allow us to connect them all together in the future via peering and gateways without any routing conflicts, creating a seamless, global hybrid network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 1: Laying the Foundation - The Resource Group&lt;/strong&gt;&lt;br&gt;
Think of a Resource Group as a logical container for your project. It's a best practice to group related resources for easier management, cost tracking, and cleanup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;In the Azure Portal, search for and select Resource groups.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focwtft6gb5doxmbe89bk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focwtft6gb5doxmbe89bk.png" alt=" " width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click + Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jjgolcplh9uljc308uv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jjgolcplh9uljc308uv.png" alt=" " width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basics Tab&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Subscription: Choose your subscription&lt;/p&gt;

&lt;p&gt;Resource Group: ContosoResourceGroup&lt;/p&gt;

&lt;p&gt;Region: (US) East US (We place the group in the same region as our most critical VNet for metadata latency, but it can manage resources in any region).&lt;/p&gt;

&lt;p&gt;Why This Matters: Using a single resource group for this project provides a unified management plane for all networking components, making it easy to monitor costs and apply policies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5ky5d8qcljplnrw23e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5ky5d8qcljplnrw23e9.png" alt=" " width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 2: Building the HQ&lt;/strong&gt; - CoreServicesVnet and Subnets&lt;br&gt;
This is our most complex VNet, requiring careful subnet planning for security and functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating the VNet&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Search for and select Virtual networks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4cb7hfqu1x7sfziod38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4cb7hfqu1x7sfziod38.png" alt=" " width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click + Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F556moc1uyo2sb9gt8fxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F556moc1uyo2sb9gt8fxo.png" alt=" " width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basics Tab&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Group&lt;/strong&gt;: ContosoResourceGroup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: CoreServicesVnet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Region&lt;/strong&gt;: (US) East US&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnb7f95j962i70t6b9qx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnb7f95j962i70t6b9qx.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IP Addresses Tab&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;IPv4 Address Space: 10.20.0.0/16&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xemyi6rus3bx2qhvsdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xemyi6rus3bx2qhvsdc.png" alt=" " width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Art of Subnet Design: Now, we segment this large address space into smaller, purpose-driven subnets. This is crucial for applying Network Security Groups (NSGs) and routing rules.&lt;/p&gt;

&lt;p&gt;GatewaySubnet (10.20.0.0/27):&lt;/p&gt;

&lt;p&gt;Purpose: Virtual Network Gateway. This is a reserved name! Azure requires this specific subnet to deploy a VPN or ExpressRoute gateway later to connect to on-premises networks.&lt;/p&gt;

&lt;p&gt;Size: /27 (32 addresses). This is the minimum recommended size to accommodate future gateway SKUs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9jt5pz3h1xipbzf4713.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9jt5pz3h1xipbzf4713.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SharedServicesSubnet&lt;/strong&gt; (10.20.10.0/24): For domain controllers, DNS servers, and other infrastructure VMs. This subnet will have strict NSGs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwx1psw08owslh9kqu36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpwx1psw08owslh9kqu36.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DatabaseSubnet&lt;/strong&gt; (10.20.20.0/24): For database servers. This subnet will have the most restrictive NSGs, likely denying all traffic except from the web service subnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgw2xb5c68ifbf909o88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgw2xb5c68ifbf909o88.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PublicWebServiceSubnet&lt;/strong&gt; (10.20.30.0/24): For web servers facing the public internet. This subnet will have NSGs allowing HTTP/HTTPS traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0famc323jbuonyyhccnh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0famc323jbuonyyhccnh.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Notice the logical IP numbering scheme (.10.x, .20.x, .30.x). This isn't required, but it makes management and troubleshooting much easier!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0g5k1r9k43xbv4sq5935.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0g5k1r9k43xbv4sq5935.png" alt=" " width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4n42c4dq947x1mnn360.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4n42c4dq947x1mnn360.png" alt=" " width="684" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 3 &amp;amp; 4: Deploying Regional VNets (Manufacturing &amp;amp; Research)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The process is repeated for the other VNets, but the subnet design reflects their different purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ManufacturingVnet (10.30.0.0/16) in West Europe&lt;/strong&gt;:&lt;br&gt;
This network anticipates massive growth from IoT sensors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvoigvxdqrga32bi9m5hw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvoigvxdqrga32bi9m5hw.png" alt=" " width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdcjtiyfjnm5c9d42he0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdcjtiyfjnm5c9d42he0n.png" alt=" " width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subnets&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ManufacturingSystemSubnet&lt;/strong&gt; (10.30.10.0/24): For the systems controlling the operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SensorSubnet1&lt;/strong&gt; (10.30.20.0/24)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SensorSubnet2&lt;/strong&gt; (10.30.21.0/24)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SensorSubnet3&lt;/strong&gt; (10.30.22.0/24)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F041qjfhefyq3adjqwho1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F041qjfhefyq3adjqwho1.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwlakq9okl2hsje6jagi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwlakq9okl2hsje6jagi.png" alt=" " width="742" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefit&lt;/strong&gt;: Using multiple smaller subnets for sensors allows for fine-grained traffic control and isolation. If one sensor network has an issue, it can be contained.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ResearchVnet&lt;/strong&gt; (10.40.0.0/16) in Southeast Asia:&lt;br&gt;
A simple, small network for a stable team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F326yrlbnmu4tu8r7bdy3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F326yrlbnmu4tu8r7bdy3.png" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subnet&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ResearchSystemSubnet&lt;/strong&gt; (10.40.0.0/24): A single subnet for all resources. This is cost-effective and simple for a small, trusted team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ubhxwqy0xofbopnw9xy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ubhxwqy0xofbopnw9xy.png" alt=" " width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06cezbbxndi37zu1waep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06cezbbxndi37zu1waep.png" alt=" " width="772" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 5: Verification&lt;/strong&gt; - The Most Important Step&lt;br&gt;
A good engineer always verifies their work.&lt;/p&gt;

&lt;p&gt;Go to All resources and confirm all three VNets are listed.&lt;/p&gt;

&lt;p&gt;Click into each VNet, navigate to Subnets under Settings, and verify:&lt;/p&gt;

&lt;p&gt;All subnets are present.&lt;/p&gt;

&lt;p&gt;The address ranges are exactly as designed. A typo here could cause major problems later!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvtznmet2awv5w10pk3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvtznmet2awv5w10pk3u.png" alt=" " width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways and Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project taught me to:&lt;/p&gt;

&lt;p&gt;Think in Layers: From the broad resource group down to the precise /27 subnet.&lt;/p&gt;

&lt;p&gt;Design for Purpose: Subnets are security boundaries. Their design should reflect the security and connectivity requirements of the resources within them.&lt;/p&gt;

&lt;p&gt;Plan for Growth: Choosing large enough address spaces (like /16) prevents a painful redesign down the line.&lt;/p&gt;

&lt;p&gt;Embrace Global Scale: Azure makes it simple to deploy consistent, secure networks across the globe, bringing applications closer to users.&lt;/p&gt;

&lt;p&gt;This architecture is the foundation for everything else: connecting these VNets via VNet Peering, deploying firewalls, setting up load balancers, and achieving a truly hybrid network. Mastering this is the first and most critical step toward Azure networking expertise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's Connect!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm passionate about cloud networking and always open to discussing design patterns, troubleshooting, and the journey towards certifications like the AZ-700. Feel free to leave a comment or connect with me on LinkedIn.&lt;/p&gt;

&lt;p&gt;What Azure networking topic should I deep-dive into next? Peering? Network Security Groups? Let me know below! 👇&lt;/p&gt;

</description>
      <category>azure</category>
      <category>network</category>
      <category>infrastructureascode</category>
      <category>programming</category>
    </item>
    <item>
      <title>Hiring Your First Employee on AWS — Create an IAM User, Policies &amp; Roles</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Thu, 11 Sep 2025 11:10:49 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/hiring-your-first-employee-on-aws-create-an-iam-user-policies-roles-1jfb</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/hiring-your-first-employee-on-aws-create-an-iam-user-policies-roles-1jfb</guid>
      <description>&lt;p&gt;Using the root account is like the CEO mopping the floors: possible, but neither safe nor efficient. In this guide we’ll hire your first "digital employee" — create an IAM user, give them permissions, and teach a server how to do its job without a password. I’ll walk you through practical labs, real-world explanations, and little stories so the steps stick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You mentioned you already have annotated screenshots for each step — great! I added image placeholders where you can drop them in the final draft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hiring Your First Employee&lt;/strong&gt;: Creating an IAM User&lt;/p&gt;

&lt;p&gt;Imagine Joy, the CEO of a small but growing company. Joy knows she shouldn't share the root account (the master keys). Instead she hires Samuel — a real person — and gives Samuel a proper employee identity. That identity has a console password so Samuel can log in, and (optionally) programmatic keys if Samuel needs CLI or SDK access.&lt;/p&gt;

&lt;p&gt;Why not use the root account?&lt;/p&gt;

&lt;p&gt;The root account has full power. If it’s compromised, everything is compromised.&lt;/p&gt;

&lt;p&gt;Root access should be reserved for account-level tasks (billing, closing the account, etc.).&lt;/p&gt;

&lt;p&gt;Using IAM users lets you apply the principle of least privilege: give people only what they need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Lab: Creating Your Digital Identity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before you start&lt;/strong&gt;: Log in using the root account, or an IAM user with permission to create users.&lt;/p&gt;

&lt;p&gt;In the AWS Console, open the IAM service and click Users.&lt;/p&gt;

&lt;p&gt;This is where you manage human identities and machine identities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5qdtawkq15cuo93lrer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5qdtawkq15cuo93lrer.png" alt=" " width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Create user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjs6jxd64jugbhgx0p8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjs6jxd64jugbhgx0p8h.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll be prompted for a username and credential types.&lt;/p&gt;

&lt;p&gt;Enter a username, e.g., Alice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzjrhljrorhr8zdh80kp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzjrhljrorhr8zdh80kp.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use clear, real names where possible (Alice.Smith) for accountability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select AWS credential types&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;AWS Management Console access — gives a console (web) password so Alice can login.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Programmatic access *&lt;/em&gt;(optional) — creates an access key pair for CLI/SDK. Only enable if truly needed.&lt;/p&gt;

&lt;p&gt;Why separate? Console access is for humans using a browser. Programmatic access is for scripts and automated tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click Next&lt;/strong&gt;: Permissions.&lt;/p&gt;

&lt;p&gt;This is where you attach permissions via groups, policies, or inline policies.&lt;/p&gt;

&lt;p&gt;Add the user to a group. Click Create group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgehvn2wka12bp35czpox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgehvn2wka12bp35czpox.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Groups are the easiest way to manage sets of permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enter group name&lt;/strong&gt;: Admin. Search for and select AdministratorAccess.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ygrpot7xkiqjvvfxafy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ygrpot7xkiqjvvfxafy.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the lab we use AdministratorAccess so you can test workflows. In production prefer more restrictive groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security note&lt;/strong&gt;: Avoid making every user an admin. Create role-based groups (Dev, Ops, Billing) with only necessary permissions.&lt;/p&gt;

&lt;p&gt;Click Create group, then select the Admin group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7dr7myzfig7vz001bi5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7dr7myzfig7vz001bi5.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now **Samuel **inherits whatever permissions the Admin group has.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click Next&lt;/strong&gt;: Tags (skip for now), then Next: Review.&lt;/p&gt;

&lt;p&gt;Tags can help with billing, auditing, and automation. Consider adding team or project tags later.&lt;/p&gt;

&lt;p&gt;Review settings and click &lt;strong&gt;Create user&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Download the .csv file. It contains the login details and keys. Store it securely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The .csv includes&lt;/strong&gt;: IAM sign-in link, username, password (temporary if auto-generated), and access keys if you enabled programmatic access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security tip&lt;/strong&gt;: This file is shown only once. If you lose it, delete keys and create new ones or reset the console password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bh3u0bdyf63z29peeez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bh3u0bdyf63z29peeez.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbkida5epichil36760j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbkida5epichil36760j.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Log out of the root account.&lt;/p&gt;

&lt;p&gt;Log back in as Samuel using the IAM user sign-in link (found on the IAM Dashboard).&lt;/p&gt;

&lt;p&gt;Enter the temporary password from the .csv file, then set a new password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqsalkda8iyfnnc5445r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqsalkda8iyfnnc5445r.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you checked Require password reset, Alice will be forced to set a new password at first login. This is a recommended best practice.&lt;/p&gt;

&lt;p&gt;You are now logged in as an IAM User with safer credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Story Recap&lt;/strong&gt;: Joy created Alice, downloaded the CSV, delivered it securely, and Alice logged in and set her own password. Root stays quiet and secure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjri1iv8dcmlu4lpx3v8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjri1iv8dcmlu4lpx3v8e.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa314zyec0l2fd9rsh63u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa314zyec0l2fd9rsh63u.png" alt=" " width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** IAM Policies**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analogy&lt;/strong&gt;: Think of an IAM policy as a rulebook for what an employee can or cannot do. Policies are JSON documents that say "Allow" or "Deny" specific actions on specific resources.&lt;/p&gt;

&lt;p&gt;Example — &lt;strong&gt;Read-Only Access to S3&lt;/strong&gt; (policy JSON)&lt;br&gt;
{&lt;br&gt;
    "Version": "2012-10-17",&lt;br&gt;
    "Statement": [&lt;br&gt;
        {&lt;br&gt;
            "Effect": "Allow",&lt;br&gt;
            "Action": [&lt;br&gt;
                "s3:GetObject",&lt;br&gt;
                "s3:ListBucket"&lt;br&gt;
            ],&lt;br&gt;
            "Resource": "*"&lt;br&gt;
        }&lt;br&gt;
    ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explanation&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Effect: "Allow" — this statement grants permission (as opposed to Deny).&lt;/p&gt;

&lt;p&gt;Action — the API actions allowed. s3:ListBucket lets you list bucket contents; s3:GetObject lets you download objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource&lt;/strong&gt;: "*" — applies to all buckets. In production you should scope this to ARNs for specific buckets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Lab&lt;/strong&gt;: Create a Read-Only Group&lt;/p&gt;

&lt;p&gt;In the IAM console, go to User Groups → Create group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmngc4z3nymls42ea5n0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmngc4z3nymls42ea5n0u.png" alt=" " width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name the group S3-ReadOnly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Attach the policy AmazonS3ReadOnlyAccess.&lt;/p&gt;

&lt;p&gt;This is an AWS-managed policy that implements a safe read-only rule set.&lt;/p&gt;

&lt;p&gt;Click Create group.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68yc9d4t6nz2ggjcg3um.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68yc9d4t6nz2ggjcg3um.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add your user Samuel to this group.&lt;/p&gt;

&lt;p&gt;Samuel is now in two groups: &lt;strong&gt;Admin and S3-ReadOnly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permissions are additive&lt;/strong&gt; — Samuel’s effective permission set is the union of group permissions, except where an explicit Deny overrides.&lt;/p&gt;

&lt;p&gt;Why groups &amp;amp; policies?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easier to audit and scale&lt;/strong&gt;. Add/remove people without touching policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reuse policies for many users&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;** IAM Roles**&lt;/p&gt;

&lt;p&gt;Samuel  needs an EC2 server to read files from S3. You could give the server an access key (yuck), or you can dress the server in a role — a temporary identity the instance can assume. Roles are the secure, AWS-native way to let services act on behalf of each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Lab&lt;/strong&gt;: Assigning a Role to a Service&lt;/p&gt;

&lt;p&gt;In IAM, go to Roles → Create role.&lt;/p&gt;

&lt;p&gt;Choose AWS service → EC2.&lt;/p&gt;

&lt;p&gt;This sets the trust policy so EC2 instances can assume the role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add permissions&lt;/strong&gt;: AmazonS3ReadOnlyAccess.&lt;/p&gt;

&lt;p&gt;Name the role &lt;strong&gt;MyEC2S3ReadRole&lt;/strong&gt; and create it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbo0hfvjcjlqyfpz22uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbo0hfvjcjlqyfpz22uu.png" alt=" " width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvagvfebw3romd2smhk1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvagvfebw3romd2smhk1d.png" alt=" " width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4wx3pfq5m8ng1tbfvax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4wx3pfq5m8ng1tbfvax.png" alt=" " width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wp0o57bvxhsz8hoynh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wp0o57bvxhsz8hoynh1.png" alt=" " width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsi699zm1i8twbwjlev9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsi699zm1i8twbwjlev9x.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go to EC2 → Launch instance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Under Advanced details, select IAM instance profile → MyEC2S3ReadRole.&lt;/p&gt;

&lt;p&gt;This attaches the role to the instance on launch. If the instance is already running, attach the role via Instance Actions → Security → Modify IAM role.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3x77f2m60fdpptphuhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3x77f2m60fdpptphuhi.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbx2klsdcjkc01pn3tawf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbx2klsdcjkc01pn3tawf.png" alt=" " width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2q1pp8iqrsm1u8enps5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2q1pp8iqrsm1u8enps5.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws43zm4uqh7m6rhkq5cg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws43zm4uqh7m6rhkq5cg.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Launch (or apply) the instance.&lt;/p&gt;

&lt;p&gt;Once it’s running, connect using EC2 Instance Connect or SSH.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmehqe5mzehnb6nbugsij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmehqe5mzehnb6nbugsij.png" alt=" " width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2g5eha53lrwiz1ngxl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2g5eha53lrwiz1ngxl7.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8sk18qj4i2mf0t4wxnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8sk18qj4i2mf0t4wxnc.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the terminal, run:&lt;/p&gt;

&lt;p&gt;aws s3 ls&lt;/p&gt;

&lt;p&gt;The instance lists your S3 buckets using role permissions — no long-term keys required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick tip&lt;/strong&gt;: Make sure the instance either has the AWS CLI installed or use the platform's built-in tooling that can access the instance &lt;br&gt;
profile credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Practices &amp;amp; Security Checklist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Never use the root account for daily tasks. Keep it locked and enable MFA on root.&lt;/p&gt;

&lt;p&gt;Require password reset on first login for any default password you create.&lt;/p&gt;

&lt;p&gt;Enable MFA for all console users — especially any admin or privileged accounts.&lt;/p&gt;

&lt;p&gt;Principle of least privilege: avoid attaching AdministratorAccess unless needed.&lt;/p&gt;

&lt;p&gt;Use groups &amp;amp; roles instead of attaching policies directly to users whenever possible.&lt;/p&gt;

&lt;p&gt;Rotate and revoke credentials: If a .csv is lost or a key is exposed, delete it and create new credentials.&lt;/p&gt;

&lt;p&gt;Use secure channels to share .csv files (encrypted email, secure vaults). Don’t paste credentials in chat.&lt;/p&gt;

&lt;p&gt;Enable CloudTrail to audit actions and detect suspicious behavior.&lt;/p&gt;

&lt;p&gt;Limit programmatic keys and prefer roles for services and EC2.&lt;/p&gt;

&lt;p&gt;Tag resources &amp;amp; users for billing, ownership, and audits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting &amp;amp; FAQs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Q: I lost the .csv — can I download it again? A: No. AWS shows access keys and generated passwords only once. If lost, delete the key and create a new one, or reset the console password for that user.&lt;/p&gt;

&lt;p&gt;Q: I want Alice to switch teams later — how do I change her permissions? A: Remove Alice from the old group and add her to the new group. Changes take effect immediately.&lt;/p&gt;

&lt;p&gt;Q: Do policies add or override? A: Policies are additive — all Allow permissions are combined. However, an explicit Deny in any policy overrides an Allow.&lt;/p&gt;

&lt;p&gt;Q: Should I give EC2 instances access keys? A: No — prefer IAM Roles (instance profiles). They provide temporary credentials and are far safer.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Final Notes *&lt;/em&gt;— &lt;/p&gt;

&lt;p&gt;Joy did the right thing: she kept the root account safe, created Samuel  with a console password, downloaded the .csv, handed it over securely, and had Alice set her own password at first login. Later, Joy used groups and roles to make the environment auditable and maintainable.&lt;/p&gt;

</description>
      <category>iamuser</category>
      <category>iampolicies</category>
      <category>aws</category>
      <category>security</category>
    </item>
    <item>
      <title>Simplifying Workload Communication with Azure Private DNS Zones</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Wed, 03 Sep 2025 18:40:06 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/simplifying-workload-communication-with-azure-private-dns-zones-5fo2</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/simplifying-workload-communication-with-azure-private-dns-zones-5fo2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My organization needed workloads to communicate using domain names instead of raw IP addresses. The requirement was to avoid setting up a custom DNS solution and rely solely on Azure-native DNS services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To meet this, we implemented:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Private DNS zone (private.contoso.com)&lt;/p&gt;

&lt;p&gt;A Virtual network link to app-vnet&lt;/p&gt;

&lt;p&gt;A new DNS record for backend resources&lt;/p&gt;

&lt;p&gt;This setup provides secure, reliable, and simplified workload communication within Azure virtual networks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skilling Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create and configure a Private DNS zone&lt;/p&gt;

&lt;p&gt;Link the DNS zone to a Virtual Network&lt;/p&gt;

&lt;p&gt;Add and manage DNS record sets&lt;/p&gt;

&lt;p&gt;Configure DNS settings on a virtual network&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture Diagram&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20azpf9ubjnr0fa7oexv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20azpf9ubjnr0fa7oexv.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create a Private DNS Zone&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the Azure portal, search for Private DNS zones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rscnk8t7qrb7z91dvdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rscnk8t7qrb7z91dvdc.png" alt=" " width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click + Create and configure:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5261zlfe0j5wt87gigt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5261zlfe0j5wt87gigt.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Group&lt;/strong&gt;: RG1&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;: private.contoso.com&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Region&lt;/strong&gt;: East US&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select Review + Create → Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzpjf0pghr64ic0z3zsm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzpjf0pghr64ic0z3zsm.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffafkqoqwgf6s80m6sw4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffafkqoqwgf6s80m6sw4u.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulhvpejvq5mtmep2ycwr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulhvpejvq5mtmep2ycwr.png" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This creates a secure DNS zone for internal name resolution.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create a Virtual Network Link&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To ensure workloads in app-vnet can resolve names from this DNS zone:&lt;/p&gt;

&lt;p&gt;Open your private.contoso.com DNS zone.&lt;/p&gt;

&lt;p&gt;In the DNS Management blade, select + Virtual network links.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7p1w100my9fa5nkewem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7p1w100my9fa5nkewem.png" alt=" " width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configure:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link name&lt;/strong&gt;: app-vnet-link&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual network&lt;/strong&gt;: app-vnet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enable auto registration&lt;/strong&gt;: Enabled&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0kurvh0i6pm7kd9kght.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0kurvh0i6pm7kd9kght.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, VMs in app-vnet can auto-register and resolve DNS names.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create a DNS Record Set&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, we add a record for the backend workload:&lt;/p&gt;

&lt;p&gt;Open the private.contoso.com DNS zone.&lt;/p&gt;

&lt;p&gt;Select + Record set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeohg1epum5men4le8sx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeohg1epum5men4le8sx.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configure:&lt;/p&gt;

&lt;p&gt;Name: backend&lt;/p&gt;

&lt;p&gt;Type: A&lt;/p&gt;

&lt;p&gt;TTL: 1&lt;/p&gt;

&lt;p&gt;IP Address: 10.1.1.5&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxh9vg084drgybsvnyz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxh9vg084drgybsvnyz3.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, workloads can resolve backend.private.contoso.com → 10.1.1.5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Private DNS zones provide a built-in way to manage DNS for private workloads.&lt;/p&gt;

&lt;p&gt;Virtual network links allow seamless DNS resolution across VNets.&lt;/p&gt;

&lt;p&gt;DNS record sets simplify internal communication without exposing workloads publicly.&lt;/p&gt;

&lt;p&gt;This exercise reinforced my skills in Azure networking, DNS configuration, and workload security—a crucial part of designing cloud-native architectures.&lt;/p&gt;

</description>
      <category>dnszones</category>
      <category>workloads</category>
      <category>html</category>
      <category>msbuild</category>
    </item>
    <item>
      <title>Configuring Secure Access to Workloads with Azure Virtual Networking Services</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Wed, 03 Sep 2025 07:19:12 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/configuring-secure-access-to-workloads-with-azure-virtual-networking-services-1p2h</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/configuring-secure-access-to-workloads-with-azure-virtual-networking-services-1p2h</guid>
      <description>&lt;p&gt;Securing workloads in the cloud isn’t just about protecting applications—it’s also about controlling how traffic flows in and out of your environment. In this project, I configured Azure Virtual Network routing to ensure that all outbound traffic from application workloads passes through a firewall for inspection and policy enforcement.&lt;/p&gt;

&lt;p&gt;This post walks you through the scenario, architecture, configuration steps, and key takeaways from the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To enforce firewall policies on outbound traffic, I needed to ensure that application traffic from both the frontend and backend subnets would route through an Azure Firewall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A route table for the virtual network.&lt;/p&gt;

&lt;p&gt;Association of the route table with both the frontend and backend subnets.&lt;/p&gt;

&lt;p&gt;A user-defined route to send all outbound traffic (0.0.0.0/0) through the firewall’s private IP address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skilling Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s what I practiced in this project:&lt;/p&gt;

&lt;p&gt;Creating and configuring a custom route table in Azure.&lt;/p&gt;

&lt;p&gt;Associating route tables with subnets.&lt;/p&gt;

&lt;p&gt;Adding a route to direct outbound traffic through a firewall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The architecture looks like this:&lt;/p&gt;

&lt;p&gt;One virtual network with:&lt;/p&gt;

&lt;p&gt;A frontend subnet&lt;/p&gt;

&lt;p&gt;A backend subnet&lt;/p&gt;

&lt;p&gt;An Azure Firewall&lt;/p&gt;

&lt;p&gt;A route table linked to both subnets, forcing outbound traffic through the firewall.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry9vm88mgqxjxxytzh2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry9vm88mgqxjxxytzh2b.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Record the Firewall’s Private&lt;/strong&gt; IP&lt;/p&gt;

&lt;p&gt;Navigate to app-vnet-firewall in the Azure Portal.&lt;/p&gt;

&lt;p&gt;Under Overview, copy the Private IP address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmilq2eyp8zl4sceb9hm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmilq2eyp8zl4sceb9hm4.png" alt=" " width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepnvhkv715bacd8b0v66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepnvhkv715bacd8b0v66.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Create a Route Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Search for Route tables in the portal → + Create.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ynq1p8f6jbkpkl2eqsx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ynq1p8f6jbkpkl2eqsx.png" alt=" " width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fill in&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Property    Value&lt;br&gt;
Resource group  RG1&lt;br&gt;
Region  East US&lt;br&gt;
Name    app-vnet-firewall-rt&lt;/p&gt;

&lt;p&gt;Click Review + create → Create.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcen61keq3a0wovwkjkb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcen61keq3a0wovwkjkb7.png" alt=" " width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wpkeaiu1fcid5f0gw0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wpkeaiu1fcid5f0gw0s.png" alt=" " width="700" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forgytmi7cxm1sd6xe8hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forgytmi7cxm1sd6xe8hf.png" alt=" " width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Associate the Route Table with Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open the route table (app-vnet-firewall-rt).&lt;/p&gt;

&lt;p&gt;Under Settings → Subnets → + Associate.&lt;/p&gt;

&lt;p&gt;Associate with frontend subnet.&lt;/p&gt;

&lt;p&gt;Repeat and associate with backend subnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8fj6xv5cmxyzzj9q7wc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8fj6xv5cmxyzzj9q7wc.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80nstfau0sxr895pq1lk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80nstfau0sxr895pq1lk.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create a Route in the Route Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the same route table, go to Routes → + Add.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Property    Value&lt;br&gt;
Route name  outbound-firewall&lt;br&gt;
Destination type    IP addresses&lt;br&gt;
Destination CIDR    0.0.0.0/0&lt;br&gt;
Next hop type   Virtual appliance&lt;br&gt;
Next hop address    Private IP of the firewall&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nwj2buzcfjaqifzhcri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nwj2buzcfjaqifzhcri.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure automatically applies system routes, but user-defined routes (UDRs) let you override them.&lt;/p&gt;

&lt;p&gt;Routing outbound traffic through an NVA (like Azure Firewall) enforces security policies.&lt;/p&gt;

&lt;p&gt;Subnet-level associations allow fine-grained control over traffic flow.&lt;/p&gt;

&lt;p&gt;Route tables are a critical piece in designing secure cloud networking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This exercise gave me hands-on experience with network routing and security in Azure. Configuring user-defined routes ensures that workloads don’t bypass firewall policies, which is essential for secure architectures in production.&lt;/p&gt;

&lt;p&gt;If you’re exploring Azure networking, I’d recommend diving into custom routing and firewalls early—it’s a skill you’ll need for almost every enterprise-grade deployment.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Would you have routed traffic differently&lt;/strong&gt;, maybe using NSGs or Application Gateway instead of Firewall? I’d love to hear your approach in the comments!&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Next step for me&lt;/strong&gt;: Extend this project by adding monitoring with Azure Monitor and logging firewall activity to see what traffic gets blocked or allowed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading&lt;/strong&gt;! If you found this useful, drop a ❤️ or follow me here on Dev.to for more Azure hands-on projects.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>networking</category>
      <category>virtualmachine</category>
      <category>azure</category>
    </item>
    <item>
      <title>🔒 Configuring Secure Access to Workloads with Azure Firewall</title>
      <dc:creator>PETER Samuel</dc:creator>
      <pubDate>Tue, 02 Sep 2025 16:11:51 +0000</pubDate>
      <link>https://forem.com/peter_samuel_052b9056e236/configuring-secure-access-to-workloads-with-azure-firewall-4elg</link>
      <guid>https://forem.com/peter_samuel_052b9056e236/configuring-secure-access-to-workloads-with-azure-firewall-4elg</guid>
      <description>&lt;p&gt;When building modern cloud applications, security is non-negotiable. As workloads scale, organizations need centralized and flexible network security. Azure Firewall provides exactly that — with application-level filtering, network rules, and threat intelligence baked in.&lt;/p&gt;

&lt;p&gt;Recently, I implemented secure access for an application virtual network using Azure Firewall. Here’s a breakdown of the approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The application virtual network (app-vnet) needed:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Centralized network security for inbound and outbound traffic.&lt;/p&gt;

&lt;p&gt;Granular application filtering to control what services the app can talk to.&lt;/p&gt;

&lt;p&gt;Continuous updates from Azure DevOps pipelines.&lt;/p&gt;

&lt;p&gt;DNS resolution to external servers.&lt;/p&gt;

&lt;p&gt;To meet these, I deployed Azure Firewall with a firewall policy to manage rules at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deploying Azure Firewall&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Created a dedicated AzureFirewallSubnet inside app-vnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtlxrk3czceb56xmm9af.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtlxrk3czceb56xmm9af.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7qt1j6239gx8pzapvw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7qt1j6239gx8pzapvw0.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Provisioned a Standard SKU Azure Firewall with a new public IP (fwpip).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b6fyxxxzkmo8gg2w9ca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b6fyxxxzkmo8gg2w9ca.png" alt=" " width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp7hc8imfkj4xq70p8b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp7hc8imfkj4xq70p8b0.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Attached a firewall policy (fw-policy) to centralize rule management.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1uyhbvy37rcepl96z1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1uyhbvy37rcepl96z1c.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6vn5p1ylbaourduq1bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6vn5p1ylbaourduq1bd.png" alt=" " width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Configuring Firewall Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Firewall policies make it easy to group and manage rules. I added:&lt;/p&gt;

&lt;p&gt;** Application Rule Collection**&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrgbcgttgbqmjuz6lrsu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrgbcgttgbqmjuz6lrsu.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykcmg63guoib2qdy1ce6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykcmg63guoib2qdy1ce6.png" alt=" " width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Allowed the application subnet (10.1.0.0/23) to securely reach Azure DevOps and Azure websites for CI/CD updates:&lt;/p&gt;

&lt;p&gt;Protocol: HTTPS&lt;/p&gt;

&lt;p&gt;Destination FQDNs: dev.azure.com, azure.microsoft.com&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9r5ecbilu63xox6ffhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9r5ecbilu63xox6ffhy.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** Network Rule Collection**&lt;/p&gt;

&lt;p&gt;Enabled DNS resolution by allowing outbound UDP traffic on port 53:&lt;/p&gt;

&lt;p&gt;Source: 10.1.0.0/23&lt;/p&gt;

&lt;p&gt;Destination IPs: 1.1.1.1, 1.0.0.1 (Cloudflare DNS)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnydp5tvf2gqo9xd1pft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnydp5tvf2gqo9xd1pft.png" alt=" " width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmaj60nm6s2as824gbnb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmaj60nm6s2as824gbnb0.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjooz8em01fw1usbwoo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjooz8em01fw1usbwoo9.png" alt=" " width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1nhwvuf4088vkyl4zw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1nhwvuf4088vkyl4zw5.png" alt=" " width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All outbound traffic is filtered through the firewall.&lt;/p&gt;

&lt;p&gt;Application has secure, controlled access only to Azure DevOps and Azure websites.&lt;/p&gt;

&lt;p&gt;DNS resolution is enabled without exposing unnecessary outbound access.&lt;/p&gt;

&lt;p&gt;The firewall and policy deployment completed successfully and are now centrally managed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Firewall provides centralized, cloud-native network security.&lt;/p&gt;

&lt;p&gt;Firewall policies simplify management of rules across environments.&lt;/p&gt;

&lt;p&gt;Application rules focus on FQDN-based filtering.&lt;/p&gt;

&lt;p&gt;Network rules focus on IP/port/protocol control.&lt;/p&gt;

&lt;p&gt;This setup ensures that workloads in app-vnet remain locked down yet functional — with only the necessary access for deployments and operations.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>firewall</category>
      <category>tooling</category>
      <category>workloads</category>
    </item>
  </channel>
</rss>
