<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mahmud Seidu Babatunde</title>
    <description>The latest articles on Forem by Mahmud Seidu Babatunde (@buildwithbabs).</description>
    <link>https://forem.com/buildwithbabs</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%2F3784904%2F55e221f2-d750-4b3c-971a-2599984e374e.jpg</url>
      <title>Forem: Mahmud Seidu Babatunde</title>
      <link>https://forem.com/buildwithbabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/buildwithbabs"/>
    <language>en</language>
    <item>
      <title>Production-Ready Azure File Share Setup: Snapshots for Backup and Restricted Network Access</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Tue, 14 Apr 2026 18:09:35 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/production-ready-azure-file-share-setup-snapshots-for-backup-and-restricted-network-access-44c9</link>
      <guid>https://forem.com/buildwithbabs/production-ready-azure-file-share-setup-snapshots-for-backup-and-restricted-network-access-44c9</guid>
      <description>&lt;p&gt;At exactly 9:42 AM, I got a message I’ve seen too many times:&lt;/p&gt;

&lt;p&gt;“Please… I think I just deleted the finance report.”&lt;/p&gt;

&lt;p&gt;Three weeks of teamwork gone in seconds.&lt;/p&gt;

&lt;p&gt;No recycle bin, no undo button, report is gone.&lt;/p&gt;

&lt;p&gt;The finance team was already preparing for a review meeting. That file wasn’t optional; it was everything.&lt;/p&gt;

&lt;p&gt;And in that moment, you realize something:&lt;/p&gt;

&lt;p&gt;It’s not about storage.&lt;br&gt;
It’s about what happens when things go wrong.&lt;/p&gt;

&lt;p&gt;Luckily, this wasn’t luck.&lt;/p&gt;

&lt;p&gt;This was design.&lt;/p&gt;

&lt;p&gt;Let me show you exactly how I built a system where mistakes don’t become disasters and how you can do the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before we go hands-on, let’s break down a few key terms (in plain English):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Storage Account → Your cloud “hard drive” where everything lives.&lt;br&gt;
Azure Files → A shared folder in the cloud that multiple people can access.&lt;br&gt;
File Share → The main folder everyone connects to.&lt;br&gt;
Directory → Subfolders to keep things organized (like “Finance”).&lt;br&gt;
Snapshots → Backup copies of your data at a specific moment in time.&lt;br&gt;
Virtual Network (VNet) → Your private, secure space in Azure.&lt;br&gt;
Subnet → A smaller section inside your network.&lt;br&gt;
Zone-redundant storage (ZRS) → Keeps copies of your data in different locations so you don’t lose it.&lt;/p&gt;

&lt;p&gt;Now that you understand the “why,” let’s build the “how.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Creating the Foundation (Storage Account)
&lt;/h2&gt;

&lt;p&gt;We start by creating the backbone of everything: &lt;strong&gt;our storage account.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Azure portal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for &lt;strong&gt;Storage accounts&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+ Create&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;We &lt;strong&gt;create&lt;/strong&gt; one for the finance team:&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Resource Group — Your Project Container
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Resource Group&lt;/strong&gt; is simply a logical container for your resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Naming the Storage Account
&lt;/h3&gt;

&lt;p&gt;This must be globally unique (Azure requirement).&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Performance Matters
&lt;/h3&gt;

&lt;p&gt;Set performance to &lt;strong&gt;Premium&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why? Because finance workloads need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low latency&lt;/li&gt;
&lt;li&gt;High reliability&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Account Type
&lt;/h3&gt;

&lt;p&gt;We choose &lt;strong&gt;file shares&lt;/strong&gt; because we’re building a shared file system—not 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%2F2kwlxzb5i2yn4rlc6rbi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kwlxzb5i2yn4rlc6rbi.png" alt="Choosing file shares as storage account type" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Protection (Redundancy)
&lt;/h3&gt;

&lt;p&gt;Set to &lt;strong&gt;Zone-redundant storage (ZRS)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your data exists in multiple physical locations&lt;/li&gt;
&lt;li&gt;Even if one zone fails, your data survives&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Deploy
&lt;/h3&gt;

&lt;p&gt;Review and 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%2Fl5ii0ms539bpymrz3x8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5ii0ms539bpymrz3x8f.png" alt="Review and create storage account page in Azure" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait for deployment, then go to the resource.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 2: Creating a Shared Space for the Corporate Office
&lt;/h2&gt;

&lt;p&gt;Now we create a &lt;strong&gt;File Share&lt;/strong&gt;—this is where collaboration happens.&lt;/p&gt;

&lt;p&gt;Inside the storage account:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;File shares&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+ File share&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Provide a name and 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%2F9hrvf73ihr9wk1asxrxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hrvf73ihr9wk1asxrxd.png" alt="Creating new file share in Azure Files" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Organizing with Directories
&lt;/h2&gt;

&lt;p&gt;Now we create a &lt;strong&gt;finance directory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why? Because structure matters.&lt;/p&gt;

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

&lt;p&gt;Navigate into 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%2F47v9zgt3mgk88kygneh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47v9zgt3mgk88kygneh6.png" alt="Browsing finance directory in file share" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can keep nesting directories:&lt;/p&gt;

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

&lt;p&gt;Upload a test 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%2Fhrd7yx1bvoz8gv7rk96p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrd7yx1bvoz8gv7rk96p.png" alt="Uploading file into Azure file share" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: The Mistake (Why Snapshots Matter)
&lt;/h2&gt;

&lt;p&gt;Here’s where reality hits.&lt;/p&gt;

&lt;p&gt;Someone deletes a file.&lt;/p&gt;

&lt;p&gt;No backup. No recovery.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Snapshots&lt;/strong&gt; save the day.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a Snapshot
&lt;/h3&gt;

&lt;p&gt;Snapshots are point-in-time 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%2F3e2ahbumrtz6tbpkme6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e2ahbumrtz6tbpkme6g.png" alt="Snapshots blade in Azure file share" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add snapshot:&lt;/p&gt;

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

&lt;p&gt;Verify contents:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 5: Simulating Disaster (File Deletion)
&lt;/h2&gt;

&lt;p&gt;Let’s delete 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%2Fpbzykup7x1lu3lfsutj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbzykup7x1lu3lfsutj8.png" alt="Deleting file from Azure file share" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Recovery (The Hero Moment)
&lt;/h2&gt;

&lt;p&gt;Go back to snapshot:&lt;/p&gt;

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

&lt;p&gt;Restore 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%2Fmrcptvh57iobzrgcjbii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrcptvh57iobzrgcjbii.png" alt="Restoring file from snapshot in Azure" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And just like that…&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Crisis avoided. Finance team happy. Reputation intact.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Locking Down Access (Security First)
&lt;/h2&gt;

&lt;p&gt;Now we enforce &lt;strong&gt;controlled access&lt;/strong&gt; using a Virtual Network.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create Virtual Network
&lt;/h3&gt;

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

&lt;p&gt;Deploy 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%2Fcwfa8j0v0imsccq6b8eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwfa8j0v0imsccq6b8eo.png" alt="Creating virtual network in Azure" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to resource:&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Configure Subnet
&lt;/h3&gt;

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

&lt;p&gt;Select default subnet:&lt;/p&gt;

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

&lt;p&gt;Enable &lt;strong&gt;Microsoft.Storage service endpoint&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%2Frxlwfhjzssg69pvf24n3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlwfhjzssg69pvf24n3.png" alt="Enabling Microsoft Storage service endpoint" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Restrict Storage Access
&lt;/h3&gt;

&lt;p&gt;Now we allow access &lt;strong&gt;only from our VNet&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%2F67gx0j9iqcz4jfqq2nml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67gx0j9iqcz4jfqq2nml.png" alt="Storage account networking settings in Azure" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the 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%2Fyoljmutsu8e2xwuvt8ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyoljmutsu8e2xwuvt8ih.png" alt="Adding virtual network to restrict access" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No public access&lt;/li&gt;
&lt;li&gt;Only trusted network traffic&lt;/li&gt;
&lt;li&gt;Finance data stays protected&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudcomputing</category>
      <category>devops</category>
      <category>cloudsecurity</category>
      <category>dev</category>
    </item>
    <item>
      <title>Everything Was Working: The Hidden Cloud Mistake That Exposed My Database and Taught Me Why VNets Matter</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Mon, 13 Apr 2026 13:26:56 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/everything-was-working-the-hidden-cloud-mistake-that-exposed-my-database-and-taught-me-why-vnets-2o0o</link>
      <guid>https://forem.com/buildwithbabs/everything-was-working-the-hidden-cloud-mistake-that-exposed-my-database-and-taught-me-why-vnets-2o0o</guid>
      <description>&lt;p&gt;My app worked perfectly… until I discovered my database was open to the entire internet.&lt;/p&gt;

