<?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: Emmanuel</title>
    <description>The latest articles on DEV Community by Emmanuel (@degreatkhali).</description>
    <link>https://dev.to/degreatkhali</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%2F3885718%2F9d4e31e7-b9bd-4392-a0d8-d96bed4acd0a.jpg</url>
      <title>DEV Community: Emmanuel</title>
      <link>https://dev.to/degreatkhali</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/degreatkhali"/>
    <language>en</language>
    <item>
      <title>Securing Azure Storage: A Hands-on Guide to Managed Identities, Key Vaults, and Immutability</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Wed, 27 May 2026 14:13:43 +0000</pubDate>
      <link>https://dev.to/degreatkhali/securing-azure-storage-a-hands-on-guide-to-managed-identities-key-vaults-and-immutability-4b44</link>
      <guid>https://dev.to/degreatkhali/securing-azure-storage-a-hands-on-guide-to-managed-identities-key-vaults-and-immutability-4b44</guid>
      <description>&lt;p&gt;Azure Storage security involves multiple layers of protection &lt;br&gt;
working together. In this guide from &lt;a href="https://microsoftlearning.github.io/Secure-storage-for-Azure-Files-and-Azure-Blob-Storage/Instructions/Labs/LAB_04_storage_web_app.html" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt; , we are going to eliminate that risk by configuring a User-Assigned Managed Identity (allowing our app to authenticate without passwords) and leveraging an Azure Key Vault to manage encryption keys securely. &lt;/p&gt;

&lt;p&gt;You will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eliminate credential management using Managed Identities&lt;/li&gt;
&lt;li&gt;Centralize key management using Azure Key Vault
-Protect data from modification using Immutable Blob Storage&lt;/li&gt;
&lt;li&gt;Add an extra encryption layer using Encryption Scopes &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who this is for:&lt;/strong&gt; &lt;br&gt;
Anyone new to Azure security who wants hands-on experience securing cloud storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Estimated time:&lt;/strong&gt; 20–25 minutes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task Overview:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create the storage account and managed identity.&lt;/li&gt;
&lt;li&gt;Secure access to the storage account with a key vault and key.&lt;/li&gt;
&lt;li&gt;Configure the storage account to use the customer managed key in the key vault&lt;/li&gt;
&lt;li&gt;Configure a time-based retention policy and an encryption scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;STEP 01&lt;/strong&gt;:&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the storage account and managed identity
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the global Azure search bar, search for and select Storage accounts. Create a storage account for the web app.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Select + Create.&lt;/li&gt;
&lt;li&gt;For the Resource group field, click Create new, assign your group a custom name, and select OK..&lt;/li&gt;
&lt;li&gt;Provide a Storage account name. Ensure the name is unique and meets the naming requirements.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Click next to move to the Encryption tab.&lt;/p&gt;

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

&lt;p&gt;Check the box for Enable infrastructure encryption.&lt;br&gt;
Notice the warning, This option cannot be changed after this storage account is created. Select Review + Create. Wait for the resource to deploy.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;STEP 02&lt;/strong&gt;: &lt;/p&gt;

&lt;h2&gt;
  
  
  Provide a managed identity for the web app to use.
&lt;/h2&gt;

&lt;p&gt;Search for and select Managed identities.&lt;/p&gt;

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

&lt;p&gt;Select Create.&lt;br&gt;
Select your resource group.&lt;br&gt;
Give your managed identity a name.&lt;br&gt;
Select Review and create, 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%2Fya79upz50aeekofxkjxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fya79upz50aeekofxkjxs.png" alt=" " width="800" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 03:&lt;/strong&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Assign the correct permissions to the managed identity. The identity only needs to read and list containers and blobs.
&lt;/h2&gt;

&lt;p&gt;Search for and select your storage account.&lt;br&gt;
Select the Access Control (IAM) blade.&lt;br&gt;
Select Add role assignment (center of the page).&lt;/p&gt;

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

&lt;p&gt;On the Job functions roles page, search for and select the &lt;strong&gt;Storage Blob Data Reader role.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the Members page, select Managed identity.&lt;/li&gt;
&lt;li&gt;Select Select members, in the Managed identity drop-down select User-assigned managed identity.&lt;/li&gt;
&lt;li&gt;Select the managed identity you created in the previous step.&lt;/li&gt;
&lt;li&gt;Click Select and then Review + assign the role.&lt;/li&gt;
&lt;li&gt;Select Review + assign a second time to add the role assignment.&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;Your storage account can now be accessed by a managed identity with the Storage Data Blob Reader permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Secure access to the storage account with a key vault and key
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;STEP 04:&lt;/strong&gt;&lt;br&gt;
To create the key vault and key needed for this part of the lab, your user account must have Key Vault Administrator permissions. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the portal, search for and select Resource groups. By now you know how to search using the Azure portal search bar. &lt;/li&gt;
&lt;li&gt;Select your resource group, and then the Access Control (IAM) blade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select Add role assignment&lt;/strong&gt; (center of the page).&lt;/li&gt;
&lt;li&gt;On the Job functions roles page, search for and select the &lt;strong&gt;Key Vault Administrator role&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;ol&gt;
&lt;li&gt;On the Members page, select User, group, or service principal.&lt;/li&gt;
&lt;li&gt;Select Select members.&lt;/li&gt;
&lt;li&gt;Search for and select your user account. Your user account is shown in the top right of the portal.&lt;/li&gt;
&lt;li&gt;Click Select and then Review + assign.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Select Review + assign a second time to add the role assignment.
You are now ready to continue with the lab.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;STEP 05:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a key vault to store the access keys.
&lt;/h2&gt;

&lt;p&gt;In the portal, search for and select Key vaults.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;STEP 06:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select Create.&lt;/li&gt;
&lt;li&gt;Select your resource group.&lt;/li&gt;
&lt;li&gt;Provide the name for the key vault. The name must be unique.&lt;/li&gt;
&lt;li&gt;Ensure on the Access configuration tab that Azure role-based access control (recommended) is selected.&lt;/li&gt;
&lt;li&gt;Select Review + create.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Wait for the validation checks to complete and then select Create.&lt;/li&gt;
&lt;li&gt;After the deployment, select Go to resource.
On the Overview blade ensure both Soft-delete and Purge protection are enabled.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;STEP 07:&lt;/strong&gt;&lt;br&gt;
*&lt;em&gt;Create a customer-managed key in the key vault.&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Customer-managed keys allow organizations to control their own encryption lifecycle instead of relying solely on Microsoft-managed encryption.&lt;/p&gt;

