<?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>DEV Community: David Cletus</title>
    <description>The latest articles on DEV Community by David Cletus (@4thman).</description>
    <link>https://dev.to/4thman</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%2F3927892%2F43aac6d7-df74-4a90-bdbe-8ba55edf1a70.jpeg</url>
      <title>DEV Community: David Cletus</title>
      <link>https://dev.to/4thman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/4thman"/>
    <language>en</language>
    <item>
      <title>Inside Azure Networking: How I Created a Virtual Network with Custom Subnets</title>
      <dc:creator>David Cletus</dc:creator>
      <pubDate>Thu, 04 Jun 2026 23:54:09 +0000</pubDate>
      <link>https://dev.to/4thman/inside-azure-networking-how-i-created-a-virtual-network-with-custom-subnets-35g4</link>
      <guid>https://dev.to/4thman/inside-azure-networking-how-i-created-a-virtual-network-with-custom-subnets-35g4</guid>
      <description>&lt;p&gt;If you've ever stared at the Azure portal wondering where to even begin with networking, you're not alone. I was right there a few weeks ago. In this post, I'm walking you through exactly what I did — from creating a resource group to building a virtual network with three custom subnets. No fluff, just real steps with real screenshots.&lt;br&gt;
Let's get into it.&lt;/p&gt;

&lt;p&gt;Head over to portal.azure.com&lt;br&gt;
Once logged in,&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%2F7hq3gbn9sc4ccouc6ddd.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%2F7hq3gbn9sc4ccouc6ddd.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Search for Resource Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first thing you want to do is head to the Azure portal and use the search bar at the top to look up "resource group". You'll see it pop up under Services — click on 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%2F0ehdhzvsvwh82om5ixty.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%2F0ehdhzvsvwh82om5ixty.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 Quick note: &lt;em&gt;I covered resource group creation in a previous blog too, but I'm including the steps here again so this post is fully self-contained. No jumping around needed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Create a New Resource Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you're on the Resource Groups page, you'll see a list of any existing groups or an empty list with a create button visible on the page. To create a new one, click the + Create button at the top left.&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%2Fugt25ehdlmhw5ni9zesc.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%2Fugt25ehdlmhw5ni9zesc.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Fill in the Resource Group Details&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the creation form, you need to fill in three things:&lt;/p&gt;

&lt;p&gt;Subscription — select your active subscription (mine is Azure subscription 1)&lt;br&gt;
Resource group name — I named mine Netaccess&lt;br&gt;
Region — I chose (Africa) South Africa North since that's closest to me&lt;/p&gt;

&lt;p&gt;Once filled in, 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%2Ft3nt44ao99c0qvbzvcrd.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%2Ft3nt44ao99c0qvbzvcrd.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Review and Create the Resource Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You'll be taken to a summary screen. Confirm the details look right — subscription, name, and region. Then hit the Create button at the bottom.&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%2Fmbvxamym9bwrtp5qdps6.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%2Fmbvxamym9bwrtp5qdps6.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Resource Group Created!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once Azure finishes provisioning (it's pretty fast — usually a few seconds), you'll see a notification on the right confirming that the resource group was created successfully. Your new Netaccess group will now appear in the list.&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%2Fxconcxza0wj7kfmjtbw6.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%2Fxconcxza0wj7kfmjtbw6.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6 — Search for Virtual Networks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that our resource group is ready, it's time to create a Virtual Network inside it. Use the top search bar again and type "virtual networks". Click on Virtual networks from the Services dropdown.&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%2Fm3i1chajv1rvyu86qhpo.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%2Fm3i1chajv1rvyu86qhpo.png" alt=" " width="799" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7 — Create a Virtual Network&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You'll land on the Virtual Networks overview page. Since we don't have any yet, it'll say "No virtual networks to display." Click the + Create button (either at the top or the one in the centre of the page).&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%2F2f48yti6ivsqp8z4c57g.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%2F2f48yti6ivsqp8z4c57g.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8 — Fill in the Virtual Network Basics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the Basics tab of the creation wizard, configure the following:&lt;/p&gt;

&lt;p&gt;Subscription — Azure subscription 1&lt;br&gt;
Resource group — Select the Netaccess group we just created&lt;br&gt;
Virtual network name — I named it Netaccess-VM&lt;br&gt;
Region — (Africa) South Africa North&lt;/p&gt;

&lt;p&gt;Then click Next to move to the next tab.&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%2Ftxhndetaowch5f2i18ab.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%2Ftxhndetaowch5f2i18ab.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9 — Configure Address Space and Delete the Default Subnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Skip past the Security tab (leave everything as default) and head to the Address space tab. Here Azure has already set up a default address space of 10.0.0.0/16 — that gives us 65,536 IP addresses, which is way more than enough.&lt;br&gt;
Now here's the important part: Azure also pre-creates a default subnet with the range 10.0.0.0 - 10.0.0.255 (/24). We're going to delete this because we want to create our own subnets with custom names and IP ranges.&lt;br&gt;
Click the trash/delete icon on the right side of the default subnet row to remove 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%2Ffvm925y995eb51lox0e2.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%2Ffvm925y995eb51lox0e2.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why delete the default subnet? Because accepting defaults means Azure names and organises things on your behalf. When you create your own subnets from scratch, you control the naming convention, IP ranges, and how traffic is logically segmented. Clean slate = cleaner architecture.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10 — Review and Create the Virtual Network&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click through to the Review + create tab. You'll see a green "Validation passed" banner at the top — Azure confirming everything looks good. Take a moment to review the summary:&lt;/p&gt;

&lt;p&gt;Subscription: Azure subscription 1 ✅&lt;br&gt;
Resource Group: Netaccess ✅&lt;br&gt;
Name: Netaccess-VM ✅&lt;br&gt;
Region: South Africa North ✅&lt;br&gt;
Security (Bastion, Firewall, DDoS): all Disabled ✅&lt;/p&gt;

&lt;p&gt;Hit the Create button at the bottom.&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%2Fbbp18o2z0lgi7efks97g.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%2Fbbp18o2z0lgi7efks97g.png" alt=" " width="799" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11 — Deployment Complete — Click "Go to Resource"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure will now provision your virtual network. It usually takes just a minute or less. Once done, you'll land on the deployment overview showing "Your deployment is complete" with a green checkmark.&lt;br&gt;
Click Go to resource to open your newly created Netaccess-VM 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%2Fi07578ekvm5g13vqer3z.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%2Fi07578ekvm5g13vqer3z.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12 — Explore the VNet Overview and Navigate to Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're now inside the Netaccess-VM virtual network overview page. You can see all the essentials — resource group, location, address space (10.0.0.0/16), and notice it currently shows 0 subnets (because we deleted the default one earlier).&lt;br&gt;
&lt;em&gt;&lt;strong&gt;In the left sidebar under Settings, click on Subnets.&lt;/strong&gt;&lt;/em&gt; This is where we'll build all three of our custom subnets.&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%2F3t3f7vlyqxidbjyh3kep.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%2F3t3f7vlyqxidbjyh3kep.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 13 — Click "+ Subnet" to Start Adding Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you're on the Subnets page, you'll see "No items found" — exactly as expected. Click the + Subnet button at the top of the page to open the "Add a subnet" panel on the right side.&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%2Fx7dh1mpss08bfzbs5ixc.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%2Fx7dh1mpss08bfzbs5ixc.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 14 — Add Subnet 1 (Netaccess-subnet1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The "Add a subnet" panel slides in from the right. Fill in the following:&lt;/p&gt;

