<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: adegbola adeniyi</title>
    <description>The latest articles on Forem by adegbola adeniyi (@adegbola_adeniyi_841e65f3).</description>
    <link>https://forem.com/adegbola_adeniyi_841e65f3</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%2F3745731%2Fc03444ce-eb47-4749-953d-7bb758167aa9.jpg</url>
      <title>Forem: adegbola adeniyi</title>
      <link>https://forem.com/adegbola_adeniyi_841e65f3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adegbola_adeniyi_841e65f3"/>
    <language>en</language>
    <item>
      <title>Azure CLI: Setup Linux VM, VNet, Storage &amp; Key Vault with Budget Alerts—A Comprehensive Step-by-Step Infrastructure Guide.</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Mon, 20 Apr 2026 10:10:35 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/azure-cli-setup-linux-vm-vnet-storage-key-vault-with-budget-alerts-a-comprehensive-100k</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/azure-cli-setup-linux-vm-vnet-storage-key-vault-with-budget-alerts-a-comprehensive-100k</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Cloud computing has revolutionized how developers and IT professionals build, deploy, and manage applications. Among the leading platforms, Microsoft Azure stands out for its flexibility, scalability, and powerful infrastructure services. Whether you’re experimenting with Linux environments, hosting applications, or designing complex network architectures, Azure provides the tools to make it seamless.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through the step-by-step process of creating a Linux Virtual Machine (VM) on Azure and then configuring a Virtual Network (VNet) with a Subnet using the Azure Command-Line Interface (CLI). By the end, you’ll not only understand how to spin up a Linux VM but also how to establish secure and organized network structures that support enterprise-grade applications.&lt;/p&gt;

&lt;p&gt;Before diving in, it’s important to understand one of Azure’s fundamental concepts: the Resource Group. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Resource Group&lt;/strong&gt; in Azure is a logical container that holds related resources for an application or workload. It allows you to manage and organize resources such as VMs, storage accounts, and networks collectively, making deployment, monitoring, and lifecycle management much easier. Think of it as a folder where all the components of your project live together.&lt;/p&gt;

&lt;p&gt;This tutorial is designed for beginners and intermediate users who want hands-on experience with Azure’s infrastructure services. No prior deep knowledge of cloud networking is required—just a willingness to learn and follow along.&lt;/p&gt;