&lt;p&gt;In your key vault, in the Objects section, select the Keys blade.&lt;br&gt;
Select Generate/Import and Name the key.&lt;br&gt;
Take the defaults for the rest of the parameters, and Create the key.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Configure the storage account to use the customer managed key in the key vault
&lt;/h2&gt;

&lt;p&gt;Before you can complete the next steps, you must assign the Key Vault Crypto Service Encryption User role to the managed identity. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 08:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your resource group, and then the Access Control (IAM) blade.&lt;/li&gt;
&lt;li&gt;Select Add role assignment (center of the page).&lt;/li&gt;
&lt;li&gt;On the Job functions roles page, search for and select the &lt;strong&gt;Key Vault Crypto Service Encryption User role&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;strong&gt;STEP 09:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the Members page, select Managed identity.&lt;/li&gt;
&lt;li&gt;Select Select members, in the Managed identity drop-down select User-assigned managed identity.&lt;/li&gt;
&lt;li&gt;Select your managed identity.&lt;/li&gt;
&lt;li&gt;Click Select and then Review + assign.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffyocl0pno08chz79y7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffyocl0pno08chz79y7c.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;br&gt;
Select Review + assign a second time to add the role assignment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure the storage account to use the customer managed key in your key vault.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;STEP 10:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Return to your the storage account.&lt;/li&gt;
&lt;li&gt;In the Security + networking section, &lt;/li&gt;
&lt;li&gt;select the Encryption blade.&lt;/li&gt;
&lt;li&gt;Select Customer-managed keys.&lt;/li&gt;
&lt;li&gt;Select a &lt;strong&gt;key vault and key&lt;/strong&gt;. &lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;strong&gt;STEP 11:&lt;/strong&gt;&lt;br&gt;
Select your key vault and key.&lt;br&gt;
Select to confirm your choices.&lt;br&gt;
Ensure the Identity type is User-assigned.&lt;br&gt;
Select an identity.&lt;br&gt;
Select your managed identity then select Add.&lt;br&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%2Fd5ngu5r7r3vor685nq8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5ngu5r7r3vor685nq8u.png" alt=" " width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you receive an error that your identity does not have the correct permissions, wait a minute and try again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure a time-based retention policy and an encryption scope.
&lt;/h2&gt;

&lt;p&gt;The developers require a storage container where files can’t be modified, even by the administrator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 12:&lt;/strong&gt;&lt;br&gt;
Navigate to your storage account. In the Data storage section, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the Containers blade.&lt;/li&gt;
&lt;li&gt;Create a container called hold. Take the defaults. Be sure to Create the container.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Upload a file to the container.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;In the Settings section, select the Access policy blade.&lt;/li&gt;
&lt;li&gt;In the Immutable blob storage section, select + Add policy. Immutable Blob Storage helps organizations meet compliance requirements and protects against ransomware by preventing data deletion or modification during the retention period.&lt;/li&gt;
&lt;li&gt;For the Policy type, select time-based retention.&lt;/li&gt;
&lt;li&gt;Set the Retention period to 5 days.&lt;/li&gt;
&lt;li&gt;Be sure to Save your changes.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Try to delete the file in the container.&lt;/li&gt;
&lt;li&gt;Verify you are notified failed to delete blobs due to policy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5ke2yxdz8s8uhy3oxgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5ke2yxdz8s8uhy3oxgs.png" alt=" " width="800" height="295"&gt;&lt;/a&gt;&lt;br&gt;
The developers require an encryption scope that enables infrastructure encryption. Learn more about infrastructure encryption.&lt;/p&gt;

&lt;p&gt;Navigate back to your storage account.&lt;br&gt;
In the Security + networking blade, select Encryption.&lt;br&gt;
In the Encryption scopes tab, select Add.&lt;br&gt;
Give your encryption scope a name.&lt;br&gt;
The Encryption type is Microsoft-managed key.&lt;br&gt;
Set Infrastructure encryption to Enable.&lt;br&gt;
Create the encryption scope.&lt;/p&gt;

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

&lt;p&gt;Return to your storage account and create a new container.&lt;br&gt;
Notice on the New container page, there is the Name and Public access level.&lt;br&gt;
Notice in the Advanced section you can select the Encryption scope you created and apply it to all blobs in the 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%2Flcx50bgp8mhza9fqwm3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcx50bgp8mhza9fqwm3a.png" alt=" " width="799" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What You Accomplished&lt;/p&gt;

&lt;p&gt;In this guide you successfully implemented four layers of &lt;br&gt;
Azure Storage security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managed Identity — your app accesses storage without 
storing credentials&lt;/li&gt;
&lt;li&gt;Key Vault + Customer-Managed Key — you control the 
encryption keys for your storage data&lt;/li&gt;
&lt;li&gt;Immutable Blob Storage — files in your container 
cannot be modified or deleted during the retention period&lt;/li&gt;
&lt;li&gt;Encryption Scope — an additional encryption layer 
applied at the container level&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These security controls work together to protect your data &lt;br&gt;
against unauthorized access, accidental deletion, and &lt;br&gt;
compliance risks.&lt;/p&gt;

&lt;p&gt;You have successfully configured an end-to-end cloud security framework for Azure Storage! By leveraging managed identities, safeguarding keys via Azure Key Vault, and setting up time-based immutability parameters, you have built a production-ready, zero-trust storage layer. &lt;/p&gt;

&lt;p&gt;How did you customize your configuration? Let me know in the comments section below!&lt;/p&gt;