&lt;p&gt;Subnet purpose — Default&lt;br&gt;
Name — Netaccess-subnet1&lt;br&gt;
IPv4 address range — 10.0.0.0/16 (this is auto-populated from your VNet address space)&lt;br&gt;
Starting address — 10.0.0.0&lt;br&gt;
Size — /24 (256 addresses)&lt;/p&gt;

&lt;p&gt;This creates a subnet range of 10.0.0.0 - 10.0.0.255. Leave IPv6 unchecked and scroll down to click Add.&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%2Fpr7j5kn32anjacasfkb0.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%2Fpr7j5kn32anjacasfkb0.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 15 — Add Subnet 2 (Netaccess-subnet2)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click + Subnet again to add the second subnet. You'll notice the panel now shows the existing subnet1 listed on the left — that's just confirmation it was saved. Fill in the new details:&lt;/p&gt;

&lt;p&gt;Name — Netaccess-subnet2&lt;br&gt;
Starting address — 10.0.1.0&lt;br&gt;
Size — /24 (256 addresses)&lt;/p&gt;

&lt;p&gt;Subnet range: 10.0.1.0 - 10.0.1.255. Click 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%2Fpno3tel2g0g36fe213op.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%2Fpno3tel2g0g36fe213op.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice how we moved the third octet from .0.0 to .1.0 for the second subnet — that's how we keep each subnet in its own separate IP block within the same /16 space. No overlap, no conflict, no headaches so we do the same to create Netaccess-subnet3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 16 — All Three Subnets Created Successfully&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Repeat the same process one final time for the third subnet:&lt;/p&gt;

&lt;p&gt;Name — Netaccess-subnet3&lt;br&gt;
Starting address — 10.0.2.0&lt;br&gt;
Size — /24&lt;/p&gt;

&lt;p&gt;After saving, your Subnets page will now show all three subnets neatly listed with their IPv4 ranges highlighted:&lt;br&gt;
NameIPv4 RangeAvailable IPsNetaccess-subnet110.0.0.0/24251Netaccess-subnet210.0.1.0/24251Netaccess-subnet310.0.2.0/24251&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%2F9mwalupb6xdkqo6o1ycc.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%2F9mwalupb6xdkqo6o1ycc.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each subnet has 251 usable IP addresses — When a resource is created, it uses one IP address from its subnet, and that IP is no longer available in the virtual network's address range. However, IP usage is managed at the subnet level, so a subnet can run out of addresses while the virtual network still has many unused IPs available in other subnets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cleanup — Deleting the Resources&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once I was done with the lab, I cleaned everything up to avoid unnecessary charges. Here's how:&lt;br&gt;
Delete the Netaccess Resource Group&lt;br&gt;
Go back to Resource groups, select Netaccess, click Delete resource group, type the name to confirm, and hit Delete.&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%2F0gozx30n2bfk9q1k86gz.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%2F0gozx30n2bfk9q1k86gz.png" alt=" " width="800" height="361"&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%2Fubgvipa7gzrln8cszmh4.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%2Fubgvipa7gzrln8cszmh4.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delete the NetworkWatcherRG&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure automatically creates a NetworkWatcherRG resource group when you deploy networking resources. Delete this one too — same process: select it, click Delete resource group, type the name, confirm.&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%2Fy41turp9hcn1y9hst16q.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%2Fy41turp9hcn1y9hst16q.png" alt=" " width="800" height="362"&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%2Fgm67fswtldp47qtg5soo.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%2Fgm67fswtldp47qtg5soo.png" alt=" " width="799" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All Resource Groups Deleted&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once both are gone, your resource groups list is clean again — back to just the ones you had before (in my case, only Je-mega-soft remains).&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%2F5eu0jx82kaqiyup9390c.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%2F5eu0jx82kaqiyup9390c.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the full recap of what we did:&lt;/p&gt;

&lt;p&gt;✅ Searched for and opened Resource Groups&lt;br&gt;
✅ Created the Netaccess resource group in South Africa North&lt;br&gt;
✅ Searched for and navigated to Virtual Networks&lt;br&gt;
✅ Filled in VNet Basics — name Netaccess-VM, resource group Netaccess&lt;br&gt;
✅ On the Address space tab, deleted the auto-generated default subnet&lt;br&gt;
✅ Reviewed and created the Virtual Network (validation passed)&lt;br&gt;
✅ Deployment completed — clicked Go to resource&lt;br&gt;
✅ Navigated to the Subnets section inside the VNet&lt;br&gt;
✅ Clicked + Subnet to start adding custom subnets&lt;br&gt;
✅ Created Netaccess-subnet1 → 10.0.0.0/24&lt;br&gt;
✅ Created Netaccess-subnet2 → 10.0.1.0/24&lt;br&gt;
✅ Created Netaccess-subnet3 → 10.0.2.0/24&lt;br&gt;
✅ Cleaned up both Netaccess and NetworkWatcherRG resource groups&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;br&gt;
Understanding how to manually structure your subnets gives you real control over how traffic flows in your cloud environment. Instead of accepting defaults, you're deliberately choosing IP ranges — which becomes crucial when you start doing things like:&lt;/p&gt;

&lt;p&gt;Separating frontend and backend application tiers&lt;br&gt;
Connecting on-premises networks via VPN Gateway or ExpressRoute&lt;br&gt;
Setting up Network Security Groups (NSGs) with rules per subnet&lt;br&gt;
Deploying services that require dedicated subnets (like Azure Bastion or App Gateway)&lt;/p&gt;

&lt;p&gt;This is foundational Azure networking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a ❤️ or leave a comment — especially if you ran into something different in your own setup. I'd love to hear about it.&lt;br&gt;
Until next time — keep building! 🚀&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloud</category>
      <category>devops</category>
      <category>networking</category>
    </item>
    <item>
      <title>How I Hosted a Free Website on Azure Blob Storage (No Server Needed!)</title>
      <dc:creator>David Cletus</dc:creator>
      <pubDate>Wed, 03 Jun 2026 07:33:07 +0000</pubDate>
      <link>https://dev.to/4thman/how-i-hosted-a-free-website-on-azure-blob-storage-no-server-needed-188</link>
      <guid>https://dev.to/4thman/how-i-hosted-a-free-website-on-azure-blob-storage-no-server-needed-188</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;So I wanted to host a website without paying for a web server or dealing with complex configurations. Turns out, Azure Blob Storage has a brilliant feature called Static Website Hosting that lets you serve HTML, CSS, and JavaScript files directly from a storage container — kind of like having a mini web host built into your cloud storage.&lt;br&gt;
In this post, I'll walk you through exactly what I did, step by step, with screenshots. The website template I used is called Nexus Brew — a cyberpunk-themed cafe website from Tooplate.com, which offers free HTML templates.&lt;br&gt;
By the end of this guide, your site will be live at a URL like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jewebs.blob.core.windows.net/$web/index.html" rel="noopener noreferrer"&gt;https://jewebs.blob.core.windows.net/$web/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's get into it!&lt;/p&gt;