&lt;p&gt;This tutorial is broken down into several steps: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: &lt;strong&gt;Installing Azure Package Manager, Logging-in Into Azure Portal and Setting up Our Subscription&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%2F5rwooqs4xgvv2yj8esvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rwooqs4xgvv2yj8esvy.png" alt="cli" width="800" height="245"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;winget install Microsoft.AzureCLI&lt;/strong&gt;: Installs the Azure CLI tool using the Windows package manager (winget).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F134agr45nnnt5hk1otis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F134agr45nnnt5hk1otis.png" alt="cli" width="800" height="459"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az login --use-device-code&lt;/strong&gt;: logs you into Azure by generating a temporary device code that you enter in a browser, allowing secure authentication without needing to store credentials directly in the terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pqoc4i6w72ynhpey9im.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pqoc4i6w72ynhpey9im.png" alt="cli" width="800" height="277"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az account show&lt;/strong&gt;: displays details about the currently active Azure subscription and account context, including subscription ID, name, tenant ID, and whether it’s set as the default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: &lt;strong&gt;Setting Up and Creating a Resource Group for holding, organizing and managing all related Resources meant for this Project&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%2Fmbrc8pbqqwbik4krzks6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbrc8pbqqwbik4krzks6.png" alt="cli" width="800" height="286"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;RG=az-cli-lab-rg&lt;/strong&gt;: defining a shell variable named RG with the value az-cli-lab-rg.&lt;br&gt;
&lt;strong&gt;LOCATION=eastus&lt;/strong&gt;: defining a shell variable named LOCATION with the value eastus&lt;br&gt;
&lt;strong&gt;az group create --name $RG --location $LOCATION&lt;/strong&gt;: - --name $RG specifies the name of the resource group (in this case, the value stored in the variable RG, e.g., az-cli-lab-rg).&lt;br&gt;
&lt;strong&gt;--location $LOCATION&lt;/strong&gt; defines the Azure region where the resource group will be hosted (e.g., eastus).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9ek4sv3vw1bhjknf6da.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9ek4sv3vw1bhjknf6da.png" alt="cli" width="800" height="175"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az group show --name $RG&lt;/strong&gt;:is used to retrieve and display details about an existing Azure Resource Group.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: &lt;strong&gt;Setting up Virtual Network, Sub Network, NSG and creating the inbound security rules(SSH and Https) and Allocating a Public IP&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%2F37b8r5tsw6z3psbrea5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37b8r5tsw6z3psbrea5j.png" alt="cli" width="800" height="409"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az network vnet create&lt;/strong&gt;: Creates a new Virtual Network.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;: Specifies the resource group where the VNet will be placed (using the variable RG).&lt;br&gt;
&lt;strong&gt;--name lab-vnet&lt;/strong&gt;: Names the VNet lab-vnet&lt;br&gt;
&lt;strong&gt;--address-prefix 10.0.0.0/16&lt;/strong&gt;: -  Defines the IP address space for the VNet. Here, it allows addresses from 10.0.0.0 to 10.0.255.255.&lt;br&gt;
&lt;strong&gt;--location $LOCATION&lt;/strong&gt;: Sets the Azure region where the VNet will be created (using the variable LOCATION).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycaezx25rxuxlqybbuwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycaezx25rxuxlqybbuwe.png" alt="cli" width="800" height="275"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az network vnet subnet create&lt;/strong&gt;: Creates a new subnet within a specified VNet.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;:  Identifies the resource group where the VNet and subnet reside.&lt;br&gt;
&lt;strong&gt;--vnet-name lab-vnet&lt;/strong&gt;:  Specifies the VNet (lab-vnet) in which the subnet will be created.&lt;br&gt;
&lt;strong&gt;--name lab-subnet&lt;/strong&gt;: - Names the subnet lab-subnet.&lt;br&gt;
&lt;strong&gt;--address-prefix 10.0.1.0/24&lt;/strong&gt;:- Defines the IP address range for the subnet. Here, it allows 256 addresses (from 10.0.1.0 to 10.0.1.255).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9mr0ag7k5bh8wezk9yd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9mr0ag7k5bh8wezk9yd.png" alt="Cli" width="800" height="422"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az network nsg create&lt;/strong&gt;: Creates a new Network Security Group (NSG) in Azure.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;:  Specifies the resource group where the NSG will be created.&lt;br&gt;
&lt;strong&gt;--name lab-nsg&lt;/strong&gt;:  Names the NSG lab-nsg.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;az network nsg rule create&lt;/strong&gt;: Adds a new rule to the NSG.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;: Resource group where the NSG resides.&lt;br&gt;
&lt;strong&gt;--nsg-name lab-nsg&lt;/strong&gt;: Target NSG name.&lt;br&gt;
&lt;strong&gt;--name AllowSSH / AllowHTTP&lt;/strong&gt;: Names of the rules.&lt;br&gt;
&lt;strong&gt;--priority 1000/1010&lt;/strong&gt;: Determines rule order (lower = higher priority).&lt;br&gt;
&lt;strong&gt;--destination-port-ranges 22 SSH Access /80 HTTP Access&lt;/strong&gt;: Ports being opened&lt;br&gt;
&lt;strong&gt;--access Allow&lt;/strong&gt;: Grants access (instead of denying).&lt;br&gt;
&lt;strong&gt;--protocol Tcp&lt;/strong&gt;: Protocol type.&lt;br&gt;
&lt;strong&gt;--direction Inbound&lt;/strong&gt;: Applies to incoming traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna02f5fiazypxv4gy4ir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna02f5fiazypxv4gy4ir.png" alt="Cli" width="800" height="343"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az network vnet subnet update*&lt;em&gt;: Updates the configuration of an existing subnet.&lt;br&gt;
*&lt;/em&gt;--resource-group $RG&lt;/strong&gt;:  Specifies the resource group where the subnet and NSG exist.&lt;br&gt;
&lt;strong&gt;--vnet-name lab-vnet&lt;/strong&gt;:  Identifies the Virtual Network containing the subnet.&lt;br&gt;
&lt;strong&gt;--name lab-subnet&lt;/strong&gt;:  The subnet being updated.&lt;br&gt;
&lt;strong&gt;--network-security-group lab-nsg&lt;/strong&gt;: - Associates the NSG (lab-nsg) with the subnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4poso6aahcnuavxn5se.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4poso6aahcnuavxn5se.png" alt="cli" width="800" height="445"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az network public-ip create&lt;/strong&gt;: The base command to create a public IP in Azure.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;:- Specifies the resource group where the public IP will be created. $RG is a variable holding the resource group name.&lt;br&gt;
&lt;strong&gt;--name lab-public-ip&lt;/strong&gt;: Assigns the name lab-public-ip to the new public IP resource.&lt;br&gt;
&lt;strong&gt;--allocation-method Static&lt;/strong&gt;: Ensures the IP address is static, meaning it won’t change once assigned (as opposed to dynamic allocation).&lt;br&gt;
&lt;strong&gt;--sku Standard&lt;/strong&gt;: creates a more reliable, secure, and scalable public IP address. No zone redundancy, limited security features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Creating a VM, SSH into your VM &amp;amp; install Nginx&lt;/strong&gt;&lt;br&gt;
Creates a B1s Ubuntu VM with auto-generated SSH keys and connects it to the existing subnet and firewall.&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%2F1yycqxuibpy0qmc31wwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yycqxuibpy0qmc31wwi.png" alt="cli" width="800" height="511"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az vm create&lt;/strong&gt;: Creates a new virtual machine.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;: Deploys the VM into the resource group stored in the  variable.&lt;br&gt;
&lt;strong&gt;--name lab-vm&lt;/strong&gt;:- Names the VM lab-vm.&lt;br&gt;
&lt;strong&gt;--image Ubuntu2204&lt;/strong&gt;: Uses the Ubuntu 22.04 LTS image.&lt;br&gt;
&lt;strong&gt;--size Standard_B1s&lt;/strong&gt;: Chooses a small, cost-effective VM size (1 vCPU, 1 GiB RAM).&lt;br&gt;
&lt;strong&gt;--admin-username azureuser&lt;/strong&gt;: Sets the admin account username.&lt;br&gt;
&lt;strong&gt;--generate-ssh-keys&lt;/strong&gt;: Automatically generates SSH keys if none exist locally.&lt;br&gt;
&lt;strong&gt;--vnet-name lab-vnet&lt;/strong&gt;: Places the VM in the virtual network lab-vnet.&lt;br&gt;
&lt;strong&gt;--subnet lab-subnet&lt;/strong&gt;: Assigns the VM to the subnet lab-subnet.&lt;br&gt;
&lt;strong&gt;--public-ip-address lab-public-ip&lt;/strong&gt;: Associates the VM with the public IP resource lab-public-ip.&lt;br&gt;
&lt;strong&gt;--nsg lab-nsg&lt;/strong&gt;:Attaches the network security group lab-nsg for traffic rules.&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%2F0m8rmvkyxyqytgix8dxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0m8rmvkyxyqytgix8dxn.png" alt="cli" width="800" height="192"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az vm show&lt;/strong&gt;: Displays information about an existing VM.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt;:  Specifies the resource group where the VM resides. &lt;br&gt;
&lt;strong&gt;--name lab-vm&lt;/strong&gt;: Targets the VM named lab-vm.&lt;br&gt;
&lt;strong&gt;--show-details&lt;/strong&gt;: Includes additional details like networking and power state.&lt;br&gt;
&lt;strong&gt;--query '{Name:name, State:powerState, IP:publicIps}'&lt;/strong&gt;: Uses JMESPath query syntax to filter and return only:The VM’s name, - The VM’s current power state (e.g., VM running, VM stopped), The public IP address assigned.&lt;br&gt;
&lt;strong&gt;--output table&lt;/strong&gt;: Formats the result into a human-readable table.&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%2F3pspfeauicbavkpna648.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pspfeauicbavkpna648.png" alt="cli" width="661" height="591"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ssh -i ~/.ssh/id_rsa &lt;a href="mailto:azureuser@102.37.12.118"&gt;azureuser@102.37.12.118&lt;/a&gt;&lt;/strong&gt;: Connects securely to your VM using the private&lt;br&gt;
&lt;strong&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nginx -y&lt;/strong&gt;: Refreshes the package index and installs Nginx web server automatically ( skips confirmation).&lt;br&gt;
&lt;strong&gt;sudo systemctl enable nginx &amp;amp;&amp;amp; sudo systemctl start nginx curl &lt;a href="http://102.37.12.118" rel="noopener noreferrer"&gt;http://102.37.12.118&lt;/a&gt;&lt;/strong&gt;: Ensures Nginx starts on boot. Immediately starts the Nginx service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Create a Storage Account, Upload Files, Store Secrets in Azure Key Vault&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%2Fdghpwoh1dpzuwif37hdv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdghpwoh1dpzuwif37hdv.png" alt="cli" width="800" height="609"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STORAGE_NAME="labstorage$RANDOM"&lt;/strong&gt;: Creates a unique name by appending a random number to . Storage account names must be globally unique and lowercase.&lt;br&gt;
&lt;strong&gt;az storage account create&lt;/strong&gt; : Creates a new storage account.&lt;br&gt;
&lt;strong&gt;--name $STORAGE_NAME&lt;/strong&gt; : Uses the variable you defined above.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt; : Places the storage account in your resource&lt;br&gt;
&lt;strong&gt;--location $LOCATION&lt;/strong&gt; :Specifies the Azure region (e.g.,South Africa North).&lt;br&gt;
&lt;strong&gt;--sku Standard_LRS&lt;/strong&gt; :  Chooses locally redundant storage (cost‑effective, three copies in one datacenter).&lt;br&gt;
&lt;strong&gt;--kind StorageV2&lt;/strong&gt;: Creates a modern general‑purpose v2 storage account (recommended for most workloads).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a Blob Container&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e6oyj11u0uhdsmpr5f8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e6oyj11u0uhdsmpr5f8.png" alt="cli" width="800" height="130"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az storage container create&lt;/strong&gt; : Creates a new blob container.&lt;br&gt;
&lt;strong&gt;--name lab-files&lt;/strong&gt; : Names the container lab-files.&lt;br&gt;
&lt;strong&gt;--account-name $STORAGE_NAME&lt;/strong&gt; : Uses the storage account you created earlier.&lt;br&gt;
&lt;strong&gt;--auth-mode login&lt;/strong&gt;: Authenticates using your Azure CLI login credentials (instead of needing an access key).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload a FIle&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%2Fvkn5iqou3yxx556u4fvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvkn5iqou3yxx556u4fvw.png" alt="cli" width="800" height="394"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;echo 'Hello from Azure CLI Lab!' &amp;gt; sample.txt&lt;/strong&gt;: Writes the string Hello from Azure CLI Lab! into a new file called  in your current directory.&lt;br&gt;
&lt;strong&gt;az storage blob upload&lt;/strong&gt; : Uploads a file into an Azure Storage Blob container.&lt;br&gt;
&lt;strong&gt;--account-name $STORAGE_NAME&lt;/strong&gt; : Specifies the storage account you created earlier.&lt;br&gt;
&lt;strong&gt;--container-name lab-files&lt;/strong&gt; : Targets the blob container named lab-files.&lt;br&gt;
&lt;strong&gt;--name sample.txt&lt;/strong&gt; : Sets the blob’s name in Azure (what it will be called once uploaded).&lt;br&gt;
&lt;strong&gt;--file sample.txt&lt;/strong&gt; : Points to the local file you just created.&lt;br&gt;
&lt;strong&gt;--auth-mode login&lt;/strong&gt;:  Uses your Azure CLI login credentials (Azure AD) for authentication instead of an account key.&lt;br&gt;
&lt;strong&gt;NB&lt;/strong&gt;: before you can upload a file, you need to assign role permission the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;List blobs in the container&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqfoepsao6ilg5ldpfs4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqfoepsao6ilg5ldpfs4.png" alt="cli" width="800" height="179"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az storage blob list&lt;/strong&gt; : Lists blobs (files) stored in a container.&lt;br&gt;
&lt;strong&gt;--account-name $STORAGE_NAME&lt;/strong&gt; : Specifies the storage account.&lt;br&gt;
&lt;strong&gt;--container-name lab-files&lt;/strong&gt; : Targets the container named lab-files.&lt;br&gt;
&lt;strong&gt;--auth-mode login&lt;/strong&gt; : Uses your Azure AD login credentials for authentication.&lt;br&gt;
&lt;strong&gt;--output table&lt;/strong&gt;: Formats the output in a clean table view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a Key Vault&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%2F8ssi0hefe68isicb7ivb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ssi0hefe68isicb7ivb.png" alt="cli" width="800" height="90"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;KV_NAME="lab-kv-$RANDOM"&lt;/strong&gt;: Creates a variable for the Key Vault name. The  suffix ensures uniqueness since Key Vault names must be globally unique.&lt;br&gt;
&lt;strong&gt;az keyvault create&lt;/strong&gt; : Command to create a new Azure Key Vault resource.&lt;br&gt;
&lt;strong&gt;--name $KV_NAME&lt;/strong&gt; : Uses the variable you defined as the Key Vault’s name.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt; : Places the Key Vault inside the resource group you specify.&lt;br&gt;
&lt;strong&gt;--location $LOCATION&lt;/strong&gt; : pecifies the Azure region (e.g., , ) where the Key Vault will be created.&lt;br&gt;
&lt;strong&gt;--enable-rbac-authorization false&lt;/strong&gt;: Disables Role-Based Access Control (RBAC) authorization for this Key Vault. Instead, it will use the traditional Access Policies model to control who can access secrets, keys, and certificates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store a Secret&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%2Feqgtfwr3nqy0lpxuiuzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqgtfwr3nqy0lpxuiuzw.png" alt="cli" width="800" height="392"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az keyvault secret set&lt;/strong&gt; : Command to create or update a secret in Azure Key Vault.&lt;br&gt;
&lt;strong&gt;--vault-name $KV_NAME&lt;/strong&gt; : Specifies which Key Vault to store the secret in (using the variable you defined earlier).&lt;br&gt;
&lt;strong&gt;--name db-password&lt;/strong&gt; : The logical name (identifier) for the secret. In this case, it’s called db-password.&lt;br&gt;
&lt;strong&gt;--value 'SuperSecure@pass123'&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieve the secret&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%2Focaanefmiv7t77zf56zk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focaanefmiv7t77zf56zk.png" alt="cli" width="800" height="151"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az keyvault secret show&lt;/strong&gt; : Retrieves details of a secret stored in Azure Key Vault.&lt;br&gt;
&lt;strong&gt;--vault-name $KV_NAME&lt;/strong&gt; : Specifies which Key Vault to query (using the variable you defined earlier).&lt;br&gt;
&lt;strong&gt;--name db-password&lt;/strong&gt; : Identifies the secret you want to fetch, in this case db-password.&lt;br&gt;
&lt;strong&gt;--query value&lt;/strong&gt; :  Filters the output to return only the secret’s value (instead of the full JSON object).&lt;br&gt;
&lt;strong&gt;--output tsv&lt;/strong&gt;: Formats the result as plain text (tab‑separated values), which means you’ll just see the secret string itself without extra formatting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assign VM a Managed Identity to access the vault&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%2F0iw4cb7qlu4fzo2eeo8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0iw4cb7qlu4fzo2eeo8o.png" alt="cli" width="800" height="210"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az vm identity assign&lt;/strong&gt; :- Enables a system‑assigned managed identity for your VM.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt; \&lt;br&gt;
&lt;strong&gt;--name lab-vm&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;PRINCIPAL_ID=$(az vm show&lt;/strong&gt; \&lt;br&gt;
&lt;strong&gt;--query identity.principalId&lt;/strong&gt; \&lt;br&gt;
&lt;strong&gt;--output tsv)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;az role assignment create&lt;/strong&gt; \&lt;br&gt;
&lt;strong&gt;--role 'Key Vault Secrets User'&lt;/strong&gt; \&lt;br&gt;
&lt;strong&gt;--assignee $PRINCIPAL_ID&lt;/strong&gt; \&lt;br&gt;
--scope $(az keyvault show --name $KV_NAME --query id --output tsv).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitor Cost &amp;amp; Set a budget Alert&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%2Fgwk5sv29c7t8nn4494kx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwk5sv29c7t8nn4494kx.png" alt="cli" width="800" height="166"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;az consumption budget create&lt;/strong&gt; :&lt;br&gt;
&lt;strong&gt;--name lab-budget&lt;/strong&gt; :The budget’s name.&lt;br&gt;
&lt;strong&gt;--amount 100&lt;/strong&gt; : Spending limit (in your subscription’s currency).&lt;br&gt;
&lt;strong&gt;--category Cost&lt;/strong&gt; : Tracks actual cost (instead of usage).&lt;br&gt;
&lt;strong&gt;--time-grain Monthly&lt;/strong&gt; :Resets every month.&lt;br&gt;
&lt;strong&gt;--start-date $(date +%Y-%m-01)&lt;/strong&gt; : Defines the active period for the budget.&lt;br&gt;
&lt;strong&gt;--end-date 2026-12-31&lt;/strong&gt; :Defines the active period for the budget.&lt;br&gt;
&lt;strong&gt;--resource-group $RG&lt;/strong&gt; :Scope the budget to a specific resource group.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
By following this step‑by‑step guide, you’ve seen how the Azure CLI can be used to provision a Linux virtual machine, configure networking with VNets and subnets, set up a storage account for file management, securely store sensitive information in Azure Key Vault, and establish cost monitoring through budget alerts. Together, these tasks demonstrate the power of Azure’s integrated services: infrastructure, security, and governance working seamlessly through command‑line automation.&lt;br&gt;
The process not only equips you with practical skills for deploying and managing cloud resources but also highlights best practices—such as using managed identities for secure access and leveraging budgets to maintain financial control. With these foundations in place, you can confidently expand into more advanced scenarios, knowing that your environment is secure, scalable, and cost‑aware. This holistic approach ensures that your Azure deployments remain both technically robust and operationally sustainable.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>networking</category>
      <category>virtualmachine</category>
      <category>azure</category>
    </item>
    <item>
      <title>Complete Walkthrough to Setup Shared File Storage and Securing it Through a Virtual Network on Azure for Offices.</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Mon, 09 Mar 2026 14:58:30 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/complete-walkthrough-to-setup-shared-file-storage-and-securing-it-through-a-virtual-network-on-59mm</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/complete-walkthrough-to-setup-shared-file-storage-and-securing-it-through-a-virtual-network-on-59mm</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Modern offices rely heavily on shared file storage to enable collaboration, streamline workflows, and ensure that critical documents are accessible to the right people at the right time. However, with increasing cyber threats and stricter compliance requirements, simply storing files in the cloud is not enough—organizations must also secure their storage environments against unauthorized access. Microsoft Azure provides a powerful platform for creating shared file storage that is both scalable and secure. By integrating Azure Files with a virtual network, businesses can enforce private connectivity, apply granular access controls, and protect sensitive data from external exposure. &lt;/p&gt;