&lt;p&gt;Everything was working. The application was live, users could sign up, and data was being stored without any issues. From the outside, it looked like success. But behind the scenes, it was a disaster waiting to happen.&lt;/p&gt;

&lt;p&gt;The system itself was simple: a web application running on a Virtual Machine, a backend API handling requests, and a database storing user information. Everything deployed smoothly. There were no errors, no warnings—just a working system.&lt;/p&gt;

&lt;p&gt;Like many beginners, I assumed that if it worked, then it was fine. That assumption turned out to be dangerously wrong.&lt;/p&gt;

&lt;p&gt;What I didn’t realize at the time was that my database was exposed to the internet. There were no restrictions, no isolation, and no protection. It was simply sitting there, reachable by anyone who knew where to look.&lt;/p&gt;

&lt;p&gt;It didn’t take long before something did.&lt;/p&gt;

&lt;p&gt;An automated bot scanning the internet found the open port. There was no sophisticated attack involved—just a simple scan. It connected without resistance.&lt;/p&gt;

&lt;p&gt;At that moment, everything was already compromised. User data, emails, and passwords were all accessible. There were no alarms, no warnings, and nothing visibly broke. The application kept running as if nothing had happened, but the damage was already done.&lt;/p&gt;

&lt;p&gt;That’s when it hit me—the problem wasn’t my code or my deployment. It was my network.&lt;/p&gt;

&lt;p&gt;I had focused on building the application, but I completely overlooked the environment it lived in. Everything was public and exposed. In the real world, that’s not just a mistake, it’s an invitation to attackers.&lt;/p&gt;

&lt;p&gt;The system should have been structured differently. The web app could remain public, but the API should have had controlled access, and the database should have been completely private. Only the application should communicate with the database, not the internet.&lt;/p&gt;

&lt;p&gt;This is exactly where Virtual Networks (VNets) come in. A VNet creates a private space in the cloud where you control what is exposed and what remains hidden. It allows you to define who can access your resources and how they interact. Without it, you’re essentially leaving your infrastructure open.&lt;/p&gt;

&lt;p&gt;The truth is, systems don’t get compromised because they are complex. They get compromised because something was left open.&lt;/p&gt;

&lt;p&gt;DevOps is not just about making things work; it’s about making sure they are secure and resilient. Virtual Machines run your applications, but Virtual Networks protect them. Without proper network isolation, you’re not building systems—you’re exposing them.&lt;/p&gt;

</description>
      <category>cloudcomputing</category>
      <category>azure</category>
      <category>security</category>
      <category>networking</category>
    </item>
    <item>
      <title>If I Already Have a Laptop, Why Do I Need a Virtual Machine? (The Question That Changed My Understanding of Cloud)</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Sat, 11 Apr 2026 20:40:45 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/if-i-already-have-a-laptop-why-do-i-need-a-virtual-machine-the-question-that-changed-my-4638</link>
      <guid>https://forem.com/buildwithbabs/if-i-already-have-a-laptop-why-do-i-need-a-virtual-machine-the-question-that-changed-my-4638</guid>
      <description>&lt;p&gt;I remember sitting in front of my screen, staring at Azure, trying to make sense of it all.&lt;/p&gt;

&lt;p&gt;Virtual Machines?&lt;br&gt;
Servers?&lt;br&gt;
Cloud infrastructure?&lt;/p&gt;

&lt;p&gt;At the time, I only knew that a Virtual Machine was basically a computer running in the cloud, something I could create, start, and connect to, just like a real computer.&lt;/p&gt;

&lt;p&gt;And then a question hit me, one that didn’t feel “technical” at all:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If a Virtual Machine is just another computer built virtually…&lt;br&gt;
why do I even need it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because think about it.&lt;/p&gt;

&lt;p&gt;Every single person accessing a Virtual Machine is doing so from a physical laptop.&lt;br&gt;
A real device.&lt;br&gt;
Something that already works.&lt;/p&gt;

&lt;p&gt;So why introduce another “computer” on top of that?&lt;/p&gt;

&lt;p&gt;Why not just use the laptop we already have?&lt;/p&gt;

&lt;p&gt;And more importantly…&lt;/p&gt;

&lt;p&gt;Why would I start paying for something that looks like what I already own?&lt;/p&gt;

&lt;p&gt;That question bothered me for a while.&lt;/p&gt;

&lt;p&gt;Not because I couldn’t create a VM, but because I didn’t understand &lt;em&gt;why it truly mattered&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Then it clicked.&lt;/p&gt;

&lt;p&gt;My laptop was never designed to serve others.&lt;/p&gt;

&lt;p&gt;It was designed to serve me.&lt;/p&gt;

&lt;p&gt;The moment I build something that needs to be accessed by someone else, a website, an API (An API is a way for applications to communicate), even a simple app, my laptop becomes a limitation.&lt;/p&gt;

&lt;p&gt;It can go off.&lt;br&gt;
It can disconnect.&lt;br&gt;
It can fail.&lt;/p&gt;

&lt;p&gt;And the moment it does, everything I’ve built disappears with it.&lt;/p&gt;

&lt;p&gt;That’s when the idea of a server started to make sense.&lt;/p&gt;

&lt;p&gt;Not just as a concept, but as a necessity.&lt;/p&gt;

&lt;p&gt;A server, in simple terms, is just a computer designed to respond to requests from other people’s devices over the internet.&lt;/p&gt;

&lt;p&gt;A machine that is always on.&lt;br&gt;
Always reachable.&lt;br&gt;
Not tied to my physical presence.&lt;/p&gt;

&lt;p&gt;And that’s exactly what a Virtual Machine gives me.&lt;/p&gt;

&lt;p&gt;Not just “another computer”&lt;br&gt;
But a computer that exists beyond me.&lt;/p&gt;

&lt;p&gt;One that anyone can reach, at any time, from anywhere.&lt;/p&gt;

&lt;p&gt;Think about watching a movie on Netflix or a video on YouTube.&lt;/p&gt;

&lt;p&gt;You press play, and within seconds, the video starts.&lt;/p&gt;

&lt;p&gt;Now imagine if that video was being streamed from someone’s personal laptop.&lt;/p&gt;

&lt;p&gt;Halfway through the movie, their laptop battery dies.&lt;br&gt;
Or they close the lid.&lt;br&gt;
Or their internet disconnects.&lt;/p&gt;

&lt;p&gt;Your movie stops immediately.&lt;/p&gt;

&lt;p&gt;That would be frustrating.&lt;/p&gt;

&lt;p&gt;But that’s exactly what would happen if real-world applications depended on personal machines.&lt;/p&gt;

&lt;p&gt;Instead, these platforms run on servers that are always on, always connected, and designed to handle thousands, even millions of users at the same time.&lt;/p&gt;

&lt;p&gt;And in today’s world, those servers are often Virtual Machines running in the cloud.&lt;/p&gt;

&lt;p&gt;That’s when I stopped seeing VMs as an extra cost.&lt;/p&gt;

&lt;p&gt;And started seeing them as the foundation of anything that needs to live on the internet.&lt;/p&gt;

&lt;p&gt;Because the real question was never:&lt;/p&gt;

&lt;p&gt;“Why do I need a Virtual Machine if I already have a laptop?”&lt;/p&gt;

&lt;p&gt;The real question was:&lt;/p&gt;

&lt;p&gt;“Can my laptop truly support what I’m trying to build for the world?”&lt;/p&gt;

&lt;p&gt;And for the first time, the answer was clear.&lt;/p&gt;

&lt;p&gt;No, it can’t.&lt;/p&gt;