&lt;p&gt;Step 1 — Download the Nexus Brew Template from Tooplate&lt;br&gt;
Before jumping into Azure, the first thing I did was grab the website template.&lt;br&gt;
I went to tooplate.com — a site that offers clean, modern, free HTML templates built with Bootstrap and CSS. They have over 80 templates for startups, small businesses, and portfolios.&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%2F9oaul8dvl3lpde1dbvy0.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%2F9oaul8dvl3lpde1dbvy0.png" alt=" " width="799" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I searched for and found the Nexus Brew template.&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%2Fwo95sy46nf0hytyl7slu.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%2Fwo95sy46nf0hytyl7slu.png" alt=" " width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a dark, cyberpunk-style cafe website template with features like:&lt;/p&gt;

&lt;p&gt;A hero banner section&lt;br&gt;
A tabbed menu showcase&lt;br&gt;
An about section with content and images&lt;br&gt;
A contact form&lt;br&gt;
Social media links&lt;br&gt;
Smooth scroll navigation and hover effects&lt;/p&gt;

&lt;p&gt;It looks super cool — very futuristic and modern. Perfect for learning!&lt;br&gt;
I clicked the Download button on the template page to grab the zip file.&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%2Fbf2l6t3knaps0uii1c3g.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%2Fbf2l6t3knaps0uii1c3g.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The downloaded file was named 2146_nexus_brew.zip and it landed in my Downloads folder.&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%2F7iqfc0x73sypl5lw9a74.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%2F7iqfc0x73sypl5lw9a74.png" alt=" " width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2 — Extract the Zip File&lt;br&gt;
After downloading, &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%2Fhool87a0qgc4xtub3d19.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%2Fhool87a0qgc4xtub3d19.png" alt=" " width="799" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I extracted the zip file. Inside the 2146_nexus_brew folder, you'll find these files:&lt;/p&gt;

&lt;p&gt;index.html — the main HTML page&lt;br&gt;
tooplate-nexus-brew.css — the stylesheet&lt;br&gt;
tooplate-nexus-scripts.js — the JavaScript file&lt;br&gt;
ABOUT THIS TEMPLATE.txt — info about the template&lt;br&gt;
images/ — a folder containing all the images used on the site&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%2F63945xkf8uy1nhqbnpml.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%2F63945xkf8uy1nhqbnpml.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are all the files I'll need to upload to Azure later.&lt;/p&gt;

&lt;p&gt;Step 3 — Find Resource Groups in the Azure Portal&lt;br&gt;
Now it's time to head over to portal.azure.com.&lt;br&gt;
Once logged in, &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%2Flpdk03oaelvhox71cxx2.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%2Flpdk03oaelvhox71cxx2.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I used the search bar at the top and typed "resource group". In the dropdown that appeared, I clicked on Resource groups (the one listed under Services).&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%2Fkhkhagnfmrmrxs8dd2tp.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%2Fkhkhagnfmrmrxs8dd2tp.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is a Resource Group?&lt;br&gt;
Think of a Resource Group as a folder in Azure where you keep related things together. It helps you manage, organize, and delete resources (like storage accounts) as a unit.&lt;/p&gt;

&lt;p&gt;Step 4 — View the Existing Resource Group Created in the Last Blog&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%2F3onm6haapiqbvy4rvedd.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%2F3onm6haapiqbvy4rvedd.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After clicking Resource groups, I could see my existing resource group named Je-mega-soft which was created in our last blog, located in South Africa North under Azure subscription 1.&lt;br&gt;
I clicked on it to open it.&lt;/p&gt;

&lt;p&gt;Step 5 — Search for Storage Accounts&lt;br&gt;
Inside the Resource Manager section, I used the search bar again and typed "storage account". From the suggestions, I clicked on Storage accounts (the one listed under Services — not the classic version).&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%2Fok5ejeq5n7vtmvs0g41s.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%2Fok5ejeq5n7vtmvs0g41s.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This took me to the Storage center where I could see existing storage accounts and create new ones.&lt;/p&gt;

&lt;p&gt;Step 6 — Create a New Storage Account&lt;br&gt;
On the Storage center page, I clicked the + Create button at the top to start creating a new storage account.&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%2Ff8x69t6kqeoeitvfkrut.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%2Ff8x69t6kqeoeitvfkrut.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Basics tab of the creation form, I filled in these details:&lt;/p&gt;

&lt;p&gt;Resource group: Je-mega-soft (selected from the dropdown)&lt;br&gt;
Storage account name: jewebs (this has to be globally unique — all lowercase, no special characters)&lt;br&gt;
Region: (Africa) South Africa North (I chose the region closest to me)&lt;br&gt;
Preferred storage type: Azure Blob Storage or Azure Data Lake Storage&lt;br&gt;
Performance: Standard (recommended for most use cases)&lt;br&gt;
Redundancy: Locally Redundant Storage (LRS) (the most affordable option — stores 3 copies of your data within one data center)&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%2F0wdjw1nizuxnrcj8n12j.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%2F0wdjw1nizuxnrcj8n12j.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why LRS? For a static website that's just for learning or low-traffic use, LRS is more than enough and the cheapest option. &lt;/p&gt;

&lt;p&gt;Step 7 — Enable Anonymous Access in the Security Tab&lt;br&gt;
After filling in the Basics, I clicked Next to navigate through the tabs until I reached the Security tab.&lt;br&gt;
Here, the most important setting to enable is:&lt;br&gt;
✅ Allow enabling anonymous access on individual containers&lt;br&gt;
I made sure this checkbox was ticked.&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%2Fk266z1ivbyo2u6vqpk4y.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%2Fk266z1ivbyo2u6vqpk4y.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The red arrow in my screenshot points directly to this option — don't miss it!&lt;/p&gt;

&lt;p&gt;Why is this important? Without enabling anonymous access, your static website files would be private by default. No one on the internet would be able to open your website. Enabling this allows the $web container (which Azure creates for static websites) to serve files publicly.&lt;/p&gt;