&lt;p&gt;This article offers a complete walkthrough of how to set up:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A storage account.&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.
on Azure, giving offices a reliable foundation for collaboration while maintaining the highest standards of data protection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;1. Create and configure a storage account for Azure Files.&lt;/strong&gt;&lt;br&gt;
Create a storage account for the finance department’s shared files.&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%2Fnbbqy2sxiksv9messw7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbbqy2sxiksv9messw7u.png" alt="AZ" width="800" height="333"&gt;&lt;/a&gt;&lt;br&gt;
In the portal, search for and select &lt;strong&gt;Storage accounts&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%2F7td5zuen5qr0cjnyii2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7td5zuen5qr0cjnyii2h.png" alt="AZ" width="800" height="313"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;+ Create&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%2Fxwvt03fniqyso4ur79du.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwvt03fniqyso4ur79du.png" alt="AZ" width="800" height="552"&gt;&lt;/a&gt;&lt;br&gt;
For &lt;strong&gt;Resource group&lt;/strong&gt; select &lt;strong&gt;Create new&lt;/strong&gt;. Give your resource group a &lt;strong&gt;name&lt;/strong&gt; and select &lt;strong&gt;OK&lt;/strong&gt; to save your changes. Provide a &lt;strong&gt;Storage account name&lt;/strong&gt;. Ensure the name meets the naming requirements. Set the &lt;strong&gt;Performance&lt;/strong&gt; to &lt;strong&gt;Premium&lt;/strong&gt;. Set the &lt;strong&gt;Premium account type&lt;/strong&gt; to &lt;strong&gt;File shares&lt;/strong&gt;. Set the &lt;strong&gt;Redundancy&lt;/strong&gt; to &lt;strong&gt;Zone-redundant storage&lt;/strong&gt;. Select &lt;strong&gt;Review&lt;/strong&gt; and then &lt;strong&gt;Create&lt;/strong&gt; the storage account. Wait for the resource to deploy.&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%2F20wm7cgyc6k4gj9twib2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20wm7cgyc6k4gj9twib2.png" alt="AZ" width="800" height="277"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Create and configure a file share with directory.&lt;/strong&gt;&lt;br&gt;
Create a file share for the corporate office.&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%2Fnii2u462uzkn4q75whog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnii2u462uzkn4q75whog.png" alt="AZ" width="800" height="388"&gt;&lt;/a&gt;&lt;br&gt;
In the storage account, in the &lt;strong&gt;Data storage&lt;/strong&gt; section, select the &lt;strong&gt;File shares&lt;/strong&gt; blade. Select &lt;strong&gt;+ File share&lt;/strong&gt; and provide a &lt;strong&gt;Name&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%2Fo4yrt4sgjmmw4ic3zu6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4yrt4sgjmmw4ic3zu6q.png" alt="AZ" width="800" height="547"&gt;&lt;/a&gt;&lt;br&gt;
Review the other options, but take the defaults. Select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Add a directory to the file share for the finance department. For future testing, upload a file.&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%2Fsfurm0lcz16f4fyx6flo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfurm0lcz16f4fyx6flo.png" alt="AZ" width="800" height="249"&gt;&lt;/a&gt;&lt;br&gt;
In the storage account, in the &lt;strong&gt;Data storage&lt;/strong&gt; section, select the &lt;strong&gt;File shares&lt;/strong&gt; blade. Name the new directory &lt;strong&gt;finance&lt;/strong&gt;.Notice you can &lt;strong&gt;Add directory&lt;/strong&gt; to further organize your file share. &lt;strong&gt;Upload&lt;/strong&gt; a file of your choosing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Configure and test snapshots&lt;/strong&gt;.&lt;br&gt;
Similar to blob storage, you need to protect against accidental deletion of files.&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%2F29ph3iytzdeufsj8idwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29ph3iytzdeufsj8idwb.png" alt="AZ" width="800" height="350"&gt;&lt;/a&gt;&lt;br&gt;
Select your file share. In the &lt;strong&gt;Operations&lt;/strong&gt; section, select the &lt;strong&gt;Snapshots&lt;/strong&gt; blade. Select &lt;strong&gt;+ Add snapshot&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%2F17wodfnsbadnifw7vysf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17wodfnsbadnifw7vysf.png" alt="AZ" width="800" height="367"&gt;&lt;/a&gt;&lt;br&gt;
 The comment is optional. Select &lt;strong&gt;OK&lt;/strong&gt;. Select your snapshot and verify your file directory and uploaded file are included.&lt;/p&gt;

&lt;p&gt;Practice using snapshots to restore a file.&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%2F425omtyyyb5yx7vx50zl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F425omtyyyb5yx7vx50zl.png" alt="AZ" width="800" height="412"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmntq23cmgvah1pu4wb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmntq23cmgvah1pu4wb8.png" alt="AZ" width="800" height="252"&gt;&lt;/a&gt;&lt;br&gt;
Return to your &lt;strong&gt;file share&lt;/strong&gt;. Browse to your file directory. Locate your uploaded file and in the &lt;strong&gt;Properties&lt;/strong&gt; pane select &lt;strong&gt;Delete&lt;/strong&gt;. Select &lt;strong&gt;Yes&lt;/strong&gt; to confirm the deletion.&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%2F8xufshk2v575ji6mdca7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xufshk2v575ji6mdca7.png" alt="AZ" width="800" height="274"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wqom5156zdvaw0yxpj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wqom5156zdvaw0yxpj7.png" alt="AZ" width="800" height="274"&gt;&lt;/a&gt;&lt;br&gt;
Select the &lt;strong&gt;Snapshots&lt;/strong&gt; blade and then select your snapshot. Navigate to the file you want to restore, Select the file and the select &lt;strong&gt;Restore&lt;/strong&gt;. Provide a &lt;strong&gt;Restored file name&lt;/strong&gt;. Verify your file directory has the restored file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Configure restricting storage access to selected virtual networks.&lt;/strong&gt;&lt;br&gt;
This tasks in this section require a virtual network with subnet. In a production environment these resources would already be created.&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%2Froftebc65vhgg1e1efom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Froftebc65vhgg1e1efom.png" alt="AZ" width="800" height="398"&gt;&lt;/a&gt;&lt;br&gt;
Search for and select &lt;strong&gt;Virtual networks&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%2F3b4yfmq4tfdwdtawbske.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3b4yfmq4tfdwdtawbske.png" alt="AZ" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsr8kz4eds1v0ibq0dr7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsr8kz4eds1v0ibq0dr7n.png" alt="AZ" width="800" height="831"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Create&lt;/strong&gt;. Select your resource group. and give the virtual network a &lt;strong&gt;name&lt;/strong&gt;. Take the defaults for other parameters, select &lt;strong&gt;Review + create&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%2F0aoymwoiulxi5go1pna9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0aoymwoiulxi5go1pna9.png" alt="AZ" width="747" height="915"&gt;&lt;/a&gt;&lt;br&gt;
Then &lt;strong&gt;Create&lt;/strong&gt;. Wait for the resource to deploy.&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%2Fuy23lonx5l23rvdnwtus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy23lonx5l23rvdnwtus.png" alt="AZ" width="800" height="355"&gt;&lt;/a&gt;&lt;br&gt;
Select Go to &lt;strong&gt;resource&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%2Fhc312suuv6gggmeyshgi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc312suuv6gggmeyshgi.png" alt="AZ" width="800" height="368"&gt;&lt;/a&gt;&lt;br&gt;
In the &lt;strong&gt;Settings&lt;/strong&gt; section, select the &lt;strong&gt;Subnets&lt;/strong&gt; blade. Select the &lt;strong&gt;default&lt;/strong&gt; subnet. In the &lt;strong&gt;Service endpoints&lt;/strong&gt; section choose &lt;strong&gt;Microsoft.Storage&lt;/strong&gt; in the &lt;strong&gt;Services&lt;/strong&gt; drop-down. Do not make any other changes. Be sure to &lt;strong&gt;Save&lt;/strong&gt; your changes.&lt;/p&gt;