</description>
      <category>security</category>
      <category>azurestorage</category>
      <category>managedidentity</category>
      <category>keyvault</category>
    </item>
    <item>
      <title>Lock Down Your Cloud Shares: A Beginner’s Guide to Azure Files Security.</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Mon, 25 May 2026 11:32:43 +0000</pubDate>
      <link>https://dev.to/degreatkhali/lock-down-your-cloud-shares-a-beginners-guide-to-azure-files-security-1ld3</link>
      <guid>https://dev.to/degreatkhali/lock-down-your-cloud-shares-a-beginners-guide-to-azure-files-security-1ld3</guid>
      <description>&lt;p&gt;Cloud storage makes file sharing easy, but it also creates new security risks if access is not controlled carefully. &lt;/p&gt;

&lt;p&gt;Take this scenario for instance: Your finance team stores payroll files in the cloud, but a misconfigured setting accidentally exposed them to the public internet last week. This guide shows you how to prevent exactly that. &lt;/p&gt;

&lt;p&gt;In this hands-on tutorial, you will learn the basics of securing Azure Storage using practical, layer-by-layer security steps: from automated backups to network-level blockades.&lt;/p&gt;

&lt;p&gt;Why storage security matters&lt;br&gt;
Azure Storage is designed to be secure, but the way you configure it determines how much protection your data actually gets. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Tasks Overview *&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a storage account specifically for file shares.&lt;/li&gt;
&lt;li&gt;Configure a file share and directory.&lt;/li&gt;
&lt;li&gt;Configure snapshots and practice restoring files.&lt;/li&gt;
&lt;li&gt;Restrict access to a specific virtual network and subnet.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;For resource group select Create new. Give your resource group a name- Provide a Storage account name. Ensure the name meets the naming requirements. Storage account names must be 3–24 characters, all lowercase, no spaces or hyphens. Example: exercise42026.&lt;br&gt;
Azure will show a green checkmark if the name is valid and available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: &lt;strong&gt;Premium = SSD-backed&lt;/strong&gt;, low-latency storage. Use it when your app needs fast file access. &lt;strong&gt;Standard&lt;/strong&gt; (HDD) is cheaper for less time-sensitive files. &lt;strong&gt;ZRS&lt;/strong&gt; = Zone-Redundant Storage: your data is copied across 3 availability zones in the same region, protecting against a single data  center going down.&lt;/p&gt;

&lt;p&gt;NEXT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set the Performance to Premium.&lt;/li&gt;
&lt;li&gt;Set the Premium account type to File shares.&lt;/li&gt;
&lt;li&gt;Set the Redundancy to Zone-redundant storage.&lt;/li&gt;
&lt;li&gt;Select Review and then Create the storage account.&lt;/li&gt;
&lt;li&gt;Wait for the resource to deploy.&lt;/li&gt;
&lt;li&gt;Select Go to resource.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;Azure Files is like a shared network drive in the cloud — multiple users or VMs can connect and access files simultaneously using the SMB protocol, just like a traditional office file server.&lt;/p&gt;

&lt;p&gt;In the storage account, in the Data storage section, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;select the File shares blade.&lt;/li&gt;
&lt;li&gt;Select + File share and provide a Name.&lt;/li&gt;
&lt;li&gt;Review the other options, but take the defaults.&lt;/li&gt;
&lt;li&gt;Select Review + create, then Create.&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;Next Step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your file share and select + Add directory.&lt;/li&gt;
&lt;li&gt;Name the new directory finance.&lt;/li&gt;
&lt;li&gt;Select Browse and then select the finance directory.&lt;/li&gt;
&lt;li&gt;Notice you can Add directory to further organize your file share.&lt;/li&gt;
&lt;li&gt;Upload a file of your choosing.&lt;/li&gt;
&lt;/ol&gt;

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

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

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

&lt;p&gt;Similar to blob storage, you need to protect against accidental deletion of files. You decide to use snapshots. A snapshot is a read-only copy of your file share captured at a specific point in time like a save point in a video game. If someone accidentally deletes or overwrites a file, you can roll back to the snapshot and restore it. Here is how to create one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your file share.&lt;/li&gt;
&lt;li&gt;In the Operations section, select the Snapshots blade.&lt;/li&gt;
&lt;li&gt;Select + Add snapshot. The comment is optional. &lt;/li&gt;
&lt;li&gt;Select OK.&lt;/li&gt;
&lt;li&gt;Select your snapshot and verify your file directory and uploaded file are included.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;NEXT: Practice using snapshots to restore a file.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Return to your file share.&lt;/li&gt;
&lt;li&gt;Browse to your file directory.&lt;/li&gt;
&lt;li&gt;Locate your uploaded file and in the Properties pane select Delete. Select Yes to confirm the deletion.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Select the Snapshots blade and then select your snapshot.&lt;/li&gt;
&lt;li&gt;Navigate to the file you want to restore,&lt;/li&gt;
&lt;li&gt;Select the file and the select Restore.&lt;/li&gt;
&lt;li&gt;Provide a Restored file name.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Verify your file directory has the restored file.&lt;br&gt;
After restoring, go back to Browse in your file share. You should see the restored file listed alongside the original directory as shown in the screenshot above. The restored copy has a new name we provided, so the original is not overwritten.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Configure restricting storage access to selected virtual networks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The tasks in this section require a virtual network and a subnet to demonstrate perimeter security. &lt;br&gt;
A Virtual Network (VNet) is a private network in Azure — like your office's internal network, but in the cloud. A subnet is a segment within that network.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search for and select Virtual networks.&lt;/li&gt;
&lt;li&gt;Select Create. &lt;/li&gt;
&lt;li&gt;Select your resource group. and give the virtual network a name.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Take the defaults for other parameters, &lt;/li&gt;
&lt;li&gt;select Review + create, and then Create.&lt;/li&gt;
&lt;li&gt;Wait for the resource to deploy.&lt;/li&gt;
&lt;li&gt;Select Go to resource.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the Settings section, select the Subnets blade.&lt;br&gt;
Select the default subnet.&lt;br&gt;
In the Service endpoints section choose Microsoft.Storage in the Services drop-down.&lt;br&gt;
Do not make any other changes.&lt;br&gt;
Be sure to Save your changes.&lt;br&gt;
The storage account should only be accessed from the virtual network you just created. &lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Return to your files storage account.&lt;/li&gt;
&lt;li&gt;In the Security + networking section, select the Networking blade.&lt;/li&gt;
&lt;li&gt;Change the Public network access to Enabled from selected virtual networks and IP addresses.&lt;/li&gt;
&lt;li&gt;In the Virtual networks section, select Add existing virtual network.&lt;/li&gt;
&lt;li&gt;Select your virtual network and subnet, select Add.&lt;/li&gt;
&lt;li&gt;Be sure to Save your changes.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Select the Storage browser and navigate to your file share.&lt;br&gt;
Verify the message not authorized to perform this operation. You are not connecting from the virtual network. You should see a 403 error: This request is not authorized to perform this operation. This is expected — it confirms your network restriction is working. Your storage account is now only accessible from inside the virtual network you created.&lt;/p&gt;

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