&lt;p&gt;Once done, I clicked Review + create, reviewed the settings, and clicked 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%2Fo8vue51we30iws35yd34.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%2Fo8vue51we30iws35yd34.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 8 — Deployment Complete! Go to Resource&lt;br&gt;
After a few seconds, the deployment finished and I saw the "Your deployment is complete" message.&lt;br&gt;
The notification bell at the top right also showed a green checkmark saying "Deployment succeeded" — the deployment was to resource group Je-mega-soft.&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%2Fy2ok07guzoeccsw49jr6.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%2Fy2ok07guzoeccsw49jr6.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I clicked the Go to resource button (there's one in the main panel and one in the notification panel — either works) to open the newly created storage account.&lt;/p&gt;

&lt;p&gt;Step 9 — Navigate to Static Website Settings&lt;br&gt;
Now I was inside the jewebs storage account dashboard.&lt;br&gt;
On the left sidebar, I scrolled down and expanded the Data management section. Inside it, I clicked on Static website.&lt;/p&gt;

&lt;p&gt;If you don't see Data management, look for it in the left panel — it's usually collapsed. The red arrow in my screenshot points directly to 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%2Fvetja4ofyalnp2ef5sfh.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%2Fvetja4ofyalnp2ef5sfh.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 10 — Enable the Static Website Feature&lt;br&gt;
On the Static website page, by default the feature is set to Disabled.&lt;br&gt;
I clicked on Enabled to turn it on.&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%2Fatqkpysovwuekwubx8dm.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%2Fatqkpysovwuekwubx8dm.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As soon as I enabled it, two input fields appeared:&lt;/p&gt;

&lt;p&gt;Index document name: nexus_brew.html&lt;br&gt;
Error document path: ERROR-404.html&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%2Flgycikyhx0gbbjw9kjns.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%2Flgycikyhx0gbbjw9kjns.png" alt=" " width="799" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the page that shows when someone visits a URL that doesn't exist. You can create a simple 404 page or just use the default.&lt;/p&gt;

&lt;p&gt;After filling these in, I clicked Save.&lt;/p&gt;

&lt;p&gt;Step 11 — Settings Saved Successfully&lt;br&gt;
A green notification appeared in the top right corner saying "Successfully updated static website settings".&lt;br&gt;
On the same page, I could now see:&lt;/p&gt;

&lt;p&gt;The static website is Enabled&lt;br&gt;
A message saying: "An Azure Storage container has been created to host your static website."&lt;br&gt;
A link to the container: $web&lt;br&gt;
The Primary endpoint URL: &lt;a href="https://jewebs.z1.web.core.windows.net/" rel="noopener noreferrer"&gt;https://jewebs.z1.web.core.windows.net/&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%2Fbgob76pa9qnuomvfa3al.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%2Fbgob76pa9qnuomvfa3al.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is $web? This is a special Azure container that's automatically created when you enable static website hosting. It's where you'll upload all your website files.&lt;/p&gt;

&lt;p&gt;I clicked on $web to open that container.&lt;/p&gt;

&lt;p&gt;Step 12 — Upload Files to the $web Container&lt;br&gt;
Inside the $web container, it was empty — showing "No items found".&lt;br&gt;
I clicked the Upload button at the top to open the Upload blob panel on the right side.&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%2Fmd1zvn3pbhg336kd9xk6.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%2Fmd1zvn3pbhg336kd9xk6.png" alt=" " width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then selected all the files from the extracted Nexus Brew folder:&lt;/p&gt;

&lt;p&gt;index.html&lt;br&gt;
tooplate-nexus-brew.css&lt;br&gt;
tooplate-nexus-scripts.js&lt;br&gt;
ABOUT THIS TEMPLATE.txt&lt;br&gt;
The images folder&lt;/p&gt;

&lt;p&gt;The upload panel showed "7 file(s) selected" (the images folder contains multiple image files, so the total count goes up).&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%2Fzx7yk6j6i55gz02w7pce.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%2Fzx7yk6j6i55gz02w7pce.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I clicked the Upload button in the panel to start the upload.&lt;/p&gt;

&lt;p&gt;Important tip: Make sure to upload the contents of the folder, not the folder itself. Azure Blob Storage needs the files at the root level of $web for the static website to work correctly. If you upload a folder as a subfolder, your index page won't load properly.&lt;/p&gt;

&lt;p&gt;Step 13 — Files Successfully Uploaded&lt;br&gt;
After the upload completed, the $web container now showed all my files:&lt;br&gt;
NameTypeSizeimagesFolder—ABOUT THIS TEMPLATE.txtBlock blob557 Bindex.htmlBlock blob16.8 KiBtooplate-nexus-brew.cssBlock blob24.78 KiBtooplate-nexus-scripts.jsBlock blob3.52 KiB&lt;br&gt;
All 5 items were now visible and available in the container — uploaded on 6/2/2026 at 10:38 PM.&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%2Fx529ia06dk6tmty6mot5.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%2Fx529ia06dk6tmty6mot5.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 14 — Copy the URL of the Index File&lt;br&gt;
To get the direct URL of the uploaded index.html file, I:&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%2Ffrubzql0xzz50s5cesza.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%2Ffrubzql0xzz50s5cesza.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicked the three-dot menu (...) next to index.html&lt;br&gt;
Selected Copy URL from the context menu&lt;/p&gt;

&lt;p&gt;The URL I got was:&lt;br&gt;
&lt;a href="https://jewebs.blob.core.windows.net/$web/index.html" rel="noopener noreferrer"&gt;https://jewebs.blob.core.windows.net/$web/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: There are actually two URLs you can use:&lt;/p&gt;

&lt;p&gt;Blob URL (direct file): &lt;a href="https://jewebs.blob.core.windows.net/$web/index.html" rel="noopener noreferrer"&gt;https://jewebs.blob.core.windows.net/$web/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Static website URL (cleaner): &lt;a href="https://jewebs.z1.web.core.windows.net/" rel="noopener noreferrer"&gt;https://jewebs.z1.web.core.windows.net/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Website Is Live! 🎉&lt;/p&gt;

&lt;p&gt;That's it! The Nexus Brew template is now hosted live on Azure Blob Storage as a static website.&lt;br&gt;
You can visit it at:&lt;br&gt;
👉 &lt;a href="https://jewebs.blob.core.windows.net/$web/index.html" rel="noopener noreferrer"&gt;https://jewebs.blob.core.windows.net/$web/index.html&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%2F7f0kr6g51hytz5hgpya5.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%2F7f0kr6g51hytz5hgpya5.png" alt=" " width="800" height="407"&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%2Fsoqwtum6shyrtstktf8a.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%2Fsoqwtum6shyrtstktf8a.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;           Quick Summary of All Steps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's a quick recap of everything we did:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Downloaded the Nexus Brew free HTML template from tooplate.com&lt;/li&gt;
&lt;li&gt;Extracted the zip file and noted the files inside&lt;/li&gt;
&lt;li&gt;Open the Azure Portal and search for Resource groups in the Azure portal&lt;/li&gt;
&lt;li&gt;Opened the existing Je-mega-soft resource group which was previously showed on our last blog how to create.&lt;/li&gt;
&lt;li&gt;Searched for Storage accounts and clicked Create&lt;/li&gt;
&lt;li&gt;Configured the storage account with name jewebs, region South Africa North, Standard performance, and LRS redundancy&lt;/li&gt;
&lt;li&gt;In the Security tab, enabled Allow anonymous access on containers&lt;/li&gt;
&lt;li&gt;Deployed and clicked Go to resource&lt;/li&gt;
&lt;li&gt;Navigated to Data management → Static website&lt;/li&gt;
&lt;li&gt;Enabled static website hosting and set the index document name&lt;/li&gt;
&lt;li&gt;Saved settings and noted the $web container and primary endpoint URL&lt;/li&gt;
&lt;li&gt;Opened the $web container and uploaded all website files&lt;/li&gt;
&lt;li&gt;Confirmed all files were uploaded successfully&lt;/li&gt;
&lt;li&gt;Copied the URL and opened the live websit
e&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why I Loved This Approach&lt;/p&gt;

&lt;p&gt;Honestly, this whole setup took less than 15 minutes and didn't require me to set up a web server, configure Nginx or Apache, deal with SSL certificates manually, or pay for a VM. Azure handles everything for you and even gives you HTTPS for free through the static website endpoint.&lt;br&gt;
For simple websites — portfolios, landing pages, documentation sites, or just practice — this is one of the easiest and cheapest ways to get something live on the internet.&lt;/p&gt;

&lt;p&gt;Resources Used:&lt;/p&gt;

&lt;p&gt;Tooplate.com — Free HTML templates&lt;br&gt;
Azure Static Website Hosting Docs&lt;br&gt;
Azure Account.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Step-by-Step Guide to Azure Blob Storage: Uploading Files, Enabling Public Access, and Secure SAS Link Generation</title>
      <dc:creator>David Cletus</dc:creator>
      <pubDate>Thu, 28 May 2026 22:09:47 +0000</pubDate>
      <link>https://dev.to/4thman/step-by-step-guide-to-azure-blob-storage-uploading-files-enabling-public-access-and-secure-sas-21lm</link>
      <guid>https://dev.to/4thman/step-by-step-guide-to-azure-blob-storage-uploading-files-enabling-public-access-and-secure-sas-21lm</guid>
      <description>&lt;p&gt;In this article, I will walk through how I created an Azure Storage account, configured Blob Storage, uploaded a file, made it publicly accessible, and finally generated a Shared Access Signature (SAS) link for secure access.&lt;/p&gt;

&lt;p&gt;This is part of my hands-on learning journey in Cloud Computing and DevOps using Microsoft Azure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating the Azure Storage Account&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%2F292c1x73zol1n02flu2f.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%2F292c1x73zol1n02flu2f.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first step was to create a Storage Account in Microsoft Azure. This is the core service that provides a scalable location for storing files such as images, videos, documents, and backups.&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%2Fv3rqaa8u9tfctb2tztmk.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%2Fv3rqaa8u9tfctb2tztmk.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuration used:&lt;br&gt;
Resource Group: je-mega-soft&lt;br&gt;
Storage Account Name: prodjemegastorage1&lt;br&gt;
Region: Africa (South Africa North)&lt;br&gt;
Primary Service: Azure Blob Storage&lt;br&gt;
Performance: Standard&lt;br&gt;
Redundancy: Locally Redundant Storage (LRS)&lt;br&gt;
Access Tier: Hot&lt;br&gt;
Allow Blob Public Access: Enabled (on container level)&lt;br&gt;
Explanation of each choice:&lt;/p&gt;

&lt;p&gt;Resource Group (je-mega-soft):&lt;br&gt;
A resource group is simply a logical container in Azure that holds related resources. I used this to group everything related to my project for easy management and cleanup.&lt;/p&gt;

&lt;p&gt;Storage Account Name (prodjemegastorage1):&lt;br&gt;
This must be globally unique across Azure. I used a structured name to represent a production-style storage setup.&lt;/p&gt;

&lt;p&gt;Region (Africa – South Africa North):&lt;br&gt;
I selected this region because it is geographically closer to my location, which reduces latency and improves performance when accessing resources.&lt;/p&gt;

&lt;p&gt;Primary Service (Blob Storage):&lt;br&gt;
Blob Storage is designed for storing unstructured data like images, videos, logs, and backups. It is the best choice for this type of project.&lt;/p&gt;

&lt;p&gt;Performance (Standard):&lt;br&gt;
Standard performance was chosen because this is a learning/demo project. It is cost-effective and suitable for general-purpose storage. Premium would only be needed for high-speed enterprise workloads.&lt;/p&gt;

&lt;p&gt;Redundancy (Locally Redundant Storage - LRS):&lt;br&gt;
LRS stores data in a single data center but keeps multiple copies within that facility. I chose this because it is the cheapest option and perfect for testing and learning purposes.&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%2Finvo9pynj3bcm2fk23ah.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%2Finvo9pynj3bcm2fk23ah.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access Tier (Hot):&lt;br&gt;
The Hot tier is used for data that is accessed frequently. Since I planned to upload and access the file during testing and sharing, this was the best fit.&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%2Fdxaampdlyienp7lritnw.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%2Fdxaampdlyienp7lritnw.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Public Access Enabled:&lt;br&gt;
I enabled public access at the container level because I wanted the uploaded file to be accessible via a URL without authentication.&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%2F09ooc2xjtlwa1bju3eu3.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%2F09ooc2xjtlwa1bju3eu3.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After reviewing all settings, I clicked Create and waited for deployment to complete.&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%2Fbzmnpeal1ahvqkoj6c8o.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%2Fbzmnpeal1ahvqkoj6c8o.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Blob Container&lt;/strong&gt;&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%2Fzh83dg3u7smz2lq1ofze.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%2Fzh83dg3u7smz2lq1ofze.png" alt=" " width="800" height="362"&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%2F7kokhduusc70nyfymppj.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%2F7kokhduusc70nyfymppj.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the storage account was successfully created, I moved to the next step which is creating a container.&lt;/p&gt;

&lt;p&gt;Path:&lt;br&gt;
Storage Account → Data Storage → Containers → + Add Container&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%2F4gzu7t4q2ee7027f4unl.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%2F4gzu7t4q2ee7027f4unl.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Container configuration:&lt;br&gt;
Name: jemega-img-vid&lt;br&gt;
Public Access Level: Container (anonymous read access for containers and blobs)&lt;br&gt;
Why I used this container name:&lt;/p&gt;

&lt;p&gt;I chose jemega-img-vid because:&lt;/p&gt;

&lt;p&gt;“jemega” represents my personal/project brand name&lt;br&gt;
“img-vid” clearly indicates the container is meant for images and videos&lt;br&gt;
It is short, readable, and meaningful for future scaling&lt;br&gt;
Public Access Level explanation:&lt;/p&gt;

&lt;p&gt;Setting the access level to Container means:&lt;/p&gt;

&lt;p&gt;Files inside the container can be publicly accessed&lt;br&gt;
Anyone with the link can view blobs without authentication&lt;br&gt;
This is useful for demos, static file hosting, and learning scenarios&lt;br&gt;
About the $logs container:&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%2Fqp4sw7xu37kylm5zfp0g.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%2Fqp4sw7xu37kylm5zfp0g.png" alt=" " width="799" height="358"&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%2Fqxhg1zuzdlltdjhmb3ii.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%2Fqxhg1zuzdlltdjhmb3ii.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During setup, Azure automatically created a container called $logs.&lt;/p&gt;

&lt;p&gt;This container is used for system-generated logs such as:&lt;/p&gt;

&lt;p&gt;Storage analytics logs&lt;br&gt;
Request tracking logs&lt;br&gt;
Diagnostic monitoring data&lt;/p&gt;

&lt;p&gt;It is not meant for user files, so I did not modify or use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uploading the File to Blob Storage&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%2F8o550f0qqwk6ho6bygma.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%2F8o550f0qqwk6ho6bygma.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I uploaded a file into the container.&lt;/p&gt;

&lt;p&gt;File uploaded:&lt;br&gt;
just me.png&lt;/p&gt;

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

&lt;p&gt;Opened the container (jemega-img-vid)&lt;br&gt;
Clicked on Upload&lt;br&gt;
Selected the file from my local system&lt;br&gt;
Clicked Upload to store it in Azure Blob Storage&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%2F2mztiaqqh2zq3gujounx.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%2F2mztiaqqh2zq3gujounx.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once uploaded, Azure automatically generated a unique URL for the file.&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%2Fuy5qck2ho69oaqr3l9h2.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%2Fuy5qck2ho69oaqr3l9h2.png" alt=" " width="799" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Blob URL generated:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prodjemegastorage1.blob.core.windows.net/jemega-img-vid/just%20me.png" rel="noopener noreferrer"&gt;https://prodjemegastorage1.blob.core.windows.net/jemega-img-vid/just%20me.png&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This URL directly points to the file inside the container. Because public access was enabled, the file can be accessed in a browser without authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generating a Shared Access Signature (SAS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To improve security while still allowing temporary access, I generated a Shared Access Signature (SAS).&lt;/p&gt;

&lt;p&gt;What is SAS?&lt;/p&gt;

&lt;p&gt;A SAS token is a secure way to grant limited access to storage resources without exposing your account keys. It allows you to define:&lt;/p&gt;

&lt;p&gt;What can be accessed&lt;br&gt;
How long access is valid&lt;br&gt;
What permissions are allowed&lt;br&gt;
Why I used Key 1:&lt;/p&gt;

&lt;p&gt;I used Key 1 from the storage account because it is one of the primary access keys used to generate SAS tokens. These keys should be protected because they grant full control over the storage account.&lt;/p&gt;

&lt;p&gt;SAS configuration used:&lt;br&gt;
Start Time: Today at 10:30 PM&lt;br&gt;
Expiry Time: 31st of this month at 12:03 PM&lt;br&gt;
Permissions: Read (sp=r)&lt;br&gt;
Protocol: HTTPS only&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%2Frn83pekint3jg5ejxhxj.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%2Frn83pekint3jg5ejxhxj.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why SAS is important:&lt;/p&gt;

&lt;p&gt;SAS provides:&lt;/p&gt;

&lt;p&gt;Temporary access instead of permanent public exposure&lt;br&gt;
Better security control over shared files&lt;br&gt;
Ability to revoke access by changing keys or expiry&lt;br&gt;
Fine-grained permissions (read, write, delete, etc.)&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Final SAS URL (Secure Access Link)&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Here is the final link generated using SAS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prodjemegastorage1.blob.core.windows.net/jemega-img-vid/just%20me.png?sp=r&amp;amp;st=2026-05-28T21:12:08Z&amp;amp;se=2026-05-31T11:03:08Z&amp;amp;spr=https&amp;amp;sv=2026-02-06&amp;amp;sr=b&amp;amp;sig=SseErml92AKi5t60kVuYCN8DNP%2BBkKm4CaXtHwhTqwo%3D" rel="noopener noreferrer"&gt;https://prodjemegastorage1.blob.core.windows.net/jemega-img-vid/just%20me.png?sp=r&amp;amp;st=2026-05-28T21:12:08Z&amp;amp;se=2026-05-31T11:03:08Z&amp;amp;spr=https&amp;amp;sv=2026-02-06&amp;amp;sr=b&amp;amp;sig=SseErml92AKi5t60kVuYCN8DNP%2BBkKm4CaXtHwhTqwo%3D&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This walkthrough helped me understand the basics of Azure Blob Storage, from creating a storage account and container to uploading a file and generating a SAS link for controlled access. I also learned how key settings like redundancy, access tier, and public access affect cost, performance, and security. Overall, it made cloud storage concepts clearer and gave me a solid foundation for working with Azure storage services going forward.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>devops</category>
    </item>
    <item>
      <title>I Created an Azure User, Gave It Global Admin Access, Revoked It, and Tested Azure IAM — Here’s What I Learned</title>
      <dc:creator>David Cletus</dc:creator>
      <pubDate>Fri, 22 May 2026 01:20:29 +0000</pubDate>
      <link>https://dev.to/4thman/i-created-an-azure-user-gave-it-global-admin-access-revoked-it-and-tested-azure-iam-heres-3p6p</link>
      <guid>https://dev.to/4thman/i-created-an-azure-user-gave-it-global-admin-access-revoked-it-and-tested-azure-iam-heres-3p6p</guid>
      <description>&lt;p&gt;As part of my Cloud Engineering and DevOps learning journey, I recently decided to go beyond theory and start practicing Identity and Access Management (IAM) directly inside Microsoft Azure.&lt;/p&gt;

&lt;p&gt;I wanted to understand how organizations manage users, permissions, administrative access, and security in real cloud environments. Instead of just reading about Microsoft Entra ID and RBAC, I performed a complete hands-on lab from start to finish.&lt;/p&gt;

&lt;p&gt;In this lab, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;created a new Azure user&lt;/li&gt;
&lt;li&gt;configured Microsoft Authenticator&lt;/li&gt;
&lt;li&gt;assigned administrative roles&lt;/li&gt;
&lt;li&gt;logged into the new account using an incognito browser&lt;/li&gt;
&lt;li&gt;created another user using delegated access&lt;/li&gt;
&lt;li&gt;revoked the permissions&lt;/li&gt;
&lt;li&gt;tested whether the account could still perform administrative actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This exercise gave me a much deeper understanding of how cloud identity management works in enterprise environments.&lt;/p&gt;

&lt;p&gt;The screenshots attached throughout this post document the entire process step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting From the Default Directory
&lt;/h2&gt;

&lt;p&gt;I began by logging into the Azure Portal using my main administrator account inside the default directory.&lt;/p&gt;

&lt;p&gt;From there, I navigated to:&lt;/p&gt;

&lt;p&gt;Microsoft Entra ID → Users → All Users&lt;/p&gt;

&lt;p&gt;This section contains every identity managed inside the Azure environment, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users&lt;/li&gt;
&lt;li&gt;groups&lt;/li&gt;
&lt;li&gt;applications&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, I already had administrative privileges, which allowed me to create and manage other users.&lt;/p&gt;

&lt;p&gt;One thing I’m beginning to understand about cloud platforms is that structure and organization are extremely important. Without proper identity management, large organizations would struggle to control access securely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the “Immortel” User
&lt;/h2&gt;

&lt;p&gt;The next step was creating a new user account named “Immortel.”&lt;/p&gt;

&lt;p&gt;During the setup process, I configured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;display name&lt;/li&gt;
&lt;li&gt;username&lt;/li&gt;
&lt;li&gt;password settings&lt;/li&gt;
&lt;li&gt;account information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After creating the account successfully, the new user appeared immediately inside the Azure users list.&lt;/p&gt;

&lt;p&gt;This helped me understand how organizations onboard employees into Microsoft Entra ID environments.&lt;/p&gt;

&lt;p&gt;At this stage, the account existed but had limited permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logging Into the Immortel Account Using Incognito Mode
&lt;/h2&gt;

&lt;p&gt;Instead of signing out from my main administrator account, I opened a new incognito browser window and logged into the Immortel account separately.&lt;/p&gt;

&lt;p&gt;This allowed me to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remain logged into my administrator account&lt;/li&gt;
&lt;li&gt;test the Immortel account independently&lt;/li&gt;
&lt;li&gt;simulate how multiple administrators may work simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using incognito mode was actually very useful because it helped me manage both accounts side by side without interrupting my existing Azure session.&lt;/p&gt;

&lt;p&gt;At this stage, the Immortel account still had very limited access because no elevated administrative roles had been assigned yet.&lt;/p&gt;

&lt;p&gt;This demonstrated an important cloud security principle known as:&lt;/p&gt;

&lt;p&gt;Least Privilege Access&lt;/p&gt;

&lt;p&gt;This means users should only receive the minimum permissions necessary for their tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Microsoft Authenticator (MFA)
&lt;/h2&gt;

&lt;p&gt;While logging into the Immortel account, Azure required Multi-Factor Authentication (MFA) setup using Microsoft Authenticator.&lt;/p&gt;

&lt;p&gt;This process involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scanning a QR code&lt;/li&gt;
&lt;li&gt;linking the account to the Authenticator app&lt;/li&gt;
&lt;li&gt;approving sign-in requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was one of the most practical parts of the exercise because it showed me how organizations secure user accounts beyond just passwords.&lt;/p&gt;

&lt;p&gt;I now understand why MFA is considered one of the most important security practices in cloud computing. Even if a password gets compromised, unauthorized users still cannot access the account without the additional verification step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assigning Global Administrator and Global Reader Roles
&lt;/h2&gt;

&lt;p&gt;After setting up the Immortel account successfully, I returned to my original administrator session inside the default directory and assigned two important roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global Administrator&lt;/li&gt;
&lt;li&gt;Global Reader&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This introduced me to Azure Role-Based Access Control (RBAC).&lt;/p&gt;

&lt;p&gt;Before this exercise, RBAC sounded theoretical while reading documentation. But seeing it work practically made everything much clearer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Global Administrator Role
&lt;/h2&gt;

&lt;p&gt;Global Administrator is one of the highest privileged roles inside Microsoft Entra ID.&lt;/p&gt;

&lt;p&gt;A user with this role can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create and manage users&lt;/li&gt;
&lt;li&gt;assign permissions&lt;/li&gt;
&lt;li&gt;manage identity settings&lt;/li&gt;
&lt;li&gt;configure security&lt;/li&gt;
&lt;li&gt;reset passwords&lt;/li&gt;
&lt;li&gt;control administrative settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In simple terms, this role has broad control over the Azure identity environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Global Reader Role
&lt;/h2&gt;

&lt;p&gt;Global Reader works differently.&lt;/p&gt;

&lt;p&gt;Users with this role can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;view configurations&lt;/li&gt;
&lt;li&gt;monitor environments&lt;/li&gt;
&lt;li&gt;review settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;but they cannot make administrative changes.&lt;/p&gt;

&lt;p&gt;This role is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auditors&lt;/li&gt;
&lt;li&gt;compliance teams&lt;/li&gt;
&lt;li&gt;monitoring personnel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;who need visibility without modification access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logging Back Into the Immortel Session
&lt;/h2&gt;

&lt;p&gt;After assigning the roles, I refreshed and continued working inside the incognito browser session already logged into the Immortel account.&lt;/p&gt;

&lt;p&gt;The difference was immediately noticeable.&lt;/p&gt;

&lt;p&gt;The account now had elevated privileges and could access administrative capabilities that were unavailable earlier.&lt;/p&gt;

&lt;p&gt;This demonstrated how permissions in Azure are controlled dynamically through assigned roles.&lt;/p&gt;

&lt;p&gt;It also showed me how powerful RBAC is in enterprise cloud environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Another User Named “Dare”
&lt;/h2&gt;

&lt;p&gt;To confirm the permissions were working correctly, I used the Immortel account to create another user named “Dare.”&lt;/p&gt;

&lt;p&gt;The creation process was successful.&lt;/p&gt;

&lt;p&gt;This confirmed that the Global Administrator privileges assigned earlier were active and functioning properly.&lt;/p&gt;

&lt;p&gt;At this point, I fully understood how delegated administration works in Azure environments.&lt;/p&gt;

&lt;p&gt;Organizations can temporarily assign elevated permissions to specific users without permanently granting full administrative control to everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revoking the Administrative Access
&lt;/h2&gt;

&lt;p&gt;After completing the delegated administration test, I returned to my original administrator session inside the default directory.&lt;/p&gt;

&lt;p&gt;I then removed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global Administrator access&lt;/li&gt;
&lt;li&gt;Global Reader access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;from the Immortel account.&lt;/p&gt;

&lt;p&gt;This part of the exercise taught me another important IAM concept:&lt;/p&gt;

&lt;p&gt;Permissions can be granted and revoked at any time.&lt;/p&gt;

&lt;p&gt;This is critical in real-world environments for situations such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;employee resignation&lt;/li&gt;
&lt;li&gt;temporary contractors&lt;/li&gt;
&lt;li&gt;security incidents&lt;/li&gt;
&lt;li&gt;role changes&lt;/li&gt;
&lt;li&gt;access reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Testing the Revoked Account
&lt;/h2&gt;

&lt;p&gt;To confirm the permissions were truly removed, I returned to the incognito browser session using the Immortel account and attempted to create another user named “John.”&lt;/p&gt;

&lt;p&gt;This time, the operation failed.&lt;/p&gt;

&lt;p&gt;The account no longer had sufficient privileges to perform administrative tasks.&lt;/p&gt;

&lt;p&gt;This final test clearly demonstrated how Azure immediately enforces permission changes once access is revoked.&lt;/p&gt;

&lt;p&gt;It was satisfying seeing the entire IAM workflow function exactly as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Lab Taught Me
&lt;/h2&gt;

&lt;p&gt;This hands-on exercise helped me better understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Entra ID&lt;/li&gt;
&lt;li&gt;Identity and Access Management (IAM)&lt;/li&gt;
&lt;li&gt;RBAC&lt;/li&gt;
&lt;li&gt;Multi-Factor Authentication (MFA)&lt;/li&gt;
&lt;li&gt;delegated administration&lt;/li&gt;
&lt;li&gt;access control&lt;/li&gt;
&lt;li&gt;permission revocation&lt;/li&gt;
&lt;li&gt;cloud security principles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, it helped me realize that identity management is one of the most critical aspects of cloud security.&lt;/p&gt;

&lt;p&gt;Without proper IAM controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unauthorized access becomes easier&lt;/li&gt;
&lt;li&gt;security risks increase&lt;/li&gt;
&lt;li&gt;governance becomes difficult&lt;/li&gt;
&lt;li&gt;compliance becomes harder to maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This was one of the most valuable Azure labs I’ve completed so far because it moved beyond theory into practical identity administration and security management.&lt;/p&gt;

&lt;p&gt;As I continue learning Cloud Engineering and DevOps, I’m beginning to appreciate how important hands-on practice is. Reading documentation is useful, but actually performing these tasks inside a real cloud environment creates a completely different level of understanding.&lt;/p&gt;

&lt;p&gt;I still have a long way to go, but each lab continues to build my confidence and understanding step by step.&lt;/p&gt;

&lt;p&gt;I’ll continue documenting my learning journey, projects, and hands-on experiences as I grow in cloud engineering and DevOps.&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%2F0354s6du370j94aoqq4s.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%2F0354s6du370j94aoqq4s.png" alt=" " width="799" height="351"&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%2Fogrogpzpm4vuwzixs3hz.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%2Fogrogpzpm4vuwzixs3hz.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&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%2Flrfncpv26biyw0vp1few.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%2Flrfncpv26biyw0vp1few.png" alt=" " width="799" height="357"&gt;&lt;/a&gt;&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%2F9ndaikyji8ld9q76wxft.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%2F9ndaikyji8ld9q76wxft.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&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%2F4hnd362cy3vm6s2x7wr5.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%2F4hnd362cy3vm6s2x7wr5.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&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%2Fq9bqdtau01aj3jzmto0k.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%2Fq9bqdtau01aj3jzmto0k.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&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%2F11pkpka72ndmootlvwwr.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%2F11pkpka72ndmootlvwwr.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&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%2Fel7d0f14cxfxlnwr3ltn.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%2Fel7d0f14cxfxlnwr3ltn.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&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%2Fksf7g86ihc5kem0naf66.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%2Fksf7g86ihc5kem0naf66.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&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%2Fb09cl7owdix7held8aiy.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%2Fb09cl7owdix7held8aiy.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&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%2Fdgib11lmqo3cz2hcpah8.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%2Fdgib11lmqo3cz2hcpah8.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&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%2F0hwhawzv5cwlncarztmm.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%2F0hwhawzv5cwlncarztmm.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&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%2Fmueal9dsoammha3qa0xw.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%2Fmueal9dsoammha3qa0xw.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&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%2Fau4711jka113w07wjqlq.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%2Fau4711jka113w07wjqlq.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&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%2Fvbn63efxx93vrq56tnlz.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%2Fvbn63efxx93vrq56tnlz.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&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%2Fz9h67wtwax86s3vo0c4g.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%2Fz9h67wtwax86s3vo0c4g.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&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%2Fnklk2zh86z4040r4s1kt.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%2Fnklk2zh86z4040r4s1kt.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>David Cletus</dc:creator>
      <pubDate>Thu, 14 May 2026 20:23:27 +0000</pubDate>
      <link>https://dev.to/4thman/-2cg4</link>
      <guid>https://dev.to/4thman/-2cg4</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/4thman/creating-my-first-azure-resource-group-as-i-begin-my-journey-into-cloud-engineering-and-devops-1cjj" class="crayons-story__hidden-navigation-link"&gt;Creating My First Azure Resource Group as I Begin My Journey Into Cloud Engineering and DevOps&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/4thman" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3927892%2F43aac6d7-df74-4a90-bdbe-8ba55edf1a70.jpeg" alt="4thman profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/4thman" class="crayons-story__secondary fw-medium m:hidden"&gt;
              David Cletus
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                David Cletus
                
              
              &lt;div id="story-author-preview-content-3671755" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/4thman" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3927892%2F43aac6d7-df74-4a90-bdbe-8ba55edf1a70.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;David Cletus&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/4thman/creating-my-first-azure-resource-group-as-i-begin-my-journey-into-cloud-engineering-and-devops-1cjj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/4thman/creating-my-first-azure-resource-group-as-i-begin-my-journey-into-cloud-engineering-and-devops-1cjj" id="article-link-3671755"&gt;
          Creating My First Azure Resource Group as I Begin My Journey Into Cloud Engineering and DevOps
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/azure"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;azure&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloud"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloud&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/4thman/creating-my-first-azure-resource-group-as-i-begin-my-journey-into-cloud-engineering-and-devops-1cjj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Creating My First Azure Resource Group as I Begin My Journey Into Cloud Engineering and DevOps</title>
      <dc:creator>David Cletus</dc:creator>
      <pubDate>Thu, 14 May 2026 20:18:29 +0000</pubDate>
      <link>https://dev.to/4thman/creating-my-first-azure-resource-group-as-i-begin-my-journey-into-cloud-engineering-and-devops-1cjj</link>
      <guid>https://dev.to/4thman/creating-my-first-azure-resource-group-as-i-begin-my-journey-into-cloud-engineering-and-devops-1cjj</guid>
      <description>&lt;p&gt;Today I took another practical step in my Cloud Engineering and DevOps learning journey by creating my first Resource Group on Microsoft Azure.&lt;/p&gt;

&lt;p&gt;As someone currently learning cloud computing and DevOps from scratch, this may seem like a small task, but it actually helped me understand how cloud infrastructure is organized in real-world environments.&lt;/p&gt;

&lt;p&gt;In the screenshot above, I was working inside the Azure Portal while creating a Resource Group called “Hagital-Resource-Group” and selecting the “South Africa North” region.&lt;/p&gt;

&lt;p&gt;This simple setup exposed me to important cloud concepts such as subscriptions, regions, resource organization, and infrastructure management.&lt;/p&gt;

&lt;p&gt;What is a Resource Group?&lt;/p&gt;

&lt;p&gt;A Resource Group in Azure acts like a container that holds related cloud resources together.&lt;/p&gt;

&lt;p&gt;For example, a company can keep:&lt;/p&gt;

&lt;p&gt;virtual machines&lt;br&gt;
databases&lt;br&gt;
storage accounts&lt;br&gt;
applications&lt;br&gt;
virtual networks&lt;/p&gt;

&lt;p&gt;inside one Resource Group instead of managing them separately.&lt;/p&gt;

&lt;p&gt;This makes resources easier to organize, monitor, secure, and manage.&lt;/p&gt;

&lt;p&gt;A simple way to think about it is like creating a folder on your computer for a particular project where all related files are stored together.&lt;/p&gt;

&lt;p&gt;What I Learned During This Setup&lt;/p&gt;

&lt;p&gt;While creating this Resource Group, I learned a few important things about how cloud platforms work.&lt;/p&gt;

&lt;p&gt;Subscriptions&lt;/p&gt;

&lt;p&gt;Azure uses subscriptions to manage billing and cloud services. Every resource created inside Azure belongs to a subscription.&lt;/p&gt;

&lt;p&gt;Regions&lt;/p&gt;

&lt;p&gt;Cloud providers do not keep all their infrastructure in one location. They build data centers across different countries and locations around the world called regions.&lt;/p&gt;

&lt;p&gt;I selected the “South Africa North” region because it is geographically closer to Africa and can help improve performance and reduce latency for users in this region.&lt;/p&gt;

&lt;p&gt;Resource Organization&lt;/p&gt;

&lt;p&gt;I also learned how organizations group cloud resources based on projects, departments, or applications. This becomes very important in large environments where thousands of resources may exist.&lt;/p&gt;

&lt;p&gt;Why I Started Learning Cloud Engineering and DevOps&lt;/p&gt;

&lt;p&gt;Technology is moving heavily toward cloud infrastructure and automation. Many organizations now rely on cloud providers like Microsoft Azure, AWS, and Google Cloud to run their systems and applications.&lt;/p&gt;

&lt;p&gt;I decided to start learning cloud engineering and DevOps because I want to understand modern infrastructure, automation, and how scalable systems are built and managed.&lt;/p&gt;

&lt;p&gt;Right now, I’m learning:&lt;/p&gt;

&lt;p&gt;cloud fundamentals&lt;br&gt;
Microsoft Azure&lt;br&gt;
Linux&lt;br&gt;
networking&lt;br&gt;
DevOps concepts&lt;br&gt;
virtual machines&lt;br&gt;
resource management&lt;/p&gt;

&lt;p&gt;I also plan to learn tools like Docker, Git, Kubernetes, Terraform, and CI/CD pipelines as I continue growing in this field.&lt;/p&gt;

&lt;p&gt;What I Learned Today&lt;/p&gt;

&lt;p&gt;Some of the key things I learned from this exercise include:&lt;/p&gt;

&lt;p&gt;how Azure Resource Groups work&lt;br&gt;
how subscriptions are used in Azure&lt;br&gt;
the importance of regions in cloud computing&lt;br&gt;
how cloud infrastructure is organized globally&lt;br&gt;
the value of hands-on practice while learning technology&lt;br&gt;
Final Thoughts&lt;/p&gt;

&lt;p&gt;This is still the beginning of my journey, but I’ve realized that small practical steps are important when learning cloud technologies.&lt;/p&gt;

&lt;p&gt;I plan to continue documenting my progress, sharing what I learn, and building projects along the way.&lt;/p&gt;

&lt;p&gt;There is still a lot to learn, but I’m excited about the process and looking forward to improving consistently over time.&lt;/p&gt;

&lt;h1&gt;
  
  
  cloudcomputing #azure #devops #cloudengineering #learninginpublic
&lt;/h1&gt;

</description>
      <category>azure</category>
      <category>beginners</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