&lt;p&gt;The storage account should only be accessed from the virtual network you just created. Learn more about using private storage endpoints..&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%2F4r9qdj86hohptoraiq4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r9qdj86hohptoraiq4w.png" alt="AZ" width="800" height="626"&gt;&lt;/a&gt;&lt;br&gt;
Return to your files storage account.&lt;br&gt;
In the &lt;strong&gt;Security + networking&lt;/strong&gt; section, select the &lt;strong&gt;Networking&lt;/strong&gt; blade.&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%2Fz0pr58rjwv6ikz14tc4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0pr58rjwv6ikz14tc4t.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;br&gt;
Change the &lt;strong&gt;Public network access&lt;/strong&gt; to &lt;strong&gt;Enabled from selected virtual networks&lt;/strong&gt; and &lt;strong&gt;IP addresses&lt;/strong&gt;. In the &lt;strong&gt;Virtual networks&lt;/strong&gt; section, select &lt;strong&gt;Add existing virtual network&lt;/strong&gt;. Select your virtual network and subnet, select &lt;strong&gt;Add&lt;/strong&gt;. Be sure to &lt;strong&gt;Save&lt;/strong&gt; your changes.&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%2Fe23dpxquln7t95nirn48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe23dpxquln7t95nirn48.png" alt="AZ" width="800" height="409"&gt;&lt;/a&gt;&lt;br&gt;
Select the &lt;strong&gt;Storage browser&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;This walkthrough has shown how to provision &lt;strong&gt;shared file storage&lt;/strong&gt; on Azure and lock it down using a &lt;strong&gt;virtual network&lt;/strong&gt;, role-based access, and encryption—turning a basic file share into a secure, manageable service for office environments. By combining correct resource configuration, network isolation, and least-privilege access controls, you reduce exposure to external threats while preserving the performance and collaboration benefits of centralized storage.&lt;br&gt;
To keep the solution resilient, adopt automation for deployment, enable logging and monitoring, and schedule regular reviews of network rules and access policies. These operational practices, together with periodic backups and patching, ensure the environment remains secure and compliant as your organization grows. Implementing the steps in this guide will give your offices a reliable, secure shared storage foundation that scales with your needs.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudstorage</category>
      <category>virtualnetwork</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Steps to Provide private storage for internal company documents</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Fri, 27 Feb 2026 20:29:37 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/steps-to-provide-private-storage-for-internal-company-documents-c87</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/steps-to-provide-private-storage-for-internal-company-documents-c87</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Securing internal company documents is a cornerstone of modern business operations. With sensitive information such as financial records, employee data, and strategic plans at stake, organizations must ensure that storage solutions are both private and compliant. Microsoft Azure offers a robust platform for building secure, scalable, and controlled environments where internal documents can be stored and accessed safely. By following structured steps—ranging from setting up private storage accounts to configuring access policies and encryption—companies can create a reliable system that protects critical data while enabling authorized collaboration. &lt;/p&gt;

&lt;p&gt;This article outlines the essential steps to establish private storage for internal documents on Azure, helping businesses strengthen their information security posture and meet regulatory requirements with confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create a storage account and configure high availability.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br&gt;
Create a storage account for the internal private company documents.&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%2Fq234deswa8puoedjysyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq234deswa8puoedjysyw.png" alt="AZ" width="800" height="338"&gt;&lt;/a&gt;&lt;br&gt;
In the portal, search for and select &lt;strong&gt;Storage accounts&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%2F7cwj30rshq7m0lf0qwg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cwj30rshq7m0lf0qwg6.png" alt="AZ" width="800" height="154"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;+ Create&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%2F8fwzza4o1ngldd6lwzah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fwzza4o1ngldd6lwzah.png" alt="AZ" width="800" height="886"&gt;&lt;/a&gt;&lt;br&gt;
Select the &lt;strong&gt;Resource group&lt;/strong&gt; created in the previous lab. Set the &lt;strong&gt;Storage account name&lt;/strong&gt; to private. Add an identifier to the name to ensure the name is unique. Select &lt;strong&gt;Review&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%2Ftn8fhpdco2rj56taw1ic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftn8fhpdco2rj56taw1ic.png" alt="AZ" width="778" height="927"&gt;&lt;/a&gt;&lt;br&gt;
Then &lt;strong&gt;Create&lt;/strong&gt; the storage account.&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%2Frafi7lvomrtlqbtuh3ta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frafi7lvomrtlqbtuh3ta.png" alt="AZ" width="800" height="309"&gt;&lt;/a&gt;&lt;br&gt;
Wait for the storage account to deploy, and then select &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br&gt;
This storage requires high availability if there’s a regional outage. Read access in the secondary region is not required. Configure the appropriate level of &lt;strong&gt;redundancy&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%2Fdib7xr1jzoirk4jtf2x5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdib7xr1jzoirk4jtf2x5.png" alt="AZ" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
In the storage account, in the &lt;strong&gt;Data management&lt;/strong&gt; section, select the &lt;strong&gt;Redundancy&lt;/strong&gt; blade. Ensure &lt;strong&gt;Geo-redundant storage (GRS)&lt;/strong&gt; is selected. &lt;strong&gt;Refresh&lt;/strong&gt; the page. Review the &lt;strong&gt;primary and secondary&lt;/strong&gt; location information. &lt;strong&gt;Save&lt;/strong&gt; your changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Create a storage container, upload a file, and restrict access to the file.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br&gt;
Create a private storage container for the corporate data.&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%2Fl6q511rif76smt9u4r65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6q511rif76smt9u4r65.png" alt="AZ" width="800" height="376"&gt;&lt;/a&gt;&lt;br&gt;
In the storage account, in the &lt;strong&gt;Data storage&lt;/strong&gt; section, select the &lt;strong&gt;Containers&lt;/strong&gt; blade. Select &lt;strong&gt;+ Container&lt;/strong&gt;. Ensure the &lt;strong&gt;Name&lt;/strong&gt; of the container is e.g. &lt;strong&gt;privatect06&lt;/strong&gt;. Ensure the &lt;strong&gt;Public access level **is **Private (no anonymous access)&lt;/strong&gt;. As you have time, review the &lt;strong&gt;Advanced&lt;/strong&gt; settings, but take the defaults. Select Create.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br&gt;
For testing, upload a file to the &lt;strong&gt;private&lt;/strong&gt; container. he 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;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%2Ffwjex9rgtnvel4j7fa0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwjex9rgtnvel4j7fa0k.png" alt="Azure" width="800" height="218"&gt;&lt;/a&gt;&lt;br&gt;
Select the container.&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%2Fkclb4kay3lidh6pq8d69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkclb4kay3lidh6pq8d69.png" alt="AZ" width="800" height="386"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Upload&lt;/strong&gt;. &lt;strong&gt;Browse to files&lt;/strong&gt; and select a file.&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%2Fx088xp3kqx392jmhvyjv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx088xp3kqx392jmhvyjv.png" alt="AZ" width="800" height="219"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Upload&lt;/strong&gt; the file.&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%2Fwqehul3hqke73svhidd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqehul3hqke73svhidd3.png" alt="AZ" width="800" height="365"&gt;&lt;/a&gt;&lt;br&gt;
Select the uploaded file. On the &lt;strong&gt;Overview&lt;/strong&gt; tab, copy the &lt;strong&gt;URL&lt;/strong&gt;. Paste the &lt;strong&gt;URL&lt;/strong&gt; into a new browser tab. Verify the file doesn’t display and you receive an error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;br&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;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%2Flfkr4il8a1vzsal871ge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfkr4il8a1vzsal871ge.png" alt="AZ" width="800" height="350"&gt;&lt;/a&gt;&lt;br&gt;
Select your uploaded blob file and move to the &lt;strong&gt;Generate SAS&lt;/strong&gt; tab.&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%2Fo52n1j00vcxk68accvy7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo52n1j00vcxk68accvy7.png" alt="AZ" width="800" height="365"&gt;&lt;/a&gt;&lt;br&gt;
In the &lt;strong&gt;Permissions&lt;/strong&gt; drop-down, ensure the partner has only &lt;strong&gt;Read&lt;/strong&gt; permissions. Verify the &lt;strong&gt;Start and expiry date/time&lt;/strong&gt; is for the next 24 hours. Select &lt;strong&gt;Generate SAS token and URL&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%2Fin1rz5wdoifdrh11wnta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fin1rz5wdoifdrh11wnta.png" alt="AZ" width="800" height="360"&gt;&lt;/a&gt;&lt;br&gt;
Copy the &lt;strong&gt;Blob SAS URL&lt;/strong&gt; to a new browser tab. Verify you can access the file. If you have uploaded an image file it will display in the browser. Other file types will be downloaded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Configure storage access tiers and content replication.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br&gt;
To save on costs, after 30 days, move blobs from the hot tier to the cool tier. &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%2Fb0bfa6qp96xm8sycxek1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0bfa6qp96xm8sycxek1.png" alt="AZ" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
Return to the storage account.&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%2F175i5je3vuc5a6nw9z9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F175i5je3vuc5a6nw9z9q.png" alt="AZ" width="800" height="371"&gt;&lt;/a&gt;&lt;br&gt;
In the &lt;strong&gt;Overview&lt;/strong&gt; section, notice the &lt;strong&gt;Default access tier&lt;/strong&gt; is set to &lt;strong&gt;Hot&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%2Fh9oji1nop6fg427cz8wi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9oji1nop6fg427cz8wi.png" alt="AZ" width="800" height="444"&gt;&lt;/a&gt;&lt;br&gt;
In the &lt;strong&gt;Data management&lt;/strong&gt; section, select the &lt;strong&gt;Lifecycle management&lt;/strong&gt; blade. Select &lt;strong&gt;Add rule&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%2Fa2jpxdtk5aph9o1zhkwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2jpxdtk5aph9o1zhkwa.png" alt="AZ" width="800" height="527"&gt;&lt;/a&gt;&lt;br&gt;
Set the &lt;strong&gt;Rule name&lt;/strong&gt; to &lt;strong&gt;movetocool&lt;/strong&gt;. Set the &lt;strong&gt;Rule scope&lt;/strong&gt; to &lt;strong&gt;Apply rule to all blobs in the storage account&lt;/strong&gt;. Select &lt;strong&gt;Next&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%2F8urs37mrqtrlqg844pcs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8urs37mrqtrlqg844pcs.png" alt="AZ" width="800" height="540"&gt;&lt;/a&gt;&lt;br&gt;
Ensure &lt;strong&gt;Last modified&lt;/strong&gt; is selected. Set &lt;strong&gt;More than (days ago)&lt;/strong&gt; to &lt;strong&gt;30&lt;/strong&gt;. In the &lt;strong&gt;Then&lt;/strong&gt; drop-down select &lt;strong&gt;Move to cool storage&lt;/strong&gt;. As you have time, review other lifecycle options in the drop-down. Add the &lt;strong&gt;rule&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br&gt;
The public website files need to be backed up to another storage account.&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%2F5rpw03ztghdav1k8pebz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rpw03ztghdav1k8pebz.png" alt="AZ" width="800" height="519"&gt;&lt;/a&gt;&lt;br&gt;
In your storage account, &lt;strong&gt;create&lt;/strong&gt; a new container called &lt;strong&gt;backup&lt;/strong&gt;. Use the default values. Refer back to Lab 02a if you need detailed instructions.&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%2Fthtws7e9vtu1xjlyicny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthtws7e9vtu1xjlyicny.png" alt="AZ" width="800" height="364"&gt;&lt;/a&gt;&lt;br&gt;
Navigate to your  &lt;strong&gt;publicwebsite&lt;/strong&gt; (you could create a new one or any previous storage created before) storage account. In the &lt;strong&gt;Data management&lt;/strong&gt; section, select the &lt;strong&gt;Object replication&lt;/strong&gt; blade. Select &lt;strong&gt;Create replication rules&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%2Fck8thmhmgky9l3rkakkz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fck8thmhmgky9l3rkakkz.png" alt="AZ" width="800" height="465"&gt;&lt;/a&gt;&lt;br&gt;
Set the &lt;strong&gt;Destination storage account&lt;/strong&gt; to the &lt;strong&gt;private&lt;/strong&gt; storage account. Set the &lt;strong&gt;Source container&lt;/strong&gt; to public and the &lt;strong&gt;Destination container&lt;/strong&gt; to &lt;strong&gt;backup&lt;/strong&gt;. &lt;strong&gt;Create&lt;/strong&gt; the replication rule. Optionally, as you have time, upload a file to the &lt;strong&gt;public&lt;/strong&gt; container. Return to the &lt;strong&gt;private&lt;/strong&gt; storage account and refresh the &lt;strong&gt;backup&lt;/strong&gt; container. Within a few minutes your public website file will appear in the backup folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Establishing private storage for internal company documents on Azure is more than a technical exercise—it is a strategic investment in organizational security and resilience. By carefully configuring storage accounts, enforcing encryption, applying role-based access controls, and leveraging private endpoints, businesses can create a secure environment that protects sensitive information from unauthorized access. Beyond compliance, this approach fosters trust among employees and stakeholders, ensuring that critical data remains both accessible and safeguarded. As companies continue to embrace digital transformation, Azure’s private storage solutions provide a scalable and reliable foundation for managing internal documents with confidence and peace of mind.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>azure</category>
      <category>storage</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Deploying Ubuntu CLI Instance on AWS EC2: A Step-by-Step Walkthrough</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Thu, 26 Feb 2026 13:54:09 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/deploying-ubuntu-cli-instance-on-aws-ec2-a-step-by-step-walkthrough-kbk</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/deploying-ubuntu-cli-instance-on-aws-ec2-a-step-by-step-walkthrough-kbk</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Cloud computing has transformed from a luxury for tech giants into a fundamental playground for developers and enthusiasts alike. Whether you're looking to host a web application, run automated scripts, or simply tinker with a powerful Linux environment, Amazon Web Services (AWS) provides the industry-standard infrastructure to make it happen.&lt;/p&gt;