&lt;p&gt;Did this guide help you? Got stuck at a step or found something that could be explained better?&lt;br&gt;
Drop a comment below I do read every one and I genuinely appreciate the feedback.&lt;br&gt;
If you found this useful, consider sharing it with someone just getting started with Azure. As we all learn faster together.&lt;/p&gt;

</description>
      <category>blobstorage</category>
      <category>security</category>
      <category>azurefiles</category>
      <category>beginnerguide</category>
    </item>
    <item>
      <title>Azure Blob Storage for Beginners: Private Access, SAS Tokens &amp; Cost Savings Explained</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Tue, 19 May 2026 10:36:32 +0000</pubDate>
      <link>https://dev.to/degreatkhali/azure-blob-storage-for-beginners-private-access-sas-tokens-cost-savings-explained-1opo</link>
      <guid>https://dev.to/degreatkhali/azure-blob-storage-for-beginners-private-access-sas-tokens-cost-savings-explained-1opo</guid>
      <description>&lt;p&gt;In this beginner walkthrough based on the Microsoft Learn guided exercise we configure a private Azure Blob Storage account for internal company documents.&lt;/p&gt;

&lt;p&gt;Imagine your company stores HR files, contracts, or financial reports. You need them available 24/7, protected from public access, and cost-efficient to store long-term. That's exactly what this guide sets up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we will build:&lt;/strong&gt;&lt;br&gt;
•A private storage account with GRS redundancy&lt;br&gt;
•A restricted blob container for internal documents&lt;br&gt;
•A time-limited SAS token for partner access&lt;br&gt;
•Automated lifecycle rules to move blobs to Cool tier after 30 days&lt;br&gt;
•Cross-account object replication for public website backup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br&gt;
The solution uses a single private storage account containing two blob containers: one for internal documents and one named 'backup' that receives replicated content from the public website storage account.&lt;/p&gt;

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

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

&lt;p&gt;Set the Storage account name to &lt;strong&gt;private&lt;/strong&gt;. Add an identifier to the name to ensure the name is unique. &lt;strong&gt;Tip&lt;/strong&gt; : Storage account names must be 3–24 characters, all lowercase, no spaces or special characters. Try something like privatecompany2025. Azure will tell you if it's already taken.&lt;/p&gt;

&lt;p&gt;Select Review, and then Create the storage account.&lt;/p&gt;

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

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

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

&lt;p&gt;Configure the appropriate level of redundancy.&lt;/p&gt;

&lt;p&gt;In the storage account, in the Data management section, select the Redundancy blade.&lt;br&gt;
Ensure Geo-redundant storage (GRS) is selected.&lt;br&gt;
Refresh the page.&lt;/p&gt;

&lt;p&gt;What is GRS? Geo-Redundant Storage automatically copies your data to a second Azure region. So if a data center goes down, your files are still safe and accessible.&lt;/p&gt;

&lt;p&gt;Review the primary and secondary location information.&lt;br&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%2Fggo30steyc8pnuslaw1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggo30steyc8pnuslaw1u.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the storage account, in the Data storage section, select the Containers blade. Select + Container.&lt;br&gt;
Ensure the name of the container is &lt;strong&gt;private&lt;/strong&gt;.&lt;br&gt;
Ensure the Public access level is Private (no anonymous access).&lt;/p&gt;

&lt;p&gt;Why Private? Setting the container to Private means no one can view or download files using just a URL. They need a key or a special token. This is what keeps internal company files away from the public internet. As you have time, review the Advanced settings, but take the defaults. 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%2Friz10fr83ki41leijt7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Friz10fr83ki41leijt7p.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;For testing, upload a file to the private container. The type of file doesn’t matter. A small image or text file is a good choice. Test to ensure the file isn’t publically accessible.&lt;/p&gt;

&lt;p&gt;Select the container.&lt;br&gt;
Select Upload.&lt;br&gt;
Browse to files and select a file.&lt;br&gt;
Upload the file.&lt;br&gt;
Select the uploaded file.&lt;br&gt;
On the Overview tab, copy the URL.&lt;br&gt;
Paste the URL into a new browser tab.&lt;/p&gt;

&lt;p&gt;Verify the file doesn’t display and you receive an error. You should see a &lt;strong&gt;ResourceNotFound&lt;/strong&gt; or &lt;strong&gt;403&lt;/strong&gt; (Forbidden) error, this is correct! It confirms your container is properly locked 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%2F67embaap0gx27m8077js.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67embaap0gx27m8077js.png" alt=" " width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;What is a SAS Token? A Shared Access Signature is like a temporary visitor badge. Instead of giving your partner your account password, you generate a special link that expires after a set time and only allows the permissions you choose (e.g., read-only). Once it expires, the link stops working automatically.&lt;/p&gt;

&lt;p&gt;An external partner requires read and write access to the file for at least the next 24 hours. Configure and test a shared access signature (SAS).&lt;/p&gt;

&lt;p&gt;Select your uploaded blob file and move to the Generate SAS tab- Select Generate SAS token and URL. Copy the SAS URL immediately. Azure will not show it again once you close this panel.Treat it like a password; don't share it publicly. In the Permissions drop-down, ensure the partner has only Read permissions.Verify the Start and expiry date/time is for the next 24 hours or time requested.&lt;/p&gt;