</description>
      <category>cloudcomputing</category>
      <category>devops</category>
      <category>azure</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A Practical Guide to Azure Architectural Components in Real-World System Design</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Fri, 10 Apr 2026 03:14:31 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/a-practical-guide-to-azure-architectural-components-in-real-world-system-design-48la</link>
      <guid>https://forem.com/buildwithbabs/a-practical-guide-to-azure-architectural-components-in-real-world-system-design-48la</guid>
      <description>&lt;p&gt;I used to think Azure was just cloud storage until I tried to build something real&lt;/p&gt;

&lt;p&gt;A few weeks ago, I decided to deploy a simple application on Azure.&lt;/p&gt;

&lt;p&gt;Nothing fancy. Just something small.&lt;/p&gt;

&lt;p&gt;But the moment I opened the Azure portal, I froze.&lt;/p&gt;

&lt;p&gt;I kept seeing terms like Region, Resource Group, Subscription, and Availability Zone.&lt;/p&gt;

&lt;p&gt;And I asked myself&lt;/p&gt;

&lt;p&gt;Why is this so complicated for just deploying an app?&lt;/p&gt;

&lt;p&gt;Then it clicked.&lt;/p&gt;

&lt;p&gt;Azure is not complicated. I was just looking at it the wrong way.&lt;/p&gt;

&lt;h3&gt;
  
  
  I started thinking of Azure like building a city
&lt;/h3&gt;

&lt;p&gt;If you want to build a house, you do not just drop it anywhere randomly.&lt;/p&gt;

&lt;p&gt;You think about where the city is located, how reliable the infrastructure is, how everything is organized, and who has access to what.&lt;/p&gt;

&lt;p&gt;That is exactly what Azure architectural components are.&lt;/p&gt;

&lt;h3&gt;
  
  
  First, where is your app living? Region
&lt;/h3&gt;

&lt;p&gt;This is the geographical location of your application.&lt;/p&gt;

&lt;p&gt;Choosing a region close to your users improves performance and reduces latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Then, what if one datacenter fails? Availability Zones
&lt;/h3&gt;

&lt;p&gt;Azure provides multiple isolated datacenters within a region.&lt;/p&gt;

&lt;p&gt;If one fails, your application continues running in another.&lt;/p&gt;

&lt;h3&gt;
  
  
  What if the entire region fails? Region Pairs
&lt;/h3&gt;

&lt;p&gt;Azure pairs regions together for disaster recovery.&lt;/p&gt;

&lt;p&gt;This ensures your system can recover from large scale outages.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you organize everything? Resource Groups
&lt;/h3&gt;

&lt;p&gt;Instead of scattering resources everywhere, you group them logically.&lt;/p&gt;

&lt;p&gt;Your virtual machines, databases, and storage can all live inside one resource group.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who is responsible for billing and control? Subscription
&lt;/h3&gt;

&lt;p&gt;Every resource you create lives inside a subscription.&lt;/p&gt;

&lt;p&gt;It defines billing, access, and usage limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who can access your system? RBAC
&lt;/h3&gt;

&lt;p&gt;Not everyone should have full control.&lt;/p&gt;

&lt;p&gt;Azure allows you to define who can view, deploy, or manage resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you deploy consistently? Azure Resource Manager
&lt;/h3&gt;

&lt;p&gt;Instead of manually clicking through the portal, you define your infrastructure as code.&lt;/p&gt;

&lt;p&gt;This allows you to deploy reliably and repeatedly.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you enforce rules? Azure Policies
&lt;/h3&gt;

&lt;p&gt;You can enforce standards such as restricting regions or requiring proper tagging.&lt;/p&gt;

&lt;p&gt;This helps maintain governance across your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I learned
&lt;/h3&gt;

&lt;p&gt;The biggest mistake I made was thinking Azure is just where my application runs.&lt;/p&gt;

&lt;p&gt;In reality, Azure is a structured system designed to make applications scalable, secure, and resilient.&lt;/p&gt;

&lt;p&gt;Now when I build, I do not just deploy an application.&lt;/p&gt;

&lt;p&gt;I think about availability, organization, security, and scalability.&lt;/p&gt;

&lt;p&gt;If you are just starting with Azure and feeling overwhelmed, you are not alone.&lt;/p&gt;

&lt;p&gt;You simply have not seen the full picture yet.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>devops</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>When “Private” Files Leak: How I Fixed a Silent Azure Storage Misconfiguration</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Wed, 18 Mar 2026 02:31:27 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/when-private-files-leak-how-i-fixed-a-silent-azure-storage-misconfiguration-5289</link>
      <guid>https://forem.com/buildwithbabs/when-private-files-leak-how-i-fixed-a-silent-azure-storage-misconfiguration-5289</guid>
      <description>&lt;p&gt;Most storage failures aren’t caused by hackers, they’re caused by small configuration decisions engineers overlook.&lt;/p&gt;

&lt;p&gt;A few years ago, a company accidentally exposed internal documents to the public.&lt;/p&gt;

&lt;p&gt;Not because of a breach.&lt;br&gt;
Not because of an attack.&lt;/p&gt;

&lt;p&gt;But because of a simple misconfiguration.&lt;/p&gt;

&lt;p&gt;Files that were meant to be private became publicly accessible through a URL.&lt;/p&gt;

&lt;p&gt;No authentication. No restriction.&lt;/p&gt;

&lt;p&gt;Just access.&lt;/p&gt;

&lt;p&gt;That’s the reality of cloud systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security failures are rarely loud, they are quiet, and often invisible until it’s too late.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn’t just a lab exercise, this is the same type of design decision engineers make in real systems where data must remain secure, available, and controlled.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk through how I built a &lt;strong&gt;secure, highly available Azure Storage system for private company documents&lt;/strong&gt;, and more importantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;why each configuration matters.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The Problem Engineers Actually Solve
&lt;/h1&gt;

&lt;p&gt;When dealing with internal company data, engineers are not just thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Where do I store files?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They are thinking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens if a region fails?&lt;/li&gt;
&lt;li&gt;How do I prevent public exposure?&lt;/li&gt;
&lt;li&gt;How do I share files securely and temporarily?&lt;/li&gt;
&lt;li&gt;How do I reduce storage costs over time?&lt;/li&gt;
&lt;li&gt;How do I ensure backups exist automatically?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what turns storage into &lt;strong&gt;architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Key Concepts You Must Understand First
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Storage Account
&lt;/h2&gt;

&lt;p&gt;A storage account is the foundation of Azure storage. All files (blobs) live inside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  High Availability
&lt;/h2&gt;

&lt;p&gt;Systems must continue running even when failures occur. In cloud systems, failure is expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Geo-Redundant Storage (GRS)
&lt;/h2&gt;

&lt;p&gt;GRS replicates your data to another region. If one region fails, your data still exists elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Private Access
&lt;/h2&gt;

&lt;p&gt;Private access ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no anonymous access&lt;/li&gt;
&lt;li&gt;no public exposure&lt;/li&gt;
&lt;li&gt;only authorized users can access data&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Thinking Like a Cloud Architect
&lt;/h1&gt;

&lt;p&gt;Before building anything, I asked:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How do I survive regional failure?&lt;/li&gt;
&lt;li&gt;How do I enforce strict privacy?&lt;/li&gt;
&lt;li&gt;How do I allow temporary access securely?&lt;/li&gt;
&lt;li&gt;How do I automate cost and backup?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Everything below answers those questions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 1 — Create the Storage Account
&lt;/h1&gt;

&lt;p&gt;In the portal, search for and select &lt;strong&gt;Storage accounts&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%2Fek54aqmtqpe0nc3u4peu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fek54aqmtqpe0nc3u4peu.png" alt="Azure portal showing Storage accounts search" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;Select the resource group created in the previous lab.&lt;/p&gt;

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

&lt;p&gt;Set the storage account name to &lt;strong&gt;private&lt;/strong&gt; and ensure it is unique.&lt;/p&gt;

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

&lt;p&gt;Select &lt;strong&gt;Review&lt;/strong&gt;, then &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Wait for deployment and select &lt;strong&gt;Go to resource&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%2F5svkxx324yo3be1kivna.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5svkxx324yo3be1kivna.png" alt="Azure deployment complete screen" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 2 — Configure High Availability
&lt;/h1&gt;

&lt;p&gt;This storage requires high availability if there’s a regional outage.&lt;/p&gt;