&lt;p&gt;At the heart of this infrastructure is Amazon EC2 (Elastic Compute Cloud), a service that lets you launch virtual servers in minutes. When paired with Ubuntu, arguably the most popular and user-friendly Linux distribution for servers, you get a robust, secure, and highly flexible environment managed entirely through the Command Line Interface (CLI).&lt;/p&gt;

&lt;p&gt;In this walkthrough, we’ll skip the fluff and dive straight into the technical process of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provisioning a fresh Ubuntu instance within the AWS Free Tier.&lt;/li&gt;
&lt;li&gt;Connecting to your server from your local machine using SSH.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step  1: Access the EC2 Dashboard&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%2Fxxmik7ory53tlq4i29wi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxmik7ory53tlq4i29wi.png" alt="AWS" width="800" height="355"&gt;&lt;/a&gt;&lt;br&gt;
Log in to your &lt;strong&gt;AWS Management Console&lt;/strong&gt;.In the top search bar, type &lt;strong&gt;"EC2"&lt;/strong&gt; and select the &lt;strong&gt;EC2&lt;/strong&gt; service from the dropdown. Click on &lt;strong&gt;Dashboard&lt;/strong&gt; under the top features to view your current resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Navigate to Running Instances&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%2F0nuveaf3nx9oy6henqpr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nuveaf3nx9oy6henqpr.png" alt="AWS" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
On the EC2 Dashboard, locate the &lt;strong&gt;Resources&lt;/strong&gt; section. Click on &lt;strong&gt;Instances (running)&lt;/strong&gt; to view your active virtual servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Initialize Instance Launch&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%2F3n2b1ja6kst5ibl29voc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n2b1ja6kst5ibl29voc.png" alt="AWS" width="800" height="358"&gt;&lt;/a&gt;&lt;br&gt;
In the Instances window, click the orange &lt;strong&gt;Launch instances&lt;/strong&gt; button located in the top right corner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Configure Name and Tags&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%2Fqcntpjp4t3nmmdqs8mu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcntpjp4t3nmmdqs8mu5.png" alt="AWS" width="800" height="451"&gt;&lt;/a&gt;&lt;br&gt;
Under the &lt;strong&gt;Name and tags&lt;/strong&gt; section, provide a name for your server. In the &lt;strong&gt;Value&lt;/strong&gt; field, enter a name like &lt;strong&gt;"AWSVNEC2"&lt;/strong&gt;.&lt;br&gt;
Ensure the &lt;strong&gt;Resource types&lt;/strong&gt; include &lt;strong&gt;Instances&lt;/strong&gt; to apply this tag correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Select the Ubuntu OS&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%2Fxmff4cpvc7sz0ej9zyti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmff4cpvc7sz0ej9zyti.png" alt="AWS" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
In the &lt;strong&gt;Application and OS Images&lt;/strong&gt; section, select &lt;strong&gt;Ubuntu&lt;/strong&gt; from the Quick Start icons. From the dropdown menu, select &lt;strong&gt;Ubuntu Server 24.04 LTS (HVM)&lt;/strong&gt;. Look for the &lt;strong&gt;Free tier eligible&lt;/strong&gt; label to ensure you aren't charged for the software image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Choose Instance Type&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%2Frbkqpnqh8vc68w2777le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbkqpnqh8vc68w2777le.png" alt="AWS" width="800" height="444"&gt;&lt;/a&gt;&lt;br&gt;
In the Instance type section, select &lt;strong&gt;t3.micro&lt;/strong&gt; (or &lt;strong&gt;t2.micro&lt;/strong&gt;). Verify it is marked as &lt;strong&gt;Free tier eligible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Create a Security Key Pair&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%2Fih2vdfq2wp8gn4p3myi3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih2vdfq2wp8gn4p3myi3.png" alt="AWS" width="800" height="465"&gt;&lt;/a&gt;&lt;br&gt;
Click &lt;strong&gt;Create new key pair&lt;/strong&gt; to open the setup window. &lt;strong&gt;Key pair name:&lt;/strong&gt; Enter a name like &lt;strong&gt;"awsvmec2key"&lt;/strong&gt;. Key pair type: Select &lt;strong&gt;RSA&lt;/strong&gt;. &lt;strong&gt;Private key file format&lt;/strong&gt;: Select .&lt;strong&gt;pem&lt;/strong&gt;. Click &lt;strong&gt;Create key pair&lt;/strong&gt; to download the file to your computer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Network and Storage Settings&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%2Fwbqioc4dmjp0io6ylhmt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbqioc4dmjp0io6ylhmt.png" alt="AWS" width="800" height="544"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhaqtrdr1e0pabdbam3ev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhaqtrdr1e0pabdbam3ev.png" alt="AWS" width="800" height="582"&gt;&lt;/a&gt;&lt;br&gt;
Under &lt;strong&gt;Network settings&lt;/strong&gt;, ensure &lt;strong&gt;Create security group&lt;/strong&gt; is selected and &lt;strong&gt;Allow SSH traffic from Anywhere (0.0.0.0/0)&lt;/strong&gt; is checked.&lt;br&gt;
Under &lt;strong&gt;Configure storage&lt;/strong&gt;, keep the default &lt;strong&gt;8 GiB&lt;/strong&gt; of &lt;strong&gt;gp3&lt;/strong&gt; root volume, which is well within the 30 GB free tier limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9: Launch and Review&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%2F5w1zfwkxkyz3gqwcxpb5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5w1zfwkxkyz3gqwcxpb5.png" alt="AWS" width="800" height="402"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuggz8lpm5bv29n0dkewm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuggz8lpm5bv29n0dkewm.png" alt="AWS" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Review the &lt;strong&gt;Summary&lt;/strong&gt; panel on the right. Click the orange &lt;strong&gt;Launch instance&lt;/strong&gt; button. Once you see the green &lt;strong&gt;Success&lt;/strong&gt; banner, click the &lt;strong&gt;Connect to instance&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Access the CLI&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%2Fvnyyry4qb4f2pqjam06e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnyyry4qb4f2pqjam06e.png" alt="AWS" width="800" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcmat1os7c4ko4ty2r36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcmat1os7c4ko4ty2r36.png" alt="AWS" width="800" height="355"&gt;&lt;/a&gt;&lt;br&gt;
On the &lt;strong&gt;Connect to instance&lt;/strong&gt; page, select the &lt;strong&gt;EC2 Instance Connect&lt;/strong&gt; tab. Ensure the username is &lt;strong&gt;"ubuntu"&lt;/strong&gt; and click &lt;strong&gt;Connect&lt;/strong&gt;.&lt;br&gt;
A new browser window will open, providing a direct terminal interface to your live Ubuntu server.&lt;/p&gt;