&lt;p&gt;Copy the Blob SAS URL to a new browser tab.&lt;br&gt;
Verify you can access the file. If you have uploaded an image file it will display in the browser as you have seen in the screenshot. Other file types will be downloaded.&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Configure storage access tiers and content replication.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To save on costs, after 30 days, move blobs from the hot tier to the cool tier. Hot vs Cool Storage: Azure charges you based on how often data is accessed. Hot tier is for files you access frequently, faster but pricier. Cool tier is for files you rarely touch — slower but cheaper. Lifecycle rules automate the switch so you don't have to do it manually.&lt;/p&gt;

&lt;p&gt;Return to the storage account.&lt;br&gt;
In the Overview section, notice the Default access tier is set to Hot. In the Data management section, select the Lifecycle management blade. Select Add rule.Set the Rule name to movetocool.&lt;br&gt;
Set the Rule scope to Apply rule to all blobs in the storage account.&lt;br&gt;
Select Next.Ensure Last modified is selected.Set More than (days ago) to 30.In the drop-down select Move to cool storage.&lt;/p&gt;

&lt;p&gt;As you have time, review other lifecycle options in the drop-down.&lt;br&gt;
Add the rule.The public website files need to be backed up to another storage account.&lt;/p&gt;

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

&lt;p&gt;In your storage account, create a new container called backup. Use the default values. Refer back to Lab 02a we did if you need detailed instructions.&lt;/p&gt;

&lt;p&gt;Navigate to your publicwebsite storage account. This storage account was created in the previous exercise. If you don't already have a public storage account, create one using the same steps in Step 1 above, and name it publicwebsite. Create a container inside it called public and upload any file to it.&lt;/p&gt;

&lt;p&gt;In the Data management section, select the Object replication blade. Select Create replication rules.&lt;br&gt;
Set the Destination storage account to the private storage account.&lt;br&gt;
Set the Source container to public and the Destination container to backup. Once done you can click &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%2Ft1dgo5sczyb2cjvra9eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1dgo5sczyb2cjvra9eb.png" alt=" " width="799" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it — we've successfully concluded that the necessary steps needed to create a redundant storage account.&lt;/p&gt;

&lt;p&gt;Great work! Here is what you have built:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature&lt;/strong&gt; What It Does&lt;br&gt;&lt;br&gt;
GRS Storage Account - Keeps data safe across regions.&lt;br&gt;
Private Container - Blocks public internet access.&lt;br&gt;
SAS Token Grants time -limited partner access Lifecycle &lt;br&gt;
Rule - Saves cost by moving old data to Cool tier Object Replication Auto - backs up your public website files.&lt;/p&gt;

&lt;p&gt;Next steps: When you have time you could Explore Azure RBAC(&lt;a href="https://learn.microsoft.com/en-us/azure/role-based-access-control/overview" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/azure/role-based-access-control/overview&lt;/a&gt;) to control who in your team can manage storage, or try Azure Key Vault to manage SAS keys securely.&lt;/p&gt;

&lt;p&gt;I did truly appreciate any insights or additions that could help enhance this article!&lt;/p&gt;

</description>
      <category>azurestorage</category>
      <category>beginners</category>
      <category>azure</category>
      <category>sastoken</category>
    </item>
    <item>
      <title>How to Deploy an Ubuntu Linux VM in Azure</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Sat, 16 May 2026 21:44:39 +0000</pubDate>
      <link>https://dev.to/degreatkhali/how-to-deploy-an-ubuntu-linux-vm-in-azure-347o</link>
      <guid>https://dev.to/degreatkhali/how-to-deploy-an-ubuntu-linux-vm-in-azure-347o</guid>
      <description>&lt;p&gt;We will use the Azure Portal (GUI) to launch an Ubuntu Linux Virtual Machine (VM).&lt;/p&gt;

&lt;p&gt;Note: Azure charges by the minute while your VM is running. Don't forget to delete everything at the end so you pay nothing (or just pennies).&lt;/p&gt;

&lt;p&gt;Step 1: Create Your Resource Group &lt;br&gt;
Think of a Resource Group as a folder that will hold your VM and all its related parts. Creating it first keeps things organized.&lt;/p&gt;

&lt;p&gt;Sign In: Log into the Azure Portal.&lt;/p&gt;

&lt;p&gt;Create a Resource Group:&lt;/p&gt;

&lt;p&gt;Click + Create a resource in the top left corner.&lt;/p&gt;

&lt;p&gt;Type "Resource Group" in the search bar and select it.&lt;/p&gt;

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

&lt;p&gt;Name it MyLinuxLab_RG&lt;/p&gt;

&lt;p&gt;Select a Region close to you (e.g., East/West US)&lt;/p&gt;

&lt;p&gt;Click Review + create → Create&lt;/p&gt;

&lt;p&gt;Quick Definition: A Region is the physical location of the data center where your cloud resources will live.&lt;/p&gt;

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

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

&lt;p&gt;Step 2: Create the Ubuntu Linux VM &lt;br&gt;
Now that your folder (Resource Group) is ready, let's build the actual Linux computer.&lt;/p&gt;

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

&lt;p&gt;Resource Group: Select MyLinuxLab_RG from the dropdown&lt;/p&gt;

&lt;p&gt;Virtual Machine Name: Ubuntu-Lab-01&lt;/p&gt;

&lt;p&gt;Region: Choose the same region you used for your Resource Group&lt;/p&gt;

&lt;p&gt;Availability Options: Leave as "No infrastructure redundancy required" (fine for learning)&lt;/p&gt;

&lt;p&gt;Image: Confirm it says Ubuntu Server 22.04 LTS (or newer)&lt;/p&gt;

&lt;p&gt;Size: Choose Standard_B2s — it's cost-effective and perfect for learning or the default.&lt;/p&gt;

&lt;p&gt;Administrator Account:&lt;/p&gt;

&lt;p&gt;Authentication type: Select password&lt;/p&gt;