&lt;p&gt;In the storage account, in the &lt;strong&gt;Data management section&lt;/strong&gt;, select the &lt;strong&gt;Redundancy blade&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%2Fbeswa93ywqjb494rni50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbeswa93ywqjb494rni50.png" alt="Azure redundancy settings page" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure &lt;strong&gt;Geo-redundant storage (GRS)&lt;/strong&gt; is selected.&lt;/p&gt;

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

&lt;p&gt;Refresh 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%2Fcc213g6g84lmx4hdplws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcc213g6g84lmx4hdplws.png" alt="Azure refreshed redundancy view" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Review the primary and secondary location information.&lt;/p&gt;

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

&lt;p&gt;Save your changes.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Trade-off: Why GRS Instead of RA-GRS?
&lt;/h2&gt;

&lt;p&gt;RA-GRS allows read access from the secondary region.&lt;/p&gt;

&lt;p&gt;However:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this is internal storage&lt;/li&gt;
&lt;li&gt;read failover is not required&lt;/li&gt;
&lt;li&gt;cost optimization matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GRS provides redundancy without unnecessary cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good engineering is about choosing the right tool — not the biggest one.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 3 — Create a Private Container
&lt;/h1&gt;

&lt;p&gt;In the storage account, in the &lt;strong&gt;Data storage section&lt;/strong&gt;, select the &lt;strong&gt;Containers blade&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%2Fedy97u9jmblfidbv1h8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedy97u9jmblfidbv1h8z.png" alt="Azure containers blade" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;+ Container&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%2F9oqhvnn1ehvcvnu8elhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9oqhvnn1ehvcvnu8elhz.png" alt="Azure create container button" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure the name is &lt;strong&gt;private&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%2Fi8cesybkyv95ih9ugllm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8cesybkyv95ih9ugllm.png" alt="Azure container naming" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure access level is &lt;strong&gt;Private (no anonymous access)&lt;/strong&gt;&lt;br&gt;
Select &lt;strong&gt;OK&lt;/strong&gt; and &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Step 4 — Upload and Verify Access Restriction
&lt;/h1&gt;

&lt;p&gt;Upload a file and test access.&lt;/p&gt;

&lt;p&gt;Expected result:&lt;/p&gt;

&lt;p&gt;❌ File should NOT open&lt;br&gt;
❌ Browser should return an error&lt;/p&gt;

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

&lt;p&gt;The above confirms your storage is secure.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 5 — Configure Secure Temporary Access (SAS)
&lt;/h1&gt;

&lt;p&gt;Select your uploaded file and navigate to &lt;strong&gt;Generate SAS&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%2Fe9458n2hk78hpull19vo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9458n2hk78hpull19vo.png" alt="Azure generate SAS tab" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set permissions to &lt;strong&gt;Read only&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%2Fptvpukezm5gdtajy1srg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptvpukezm5gdtajy1srg.png" alt="Azure SAS permissions" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set expiry to &lt;strong&gt;24 hours&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%2Fuyfo60rscfzji4zhcl2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuyfo60rscfzji4zhcl2h.png" alt="Azure SAS expiry setting" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Generate SAS URL.&lt;/p&gt;

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

&lt;p&gt;Test access.&lt;/p&gt;

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

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

&lt;ul&gt;
&lt;li&gt;temporary access&lt;/li&gt;
&lt;li&gt;controlled permissions&lt;/li&gt;
&lt;li&gt;secure sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Step 6 — Configure Lifecycle Management (Cost Optimization)
&lt;/h1&gt;

&lt;p&gt;Return to storage account.&lt;/p&gt;

&lt;p&gt;Notice default tier is &lt;strong&gt;Hot&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%2Ft5s4wdjgnliagoims9p9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5s4wdjgnliagoims9p9.png" alt="Azure default access tier hot" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Lifecycle management&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%2F1tkwa1itu8ddaeh1fusv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1tkwa1itu8ddaeh1fusv.png" alt="Azure lifecycle management blade" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Add rule&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%2Fy6yln9vnc6vqcznrfzkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6yln9vnc6vqcznrfzkk.png" alt="Azure add lifecycle rule" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set rule name to &lt;strong&gt;movetocool&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%2F56y3ynlohq7pp7wxfdbl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56y3ynlohq7pp7wxfdbl.png" alt="Azure rule naming" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apply to all blobs and select Next.&lt;/p&gt;

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

&lt;p&gt;Set condition: 30 days → Move to Cool tier.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Step 7 — Configure Backup with Object Replication
&lt;/h1&gt;

&lt;p&gt;Create backup 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%2Fhwl90mvzgzr5g690hhc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwl90mvzgzr5g690hhc4.png" alt="Azure backup container creation" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Object replication&lt;/strong&gt; and create rule.&lt;/p&gt;

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

&lt;p&gt;Set destination 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%2Fr0trdgwnnt59xcrz1qw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0trdgwnnt59xcrz1qw4.png" alt="Azure replication destination" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Map containers.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Lessons From This Implementation
&lt;/h1&gt;

&lt;p&gt;• Security must be intentional&lt;br&gt;
• Private access should always be default&lt;br&gt;
• Temporary access must be controlled&lt;br&gt;
• Cost optimization should be automated&lt;br&gt;
• Backup should never be manual&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Cloud systems rarely fail because of missing features.&lt;/p&gt;

&lt;p&gt;They fail because of poor configuration decisions.&lt;/p&gt;

&lt;p&gt;A storage system can either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expose sensitive data&lt;/li&gt;
&lt;li&gt;lose critical files&lt;/li&gt;
&lt;li&gt;or fail silently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or it can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;secure&lt;/li&gt;
&lt;li&gt;resilient&lt;/li&gt;
&lt;li&gt;intentional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference is not the tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is the engineer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>security</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why Website Images Sometimes Fail to Load — And How I Built a Highly Available Azure Storage Backend to Fix It</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Sat, 14 Mar 2026 11:19:22 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/why-website-images-sometimes-fail-to-load-and-how-i-built-a-highly-available-azure-storage-56d</link>
      <guid>https://forem.com/buildwithbabs/why-website-images-sometimes-fail-to-load-and-how-i-built-a-highly-available-azure-storage-56d</guid>
      <description>&lt;p&gt;A few months ago, I opened an online store to check the specifications of a device I wanted to buy.&lt;/p&gt;

&lt;p&gt;The page loaded.&lt;/p&gt;

&lt;p&gt;The navigation bar appeared.&lt;br&gt;
The product description was visible.&lt;br&gt;
But the product image never showed up.&lt;/p&gt;

&lt;p&gt;Instead, there was a small broken-image icon sitting where the picture should have been.&lt;/p&gt;

&lt;p&gt;If you’ve ever experienced that moment, you know exactly what happens next.&lt;/p&gt;

&lt;p&gt;You refresh the page.&lt;/p&gt;

&lt;p&gt;Nothing changes.&lt;/p&gt;

&lt;p&gt;And suddenly you begin to wonder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the website broken?&lt;/li&gt;
&lt;li&gt;Is the product unavailable?&lt;/li&gt;
&lt;li&gt;Is the platform unreliable?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What most users never realize is that a broken image on a website usually isn’t about the website itself.&lt;/p&gt;

&lt;p&gt;It’s almost always about &lt;strong&gt;where the file is stored and how the storage system is designed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Behind every image, downloadable document, and product asset is a storage system responsible for delivering those files instantly.&lt;/p&gt;

&lt;p&gt;If that storage system is poorly configured, small things begin to fail:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;images disappear&lt;/li&gt;
&lt;li&gt;downloads stop working&lt;/li&gt;
&lt;li&gt;documentation links break&lt;/li&gt;
&lt;li&gt;websites feel unreliable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern cloud platforms solve this using &lt;strong&gt;distributed storage infrastructure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In Microsoft Azure, one of the core services used for this purpose is &lt;strong&gt;Azure Blob Storage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But simply creating a storage account isn’t enough.&lt;/p&gt;

&lt;p&gt;Engineers must think about deeper questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens if an entire Azure region fails?&lt;/li&gt;
&lt;li&gt;How can users access files without authentication?&lt;/li&gt;
&lt;li&gt;What if someone accidentally deletes important files?&lt;/li&gt;
&lt;li&gt;How do we keep track of document updates?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To explore these questions, I built a &lt;strong&gt;high-availability storage architecture for a public website using Azure Storage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;p&gt;Create a system that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;survive regional outages&lt;/li&gt;
&lt;li&gt;serve public website assets&lt;/li&gt;
&lt;li&gt;allow anonymous file access&lt;/li&gt;
&lt;li&gt;recover deleted files&lt;/li&gt;
&lt;li&gt;maintain file version history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s walk through how that system was designed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Engineers Face
&lt;/h2&gt;