&lt;p&gt;In conclusion, deploying an Ubuntu instance on AWS EC2 is a straightforward process that provides a powerful, scalable environment for your projects. By successfully navigating the AWS Console, configuring your machine specifications, and securing your access with a private key pair, you have laid the foundation for professional cloud computing.&lt;/p&gt;

&lt;p&gt;With your instance now active and accessible via the CLI, you are ready to install software, host applications, and explore the full potential of the Linux ecosystem in the cloud.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>virtualmachine</category>
      <category>web</category>
    </item>
    <item>
      <title>A Step‑by‑Step Guide to Creating a Windows Server 2025 Virtual Machine in Azure</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Sat, 21 Feb 2026 12:19:44 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/a-step-by-step-guide-to-creating-a-windows-server-2025-virtual-machine-in-azure-md6</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/a-step-by-step-guide-to-creating-a-windows-server-2025-virtual-machine-in-azure-md6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you’ve ever felt like the Azure Portal looks more like a cockpit than a website, you’re not alone. We’ve all been there—staring at a dozen menus and wondering which button actually does what. But here’s the good news: deploying your first Windows Server 2025 VM is much easier than it looks.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;gt; "Windows Server 2025 isn't just an incremental update; it’s a bridge between traditional on-premises reliability and the hyper-scalability of the modern cloud".&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Windows Server 2025 is the newest powerhouse in Microsoft's lineup, featuring faster storage, tighter security, and a much smoother hybrid-cloud experience. While it represents the "cutting edge," you don't need to be a veteran systems administrator to get it up and running.&lt;/p&gt;

&lt;p&gt;I’ve put this guide together to be the resource I wish I had when I first started. We’re going to skip the jargon and focus on the "why" and "how." By the end of this article, you won't just have a VM running in the cloud—you'll actually understand the settings that got you there.&lt;/p&gt;

&lt;p&gt;I’ve put this guide together to be the resource I wish I had when I first started. We’re going to skip the jargon and focus on the "why" and "how." By the end of this article, you won't just have a VM running in the cloud—you'll actually understand the settings that got you there.&lt;/p&gt;

&lt;p&gt;Let’s dive in and get your first cloud server live!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&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%2Fzfidcxhhmib4dlj3vvfp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfidcxhhmib4dlj3vvfp.png" alt="VM" width="800" height="334"&gt;&lt;/a&gt;&lt;br&gt;
Type &lt;strong&gt;virtual machine&lt;/strong&gt; into the search bar. Select &lt;strong&gt;Virtual machines&lt;/strong&gt; from the services list to head to the compute dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&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%2Ftmdizlyy2h9lmyj2bu3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmdizlyy2h9lmyj2bu3a.png" alt="VM" width="800" height="372"&gt;&lt;/a&gt;&lt;br&gt;
Click the &lt;strong&gt;+ Create&lt;/strong&gt; button in the top-left corner. Choose Azure &lt;strong&gt;virtual machine&lt;/strong&gt; from the dropdown menu. This opens the main configuration form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&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%2Faizqxqvsrs3pfdqjyp33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faizqxqvsrs3pfdqjyp33.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Resource Group&lt;/strong&gt;: Click &lt;strong&gt;Create new&lt;/strong&gt; and name it &lt;strong&gt;(e.g., VmResGp)&lt;/strong&gt;. Think of this as a folder for all your project's files. &lt;strong&gt;Virtual machine name&lt;/strong&gt;: Give your server a unique name like &lt;strong&gt;MyAzureVM&lt;/strong&gt;. &lt;strong&gt;Region:&lt;/strong&gt; Select a location close to you &lt;strong&gt;(e.g., South Africa North)&lt;/strong&gt; to reduce lag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&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%2Fn1p3t7ms2m2b0wmludj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1p3t7ms2m2b0wmludj0.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
Now we choose the "brain" and the "muscle" of the server. &lt;strong&gt;Image:&lt;/strong&gt; Select &lt;strong&gt;Windows Server 2025 Datacenter: Azure Edition&lt;/strong&gt;. &lt;strong&gt;Size&lt;/strong&gt;: For a balance of performance and cost, a size like &lt;strong&gt;Standard_D2s_v3&lt;/strong&gt; or &lt;strong&gt;Standard_DS1_v2&lt;/strong&gt; is perfect for beginners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;br&gt;
You wouldn't leave your front door unlocked; the same applies here.&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%2F2rutdx2ob783j6kx4r8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rutdx2ob783j6kx4r8b.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Administrator account:&lt;/strong&gt; Create a username &lt;strong&gt;(like AzureUser)&lt;/strong&gt; and a &lt;strong&gt;strong password&lt;/strong&gt;. Keep these safe! You'll need them to log in later.&lt;br&gt;
&lt;strong&gt;Inbound port rules&lt;/strong&gt;: To actually see your server's desktop, ensure &lt;strong&gt;RDP (3389)&lt;/strong&gt; and &lt;strong&gt;HTTP (80)&lt;/strong&gt; are selected. This allows you to connect remotely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&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%2F18s31nvb3d0dd9kblysf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18s31nvb3d0dd9kblysf.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Monitoring:&lt;/strong&gt; Under the &lt;strong&gt;Monitoring&lt;/strong&gt; tab, you can set &lt;strong&gt;Boot diagnostics&lt;/strong&gt; to "&lt;strong&gt;Disable&lt;/strong&gt;" for a simple lab setup to save on storage costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&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%2Fsfw44mglssgxf251abdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfw44mglssgxf251abdy.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Tags&lt;/strong&gt;: Use the "&lt;strong&gt;Tags&lt;/strong&gt;" tab to label your resources. For example, set a tag for &lt;strong&gt;Department: IT&lt;/strong&gt; or &lt;strong&gt;Staff: [Your Name]&lt;/strong&gt;. This is a lifesaver for tracking costs later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;&lt;br&gt;
Almost there! Azure will now double-check your settings.&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%2F7brjw3akhrsuaxm41skz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7brjw3akhrsuaxm41skz.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
Click &lt;strong&gt;Review + create&lt;/strong&gt;. Azure will run a "&lt;strong&gt;Validation&lt;/strong&gt;" to make sure your settings are compatible. Once you see the green "&lt;strong&gt;Validation passed&lt;/strong&gt;" checkmark, click the big blue &lt;strong&gt;Create&lt;/strong&gt; button at the bottom.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt;&lt;br&gt;
Once the deployment is complete, click Go to resource to open your VM’s overview page.&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%2Fwca9rwic8fgpdemrfghg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwca9rwic8fgpdemrfghg.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
On the VM Overview page, you will see your &lt;strong&gt;Primary NIC public IP&lt;/strong&gt; (e.g., 4.222.232.95).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10&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%2Ffrvm8nh5hnavlfm53y7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrvm8nh5hnavlfm53y7c.png" alt="VM" width="800" height="773"&gt;&lt;/a&gt;&lt;br&gt;
Click the &lt;strong&gt;Connect&lt;/strong&gt; button at the top and select &lt;strong&gt;Connect&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%2Fbm3psxa90tqxbx2zyvjl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm3psxa90tqxbx2zyvjl.png" alt="VM" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
Under the &lt;strong&gt;Native RDP&lt;/strong&gt; section, click the &lt;strong&gt;Download RDP file&lt;/strong&gt; button.&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%2Fj7yw9ufztf1p82ndpvj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7yw9ufztf1p82ndpvj2.png" alt="VM" width="800" height="742"&gt;&lt;/a&gt;&lt;br&gt;
Locate the downloaded file in your browser and click &lt;strong&gt;Open&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11&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%2Fj4tribiu79wfhjejepem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4tribiu79wfhjejepem.png" alt="VM" width="510" height="447"&gt;&lt;/a&gt;&lt;br&gt;
A Windows Security prompt will appear. Enter the &lt;strong&gt;password&lt;/strong&gt; you created in Step 5 for the user &lt;strong&gt;AzureUser&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%2Fro1lix5zhfa5pgbb6hrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fro1lix5zhfa5pgbb6hrl.png" alt="VM" width="411" height="463"&gt;&lt;/a&gt;&lt;br&gt;
If you see a certificate warning stating "The identity of the remote computer cannot be verified," simply click &lt;strong&gt;Yes&lt;/strong&gt; to proceed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12&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%2Foldgdatnkcd362511u0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foldgdatnkcd362511u0k.png" alt="VM" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcazj2ex0a8mxi92qu0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcazj2ex0a8mxi92qu0k.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
You are now logged into your Windows Server 2025 instance! You can verify the version by going to &lt;strong&gt;Settings &amp;gt; System &amp;gt; About&lt;/strong&gt;, where you’ll see the &lt;strong&gt;Windows Server 2025 Datacenter Azure Edition&lt;/strong&gt; branding and the version &lt;strong&gt;24H2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Congratulations!&lt;/strong&gt; You’ve successfully navigated the Azure landscape to deploy, configure, and log into your very own Windows Server 2025 instance.&lt;br&gt;
By following these steps, you’ve done more than just "&lt;strong&gt;click buttons&lt;/strong&gt;"—you’ve provisioned enterprise-grade hardware in the cloud, managed secure networking, and explored the latest operating system Microsoft has to offer. Whether you’re using this VM as a sandbox for testing new features or as the first brick in a larger infrastructure project, you now have the foundational skills to scale up whenever you're ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Cleanup Tip&lt;/strong&gt;&lt;br&gt;
Since this is a cloud environment, remember that costs are billed based on the time the VM is running. To keep your credits safe:&lt;/p&gt;

&lt;p&gt;Stop the VM in the Azure Portal when you aren't using it.&lt;/p&gt;

&lt;p&gt;Check that the status says "&lt;strong&gt;Deallocated&lt;/strong&gt;" to ensure you aren't being charged for compute resources.&lt;/p&gt;

&lt;p&gt;You’re now officially a cloud practitioner. Keep exploring, stay curious, and enjoy the power of Windows Server 2025!&lt;/p&gt;

</description>
      <category>virtualmachine</category>
      <category>azure</category>
      <category>infrastructure</category>
      <category>devops</category>
    </item>
    <item>
      <title>Provide storage for the public website to Keep Our Worldwide Customers' Content Fast, Versioned, and Recoverable</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Thu, 19 Feb 2026 22:52:09 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/creating-resilient-blob-storage-to-keep-our-worldwide-customers-content-fast-versioned-and-2h2g</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/creating-resilient-blob-storage-to-keep-our-worldwide-customers-content-fast-versioned-and-2h2g</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As our company website continues to grow rapidly, serving customers worldwide with essential product images, videos, marketing literature, and customer success stories, I knew we needed a reliable, high-performance storage solution. This content is truly mission-critical: it must load quickly with low latency no matter where users are, and we can't risk permanent data loss from accidental deletions or overwrites during frequent updates.&lt;br&gt;
