<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mahmud Seidu Babatunde</title>
    <description>The latest articles on DEV Community by Mahmud Seidu Babatunde (@buildwithbabs).</description>
    <link>https://dev.to/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>DEV Community: Mahmud Seidu Babatunde</title>
      <link>https://dev.to/buildwithbabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/buildwithbabs"/>
    <language>en</language>
    <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://dev.to/buildwithbabs/a-practical-guide-to-azure-architectural-components-in-real-world-system-design-48la</link>
      <guid>https://dev.to/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://dev.to/buildwithbabs/when-private-files-leak-how-i-fixed-a-silent-azure-storage-misconfiguration-5289</link>
      <guid>https://dev.to/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://dev.to/buildwithbabs/why-website-images-sometimes-fail-to-load-and-how-i-built-a-highly-available-azure-storage-56d</link>
      <guid>https://dev.to/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://dev.to/buildwithbabs/a-practical-guide-to-securing-azure-storage-accounts-in-devtest-with-real-world-context-3a92</link>
      <guid>https://dev.to/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://dev.to/buildwithbabs/cloud-computing-what-it-is-why-it-matters-and-how-it-really-works-210m</link>
      <guid>https://dev.to/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>