&lt;p&gt;Imagine running an e-commerce website where thousands of customers view product images every day.&lt;/p&gt;

&lt;p&gt;Everything works perfectly until one day an Azure region experiences an outage.&lt;/p&gt;

&lt;p&gt;Suddenly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product images stop loading&lt;/li&gt;
&lt;li&gt;downloadable files fail&lt;/li&gt;
&lt;li&gt;customer experience breaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The website itself may still be online.&lt;/p&gt;

&lt;p&gt;But the storage system serving those files is unavailable.&lt;/p&gt;

&lt;p&gt;This is why cloud engineers design storage systems not just to &lt;strong&gt;store files&lt;/strong&gt;, but to ensure they remain &lt;strong&gt;available, recoverable, and resilient&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Azure Storage provides several mechanisms to solve these challenges.&lt;/p&gt;

&lt;p&gt;Before implementing the solution, I will helps to understand a few important concepts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Concepts Behind Azure Storage
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Azure Storage Account
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;Azure Storage Account&lt;/strong&gt; is the top-level container that holds all storage services.&lt;/p&gt;

&lt;p&gt;Inside a storage account you can store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;blobs (files, images, documents)&lt;/li&gt;
&lt;li&gt;file shares&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;li&gt;queues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For public websites, &lt;strong&gt;Blob Storage&lt;/strong&gt; is typically used to store static assets like images and downloadable files.&lt;/p&gt;

&lt;h2&gt;
  
  
  High Availability
&lt;/h2&gt;

&lt;p&gt;High availability means designing systems that &lt;strong&gt;continue operating even when failures occur&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Failures in cloud infrastructure are expected.&lt;/p&gt;

&lt;p&gt;Servers fail.&lt;br&gt;
Networks fail.&lt;br&gt;
Entire regions can fail.&lt;/p&gt;

&lt;p&gt;High availability ensures systems remain accessible despite those failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Geo-Redundant Storage
&lt;/h2&gt;

&lt;p&gt;Azure provides multiple redundancy options.&lt;/p&gt;

&lt;p&gt;One of the most resilient is &lt;strong&gt;Read-Access Geo-Redundant Storage (RA-GRS)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;replicates data to another Azure region&lt;/li&gt;
&lt;li&gt;stores multiple copies of data&lt;/li&gt;
&lt;li&gt;allows read access from the secondary region&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the primary region fails, the secondary region can still serve requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking Like a Cloud Architect
&lt;/h2&gt;

&lt;p&gt;When designing storage for a public website, engineers typically ask four important questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What happens if an entire region fails?&lt;/li&gt;
&lt;li&gt;Can users access files without authentication?&lt;/li&gt;
&lt;li&gt;What if someone accidentally deletes files?&lt;/li&gt;
&lt;li&gt;How can we track document updates over time?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Azure Storage provides solutions for each of these challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Geo-redundancy&lt;/strong&gt; protects against regional outages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anonymous blob access&lt;/strong&gt; allows public content delivery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Soft delete&lt;/strong&gt; enables file recovery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blob versioning&lt;/strong&gt; keeps historical file versions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following implementation combines these capabilities to build a resilient storage backend.&lt;/p&gt;

&lt;h1&gt;
  
  
  Create a Storage Account With High Availability
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Create a storage account to support the public website
&lt;/h2&gt;

&lt;p&gt;In the Azure portal, search for and select &lt;strong&gt;Storage accounts&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%2Fek54aqmtqpe0nc3u4peu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fek54aqmtqpe0nc3u4peu.png" alt="Azure portal search results showing Storage Accounts" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;For resource group select &lt;strong&gt;New&lt;/strong&gt;, give your resource group a name, and select &lt;strong&gt;OK&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%2Fqcffgovlv8udkoim2j15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcffgovlv8udkoim2j15.png" alt="Azure portal create resource group screen" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the storage account name to &lt;strong&gt;publicwebsite&lt;/strong&gt; and add a unique identifier.&lt;/p&gt;

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

&lt;p&gt;Take the default settings for the remaining configuration.&lt;/p&gt;

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

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

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

&lt;p&gt;Wait for deployment and select &lt;strong&gt;Go to resource&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%2Frtkk6nk42pm1ulq88yi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtkk6nk42pm1ulq88yi7.png" alt="Azure storage account deployment complete screen" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure High Availability
&lt;/h2&gt;

&lt;p&gt;This storage must remain accessible if a regional outage occurs.&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Data management → Redundancy&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%2Fx79j1q3xpoz9hke5h3or.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx79j1q3xpoz9hke5h3or.png" alt="Azure storage redundancy settings page" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Read-access Geo-redundant storage (RA-GRS)&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%2Fvxrkgtfu38b9fumyxt9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxrkgtfu38b9fumyxt9t.png" alt="Azure RA-GRS redundancy option" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Review the primary and secondary region information.&lt;/p&gt;

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

&lt;p&gt;This ensures your website assets remain accessible even if the primary region experiences downtime.&lt;/p&gt;

&lt;h1&gt;
  
  
  Allow Anonymous Access for Public Files
&lt;/h1&gt;

&lt;p&gt;Public website content should be accessible without requiring users to log in.&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Settings → Configuration&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%2Fo918xav12afx6gq61u1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo918xav12afx6gq61u1e.png" alt="Azure storage configuration settings page" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable &lt;strong&gt;Allow blob anonymous access&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%2F1rrqo8toxur7bwsxp1u8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rrqo8toxur7bwsxp1u8.png" alt="Azure enable blob anonymous access setting" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save the configuration.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Create a Container for Website Files
&lt;/h1&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Data storage → Containers&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%2Fbjtdja2wjwadznn469hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjtdja2wjwadznn469hf.png" alt="Azure storage containers page" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;+ Container&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%2F882865uj0l4v3jut8xfe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F882865uj0l4v3jut8xfe.png" alt="Azure create container button" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Name the container &lt;strong&gt;public&lt;/strong&gt; and 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%2Fuv1hxr4ixn4ztsskk5wc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv1hxr4ixn4ztsskk5wc.png" alt="Azure container naming screen" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Configure Anonymous Read Access
&lt;/h1&gt;

&lt;p&gt;Select your 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%2Fea2k87qay0v0nn0npxo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea2k87qay0v0nn0npxo9.png" alt="Azure public container overview" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change the access level to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blob (anonymous read access for blobs only)&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%2Fv4ekiwqqezwt090haw1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4ekiwqqezwt090haw1z.png" alt="Azure container access level configuration" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;OK&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%2Feihxevb6gn2ohwpkpnd7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feihxevb6gn2ohwpkpnd7.png" alt="Azure confirm container access level change" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Upload and Test Files
&lt;/h1&gt;

&lt;p&gt;Select &lt;strong&gt;Upload&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%2F5go7t406yrasksn6bulx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5go7t406yrasksn6bulx.png" alt="Azure blob container upload button" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose a 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%2Ft46bdtuzs8pp7rar4t9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft46bdtuzs8pp7rar4t9d.png" alt="Azure browse file for upload" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upload 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%2Fy2fwr77ofxi84r7wse9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2fwr77ofxi84r7wse9l.png" alt="Azure upload confirmation window" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refresh the container to confirm the file appears.&lt;/p&gt;

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

&lt;p&gt;Copy the file URL and test it in a browser.&lt;/p&gt;

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

&lt;p&gt;Example URL:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://publicwebsiteproject.blob.core.windows.net/publicc/image.png" rel="noopener noreferrer"&gt;https://publicwebsiteproject.blob.core.windows.net/publicc/image.png&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Configure Blob Soft Delete
&lt;/h1&gt;

&lt;p&gt;Navigate to the &lt;strong&gt;Overview&lt;/strong&gt; 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%2Fap5iy3ygzua45kovftx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap5iy3ygzua45kovftx1.png" alt="Azure storage overview page" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Locate the &lt;strong&gt;Blob service&lt;/strong&gt; section.&lt;/p&gt;

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