To address these needs head-on, I completed a hands-on skilling exercise in Azure to build a robust Blob Storage setup from scratch. Specifically, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Created a storage account configured for high availability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enabled anonymous public access for seamless global delivery&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set up a dedicated blob container for all website documents&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activated soft delete to allow easy recovery of accidentally deleted files&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turned on blob versioning to automatically track and restore previous document versions&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This configuration ensures fast, public access for our global audience, built-in protection against human error, and full history tracking for every asset—perfect for scaling without worry.&lt;br&gt;
In the steps below, I'll walk you through exactly what I did in the Azure portal including the key choices I made and why they matter for a growing international website like ours.&lt;/p&gt;

&lt;p&gt;Here's the step-by-step guide I followed with images:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Creating the high-availability storage account.
&lt;/h2&gt;

&lt;p&gt;This storage requires high availability if there’s a regional outage. Additionally, i will enable read access to the secondary region.&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%2Flhuyimy2jdklg8kpo2w8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhuyimy2jdklg8kpo2w8.png" alt="create storage" width="800" height="469"&gt;&lt;/a&gt;&lt;br&gt;
In the portal, search for and select &lt;strong&gt;Storage accounts&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%2Flcrgl5qb4fg17g9bckqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcrgl5qb4fg17g9bckqu.png" alt="creating storage" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
Select + &lt;strong&gt;Create&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%2Fzkvlau7xa9gettoth0qm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkvlau7xa9gettoth0qm.png" alt="res group" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; For &lt;strong&gt;resource group&lt;/strong&gt; select &lt;strong&gt;new&lt;/strong&gt;. Give your resource group a &lt;strong&gt;name&lt;/strong&gt; and select &lt;strong&gt;OK&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set the Storage account name&lt;/strong&gt; to &lt;strong&gt;01pbcwebsite&lt;/strong&gt;. Make sure the storage account name is unique by adding an identifier.&lt;/li&gt;
&lt;li&gt;Take the defaults for other settings.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qgl425p0jk9r2kn86w2.png" alt="create" width="800" height="539"&gt;
Select &lt;strong&gt;Review&lt;/strong&gt; and then &lt;strong&gt;Create&lt;/strong&gt;.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0imids55eimpc8sxudd.png" alt="resources" width="800" height="544"&gt;
Wait for the storage account to deploy, and then select &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Enabled anonymous public access for seamless global delivery.
&lt;/h2&gt;

&lt;p&gt;Information on the public website should be accessible without requiring customers to login.&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%2Fo5962llwv18777jb81el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5962llwv18777jb81el.png" alt="Redundancy" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
In the storage account, in the &lt;strong&gt;Data management&lt;/strong&gt; section, select the &lt;strong&gt;Redundancy&lt;/strong&gt; blade.&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%2F7cpjoyws0e23ewavzkzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cpjoyws0e23ewavzkzk.png" alt="red" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
Ensure &lt;strong&gt;Read-access Geo-redundant storage&lt;/strong&gt; is selected. &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%2Fomjlwzeh3tqx15tz3mg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fomjlwzeh3tqx15tz3mg6.png" alt="global" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
Review the primary and secondary location information.&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%2Fsyh2e6eptbfp2fspfmha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyh2e6eptbfp2fspfmha.png" alt="settings" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
In the storage account, in the &lt;strong&gt;Settings&lt;/strong&gt; section, select the &lt;strong&gt;Configuration&lt;/strong&gt; blade. Ensure the &lt;strong&gt;Allow blob anonymous access&lt;/strong&gt; setting is &lt;strong&gt;Enabled&lt;/strong&gt;. Be sure to &lt;strong&gt;Save&lt;/strong&gt; your changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Set up a dedicated blob container for all website documents
&lt;/h2&gt;

&lt;p&gt;Since the public website has various images and documents, we need to create a storage container for the contents. Also customers should be able to view the images without being authenticated. I will configure anonymous read access for the public container blobs. For testing, i will  upload a file to the public container. The type of file doesn’t matter. A small image or text file is a good choice.&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%2Foqkp6xnv27pkncyszi7q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqkp6xnv27pkncyszi7q.png" alt="Container" width="800" height="768"&gt;&lt;/a&gt;&lt;br&gt;
In your storage account, in the &lt;strong&gt;Data storage&lt;/strong&gt; section, select the &lt;strong&gt;Containers&lt;/strong&gt; blade. Select &lt;strong&gt;+ Container&lt;/strong&gt;. Ensure the &lt;strong&gt;Name&lt;/strong&gt; of the container is &lt;strong&gt;public&lt;/strong&gt;. Select &lt;strong&gt;Create.&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%2Fzfcy55uy5ney21mvjqr0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfcy55uy5ney21mvjqr0.png" alt="public" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Select your &lt;strong&gt;public&lt;/strong&gt; container.&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%2Fxr95wzqbph1nc1bbceb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxr95wzqbph1nc1bbceb4.png" alt="overview" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
On the &lt;strong&gt;Overview&lt;/strong&gt; blade, select &lt;strong&gt;Change access level&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%2Fo2bavc4jh286h66vtf06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2bavc4jh286h66vtf06.png" alt="change access level" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Ensure the &lt;strong&gt;Public access level&lt;/strong&gt; is &lt;strong&gt;Blob (anonymous read access for blobs only)&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%2Fescxji3xtcw2xl638c0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fescxji3xtcw2xl638c0g.png" alt="ok" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;OK&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%2F16k4u8gdnfrit8ob3y2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16k4u8gdnfrit8ob3y2c.png" alt="upload" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Ensure you are viewing your container. Select &lt;strong&gt;Upload&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%2F0v42bmcw5ao18rcokj6u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v42bmcw5ao18rcokj6u.png" alt="upload 2" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Browse to files&lt;/strong&gt; and Browse to a file of your choice. Select &lt;strong&gt;Open&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%2F9p59kony7yikgl0vl48y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p59kony7yikgl0vl48y.png" alt="upload 3" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Upload&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%2Fu4f113ngvuz8qg6zinvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4f113ngvuz8qg6zinvq.png" alt="refresh" width="800" height="702"&gt;&lt;/a&gt;&lt;br&gt;
Close the upload window, &lt;strong&gt;Refresh&lt;/strong&gt; the page and ensure your file was uploaded.&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%2Fausovvu2pg8dgp6i2xs5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fausovvu2pg8dgp6i2xs5.png" alt="yoo" width="800" height="349"&gt;&lt;/a&gt;&lt;br&gt;
Select your uploaded file. On the &lt;strong&gt;Overview&lt;/strong&gt; tab, copy the &lt;strong&gt;URL&lt;/strong&gt;.Paste the URL into a new browser tab.&lt;br&gt;
If you have uploaded an image file it will display in the browser. Other file types should be downloaded.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Activated soft delete to allow easy recovery of accidentally deleted files
&lt;/h2&gt;

&lt;p&gt;It’s important that the website documents can be restored if they’re deleted. during this project i Configured blob soft delete for 21 days. Also i did a test to confirm if the configurations work.&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%2Fmt90tl54eaqywfezdrpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmt90tl54eaqywfezdrpa.png" alt="blob service" width="800" height="429"&gt;&lt;/a&gt;&lt;br&gt;
Go to the &lt;strong&gt;Overview&lt;/strong&gt; blade of the &lt;strong&gt;storage account&lt;/strong&gt;. On the &lt;strong&gt;Properties&lt;/strong&gt; page, locate the &lt;strong&gt;Blob service&lt;/strong&gt; section. Select the &lt;strong&gt;Blob soft delete&lt;/strong&gt; setting.&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%2Fghk6nbolpfi7dcgc1cnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fghk6nbolpfi7dcgc1cnn.png" alt="21 days" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure the &lt;strong&gt;Enable soft delete for blobs&lt;/strong&gt; is &lt;strong&gt;checked&lt;/strong&gt;.&lt;br&gt;
Change the &lt;strong&gt;Keep deleted blobs for (in days)&lt;/strong&gt; setting to &lt;strong&gt;21&lt;/strong&gt;.&lt;br&gt;
Notice you can also &lt;strong&gt;Enable soft delete for containers&lt;/strong&gt;.&lt;br&gt;
Don’t forget to &lt;strong&gt;Save&lt;/strong&gt; your changes.&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%2Frjfexq938wu3kgxmv5or.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjfexq938wu3kgxmv5or.png" alt="delete" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
Navigate to your container where you uploaded a file. Select the file you uploaded and then select &lt;strong&gt;Delete&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%2Fthkzpg70vm5u1zinpwy1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthkzpg70vm5u1zinpwy1.png" alt="okay" width="800" height="425"&gt;&lt;/a&gt;&lt;br&gt;
Select &lt;strong&gt;Delete&lt;/strong&gt; to confirm deleting the file.&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%2Fwjpnyrlszywlzmhvtyvv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjpnyrlszywlzmhvtyvv.png" alt="slider" width="800" height="345"&gt;&lt;/a&gt;&lt;br&gt;
On the container &lt;strong&gt;Overview&lt;/strong&gt; page, toggle the slider &lt;strong&gt;Show deleted blobs&lt;/strong&gt;. This toggle is to the right of the search box.&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%2F0b2u9uh4pgctmgrlyzpq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b2u9uh4pgctmgrlyzpq.png" alt="undelete" width="800" height="307"&gt;&lt;/a&gt;&lt;br&gt;
Select your deleted file, and use the ellipses on the far right, to &lt;strong&gt;Undelete&lt;/strong&gt; the file.&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%2F354nfmfegvhopwtvicf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F354nfmfegvhopwtvicf6.png" alt="restored" width="800" height="324"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Refresh&lt;/strong&gt; the container and confirm the file has been restored.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Turned on blob versioning to automatically track and restore previous document versions.
&lt;/h2&gt;