&lt;p&gt;Username: azadmin (or a name you'll remember)&lt;/p&gt;

&lt;p&gt;Quick Definition: SSH (Secure Shell) is the secure "door" that lets you type commands into your Linux VM from your own terminal. The key pair is like a digital lock and key.&lt;/p&gt;

&lt;p&gt;Inbound Port Rules: Under "Public inbound ports," ensure Allow selected ports is checked Http Port 80 and SSH (22) is selected as we move forward we will learn more together.&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;Click Review + create → wait for the green "Validation passed" message → Click 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%2Fprjhf4j1mzynohvwh7da.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprjhf4j1mzynohvwh7da.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: Don't worry if you see yellow warnings — those are usually fine. Look for the green checkmark.&lt;/p&gt;

&lt;p&gt;To ensure that your terminal section does not go off. Click the IP address ensure you extend the time under networking.&lt;/p&gt;

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

&lt;p&gt;Step 3:&lt;br&gt;
Click Connect which would enable you remotely login to the Linux VM:&lt;/p&gt;

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

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

&lt;p&gt;For windows you would need to open/launch Powershell and For Mac you would open/launch Terminal and run the ID and Ip given.&lt;br&gt;
Now you see my powershell on my windows prompting for Password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97xi8br2t5nxxv4zjr9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97xi8br2t5nxxv4zjr9i.png" alt=" " width="800" height="464"&gt;&lt;/a&gt;&lt;br&gt;
Next: We would login in as a root user which is the same as an administrator in Windows. &lt;br&gt;
"sudo su" and run "apt update" which is to ensure that the latest update is installed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4jsxafffzfflah29e2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4jsxafffzfflah29e2k.png" alt=" " width="800" height="720"&gt;&lt;/a&gt;&lt;br&gt;
Step 4: We would install the ntp package - also know as the package manager. "ntp install nginx"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z5kz64oonvcsenfkfqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z5kz64oonvcsenfkfqp.png" alt=" " width="800" height="249"&gt;&lt;/a&gt;&lt;br&gt;
This shows we did login in successfully and we can also remotely login using other options.&lt;/p&gt;

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

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

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

&lt;p&gt;If this help you in any way kindly share. If you did like to spice up this beginner guide in the comment section I did love that. &lt;/p&gt;

</description>
      <category>vm</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>azure</category>
    </item>
    <item>
      <title>How to Create a Windows 10 Virtual Machine in the Azure Portal (No CLI Needed)</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Wed, 13 May 2026 23:00:52 +0000</pubDate>
      <link>https://dev.to/degreatkhali/azure-portal-101-deploy-a-windows-10-vm-without-ever-touching-the-cli-33db</link>
      <guid>https://dev.to/degreatkhali/azure-portal-101-deploy-a-windows-10-vm-without-ever-touching-the-cli-33db</guid>
      <description>&lt;p&gt;In this guide, we are going to bypass the command line entirely (that is the CLI — Command Line Interface, like PowerShell or Bash). We will use the Azure Portal (GUI) to launch a Windows 10 Virtual Machine (VM) in about 7 minutes.&lt;/p&gt;

&lt;p&gt;Cost Note: Azure charges by the minute while your VM is running. Delete everything at the end and your cost will be minimal or zero, especially if you are on a free trial.&lt;/p&gt;

&lt;p&gt;A Virtual Machine (VM) is a computer that runs inside another computer — entirely in the cloud. You access it remotely just like a normal PC.&lt;/p&gt;

&lt;p&gt;Phase 1: &lt;strong&gt;The Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign In: Log into the &lt;a href="https://www.google.com/search?q=https://portal.azure.com" rel="noopener noreferrer"&gt;Azure Portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a Resource: Click the + Create a resource button in the top left.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Resource Group:&lt;/strong&gt; Click "Create new" and name it any name for example MyVMGroup.
Virtual Machine Name: Name it DevOps-Lab-01.
Region: Select the one closest to you (e.g., East US).&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;When finish go to the resource group you just created and open it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Select the Service search bar:&lt;/strong&gt; Type "Windows 10" in the search bar and select the Windows 10 option or the "consumer editions" or "Pro."&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Quick Definition:&lt;/strong&gt; A Region is simply the physical location of the data center where your virtual computer will live.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: Configuration &amp;amp; Identity&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Size: Choose Standard_B2s. It's cost-effective and perfect for learning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjnt7pg7frfnthgu08a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjnt7pg7frfnthgu08a6.png" alt=" " width="783" height="531"&gt;&lt;/a&gt;&lt;br&gt;
The "Size" selection window showing the B2s option and its estimated monthly cost. Ensure you check the &lt;strong&gt;Run with Azure spot discount&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This lets Azure use spare capacity to run your VM at a lower cost. It is perfect for learning because we are not running anything critical.&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;7. Administrator Account: *&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enter a username&lt;/strong&gt; and &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A strong password.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; Save these! You will need them to "log in" to your computer later.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;*&lt;em&gt;Inbound Port Rules: *&lt;/em&gt;
Under "Public inbound ports," ensure Allow selected ports is checked and RDP (3389) &amp;amp; Http (80)  is selected.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Review + Create:&lt;/strong&gt; Skip the other tabs for now. Click the blue Review + Create button at the bottom.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confirm: Azure will run a validation check. Look for the green "Validation passed" message. Then click Create.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Connecting via Remote Desktop (RDP)&lt;/strong&gt;&lt;br&gt;
Once the deployment is complete, click Go to resource.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the Connect button at the top left and select RDP.&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;ol&gt;
&lt;li&gt;Click Download RDP File. This file is your "digital key."&lt;/li&gt;
&lt;li&gt;Open the downloaded file and click Connect.&lt;/li&gt;
&lt;li&gt;Enter the Username and Password you created in Phase 2.&lt;/li&gt;
&lt;li&gt;The Certificate Warning: A box will pop up saying the identity     cannot be verified. This is normal! Click Yes.&lt;/li&gt;
&lt;/ol&gt;

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

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

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

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

&lt;p&gt;You have just deployed a real cloud computer from scratch no command line needed. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;What You Just Learned:&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Azure Term : What It Actually Means&lt;/strong&gt;&lt;br&gt;
 Resource Group:  A folder for your cloud project&lt;br&gt;
 Region:  Which data center your VM lives in&lt;br&gt;
 VM :  A computer that runs inside another computer entirely in the cloud.&lt;br&gt;
 RDP:  The remote "screen share" protocol&lt;br&gt;
 VM Size:  How much CPU/RAM your lab computer gets&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Step: Don't Forget to Clean Up!&lt;/strong&gt;&lt;br&gt;
When you are finished testing, delete your Resource Group to avoid any unnecessary charges:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Resource groups in the Azure Portal.&lt;/li&gt;
&lt;li&gt;Find MyVMGroup.&lt;/li&gt;
&lt;li&gt;Click Delete resource group and type the name to confirm.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Resource Group page showing the "Delete resource group" button and the confirmation text box.&lt;/p&gt;

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

&lt;p&gt;If you found this helpful, kindly share it with someone else starting their DevOps journey. If you are on the same path, I did love to hear how your experience went — drop a comment or reach out. &lt;/p&gt;

</description>
      <category>vm</category>
      <category>azure</category>
      <category>beginners</category>
      <category>devopspath</category>
    </item>
    <item>
      <title>Hosting Public Website Content with Azure Blob Storage</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Sat, 02 May 2026 22:07:55 +0000</pubDate>
      <link>https://dev.to/degreatkhali/hosting-public-website-content-with-azure-blob-storage-45ln</link>
      <guid>https://dev.to/degreatkhali/hosting-public-website-content-with-azure-blob-storage-45ln</guid>
      <description>&lt;p&gt;&lt;strong&gt;ABOUT THIS LAB&lt;/strong&gt;&lt;br&gt;
I am currently on my devops path, and honestly I do have a long way to go. And yes this lab prepard you for the AZ-104 exam, Lab 02a from &lt;a href="https://microsoftlearning.github.io/Secure-storage-for-Azure-Files-and-Azure-Blob-Storage/Instructions/Labs/LAB_02a_storage_public_website.html" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt; was one of those sessions that looks simple first until you hit a permission wall you did not expect like I did. Here is the full walkthrough, including the gotcha that tripped me up.&lt;/p&gt;

&lt;p&gt;The objective of this lab is to configure an Azure Storage account that can host public-facing content such as images, videos, and documents while supporting high availability, soft delete protection, and blob versioning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TASK 01  Creating the Storage Account&lt;/strong&gt;&lt;br&gt;
The first task is to create a storage account that can tolerate a regional outage. The key decision here is redundancy level.&lt;br&gt;
For a public website that needs to stay online even if an Azure region goes down, Read-access Geo-redundant Storage (RA-GRS) is the right call. It replicates data to a secondary region and makes that copy readable so content stays available during a primary region incident.&lt;/p&gt;

&lt;p&gt;Storage account name = publicwebsite[your-unique-id]&lt;br&gt;
Redundancy = RA-GRS (Read-access geo-redundant)&lt;br&gt;
Region  = Your nearest Azure region&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Storage account Basics tab — name, region, redundancy selection&lt;/em&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%2Fpumo7e0rl8m1riypf1my.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpumo7e0rl8m1riypf1my.png" alt=" " width="799" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TASK 02  Configuring Public Access — And the Error I Hit&lt;/strong&gt;&lt;br&gt;
This is where things got interesting for me. The lab requires enabling anonymous access so that anyone with the file’s URL can view it no Azure credentials required.&lt;br&gt;
There are two separate levels where this needs to be enabled: the storage account level, and the individual container level. Miss either one and you will get an error.&lt;/p&gt;

&lt;p&gt;Step 1: In the storage account’s Configuration blade, set Allow blob anonymous access to Enabled.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Configuration blade — ‘Allow blob anonymous access’ toggled to Enabled&lt;/em&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%2Fva3u7ndqsvpu4iv4k3mh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva3u7ndqsvpu4iv4k3mh.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠ &lt;em&gt;THE ERROR I HIT&lt;/em&gt;&lt;br&gt;
&lt;em&gt;After enabling the setting, I immediately navigated to the container and tried changing its Public access level to Blob.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;THE FIX&lt;/em&gt;&lt;br&gt;
I forgot to click Save at the top of the Configuration blade before navigating away. And this is one thing we really have to pay attention to.&lt;br&gt;
Azure does not auto-save configuration changes. Once I went back, saved properly, and returned to the container the access level change went through without issue.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Error message when attempting to change container access level before saving&lt;/em&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%2F54fi8rbhx9ryh2hjahl8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54fi8rbhx9ryh2hjahl8.jpeg" alt=" " width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Container access level successfully changed to ‘Blob’ after saving&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TASK 03  Uploading Content &amp;amp; Testing Public Access&lt;/strong&gt;&lt;br&gt;
With the container named public and access set to Blob, I uploaded a sample image file. Then I copied the blob’s URL from the portal and pasted it into a browser window no Azure sign-in, no SAS token. The image loaded immediately-because anonymous blob access was enabled at both the storage account and container levels, the file became publicly accessible through its direct blob URL.&lt;/p&gt;

&lt;p&gt;• Navigate to the container → Upload a file&lt;br&gt;
• Click the uploaded blob → copy the URL from the properties pane&lt;br&gt;
• Open an incognito browser window → paste the URL → image loads publicly_&lt;/p&gt;

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

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

&lt;p&gt;&lt;em&gt;browser showing the image loaded via the public blob URL&lt;/em&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%2Fhw6fn4acc4y7rxzs9zvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw6fn4acc4y7rxzs9zvy.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TASK 04  Enabling Soft Delete&lt;/strong&gt;&lt;br&gt;
Soft delete is Azure’s recycle bin for blobs. When enabled, deleted blobs is not immediately removed they enter a deleted state and remain recoverable for a configurable retention period. I did set the retention to 21 days, then tested it. Note, the count starts from the day you set it so you would see 20 instead of 21.&lt;/p&gt;

&lt;p&gt;• Deleted the uploaded file from the container&lt;br&gt;
• Toggled ‘Show deleted blobs’ — the file reappeared, marked as deleted&lt;br&gt;
• Clicked Undelete — the file was instantly restored&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data Protection blade — Blob soft delete enabled, 21 days retention&lt;/em&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%2Ftor4dj93fkenbz3bqz33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftor4dj93fkenbz3bqz33.png" alt=" " width="464" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Show deleted blobs’ toggled — deleted blob visible with strikethrough indicator.&lt;/em&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%2F1xen4k1ps45h4vem5mzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xen4k1ps45h4vem5mzo.png" alt=" " width="799" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TASK 05  Enabling Blob Versioning&lt;/strong&gt;&lt;br&gt;
Soft delete protects against deletion. Blob versioning protects against overwriting. When versioning is on, every time a blob is updated, Azure automatically retains the previous version. You can promote any past version back to current at any time.&lt;br&gt;
I tested it by uploading an updated version of the same file. Under Show deleted blobs, the original version appeared as a previous version entry fully restorable.&lt;/p&gt;

&lt;p&gt;Blob versioning = Enabled&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Versioning settings — Enabled, tracking versions when blobs are overwritten&lt;/em&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%2Feswdvwa4xmgumvfz2j7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feswdvwa4xmgumvfz2j7d.png" alt=" " width="689" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;br&gt;
This lab gave me a much better understanding of how Azure Storage handles public access, redundancy, and data protection. The biggest lesson for me was realizing that Azure configurations often depend on multiple settings working together — especially when dealing with permissions and public access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;br&gt;
Lesson  Detail&lt;br&gt;
Order matters   &lt;em&gt;Account-level&lt;/em&gt; anonymous access must be saved before container-level access can be changed.&lt;br&gt;
&lt;em&gt;RA-GRS resilience&lt;/em&gt; Geo-redundant storage keeps content available even during a primary region outage.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Two-level access gates&lt;/em&gt; Anonymous access has both an account-level and a container-level gate. Both must be configured independently.&lt;br&gt;
&lt;em&gt;Soft delete + versioning&lt;/em&gt; Soft delete covers accidental deletions. Versioning covers accidental overwrites. Use both together.&lt;/p&gt;

&lt;p&gt;Have you run into the same “forgot to save” trap in Azure? Or found a smarter way to structure blob storage for static sites? Drop a comment I did love to hear how others are approaching this.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>blobstorage</category>
      <category>beginners</category>
      <category>devopspath</category>
    </item>
    <item>
      <title>From Zero to Secure: Setting Up Azure Storage on My DevOps Journey</title>
      <dc:creator>Emmanuel</dc:creator>
      <pubDate>Tue, 21 Apr 2026 12:03:35 +0000</pubDate>
      <link>https://dev.to/degreatkhali/from-zero-to-secure-setting-up-azure-storage-on-my-devops-journey-3g97</link>
      <guid>https://dev.to/degreatkhali/from-zero-to-secure-setting-up-azure-storage-on-my-devops-journey-3g97</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpo5pvxesb83s3tliw8mx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpo5pvxesb83s3tliw8mx.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyone starts somewhere. The goal was straightforward: Create a secure, cost-effective storage account in Azure using the guided Lab which you can find on Microsoft Learn. Think of it as setting up a digital locker where your data lives safely in the cloud.&lt;br&gt;
Here is what I did, what I learned, and why it matters.&lt;/p&gt;




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

&lt;p&gt;Before building anything, I needed somewhere to put it. In Azure, that's a resource group essentially a logical container that keeps related resources organized and easy to manage. It is a small step, but a foundational one. Good organization now saves headaches later.&lt;/p&gt;

&lt;p&gt;Resource group creation in Azure Portal- can be found for searching the portal and selecting it&lt;/p&gt;

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

&lt;p&gt;Step 2: Setting Up the Storage Account&lt;/p&gt;

&lt;p&gt;Next came the storage account itself the actual "locker." Azure storage accounts can hold blobs, files, queues, and tables. For this lab, I focused on understanding the configuration options: naming conventions, region selection, and performance tiers.&lt;br&gt;
It is surprisingly satisfying clicking through a wizard and watching a cloud resource come to life.&lt;/p&gt;

&lt;p&gt;Storage account created in Azure Portal with a unique name.&lt;/p&gt;

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

&lt;p&gt;Step 3: Locking It Down — Security Settings&lt;/p&gt;

&lt;p&gt;This was the most important part. I applied three key security configurations:&lt;br&gt;
• Secure transfer only — enforces HTTPS, rejecting any plain HTTP connections&lt;br&gt;
• Minimum TLS version — set to TLS 1.2 to block outdated, vulnerable protocols&lt;br&gt;
• Shared key access disabled — forces authentication through Azure Active Directory instead of less secure key-based 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%2Fh70o85cgtt2xhvwrfbdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh70o85cgtt2xhvwrfbdi.png" alt=" " width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are not optional extras — they are baseline hygiene for any cloud storage setup.&lt;/p&gt;

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

&lt;p&gt;Step 4: Redundancy and Networking&lt;/p&gt;

&lt;p&gt;Since this was a training lab, I made practical trade-offs:&lt;br&gt;
• Redundancy: I chose Locally Redundant Storage (LRS), which is the most affordable option, suitable for non-critical data.&lt;br&gt;
• Networking: I kept public network access enabled to allow the lab tasks to run without friction.&lt;/p&gt;

&lt;p&gt;In a production environment, I will likely switch to geo-redundant storage and lock down network access to specific virtual networks or private endpoints. But knowing why you'd make that change is exactly what lab like this teaches you.&lt;br&gt;
Redundancy and networking 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%2Ffjs73ka4bvg5bm2wl9n1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffjs73ka4bvg5bm2wl9n1.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This lab was not about storing real data — it was about building a mental model. I now understand how to spin up a storage account, apply security best practices, and make informed trade-offs between cost, redundancy, and access control.&lt;/p&gt;

&lt;p&gt;If you are just starting out with Azure, I would encourage you to follow along with the hands-on labs. There is no better way to learn than by actually doing.&lt;br&gt;
What is next? I am moving on to Azure networking and virtual machines. Follow along if you are on a similar journey. &lt;/p&gt;

</description>
      <category>azure</category>
      <category>security</category>
      <category>storage</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