&lt;p&gt;Select &lt;strong&gt;Blob soft delete&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%2Fu09uu8dk9va9l6s4gyva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu09uu8dk9va9l6s4gyva.png" alt="Azure blob soft delete settings page" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable soft 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%2Ffcdk9m7ljtm50z344lki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcdk9m7ljtm50z344lki.png" alt="Azure enable blob soft delete option" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set retention to &lt;strong&gt;21 days&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%2Fwd7zgz9t7tmlf3t46z4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd7zgz9t7tmlf3t46z4m.png" alt="Azure soft delete retention configuration" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save the changes.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Restore Deleted Files
&lt;/h1&gt;

&lt;p&gt;Delete a 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%2Fr6l5g450ka11to0lx1ta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6l5g450ka11to0lx1ta.png" alt="Azure delete blob file confirmation" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirm deletion.&lt;/p&gt;

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

&lt;p&gt;Enable &lt;strong&gt;Show deleted blobs&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%2Flp2oudqfzks03zh9zijw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flp2oudqfzks03zh9zijw.png" alt="Azure show deleted blobs toggle" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restore using &lt;strong&gt;Undelete&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%2Fhgi53u3wknegml4a3pzm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgi53u3wknegml4a3pzm.png" alt="Azure blob undelete option" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Enable Blob Versioning
&lt;/h1&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Blob service → Versioning&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%2Fo0kk04ihrae6aijnx3fa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0kk04ihrae6aijnx3fa.png" alt="Azure blob versioning settings" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable versioning.&lt;/p&gt;

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

&lt;p&gt;Save the configuration.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Lessons From This Implementation
&lt;/h1&gt;

&lt;p&gt;Several key lessons stood out while building this storage architecture.&lt;/p&gt;

&lt;p&gt;• High availability must be &lt;strong&gt;intentional&lt;/strong&gt;.&lt;br&gt;
• Public access should be &lt;strong&gt;carefully controlled&lt;/strong&gt;.&lt;br&gt;
• Data protection features like &lt;strong&gt;soft delete and versioning are essential&lt;/strong&gt;.&lt;br&gt;
• Testing configurations ensures your infrastructure behaves as expected.&lt;/p&gt;

&lt;p&gt;These small architectural decisions are what transform basic cloud setups into &lt;strong&gt;production-ready systems&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Creating cloud resources is easy.&lt;/p&gt;

&lt;p&gt;Designing them responsibly is what defines engineering maturity.&lt;/p&gt;

&lt;p&gt;In this implementation we built a storage architecture capable of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;serving public website assets&lt;/li&gt;
&lt;li&gt;remaining available during regional outages&lt;/li&gt;
&lt;li&gt;allowing secure anonymous access&lt;/li&gt;
&lt;li&gt;protecting files from accidental deletion&lt;/li&gt;
&lt;li&gt;maintaining historical file versions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Behind every reliable digital experience is infrastructure configured with intention.&lt;/p&gt;

&lt;p&gt;And mastering these fundamentals is how engineers move from &lt;strong&gt;using cloud tools&lt;/strong&gt; to &lt;strong&gt;designing resilient cloud systems&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A Practical Guide to Securing Azure Storage Accounts in Dev/Test (With Real-World Context)</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Tue, 03 Mar 2026 06:33:39 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/a-practical-guide-to-securing-azure-storage-accounts-in-devtest-with-real-world-context-3a92</link>
      <guid>https://forem.com/buildwithbabs/a-practical-guide-to-securing-azure-storage-accounts-in-devtest-with-real-world-context-3a92</guid>
      <description>&lt;p&gt;Behind Every Streamed Movie and Processed Payment Is Secure Cloud Storage.&lt;/p&gt;

&lt;p&gt;When you stream a movie on Netflix, process a payment with Flutterwave, or order a product on Jumia, you rarely think about storage.&lt;/p&gt;

&lt;p&gt;You just expect it to work.&lt;/p&gt;

&lt;p&gt;Your payment confirmation appears instantly.&lt;br&gt;
Your playlist loads without delay.&lt;br&gt;
Your order history is always available.&lt;/p&gt;

&lt;p&gt;But behind that simplicity is something quietly powering every interaction:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud storage — carefully designed, configured, and secured.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Companies like Netflix, Shopify, Spotify, Flutterwave, Paystack, Jumia, and digital banking platforms across Africa rely heavily on distributed cloud storage systems to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store application data&lt;/li&gt;
&lt;li&gt;Maintain financial transaction records&lt;/li&gt;
&lt;li&gt;Preserve logs and audit trails&lt;/li&gt;
&lt;li&gt;Scale across regions&lt;/li&gt;
&lt;li&gt;Enforce encryption and compliance standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here’s what matters:&lt;/p&gt;

&lt;p&gt;Their storage systems are not secure by accident.&lt;/p&gt;

&lt;p&gt;They are configured intentionally.&lt;/p&gt;

&lt;p&gt;A single misconfigured storage account can expose sensitive data.&lt;br&gt;
A legacy TLS setting can weaken encrypted communication.&lt;br&gt;
An overly permissive network rule can expand an attack surface.&lt;/p&gt;

&lt;p&gt;Security in cloud environments lives in the configuration details.&lt;/p&gt;

&lt;p&gt;As part of my Azure storage implementation practice, I provisioned and hardened a storage account designed for a non-production workload.&lt;/p&gt;

&lt;p&gt;The objective was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintain cost efficiency while enforcing real-world security discipline.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This walkthrough documents not just the steps I took, but the reasoning behind each configuration decision and how those decisions translate into real systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Objective
&lt;/h2&gt;

&lt;p&gt;In this implementation, I aimed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provision a secure Azure Storage account&lt;/li&gt;
&lt;li&gt;Apply cost-efficient redundancy&lt;/li&gt;
&lt;li&gt;Enforce modern encryption standards&lt;/li&gt;
&lt;li&gt;Reduce authentication risk&lt;/li&gt;
&lt;li&gt;Configure network exposure intentionally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The workload in this case was non-business critical. High availability across regions was not required. Cost optimization was important but not at the expense of security fundamentals.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Creating the Resource Group
&lt;/h2&gt;

&lt;p&gt;I began by creating a dedicated resource group to logically isolate the storage resources.&lt;/p&gt;

&lt;p&gt;In the Azure portal, search for and select &lt;strong&gt;Resource groups&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%2Fz2vwmjb5pev0xnt1e10r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2vwmjb5pev0xnt1e10r.png" alt="Azure portal showing Resource Groups search result" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select + 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%2Fjt4yrsesfbb9bbdtg7c0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjt4yrsesfbb9bbdtg7c0.png" alt="Azure Resource Groups page with + Create button highlighted" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give your resource group a name. For example, storagerg.&lt;/p&gt;

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

&lt;p&gt;Select a region. Use this region throughout the project.&lt;/p&gt;

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

&lt;p&gt;Select Review and create to validate the resource group.&lt;/p&gt;

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

&lt;p&gt;Select Create to deploy the resource group.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  2️⃣ Deploying the Storage Account
&lt;/h2&gt;

&lt;p&gt;Next, I created the storage account.&lt;/p&gt;

&lt;p&gt;In the Azure portal, search for and select Storage accounts.&lt;/p&gt;

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

&lt;p&gt;Select + 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%2Fkx9cyiqhmv255i9g9hdz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkx9cyiqhmv255i9g9hdz.png" alt="Storage accounts page with + Create button selected" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Basics tab, select your Resource group.&lt;/p&gt;

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

&lt;p&gt;Provide a Storage account name. The storage account name must be unique in Azure.&lt;/p&gt;

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

&lt;p&gt;Set the Performance to Standard.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Why Standard?
&lt;/h3&gt;

&lt;p&gt;For non-production workloads, Standard performance provides cost efficiency while maintaining reliability.&lt;/p&gt;

&lt;p&gt;Large-scale platforms like Netflix or Shopify may require Premium storage for specific high-throughput workloads. But dev/test environments rarely demand that level of performance.&lt;/p&gt;

&lt;p&gt;Choosing the right tier is about aligning cost with workload sensitivity.&lt;/p&gt;

&lt;p&gt;Select Review,&lt;/p&gt;

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