&lt;p&gt;It’s important to keep track of the different website product document versions.&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%2Fyuy5jvhq3zvgec4ybfqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyuy5jvhq3zvgec4ybfqy.png" alt="blob" width="800" height="393"&gt;&lt;/a&gt;&lt;br&gt;
Go to the &lt;strong&gt;Overview&lt;/strong&gt; blade of the &lt;strong&gt;storage account&lt;/strong&gt;. In the &lt;strong&gt;Properties&lt;/strong&gt; section, locate the &lt;strong&gt;Blob service&lt;/strong&gt; section. Select the &lt;strong&gt;Versioning&lt;/strong&gt; setting.&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%2F3udojo11fwu24773fo8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3udojo11fwu24773fo8k.png" alt="enable" width="800" height="412"&gt;&lt;/a&gt;&lt;br&gt;
Ensure the &lt;strong&gt;Enable versioning for blobs&lt;/strong&gt; checkbox is checked.&lt;br&gt;
Notice your options to &lt;strong&gt;keep all versions&lt;/strong&gt; or &lt;strong&gt;delete versions after&lt;/strong&gt;.&lt;br&gt;
Don’t forget to &lt;strong&gt;Save&lt;/strong&gt; your changes.&lt;/p&gt;

&lt;p&gt;In conclusion, by completing this hands-on Azure skilling project, I successfully built a high-availability Blob Storage solution that perfectly supports our rapidly expanding global company website. With geo-redundant storage ensuring reliable uptime, anonymous public access enabling fast low-latency delivery of product images, videos, marketing literature, and customer success stories to users worldwide, a dedicated container for organized assets, soft delete for quick recovery from accidental deletions, and blob versioning to preserve full document history, we've created a resilient, scalable foundation that directly addresses our mission-critical content needs. This straightforward yet powerful setup in the Azure portal delivers both performance and peace of mind as demand continues to grow—proving that thoughtful configuration can protect against human error while powering seamless global access. If you're handling similar web assets, I strongly encourage trying these features yourself. &lt;br&gt;
Thanks for following along—feel free to share your thoughts, questions, or your own Azure experiences below!&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>azure</category>
      <category>infrastructure</category>
      <category>web3</category>
    </item>
    <item>
      <title>Sandbox Essentials: Designing Azure Storage for Hands-On Learning</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Wed, 18 Feb 2026 18:04:56 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/blueprinting-success-deploying-azure-storage-for-lab-and-learning-environments-k34</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/blueprinting-success-deploying-azure-storage-for-lab-and-learning-environments-k34</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Before any cloud solution hits production, it needs a reliable staging ground where ideas can be stress-tested and skills can be sharpened. Deploying a dedicated storage account for testing and training isn't just a technical prerequisite; it’s a strategic move that allows you to experiment with data redundancy, lifecycle policies, and access tiers without risking live assets or blowing the budget. By establishing this foundational sandbox, you create a low-stakes environment where developers and students alike can master the nuances of Azure Storage, ensuring that by the time a system goes live, every edge case has been explored and every configuration is battle-hardened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Below are the steps to create an Azure storage:&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Step 3&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%2Fwtt6zibu8nf6ypsaqv2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtt6zibu8nf6ypsaqv2w.png" alt="fill storage form" width="800" height="543"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;On the Basics tab, select your Resource group. Provide a Storage account name. The storage account name must be unique in Azure. Set the Performance to Standard. Select Review, and then Create.&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;Ultimately, a well-provisioned storage account serves as the heartbeat of any successful lab environment, transforming abstract cloud concepts into hands-on expertise. By isolating your testing and training data, you protect your production integrity while fostering a culture of fearless experimentation and continuous improvement. As your project evolves from a sandbox prototype to a full-scale deployment, the lessons learned within this controlled environment will serve as the blueprint for a more resilient, cost-effective, and secure cloud infrastructure.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>azure</category>
      <category>resources</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Create a Resource Group on Azure Portal</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Wed, 18 Feb 2026 07:13:12 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/how-to-create-a-resource-group-on-azure-portal-4mdd</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/how-to-create-a-resource-group-on-azure-portal-4mdd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When working with Microsoft Azure, organizing your resources effectively is just as important as creating them. That’s where Resource Groups come in. A resource group acts as a logical container that holds related resources for an Azure solution, making it easier to manage, monitor, and control costs. Whether you’re deploying virtual machines, databases, or web apps, grouping them together ensures better governance and streamlined administration.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through the step-by-step process of creating a resource group using the Azure Portal. By the end, you’ll not only understand how to set one up but also why resource groups are a foundational element in building scalable and well-structured cloud environments.&lt;/p&gt;

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

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

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

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

&lt;p&gt;Give your resource group a name. For example, storageresgp. Select a region. Use this region throughout the project. &lt;/p&gt;

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

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

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

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

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

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

&lt;p&gt;With this setup in place, you’re ready to deploy, manage, and grow your applications confidently—knowing that your resources are organized and easy to maintain.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>beginners</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Unlocking the Cloud: A Beginner's Guide to 7 Essential Cloud Computing Concepts</title>
      <dc:creator>adegbola adeniyi</dc:creator>
      <pubDate>Sat, 07 Feb 2026 10:55:06 +0000</pubDate>
      <link>https://forem.com/adegbola_adeniyi_841e65f3/unlocking-the-cloud-a-beginners-guide-to-7-essential-cloud-computing-concepts-2di0</link>
      <guid>https://forem.com/adegbola_adeniyi_841e65f3/unlocking-the-cloud-a-beginners-guide-to-7-essential-cloud-computing-concepts-2di0</guid>
      <description>&lt;h2&gt;
  
  
  INTRODUCTION
&lt;/h2&gt;

&lt;p&gt;Ever wonder how your favorite online services manage millions of users, stay reliably online, and roll out new features at lightning speed? The secret often lies in cloud computing—a powerful paradigm that’s reshaping the digital world. And understanding it isn’t just for IT professionals; it’s for anyone curious about the magic behind modern technology.&lt;/p&gt;

&lt;p&gt;Let’s start with the basics.&lt;/p&gt;

&lt;p&gt;Cloud computing is the delivery of computing services—such as servers, storage, databases, networking, software, analytics, and even artificial intelligence—over the internet (“the cloud”) rather than relying on local infrastructure. Think of it as renting IT resources on demand, with flexible, pay-as-you-go pricing.&lt;/p&gt;

&lt;p&gt;Now, let’s break down these core ideas and explore how they power the digital experiences we rely on every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What is Virtualization?&lt;/strong&gt;&lt;br&gt;
Virtualization creates virtual versions of computing resources (like servers, storage, or networks) on top of physical hardware. It allows multiple virtual machines (VMs) to run on a single physical server, each with its own operating system and applications. A hypervisor (software layer) manages this separation.&lt;br&gt;
This improves hardware utilization, enables easier management, and reduces costs.&lt;br&gt;
There are two main types:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhocdm80y3lewmxkd3tk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhocdm80y3lewmxkd3tk.png" alt="Types of virtualization" width="800" height="519"&gt;&lt;/a&gt;&lt;br&gt;
Type 1 (bare-metal, runs directly on hardware — more efficient).&lt;br&gt;
Type 2 (hosted, runs on top of a host OS — easier for desktops).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Scalability&lt;/strong&gt;&lt;br&gt;
Scalability is the ability of a system to handle increased load by adding resources. There are two main approaches:&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%2Fs5rnvslcrmuvexamb26p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5rnvslcrmuvexamb26p.png" alt="Scalability of power" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Vertical scaling (scaling up):&lt;/strong&gt; Add more power (CPU, RAM) to an existing server.&lt;br&gt;
&lt;strong&gt;Horizontal scaling (scaling out):&lt;/strong&gt; Add more servers/instances and distribute the load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NB&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Horizontal scaling&lt;/strong&gt; is preferred in cloud environments because it's more flexible and has fewer limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Agility&lt;/strong&gt;&lt;br&gt;
Agility refers to how quickly and easily a business or team can respond to changes, launch new features, or adapt to market needs. In cloud computing, agility comes from rapid provisioning of resources (minutes instead of weeks), self-service portals, automation, and DevOps practices.&lt;br&gt;
It enables faster experimentation, shorter development cycles, and quicker time-to-market.&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%2Ffdtypazg667zhtqtwx6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdtypazg667zhtqtwx6e.png" alt="Agility" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. High Availability&lt;/strong&gt;&lt;br&gt;
High availability (HA) ensures a system remains operational and accessible with minimal downtime (often aiming for 99.9%+ uptime). It uses redundancy (e.g., multiple servers across availability zones), load balancers, and automatic failover to handle component failures without interrupting service.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;5. Fault Tolerant&lt;/strong&gt;&lt;br&gt;
Fault tolerance goes beyond high availability — the system continues operating correctly even when one or more components fail completely, with no interruption and ideally zero data loss. It requires stronger redundancy (e.g., fully replicated systems with real-time synchronization) and is more expensive.&lt;br&gt;
High availability often allows brief failover time, while fault tolerance aims for seamless continuation.&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%2Fq2e1irwoxd767d510t0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2e1irwoxd767d510t0b.png" alt="Fault tolerant" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Global Reach&lt;/strong&gt;&lt;br&gt;
Global reach means deploying applications and services across multiple geographic regions and data centers worldwide. Cloud providers have regions and edge locations globally, allowing low-latency access, data residency compliance, disaster recovery, and serving users from the nearest location.&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%2Flhj0ivbphzwcrrti7fdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhj0ivbphzwcrrti7fdb.png" alt="global reach" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. What is the difference between Elasticity and Scalability?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Ability to increase capacity to handle growth (usually focused on scaling up/out for higher demand). It can be manual or planned.&lt;br&gt;
&lt;strong&gt;Elasticity:&lt;/strong&gt; Goes further — automatically and dynamically scales resources up and down in real-time based on actual demand. It matches resources precisely to workload (no over-provisioning waste), ideal for unpredictable traffic (e.g., auto-scaling groups).&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%2Fjh6vpb4rqf1q4knglm5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjh6vpb4rqf1q4knglm5u.png" alt="Difference between scalability and elasticity" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; is "grow when needed"; &lt;strong&gt;elasticity&lt;/strong&gt; is "grow and shrink automatically and efficiently."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bringing It All Together&lt;/strong&gt;&lt;br&gt;
These concepts are the building blocks of modern cloud infrastructure. They enable businesses of all sizes to innovate faster, serve customers globally, reduce operational costs, and build incredibly resilient and powerful applications that are always available, no matter what.&lt;/p&gt;

&lt;p&gt;Understanding them is the first step to truly appreciating the power and potential of the cloud!&lt;/p&gt;

</description>
      <category>web</category>
      <category>cloudcomputing</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