&lt;p&gt;and then 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%2Fel28yyjf6n0pftwkbn5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel28yyjf6n0pftwkbn5v.png" alt="Create button selected to deploy storage account" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait for the storage account to deploy and then Go to resource.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  3️⃣ Configure simple settings in the storage account.
&lt;/h2&gt;

&lt;p&gt;The data in this storage account doesn’t require high availability or durability. A lowest cost storage solution is desired.&lt;/p&gt;

&lt;p&gt;In your storage account, in the Data management section, select the Redundancy blade.&lt;/p&gt;

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

&lt;p&gt;Select Locally-redundant storage (LRS) in the Redundancy drop-down.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Locally-redundant storage (LRS)&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%2Fjl4ir93wvssqhg28scau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl4ir93wvssqhg28scau.png" alt="Redundancy configuration showing LRS selected" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why LRS?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Replicates data three times within a single datacenter&lt;/li&gt;
&lt;li&gt;Lowest-cost redundancy model&lt;/li&gt;
&lt;li&gt;Suitable for development and testing environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fintech platforms or e-commerce systems operating across regions, geo-redundancy is critical for disaster recovery.&lt;/p&gt;

&lt;p&gt;However, resilience must match workload importance.&lt;/p&gt;

&lt;p&gt;I saved the changes to apply the configuration.&lt;/p&gt;

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

&lt;p&gt;Refresh the page and notice the content only exists in the primary location.&lt;/p&gt;

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

&lt;p&gt;The storage account should only accept requests from secure connections.&lt;/p&gt;

&lt;p&gt;In the Settings section, select the Configuration blade.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  4️⃣ Ensure Secure transfer required is Enabled (HTTPS Only).
&lt;/h2&gt;

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

&lt;p&gt;Financial platforms like Flutterwave and Paystack process sensitive transaction data daily. HTTPS-only communication prevents insecure requests and protects data from interception.&lt;/p&gt;

&lt;p&gt;Security discipline should not depend on environment type.&lt;/p&gt;

&lt;h2&gt;
  
  
  5️⃣ Enforcing Minimum TLS Version 1.2
&lt;/h2&gt;

&lt;p&gt;In the Settings section, select the Configuration blade.&lt;/p&gt;

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

&lt;p&gt;Ensure the Minimal TLS version is set to Version 1.2.&lt;/p&gt;

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

&lt;p&gt;Allowing outdated TLS versions increases exposure to protocol-based vulnerabilities.&lt;/p&gt;

&lt;p&gt;Modern systems enforce current encryption standards by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  6️⃣ Until the storage is needed again, disable requests to the storage account.
&lt;/h2&gt;

&lt;p&gt;In the Settings section, select the Configuration blade.&lt;/p&gt;

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

&lt;p&gt;Ensure Allow storage account key access is Disabled.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Why Disable Shared Keys?
&lt;/h3&gt;

&lt;p&gt;Shared keys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are long-lived&lt;/li&gt;
&lt;li&gt;Harder to audit&lt;/li&gt;
&lt;li&gt;Increase risk if exposed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern cloud environments prefer identity-based access control using RBAC and managed identities.&lt;/p&gt;

&lt;p&gt;In fintech and enterprise systems, auditability and least-privilege access are critical.&lt;/p&gt;

&lt;p&gt;Be sure to save your changes.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  7️⃣ Ensure the storage account allows public access from all networks.
&lt;/h2&gt;

&lt;p&gt;In the Security + networking section, select the Networking blade.&lt;/p&gt;

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

&lt;p&gt;Ensure Public network access is set to Enabled from all networks.&lt;/p&gt;

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

&lt;p&gt;In production systems — such as banking platforms or telecom environments — public exposure would typically be restricted using private endpoints and firewall rules.&lt;/p&gt;

&lt;p&gt;Network access decisions must always reflect workload sensitivity.&lt;/p&gt;

&lt;p&gt;Be sure to Save your changes.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Real-World Perspective
&lt;/h2&gt;

&lt;p&gt;Cloud infrastructure powers platforms used daily across Nigeria, Africa, and globally.&lt;/p&gt;

&lt;p&gt;Behind every processed payment, streamed video, or online transaction is storage configured with intention.&lt;/p&gt;

&lt;p&gt;This implementation focused on a non-production workload, but the principles applied here mirror the same foundational decisions made in production environments.&lt;/p&gt;

&lt;p&gt;Security is not dramatic.&lt;/p&gt;

&lt;p&gt;It is deliberate.&lt;/p&gt;

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

&lt;p&gt;Creating a storage account is easy.&lt;/p&gt;

&lt;p&gt;Configuring it responsibly is what defines engineering maturity.&lt;/p&gt;

&lt;p&gt;Even in dev/test environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encryption should be enforced&lt;/li&gt;
&lt;li&gt;Legacy authentication should be minimized&lt;/li&gt;
&lt;li&gt;Redundancy should be intentional&lt;/li&gt;
&lt;li&gt;Network exposure should be deliberate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Behind every reliable digital experience is infrastructure configured carefully.&lt;/p&gt;

&lt;p&gt;Mastering these fundamentals is how a strong cloud engineering discipline is built.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>cybersecurity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Cloud Computing: What It Is, Why It Matters, and How It Really Works</title>
      <dc:creator>Mahmud Seidu Babatunde</dc:creator>
      <pubDate>Sun, 22 Feb 2026 14:17:39 +0000</pubDate>
      <link>https://forem.com/buildwithbabs/cloud-computing-what-it-is-why-it-matters-and-how-it-really-works-210m</link>
      <guid>https://forem.com/buildwithbabs/cloud-computing-what-it-is-why-it-matters-and-how-it-really-works-210m</guid>
      <description>&lt;p&gt;A few years ago, if your laptop crashed, you panicked.&lt;/p&gt;

&lt;p&gt;Your files? Gone.&lt;br&gt;
Your photos? Gone.&lt;br&gt;
Your work documents? Gone.&lt;/p&gt;

&lt;p&gt;Today, if your laptop crashes, you log into Google Drive from another device and continue working like nothing happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That quiet shift represents something bigger than convenience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It represents a fundamental change in how computing infrastructure is built, delivered, and consumed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That change is cloud computing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But cloud computing is not just “online storage.”&lt;br&gt;
It is the architectural foundation powering Netflix, online banking, AI systems, e-commerce platforms, and modern Software as a Service (SaaS) products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Cloud Computing Changed Everything
&lt;/h2&gt;

&lt;p&gt;Before cloud computing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Companies bought and maintained physical servers.&lt;/li&gt;
&lt;li&gt;Infrastructure setup could take weeks or months.&lt;/li&gt;
&lt;li&gt;Scaling required purchasing and installing new hardware.&lt;/li&gt;
&lt;li&gt;Downtime often meant serious business loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloud computing changed the model from ownership to on-demand consumption.&lt;/p&gt;

&lt;p&gt;Instead of owning infrastructure, businesses rent computing resources and scale as needed.&lt;/p&gt;

&lt;p&gt;That shift unlocked speed, flexibility, global expansion, and continuous innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Cloud Computing?
&lt;/h2&gt;

&lt;p&gt;Cloud computing is the delivery of computing services such as storage, servers, databases, networking, and software over the internet.&lt;/p&gt;

&lt;p&gt;Instead of owning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Physical servers&lt;/li&gt;
&lt;li&gt;Storage infrastructure&lt;/li&gt;
&lt;li&gt;Networking equipment&lt;/li&gt;
&lt;li&gt;Power and cooling systems&lt;/li&gt;
&lt;li&gt;Entire data centers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You rent computing power from providers like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Web Services (AWS)&lt;/li&gt;
&lt;li&gt;Microsoft Azure&lt;/li&gt;
&lt;li&gt;Google Cloud Platform (GCP)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And you pay only for what you consume.&lt;/p&gt;

&lt;p&gt;The simplest analogy is electricity.&lt;/p&gt;

&lt;p&gt;You don’t build a power plant at home.&lt;br&gt;
You connect to the grid and scale usage based on demand.&lt;/p&gt;

&lt;p&gt;The shift from ownership to on-demand consumption is what makes the cloud transformative.&lt;/p&gt;

&lt;p&gt;It reduces capital expenditure, increases flexibility, and accelerates innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud Service Models
&lt;/h2&gt;

&lt;p&gt;A cloud service model explains the division of responsibility between the cloud provider and the customer.&lt;/p&gt;

&lt;p&gt;In cloud computing, &lt;strong&gt;there are mainly three service models&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Infrastructure as a Service (IaaS)&lt;/li&gt;
&lt;li&gt;Platform as a Service (PaaS)&lt;/li&gt;
&lt;li&gt;Software as a Service (SaaS)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Infrastructure as a Service (IaaS)
&lt;/h3&gt;

&lt;p&gt;IaaS provides basic computing infrastructure over the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The provider gives you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual machines&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Load balancers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You manage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operating system&lt;/li&gt;
&lt;li&gt;Applications&lt;/li&gt;
&lt;li&gt;Data&lt;/li&gt;
&lt;li&gt;Security configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of IaaS like renting an empty apartment.&lt;br&gt;
The building exists, but you furnish and manage everything inside.&lt;/p&gt;

&lt;h3&gt;
  
  
  Platform as a Service (PaaS)
&lt;/h3&gt;

&lt;p&gt;PaaS provides a platform where you can build, run, and deploy applications without managing the underlying infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The provider manages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Servers&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Operating systems&lt;/li&gt;
&lt;li&gt;Runtime environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You manage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your code&lt;/li&gt;
&lt;li&gt;Application logic&lt;/li&gt;
&lt;li&gt;Your data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like renting a fully equipped kitchen.&lt;br&gt;
You just cook.&lt;/p&gt;

&lt;h3&gt;
  
  
  Software as a Service (SaaS)
&lt;/h3&gt;

&lt;p&gt;SaaS delivers fully functional software applications over the internet.&lt;/p&gt;

&lt;p&gt;The provider manages everything.&lt;/p&gt;

&lt;p&gt;You simply use the application.&lt;/p&gt;

&lt;p&gt;Think of it like ordering food at a restaurant.&lt;br&gt;
You just eat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Cloud Concepts
&lt;/h2&gt;

&lt;p&gt;To truly understand cloud computing, you must understand the principles that power it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Virtualization?
&lt;/h3&gt;

&lt;p&gt;Virtualization is the backbone of cloud computing.&lt;/p&gt;

&lt;p&gt;It allows one physical server to run multiple isolated &lt;strong&gt;virtual machines (VMs)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A hypervisor allocates hardware resources efficiently across these VMs.&lt;/p&gt;

&lt;p&gt;Why virtualization matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Efficient resource utilization&lt;/li&gt;
&lt;li&gt;Reduced hardware costs&lt;/li&gt;
&lt;li&gt;Workload isolation&lt;/li&gt;
&lt;li&gt;Multi-tenant architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without virtualization, scalable public cloud infrastructure would not exist.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Scalability?
&lt;/h3&gt;

&lt;p&gt;Scalability means a system can grow when demand increases.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Today your website has 100 visitors.&lt;br&gt;
Tomorrow it has 10,000 visitors.&lt;/p&gt;

&lt;p&gt;If your system can increase its capacity to handle that growth without performance degradation, it is scalable.&lt;/p&gt;

&lt;p&gt;There are two main approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vertical scaling: Increase the power of an existing server.&lt;/li&gt;
&lt;li&gt;Horizontal scaling: Add more servers to distribute the workload.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scalability ensures your system remains stable as demand grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Elasticity?
&lt;/h3&gt;

&lt;p&gt;Elasticity is similar to scalability but more dynamic.&lt;/p&gt;

&lt;p&gt;Scalability means the system can grow.&lt;br&gt;
Elasticity means the system automatically grows and shrinks based on real-time demand.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;When traffic increases → more resources are automatically provisioned.&lt;br&gt;
When traffic drops → extra resources are automatically removed.&lt;/p&gt;

&lt;p&gt;Elasticity optimizes performance while controlling cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Agility?
&lt;/h3&gt;

&lt;p&gt;Agility refers to speed and flexibility.&lt;/p&gt;

&lt;p&gt;Before cloud computing:&lt;/p&gt;

&lt;p&gt;Provisioning a new server could take weeks.&lt;/p&gt;

&lt;p&gt;With cloud computing:&lt;/p&gt;

&lt;p&gt;You can deploy infrastructure in minutes.&lt;/p&gt;

&lt;p&gt;Agility allows businesses to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move faster&lt;/li&gt;
&lt;li&gt;Test ideas quickly&lt;/li&gt;
&lt;li&gt;Launch products rapidly&lt;/li&gt;
&lt;li&gt;Adapt to market changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloud makes IT flexible and responsive.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is High Availability?
&lt;/h3&gt;

&lt;p&gt;High availability means a system remains operational with minimal downtime.&lt;/p&gt;

&lt;p&gt;If one server fails, another automatically takes over.&lt;/p&gt;

&lt;p&gt;This is achieved by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using multiple servers&lt;/li&gt;
&lt;li&gt;Deploying across different locations&lt;/li&gt;
&lt;li&gt;Implementing load balancing&lt;/li&gt;
&lt;li&gt;Replicating data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;High availability reduces service disruption and improves reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Fault Tolerance?
&lt;/h3&gt;

&lt;p&gt;Fault tolerance goes further than high availability.&lt;/p&gt;

&lt;p&gt;It means the system continues operating even when components fail.&lt;/p&gt;

&lt;p&gt;In cloud environments, failure is expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Servers can fail&lt;/li&gt;
&lt;li&gt;Networks can fail&lt;/li&gt;
&lt;li&gt;Entire data centers can fail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fault-tolerant systems are designed to survive those failures without interrupting service.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Global Reach?
&lt;/h3&gt;

&lt;p&gt;Cloud providers operate data centers around the world.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can deploy applications closer to your users&lt;/li&gt;
&lt;li&gt;Reduce latency&lt;/li&gt;
&lt;li&gt;Improve performance&lt;/li&gt;
&lt;li&gt;Serve global markets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your users are in Africa, you deploy closer to Africa.&lt;br&gt;
If they are in Europe, you deploy in Europe.&lt;/p&gt;

&lt;p&gt;Cloud infrastructure removes geographical limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud Deployment Models
&lt;/h2&gt;

&lt;p&gt;There are mainly three primary cloud deployment models:&lt;/p&gt;

&lt;h3&gt;
  
  
  Public Cloud
&lt;/h3&gt;

&lt;p&gt;Infrastructure is owned and operated by a third-party provider (such as AWS, Azure, or Google Cloud) and shared among multiple customers over the internet.&lt;/p&gt;

&lt;p&gt;It is cost-effective, scalable, and widely used by startups and modern applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Private Cloud
&lt;/h3&gt;

&lt;p&gt;Infrastructure is dedicated to a single organization.&lt;/p&gt;

&lt;p&gt;It offers greater control, customization, and security but usually at a higher cost.&lt;/p&gt;

&lt;p&gt;Common in industries with strict compliance requirements such as banking and healthcare.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hybrid Cloud
&lt;/h3&gt;

&lt;p&gt;A combination of public and private cloud environments.&lt;/p&gt;

&lt;p&gt;Organizations may run sensitive workloads in a private cloud while using the public cloud for scalable or customer-facing applications.&lt;/p&gt;

&lt;p&gt;Hybrid cloud provides flexibility and balance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Major Cloud Providers
&lt;/h2&gt;

&lt;p&gt;The industry is led by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Web Services (AWS)&lt;/li&gt;
&lt;li&gt;Microsoft Azure&lt;/li&gt;
&lt;li&gt;Google Cloud Platform (GCP)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While each provider has its strengths, the core principles of cloud computing remain consistent across platforms.&lt;/p&gt;

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

&lt;p&gt;Cloud computing represents more than infrastructure.&lt;/p&gt;

&lt;p&gt;It represents a shift toward scalable, resilient, and globally accessible systems.&lt;/p&gt;

&lt;p&gt;By understanding service models, deployment strategies, and core principles like virtualization, scalability, and high availability, we move from simply using cloud tools to designing cloud architectures.&lt;/p&gt;

&lt;p&gt;For me, mastering these fundamentals is the first step toward building production-ready systems and contributing meaningfully to modern infrastructure teams.&lt;/p&gt;

&lt;p&gt;This is the foundation I am intentionally strengthening as I continue my journey into cloud engineering.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>cloud</category>
      <category>kubernetes</category>
    </item>
  </channel>
</rss>
