<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: olakunle makanjuola</title>
    <description>The latest articles on DEV Community by olakunle makanjuola (@olakunle_makanjuola_92754).</description>
    <link>https://dev.to/olakunle_makanjuola_92754</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3000154%2F46afa5c6-91ff-469d-ac03-f12ad3af173e.jpeg</url>
      <title>DEV Community: olakunle makanjuola</title>
      <link>https://dev.to/olakunle_makanjuola_92754</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/olakunle_makanjuola_92754"/>
    <language>en</language>
    <item>
      <title>From Terraform Code to a Real Azure VM: Building a Secure Azure Infrastructure with Terraform</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Thu, 24 Sep 2026 13:28:53 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/from-terraform-code-to-a-real-azure-vm-building-a-secure-azure-infrastructure-with-terraform-bfk</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/from-terraform-code-to-a-real-azure-vm-building-a-secure-azure-infrastructure-with-terraform-bfk</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;Infrastructure as Code (IaC) has changed the way modern cloud infrastructure is designed, deployed, and managed.&lt;/p&gt;

&lt;p&gt;Instead of manually logging into the Azure Portal, clicking through multiple screens, creating a virtual network, configuring a subnet, creating a public IP, setting up a Network Security Group, creating a network interface, and finally deploying a virtual machine, Terraform allows us to describe the infrastructure in code and provision it automatically.&lt;/p&gt;

&lt;p&gt;In this project, I wanted to move beyond simply learning Terraform commands and actually use Terraform to build a real Azure infrastructure.&lt;/p&gt;

&lt;p&gt;The goal was to provision an Azure environment containing:&lt;/p&gt;

&lt;p&gt;An Azure Resource Group&lt;br&gt;
A Virtual Network (VNet)&lt;br&gt;
A Subnet&lt;br&gt;
A Public IP address&lt;br&gt;
A Network Security Group (NSG)&lt;br&gt;
A Network Interface Card (NIC)&lt;br&gt;
An NSG-to-NIC association&lt;br&gt;
An Ubuntu Linux Virtual Machine&lt;br&gt;
SSH key-based authentication&lt;/p&gt;

&lt;p&gt;At the end of the project, I successfully deployed a real Ubuntu 22.04 virtual machine inside an Azure Virtual Network, protected it with an NSG, assigned it a public IP address, and successfully connected to it remotely using SSH.&lt;/p&gt;

&lt;p&gt;This article documents the entire process, including the errors I encountered along the way, what caused them, and how I resolved them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The main objectives of this project were to:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Learn how to provision Azure infrastructure using Terraform.&lt;br&gt;
Understand how Terraform resources depend on one another.&lt;br&gt;
Create an Azure Virtual Network and subnet.&lt;br&gt;
Configure a Network Security Group to control inbound traffic.&lt;br&gt;
Create a public IP address for the virtual machine.&lt;br&gt;
Create and configure a Network Interface.&lt;br&gt;
Associate the NSG with the NIC.&lt;br&gt;
Provision an Ubuntu Linux VM using Terraform.&lt;br&gt;
Configure SSH key-based authentication.&lt;br&gt;
Connect to the provisioned VM remotely through SSH.&lt;br&gt;
Understand the relationship between Azure networking components.&lt;br&gt;
Troubleshoot real Terraform, Azure, and SSH errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools Used And Deployed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The project was built using&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;Microsoft Azure&lt;br&gt;
Terraform&lt;br&gt;
AzureRM Terraform Provider&lt;br&gt;
Ubuntu 22.04 LTS&lt;br&gt;
Git Bash&lt;br&gt;
SSH&lt;br&gt;
Azure Virtual Network&lt;br&gt;
Network Security Group&lt;br&gt;
Azure Public IP&lt;br&gt;
Azure Network Interface&lt;/p&gt;

&lt;p&gt;My Terraform environment was running on Windows using Git Bash.&lt;/p&gt;

&lt;p&gt;Terraform was used as the Infrastructure as Code tool, while Azure provided the actual cloud infrastructure.&lt;/p&gt;

&lt;p&gt;Understanding the Architecture&lt;br&gt;
Before writing the Terraform configuration, it was important to understand how the Azure resources would connect to each other.&lt;/p&gt;

&lt;p&gt;The architecture was:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                     INTERNET
                        │
                        │
                 Public IP Address
                  4.221.66.140
                        │
                        ▼
                ┌───────────────┐
                │      NIC      │
                │ flackern-nic  │
                └───────┬───────┘
                        │
                 NSG Association
                        │
                        ▼
                ┌───────────────┐
                │      NSG      │
                │ flackern-nsg  │
                │               │
                │ TCP/22 Allow  │
                └───────────────┘
                        │
                        ▼
             ┌─────────────────────┐
             │     Azure VM        │
             │    flackern-vm      │
             │                     │
             │    Ubuntu 22.04     │
             │    azureuser        │
             └──────────┬──────────┘
                        │
                        │
                 Inside Subnet
                        │
                        ▼
              ┌───────────────────┐
              │ flackern-subnet   │
              │   10.0.1.0/24     │
              └─────────┬─────────┘
                        │
                        ▼
              ┌───────────────────┐
              │  flackern-vnet    │
              │   10.0.0.0/16     │
              └───────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The important traffic flow is:&lt;/p&gt;

&lt;p&gt;Internet&lt;br&gt;
   ↓&lt;br&gt;
Public IP&lt;br&gt;
   ↓&lt;br&gt;
Network Interface&lt;br&gt;
   ↓&lt;br&gt;
Network Security Group&lt;br&gt;
   ↓&lt;br&gt;
Virtual Machine&lt;br&gt;
The NSG controls whether network traffic is allowed to reach the VM.&lt;/p&gt;

&lt;p&gt;In this project, TCP port 22 was opened for SSH access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Creating the Terraform Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started by defining the Terraform and AzureRM provider configuration.&lt;/p&gt;

&lt;p&gt;terraform {&lt;br&gt;
  required_providers {&lt;br&gt;
    azurerm = {&lt;br&gt;
      source  = "hashicorp/azurerm"&lt;br&gt;
      version = "~&amp;gt; 5.5.0"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;provider "azurerm" {&lt;br&gt;
  features {}&lt;/p&gt;

&lt;p&gt;subscription_id = "YOUR-SUBSCRIPTION-ID"&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv74tsu69wrfsfcz0mh1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv74tsu69wrfsfcz0mh1r.png" alt=" " width="799" height="237"&gt;&lt;/a&gt;&lt;br&gt;
For security reasons, I have replaced my actual subscription ID in this article.&lt;/p&gt;

&lt;p&gt;The AzureRM provider allows Terraform to communicate with Microsoft Azure and create Azure resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Creating the Resource Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first Azure resource I created was the Resource Group.&lt;/p&gt;

&lt;p&gt;resource "azurerm_resource_group" "flackern-rg" {&lt;br&gt;
  name     = "flackern-rg"&lt;br&gt;
  location = "south Africa North"&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bsc82be2ng5g4q7xhu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bsc82be2ng5g4q7xhu5.png" alt=" " width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Resource Group provides a logical container for the Azure resources used in the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Creating the Virtual Network&lt;/strong&gt;&lt;br&gt;
Next, I created the Virtual Network.&lt;/p&gt;

&lt;p&gt;resource "azurerm_virtual_network" "flackern-vnet" {&lt;br&gt;
  name                = "flackern-vnet"&lt;br&gt;
  location            = azurerm_resource_group.flackern-rg.location&lt;br&gt;
  resource_group_name = azurerm_resource_group.flackern-rg.name&lt;br&gt;
  address_space       = ["10.0.0.0/16"]&lt;br&gt;
}&lt;br&gt;
The VNet uses:&lt;/p&gt;

&lt;p&gt;10.0.0.0/16&lt;br&gt;
This provides the private network address space for the infrastructure.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4 — Creating the Subnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Inside the Virtual Network, I created a subnet.&lt;/p&gt;

&lt;p&gt;resource "azurerm_subnet" "flackern-subnet" {&lt;br&gt;
  name                 = "flackern-subnet"&lt;br&gt;
  resource_group_name  = azurerm_resource_group.flackern-rg.name&lt;br&gt;
  virtual_network_name = azurerm_virtual_network.flackern-vnet.name&lt;br&gt;
  address_prefixes     = ["10.0.1.0/24"]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The subnet uses:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5 — Creating the Public IP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The VM needed a public IP so that I could connect to it remotely from my computer.&lt;/p&gt;

&lt;p&gt;resource "azurerm_public_ip" "flackern-ip" {&lt;br&gt;
  name                = "flackern-ip"&lt;br&gt;
  resource_group_name = azurerm_resource_group.flackern-rg.name&lt;br&gt;
  location            = azurerm_resource_group.flackern-rg.location&lt;br&gt;
  allocation_method   = "Static"&lt;br&gt;
  sku                 = "Standard"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Azure eventually assigned:&lt;/p&gt;

&lt;p&gt;4.221.66.140&lt;/p&gt;

&lt;p&gt;to the VM.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 6 — Creating the Network Security Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, I created the Network Security Group.&lt;/p&gt;

&lt;p&gt;resource "azurerm_network_security_group" "flackern-nsg" {&lt;br&gt;
  name                = "flackern-nsg"&lt;br&gt;
  location            = azurerm_resource_group.flackern-rg.location&lt;br&gt;
  resource_group_name = azurerm_resource_group.flackern-rg.name&lt;/p&gt;

&lt;p&gt;security_rule {&lt;br&gt;
    name                       = "Allow-SSH"&lt;br&gt;
    priority                   = 100&lt;br&gt;
    direction                  = "Inbound"&lt;br&gt;
    access                     = "Allow"&lt;br&gt;
    protocol                   = "Tcp"&lt;br&gt;
    source_port_range          = "&lt;em&gt;"&lt;br&gt;
    destination_port_range     = "22"&lt;br&gt;
    source_address_prefix      = "&lt;/em&gt;"&lt;br&gt;
    destination_address_prefix = "*"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The important part is:&lt;/p&gt;

&lt;p&gt;destination_port_range = "22"&lt;/p&gt;

&lt;p&gt;Port 22 is the standard SSH port.&lt;/p&gt;

&lt;p&gt;This rule allows inbound TCP traffic on port 22.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7 — Creating the Network Interface&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The VM needs a network interface to communicate with the Azure network.&lt;/p&gt;

&lt;p&gt;I created the NIC with:&lt;/p&gt;

&lt;p&gt;resource "azurerm_network_interface" "flackern-nic" {&lt;br&gt;
  name                = "flackern-nic"&lt;br&gt;
  location            = azurerm_resource_group.flackern-rg.location&lt;br&gt;
  resource_group_name = azurerm_resource_group.flackern-rg.name&lt;/p&gt;

&lt;p&gt;ip_configuration {&lt;br&gt;
    name                          = "flackern-ipconfig"&lt;br&gt;
    subnet_id                     = azurerm_subnet.flackern-subnet.id&lt;br&gt;
    private_ip_address_allocation = "Dynamic"&lt;br&gt;
    public_ip_address_id          = azurerm_public_ip.flackern-ip.id&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The NIC connects the VM to the subnet.&lt;/p&gt;

&lt;p&gt;The relationship is:&lt;/p&gt;

&lt;p&gt;VNet&lt;br&gt;
 ↓&lt;br&gt;
Subnet&lt;br&gt;
 ↓&lt;br&gt;
NIC&lt;br&gt;
 ↓&lt;br&gt;
VM&lt;/p&gt;

&lt;p&gt;The NIC also connects the VM to the public IP.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 8 — Associating the NSG with the NIC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creating an NSG does not automatically mean that the VM's NIC is associated with it.&lt;/p&gt;

&lt;p&gt;I explicitly created the association:&lt;/p&gt;

&lt;p&gt;resource "azurerm_network_interface_security_group_association" "flackern-nic-nsg" {&lt;br&gt;
  network_interface_id      = azurerm_network_interface.flackern-nic.id&lt;br&gt;
  network_security_group_id = azurerm_network_security_group.flackern-nsg.id&lt;br&gt;
}&lt;/p&gt;

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

&lt;p&gt;NSG&lt;br&gt;
 ↓&lt;br&gt;
NIC&lt;br&gt;
 ↓&lt;br&gt;
VM&lt;/p&gt;

&lt;p&gt;Therefore, the SSH rule in the NSG can control traffic reaching the VM through its network interface.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 9 — Creating the SSH Key Pair&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For secure access to the Linux VM, I generated an SSH key pair.&lt;/p&gt;

&lt;p&gt;From Git Bash:&lt;/p&gt;

&lt;p&gt;ssh-keygen -t ed25519 -C "terraform-azure-vm"&lt;/p&gt;

&lt;p&gt;This produced two files:&lt;/p&gt;

&lt;p&gt;terraform-azure&lt;br&gt;
terraform-azure.pub&lt;/p&gt;

&lt;p&gt;The difference is important.&lt;/p&gt;

&lt;p&gt;Private key&lt;br&gt;
terraform-azure&lt;/p&gt;

&lt;p&gt;This stays on my computer and must be kept secret.&lt;/p&gt;

&lt;p&gt;Public key&lt;br&gt;
terraform-azure.pub&lt;/p&gt;

&lt;p&gt;This can be installed on the Azure VM.&lt;/p&gt;

&lt;p&gt;I verified the files with:&lt;/p&gt;

&lt;p&gt;ls -la ~/.ssh&lt;/p&gt;

&lt;p&gt;The result included:&lt;/p&gt;

&lt;p&gt;terraform-azure&lt;br&gt;
terraform-azure.pub&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 10 — Configuring the Linux VM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I then created the Ubuntu VM.&lt;/p&gt;

&lt;p&gt;resource "azurerm_linux_virtual_machine" "flackern-vm" {&lt;br&gt;
  name                = "flackern-vm"&lt;br&gt;
  resource_group_name = azurerm_resource_group.flackern-rg.name&lt;br&gt;
  location            = azurerm_resource_group.flackern-rg.location&lt;br&gt;
  size                = "Standard_B2ats_v2"&lt;br&gt;
  admin_username      = "azureuser"&lt;/p&gt;

&lt;p&gt;network_interface_ids = [&lt;br&gt;
    azurerm_network_interface.flackern-nic.id,&lt;br&gt;
  ]&lt;/p&gt;

&lt;p&gt;admin_ssh_key {&lt;br&gt;
    username   = "azureuser"&lt;br&gt;
    public_key = file("~/.ssh/terraform-azure.pub")&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;os_disk {&lt;br&gt;
    caching              = "ReadWrite"&lt;br&gt;
    storage_account_type = "Standard_LRS"&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;source_image_reference {&lt;br&gt;
    publisher = "Canonical"&lt;br&gt;
    offer     = "0001-com-ubuntu-server-jammy"&lt;br&gt;
    sku       = "22_04-lts"&lt;br&gt;
    version   = "latest"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The VM uses Ubuntu 22.04 LTS.&lt;/p&gt;

&lt;p&gt;The administrator username is:&lt;/p&gt;

&lt;p&gt;azureuser&lt;/p&gt;

&lt;p&gt;The VM receives the public SSH key generated earlier.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 11 — Creating the VM Public IP Output&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make it easy to retrieve the public IP after deployment, I added an output:&lt;/p&gt;

&lt;p&gt;output "vm_public_ip" {&lt;br&gt;
  value = azurerm_public_ip.flackern-ip.ip_address&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;After running Terraform, the output was:&lt;/p&gt;

&lt;p&gt;vm_public_ip = "4.221.66.140"&lt;/p&gt;

&lt;p&gt;This made it easy to connect to the VM.&lt;/p&gt;

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

&lt;p&gt;*&lt;em&gt;Step 12 — Running Terraform&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Once the configuration was ready, I initialized Terraform:&lt;/p&gt;

&lt;p&gt;terraform init&lt;/p&gt;

&lt;p&gt;Then I formatted the configuration:&lt;/p&gt;

&lt;p&gt;terraform fmt&lt;/p&gt;

&lt;p&gt;Then I validated it:&lt;/p&gt;

&lt;p&gt;terraform validate&lt;/p&gt;

&lt;p&gt;Terraform returned:&lt;/p&gt;

&lt;p&gt;Success! The configuration is valid.&lt;/p&gt;

&lt;p&gt;I then generated the execution plan:&lt;/p&gt;

&lt;p&gt;terraform plan&lt;/p&gt;

&lt;p&gt;After reviewing the planned resources, I applied the configuration:&lt;/p&gt;

&lt;p&gt;terraform apply&lt;/p&gt;

&lt;p&gt;Terraform eventually returned:&lt;/p&gt;

&lt;p&gt;Apply complete! Resources: 5 added, 0 changed, 0 destroyed.&lt;/p&gt;

&lt;p&gt;This was the moment the infrastructure was actually provisioned in Azure.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Pictorial Diagram of Successful Resource Provision On Azure Portal Using Terraform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Log into &lt;a href="https://portal.azure.com/" rel="noopener noreferrer"&gt;https://portal.azure.com/&lt;/a&gt; to confirm the successful creation of these resource&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Step 13 — First SSH Connection Attempt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After Terraform successfully created the infrastructure, I attempted to connect to the VM:&lt;/p&gt;

&lt;p&gt;ssh &lt;a href="mailto:azureuser@4.221.66.140"&gt;azureuser@4.221.66.140&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was prompted to verify the host:&lt;/p&gt;

&lt;p&gt;The authenticity of host '4.221.66.140' can't be established.&lt;/p&gt;

&lt;p&gt;Are you sure you want to continue connecting&lt;br&gt;
(yes/no/[fingerprint])?&lt;/p&gt;

&lt;p&gt;I entered:&lt;/p&gt;

&lt;p&gt;yes&lt;/p&gt;

&lt;p&gt;The server was then added to my local SSH known_hosts file.&lt;/p&gt;

&lt;p&gt;However, the connection failed:&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:azureuser@4.221.66.140"&gt;azureuser@4.221.66.140&lt;/a&gt;: Permission denied (publickey).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 14 — Successful SSH Connection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This time the connection succeeded.&lt;/p&gt;

&lt;p&gt;I received the Ubuntu welcome message:&lt;/p&gt;

&lt;p&gt;Welcome to Ubuntu 22.04.5 LTS&lt;/p&gt;

&lt;p&gt;and eventually reached:&lt;/p&gt;

&lt;p&gt;azureuser@flackern-vm:~$&lt;/p&gt;

&lt;p&gt;This confirmed that I was now inside my Azure VM.&lt;/p&gt;

&lt;p&gt;The VM reported its private IP as:&lt;/p&gt;

&lt;p&gt;10.0.1.4&lt;/p&gt;

&lt;p&gt;while the public IP was:&lt;/p&gt;

&lt;p&gt;4.221.66.140&lt;/p&gt;

&lt;p&gt;This demonstrated the difference between a VM's private network address and its public Internet-facing address.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;SOME OF THE ERROR ENCOUNTERED IN THE COURSE OF CARRYING OUT THIS PROJECT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Error 1 — security_rule Unsupported Block Type&lt;/p&gt;

&lt;p&gt;This was one of my first Terraform errors.&lt;/p&gt;

&lt;p&gt;Initially, I accidentally placed the security_rule block outside the Network Security Group resource.&lt;/p&gt;

&lt;p&gt;Terraform returned an error similar to:&lt;/p&gt;

&lt;p&gt;Error: Unsupported block type&lt;/p&gt;

&lt;p&gt;Blocks of type "security_rule" are not expected here.&lt;br&gt;
What caused the problem?&lt;/p&gt;

&lt;p&gt;The structure was effectively:&lt;/p&gt;

&lt;p&gt;resource "azurerm_network_security_group" "flackern-nsg" {&lt;br&gt;
   ...&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;security_rule {&lt;br&gt;
   ...&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Terraform interpreted security_rule as a standalone block.&lt;/p&gt;

&lt;p&gt;But security_rule belongs inside the azurerm_network_security_group resource.&lt;/p&gt;

&lt;p&gt;How I fixed it&lt;/p&gt;

&lt;p&gt;I moved the entire block inside the NSG:&lt;/p&gt;

&lt;p&gt;resource "azurerm_network_security_group" "flackern-nsg" {&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;security_rule {&lt;br&gt;
    name                       = "Allow-SSH"&lt;br&gt;
    priority                   = 100&lt;br&gt;
    direction                  = "Inbound"&lt;br&gt;
    access                     = "Allow"&lt;br&gt;
    protocol                   = "Tcp"&lt;br&gt;
    source_port_range          = "&lt;em&gt;"&lt;br&gt;
    destination_port_range     = "22"&lt;br&gt;
    source_address_prefix      = "&lt;/em&gt;"&lt;br&gt;
    destination_address_prefix = "*"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This taught me an important Terraform lesson:&lt;/p&gt;

&lt;p&gt;Terraform configuration is hierarchical. A block must be placed inside the resource that supports it.&lt;/p&gt;

&lt;p&gt;Error 2 — Resource Name Mismatch&lt;/p&gt;

&lt;p&gt;I also encountered errors caused by inconsistent Terraform resource labels.&lt;/p&gt;

&lt;p&gt;At different points I had references such as:&lt;/p&gt;

&lt;p&gt;flakern-rg&lt;/p&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;p&gt;flackern-rg&lt;/p&gt;

&lt;p&gt;I had made a similar mistake with the NSG:&lt;/p&gt;

&lt;p&gt;flakern-nsg&lt;/p&gt;

&lt;p&gt;versus:&lt;/p&gt;

&lt;p&gt;flackern-nsg&lt;/p&gt;

&lt;p&gt;Terraform resource references must match the declared resource label exactly.&lt;/p&gt;

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

&lt;p&gt;resource "azurerm_resource_group" "flackern-rg" {&lt;/p&gt;

&lt;p&gt;must be referenced as:&lt;/p&gt;

&lt;p&gt;azurerm_resource_group.flackern-rg.name&lt;/p&gt;

&lt;p&gt;not:&lt;/p&gt;

&lt;p&gt;azurerm_resource_group.flakern-rg.name&lt;br&gt;
How I fixed it&lt;/p&gt;

&lt;p&gt;I standardized the naming convention throughout the Terraform configuration:&lt;/p&gt;

&lt;p&gt;flackern-rg&lt;br&gt;
flackern-vnet&lt;br&gt;
flackern-subnet&lt;br&gt;
flackern-ip&lt;br&gt;
flackern-nsg&lt;br&gt;
flackern-nic&lt;br&gt;
flackern-vm&lt;/p&gt;

&lt;p&gt;After correcting the references, I ran:&lt;/p&gt;

&lt;p&gt;terraform fmt&lt;/p&gt;

&lt;p&gt;followed by:&lt;/p&gt;

&lt;p&gt;terraform validate&lt;/p&gt;

&lt;p&gt;Terraform eventually returned:&lt;/p&gt;

&lt;p&gt;Success! The configuration is valid.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Error 3 — Public IP Resource Reference Was Treated as a String&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
During terraform plan, I encountered another important error.&lt;/p&gt;

&lt;p&gt;I initially wrote:&lt;/p&gt;

&lt;p&gt;public_ip_address_id = "azurerm_public_ip.flackern-ip.id"&lt;/p&gt;

&lt;p&gt;Terraform interpreted this as a literal string rather than a Terraform resource reference.&lt;/p&gt;

&lt;p&gt;This caused an error involving the parsing of the Public IP resource ID.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Terraform distinguishes between strings and expressions.&lt;/p&gt;

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

&lt;p&gt;"azurerm_public_ip.flackern-ip.id"&lt;/p&gt;

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

&lt;p&gt;Treat this entire thing as text.&lt;/p&gt;

&lt;p&gt;Whereas this:&lt;/p&gt;

&lt;p&gt;azurerm_public_ip.flackern-ip.id&lt;/p&gt;

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

&lt;p&gt;Retrieve the ID of this Terraform resource.&lt;/p&gt;

&lt;p&gt;The correction&lt;/p&gt;

&lt;p&gt;I removed the quotation marks:&lt;/p&gt;

&lt;p&gt;public_ip_address_id = azurerm_public_ip.flackern-ip.id&lt;/p&gt;

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

&lt;p&gt;terraform fmt&lt;br&gt;
terraform validate&lt;br&gt;
terraform plan&lt;/p&gt;

&lt;p&gt;The plan proceeded successfully.&lt;/p&gt;

&lt;p&gt;This was an important lesson for me:&lt;/p&gt;

&lt;p&gt;Terraform resource references should not be placed inside quotation marks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Error 4 — SSH Permission Denied (publickey)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was not a Terraform deployment failure.&lt;/p&gt;

&lt;p&gt;The VM was running and reachable, but SSH authentication was failing.&lt;/p&gt;

&lt;p&gt;The important distinction was:&lt;/p&gt;

&lt;p&gt;Network connection: SUCCESS&lt;br&gt;
SSH authentication: FAILED&lt;/p&gt;

&lt;p&gt;The solution was to explicitly tell SSH which private key to use.&lt;/p&gt;

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

&lt;p&gt;ssh &lt;a href="mailto:azureuser@4.221.66.140"&gt;azureuser@4.221.66.140&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I used:&lt;/p&gt;

&lt;p&gt;ssh -i ~/.ssh/terraform-azure &lt;a href="mailto:azureuser@4.221.66.140"&gt;azureuser@4.221.66.140&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The difference is the:&lt;/p&gt;

&lt;p&gt;-i&lt;/p&gt;

&lt;p&gt;option.&lt;/p&gt;

&lt;p&gt;It tells SSH which private identity file to use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What I Learned From This Project&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project taught me much more than simply how to write Terraform syntax.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Infrastructure as Code&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I learned that infrastructure can be described in code and deployed consistently rather than manually created through the Azure Portal.&lt;/p&gt;

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

&lt;p&gt;resource "azurerm_virtual_network" "flackern-vnet" {&lt;br&gt;
  ...&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;is not just configuration.&lt;/p&gt;

&lt;p&gt;It represents an actual Azure resource that Terraform manages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Terraform Dependencies&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I also learned how Terraform understands relationships between resources.&lt;/p&gt;

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

&lt;p&gt;Resource Group&lt;br&gt;
      ↓&lt;br&gt;
Virtual Network&lt;br&gt;
      ↓&lt;br&gt;
Subnet&lt;br&gt;
      ↓&lt;br&gt;
NIC&lt;br&gt;
      ↓&lt;br&gt;
VM&lt;/p&gt;

&lt;p&gt;Terraform can determine the dependency relationships because resources reference one another.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Azure Networking&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The project helped me understand the relationship between:&lt;/p&gt;

&lt;p&gt;VNet&lt;br&gt;
Subnet&lt;br&gt;
NIC&lt;br&gt;
Public IP&lt;br&gt;
NSG&lt;br&gt;
VM&lt;/p&gt;

&lt;p&gt;Before building this project, these components could seem like separate Azure services.&lt;/p&gt;

&lt;p&gt;Building the infrastructure made their relationship much clearer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Network Security Groups&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I learned that an NSG acts as a traffic filtering mechanism.&lt;/p&gt;

&lt;p&gt;In this project, the NSG allowed:&lt;/p&gt;

&lt;p&gt;Inbound TCP&lt;br&gt;
Port 22&lt;/p&gt;

&lt;p&gt;which enabled SSH access to the VM.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;SSH Authentication&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I also learned the practical difference between an SSH public key and private key.&lt;/p&gt;

&lt;p&gt;Public key&lt;br&gt;
     ↓&lt;br&gt;
Azure VM&lt;/p&gt;

&lt;p&gt;Private key&lt;br&gt;
     ↓&lt;br&gt;
My computer&lt;/p&gt;

&lt;p&gt;The private key is used to prove that I am authorized to access the VM.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Troubleshooting Is Part of Engineering&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Perhaps one of the most valuable lessons was that real-world infrastructure work does not always work on the first attempt.&lt;/p&gt;

&lt;p&gt;I encountered:&lt;/p&gt;

&lt;p&gt;Unsupported block type&lt;/p&gt;

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

&lt;p&gt;Resource reference/name mismatch&lt;/p&gt;

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

&lt;p&gt;Public IP ID parsing error&lt;/p&gt;

&lt;p&gt;and finally:&lt;/p&gt;

&lt;p&gt;Permission denied (publickey)&lt;/p&gt;

&lt;p&gt;Each error provided an opportunity to understand what was actually happening rather than simply copying commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The Final Terraform Workflow&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The workflow I followed can be summarized as:&lt;/p&gt;

&lt;p&gt;Write Terraform Configuration&lt;br&gt;
          ↓&lt;br&gt;
      terraform init&lt;br&gt;
          ↓&lt;br&gt;
       terraform fmt&lt;br&gt;
          ↓&lt;br&gt;
     terraform validate&lt;br&gt;
          ↓&lt;br&gt;
       terraform plan&lt;br&gt;
          ↓&lt;br&gt;
      terraform apply&lt;br&gt;
          ↓&lt;br&gt;
 Azure Infrastructure Created&lt;br&gt;
          ↓&lt;br&gt;
 Retrieve Public IP&lt;br&gt;
          ↓&lt;br&gt;
 SSH into Ubuntu VM&lt;br&gt;
          ↓&lt;br&gt;
       SUCCESS&lt;/p&gt;

&lt;p&gt;This is a workflow I can now reuse for future Azure projects.&lt;/p&gt;

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

&lt;p&gt;This project was an important step in my journey into Cloud and DevOps engineering.&lt;/p&gt;

&lt;p&gt;I started with Terraform configuration and ended with a real Ubuntu server running inside Microsoft Azure.&lt;/p&gt;

&lt;p&gt;More importantly, I learned that Infrastructure as Code is not simply about memorizing Terraform commands. It is about understanding infrastructure, dependencies, networking, security, authentication, automation, and troubleshooting.&lt;/p&gt;

&lt;p&gt;The project also reinforced an important engineering principle:&lt;/p&gt;

&lt;p&gt;When something fails, understand the error before trying to fix it.&lt;/p&gt;

&lt;p&gt;Every error I encountered helped me understand Terraform and Azure more deeply.&lt;/p&gt;

&lt;p&gt;This project started as a Terraform learning exercise, but it became something much more valuable: a practical demonstration of how Infrastructure as Code can turn source code into real cloud infrastructure.&lt;/p&gt;

&lt;p&gt;One VM. One Virtual Network. One NSG. One public IP. All provisioned from code.&lt;/p&gt;

&lt;p&gt;And this is only the beginning of my DevOps journey.&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps #Terraform #Azure #InfrastructureAsCode #CloudComputing #Linux #SSH #AzureVM #DevOpsJourney
&lt;/h1&gt;

</description>
      <category>devops</category>
      <category>beginners</category>
      <category>cloud</category>
      <category>docker</category>
    </item>
    <item>
      <title>From Local Files to GitHub: My First Git Push, the Error I Encountered, and How I Fixed It</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Thu, 10 Sep 2026 18:41:39 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/from-local-files-to-github-my-first-git-push-the-error-i-encountered-and-how-i-fixed-it-4chb</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/from-local-files-to-github-my-first-git-push-the-error-i-encountered-and-how-i-fixed-it-4chb</guid>
      <description>&lt;p&gt;As part of my journey into Cloud Computing and DevOps, I have been spending more time learning and practicing Git and GitHub.&lt;/p&gt;

&lt;p&gt;In this practical exercise, I created several files locally using Git Bash, initialized a Git repository, committed the files, connected the local repository to GitHub, and pushed my work to a GitHub repository.&lt;/p&gt;

&lt;p&gt;However, the process did not go completely smoothly. I encountered a non-fast-forward / fetch-first error when I tried to push my local repository to GitHub.&lt;/p&gt;

&lt;p&gt;This article documents the complete process, including the error, why it happened, and how I resolved it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Intend to Achieve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Objectives:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create files in a local project folder.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Initialize Git.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Track the files with Git.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Commit the files.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Create a connection between the local repository and GitHub.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Push the local repository to GitHub.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Make additional changes.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Commit and push the changes again.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;My working directory was&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;C:/Users/HP/Documents/hagital-demo&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;My GitHub repository was&lt;/strong&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Makansgreat/hagital-demo" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Navigate to the Project Directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I started from my Git Bash terminal inside my project directory&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;pwd&lt;/p&gt;

&lt;p&gt;The result showed:&lt;/p&gt;

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

&lt;p&gt;This confirmed that I was working inside the correct project folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create the Files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I created several files using the touch command:&lt;/p&gt;

&lt;p&gt;touch devop.txt aps.pdf notes.txt name.docx admin.pdf mccons.py secrets.txt&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwxgpspbhgz1lkfx7q40m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwxgpspbhgz1lkfx7q40m.png" alt=" " width="580" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This created the following files:&lt;br&gt;
devop.txt&lt;br&gt;
aps.pdf&lt;br&gt;
notes.txt&lt;br&gt;
name.docx&lt;br&gt;
admin.pdf&lt;br&gt;
mccons.py&lt;br&gt;
secrets.txt&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Initialize the Git Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ran:&lt;/p&gt;

&lt;p&gt;git init&lt;/p&gt;

&lt;p&gt;Git responded:&lt;/p&gt;

&lt;p&gt;Initialized empty Git repository in C:/Users/HP/Documents/hagital-demo/.git/&lt;/p&gt;

&lt;p&gt;Git created a hidden .git directory inside my project folder.&lt;/p&gt;

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

&lt;p&gt;I then checked the status again:&lt;/p&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;p&gt;This time Git reported:&lt;/p&gt;

&lt;p&gt;On branch master&lt;/p&gt;

&lt;p&gt;No commits yet&lt;/p&gt;

&lt;p&gt;Untracked files:&lt;br&gt;
        admin.pdf&lt;br&gt;
        aps.pdf&lt;br&gt;
        devop.txt&lt;br&gt;
        mccons.py&lt;br&gt;
        name.docx&lt;br&gt;
        notes.txt&lt;br&gt;
        secrets.txt&lt;/p&gt;

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

&lt;p&gt;This meant Git could now see the files, but they were still untracked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Add the Files to the Staging Area&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used:&lt;/p&gt;

&lt;p&gt;git add .&lt;/p&gt;

&lt;p&gt;The . means "add all changes in the current directory."&lt;/p&gt;

&lt;p&gt;I then checked the status:&lt;/p&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;p&gt;Git showed:&lt;/p&gt;

&lt;p&gt;Changes to be committed:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    new file:   admin.pdf
    new file:   aps.pdf
    new file:   devop.txt
    new file:   mccons.py
    new file:   name.docx
    new file:   notes.txt
    new file:   secrets.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The files had now moved from untracked to staged.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5: Create the First Commit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I committed the staged files with:&lt;/p&gt;

&lt;p&gt;git commit -m "added couple of files"&lt;/p&gt;

&lt;p&gt;Git returned:&lt;/p&gt;

&lt;p&gt;[master (root-commit) 02e2324] added couple of files&lt;br&gt;
 7 files changed, 2 insertions(+)&lt;/p&gt;

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

&lt;p&gt;I had now created my first local Git commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Rename the Branch from master to main&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern GitHub repositories commonly use main as the default branch.&lt;/p&gt;

&lt;p&gt;My local branch was still called master, so I renamed it:&lt;/p&gt;

&lt;p&gt;git branch -m main&lt;/p&gt;

&lt;p&gt;My terminal prompt now showed:&lt;/p&gt;

&lt;p&gt;(main)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8oqo2p8egacd0wwl2rfk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8oqo2p8egacd0wwl2rfk.png" alt=" " width="613" height="82"&gt;&lt;/a&gt;&lt;br&gt;
This confirmed that I was working on the main branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Connect the Local Repository to GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I connected my local repository to my GitHub repository using:&lt;/p&gt;

&lt;p&gt;git remote add origin &lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then verified the remote connection:&lt;/p&gt;

&lt;p&gt;git remote -v&lt;/p&gt;

&lt;p&gt;Git returned:&lt;/p&gt;

&lt;p&gt;origin  &lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt; (fetch)&lt;br&gt;
origin  &lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt; (push)&lt;/p&gt;

&lt;p&gt;This confirmed that origin was pointing to my GitHub repository.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 8: Attempt to Push to GitHub&lt;/strong&gt;&lt;br&gt;
I tried to push my local main branch:&lt;/p&gt;

&lt;p&gt;git push -u origin main&lt;br&gt;
But Git rejected the push.&lt;/p&gt;

&lt;p&gt;I received:&lt;/p&gt;

&lt;p&gt;! [rejected]        main -&amp;gt; main (fetch first)&lt;/p&gt;

&lt;p&gt;error: failed to push some refs to&lt;br&gt;
'&lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt;'&lt;/p&gt;

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

&lt;p&gt;hint: Updates were rejected because the remote contains work&lt;br&gt;
that I d0 not have locally.&lt;/p&gt;

&lt;p&gt;The Problem&lt;br&gt;
At first, this error was confusing.&lt;/p&gt;

&lt;p&gt;I had already created my local commit, so why couldn't Git push it?&lt;/p&gt;

&lt;p&gt;The reason was that the GitHub repository already contained a commit that my local repository did not have.&lt;/p&gt;

&lt;p&gt;In my case, the GitHub repository already had an Initial commit.&lt;/p&gt;

&lt;p&gt;Therefore, the histories looked roughly like this:&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;Initial commit&lt;br&gt;
     |&lt;br&gt;
   main&lt;br&gt;
While my local repository had:&lt;/p&gt;

&lt;p&gt;Local:&lt;/p&gt;

&lt;p&gt;added couple of files&lt;br&gt;
        |&lt;br&gt;
      main&lt;br&gt;
The two repositories had different histories.&lt;/p&gt;

&lt;p&gt;Git did not want me to simply overwrite the history that already existed on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9: Pull the GitHub Changes Using Rebase&lt;/strong&gt;&lt;br&gt;
I then used:&lt;/p&gt;

&lt;p&gt;git pull origin main --rebase&lt;br&gt;
Git successfully downloaded the remote changes:&lt;/p&gt;

&lt;p&gt;From &lt;a href="https://github.com/Makansgreat/hagital-demo" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;branch            main       -&amp;gt; FETCH_HEAD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Successfully rebased and updated refs/heads/main.&lt;/p&gt;

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

&lt;p&gt;What did --rebase do?&lt;br&gt;
The --rebase option allowed Git to take my local commit and place it on top of the existing GitHub history.&lt;/p&gt;

&lt;p&gt;Conceptually, the history changed from something like:&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
Initial commit&lt;/p&gt;

&lt;p&gt;Local:&lt;br&gt;
added couple of files&lt;br&gt;
to:&lt;/p&gt;

&lt;p&gt;Initial commit&lt;br&gt;
       |&lt;br&gt;
added couple of files&lt;br&gt;
Now the histories were properly connected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Push Again&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the successful rebase, I ran:&lt;/p&gt;

&lt;p&gt;git push -u origin main&lt;/p&gt;

&lt;p&gt;This time the push was successful:&lt;/p&gt;

&lt;p&gt;To &lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt;&lt;br&gt;
   900f6a7..0ce22f5  main -&amp;gt; main&lt;/p&gt;

&lt;p&gt;branch 'main' set up to track 'origin/main'.&lt;/p&gt;

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

&lt;p&gt;The important part was:&lt;/p&gt;

&lt;p&gt;branch 'main' set up to track 'origin/main'&lt;/p&gt;

&lt;p&gt;This meant my local main branch was now tracking the GitHub main branch.&lt;/p&gt;

&lt;p&gt;Step 13: Verify the Repository Status&lt;br&gt;
I ran:&lt;/p&gt;

&lt;p&gt;git status&lt;br&gt;
Git responded:&lt;/p&gt;

&lt;p&gt;On branch main&lt;br&gt;
Your branch is up to date with 'origin/main'.&lt;/p&gt;

&lt;p&gt;nothing to commit, working tree clean&lt;br&gt;
This was exactly what I wanted to see.&lt;/p&gt;

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

&lt;p&gt;It meant:&lt;/p&gt;

&lt;p&gt;My local branch was main.&lt;/p&gt;

&lt;p&gt;My local branch was synchronized with GitHub.&lt;/p&gt;

&lt;p&gt;There were no uncommitted changes.&lt;/p&gt;

&lt;p&gt;The working tree was clean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11: Check the Commit History&lt;/strong&gt;&lt;br&gt;
I also checked the commit history:&lt;/p&gt;

&lt;p&gt;git log --oneline --all --decorate -5&lt;br&gt;
The result was:&lt;/p&gt;

&lt;p&gt;0ce22f5 (HEAD -&amp;gt; main, origin/main, origin/HEAD) added couple of files&lt;br&gt;
900f6a7 Initial commit&lt;/p&gt;

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

&lt;p&gt;This confirmed that both commits were now part of the repository history.&lt;/p&gt;

&lt;p&gt;The first commit was:&lt;/p&gt;

&lt;p&gt;900f6a7 Initial commit&lt;br&gt;
and my second commit was:&lt;/p&gt;

&lt;p&gt;0ce22f5 added couple of files&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12: Make Additional Changes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After successfully pushing the files to GitHub, I made additional changes to some of the files.&lt;/p&gt;

&lt;p&gt;Git then showed:&lt;/p&gt;

&lt;p&gt;Changes not staged for commit:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    modified:   devop.txt
    modified:   mccons.py
    modified:   name.docx
    modified:   notes.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This meant Git detected that four previously tracked files had been modified.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 13: Stage the New Changes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I added the modified files to the staging area:&lt;/p&gt;

&lt;p&gt;git add .&lt;/p&gt;

&lt;p&gt;Then I checked the status:&lt;/p&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;p&gt;Git showed:&lt;/p&gt;

&lt;p&gt;Changes to be committed:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    modified:   devop.txt
    modified:   mccons.py
    modified:   name.docx
    modified:   notes.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;The changes were now staged and ready to commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 14: Commit the New Changes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I created another commit:&lt;/p&gt;

&lt;p&gt;git commit -m "I added to some files"&lt;/p&gt;

&lt;p&gt;Git responded:&lt;/p&gt;

&lt;p&gt;[main afa7b13] I added to some files&lt;br&gt;
 4 files changed, 5 insertions(+), 2 deletions(-)&lt;/p&gt;

&lt;p&gt;This created another commit in my Git history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 15: Push the New Commit to GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, I pushed the new commit:&lt;/p&gt;

&lt;p&gt;git push origin main&lt;/p&gt;

&lt;p&gt;Git successfully uploaded the changes:&lt;/p&gt;

&lt;p&gt;Enumerating objects: 9, done.&lt;br&gt;
Counting objects: 100% (8/8), done.&lt;br&gt;
Delta compression using up to 4 threads&lt;br&gt;
Compressing objects: 100% (3/3), done.&lt;br&gt;
Writing objects: 100% (5/5), 536 bytes | 12.00 KiB/s, done.&lt;br&gt;
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)&lt;/p&gt;

&lt;p&gt;To &lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt;&lt;br&gt;
   0ce22f5..afa7b13  main -&amp;gt; main&lt;/p&gt;

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

&lt;p&gt;The push was successful.&lt;/p&gt;

&lt;p&gt;The Complete Git Workflow&lt;br&gt;
Looking back, the complete workflow I followed was:&lt;/p&gt;

&lt;h1&gt;
  
  
  1. &lt;em&gt;Create files&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;touch devop.txt aps.pdf notes.txt name.docx admin.pdf mccons.py secrets.txt&lt;/p&gt;

&lt;h1&gt;
  
  
  2. &lt;em&gt;Initialize Git&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git init&lt;/p&gt;

&lt;h1&gt;
  
  
  3. &lt;em&gt;Check status&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;h1&gt;
  
  
  4. &lt;em&gt;Stage files&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git add .&lt;/p&gt;

&lt;h1&gt;
  
  
  5. &lt;em&gt;Commit&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git commit -m "added couple of files"&lt;/p&gt;

&lt;h1&gt;
  
  
  6. &lt;em&gt;Rename branch&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git branch -m main&lt;/p&gt;

&lt;h1&gt;
  
  
  7. &lt;em&gt;Add GitHub remote&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git remote add origin &lt;a href="https://github.com/Makansgreat/hagital-demo.git" rel="noopener noreferrer"&gt;https://github.com/Makansgreat/hagital-demo.git&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  8. &lt;em&gt;Verify remote&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git remote -v&lt;/p&gt;

&lt;h1&gt;
  
  
  9. &lt;em&gt;Push&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git push -u origin main&lt;/p&gt;

&lt;h1&gt;
  
  
  10. &lt;em&gt;Because the remote already had a commit&lt;/em&gt;,
&lt;/h1&gt;

&lt;h1&gt;
  
  
  pull and rebase
&lt;/h1&gt;

&lt;p&gt;git pull origin main --rebase&lt;/p&gt;

&lt;h1&gt;
  
  
  11. &lt;em&gt;Push again&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git push -u origin main&lt;/p&gt;

&lt;h1&gt;
  
  
  12. &lt;em&gt;Verify&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;h1&gt;
  
  
  13. &lt;em&gt;View commit history&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git log --oneline --all --decorate -5&lt;/p&gt;

&lt;h1&gt;
  
  
  14. &lt;em&gt;After making more changes&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git add .&lt;/p&gt;

&lt;h1&gt;
  
  
  15. &lt;em&gt;Commit the changes&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git commit -m "I added to some files"&lt;/p&gt;

&lt;h1&gt;
  
  
  16. &lt;em&gt;Push the changes&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;git push origin main&lt;/p&gt;

&lt;p&gt;What I Learned From This Exercise&lt;/p&gt;

&lt;p&gt;This exercise taught me several important Git concepts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git init&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Initializes a normal folder as a Git repository.&lt;/p&gt;

&lt;p&gt;git init&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git status&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Shows the current state of the working directory.&lt;/p&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It helps identify&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Untracked files&lt;br&gt;
Modified files&lt;br&gt;
Staged changes&lt;br&gt;
Uncommitted changes&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git add&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Moves changes into the staging area.&lt;/p&gt;

&lt;p&gt;git add .&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git commit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Creates a snapshot of the staged changes.&lt;/p&gt;

&lt;p&gt;git commit -m "commit message"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git remote&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Connects the local repository to a remote repository such as GitHub.&lt;/p&gt;

&lt;p&gt;git remote add origin &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Uploads local commits to the remote repository.&lt;/p&gt;

&lt;p&gt;git push origin main&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git pull&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Downloads changes from the remote repository and integrates them into the local repository.&lt;/p&gt;

&lt;p&gt;git pull origin main&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git pull --rebase&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In my case, this was the command that solved the problem:&lt;/p&gt;

&lt;p&gt;git pull origin main --rebase&lt;/p&gt;

&lt;p&gt;It allowed me to integrate the existing GitHub history with my local commit history without creating an unnecessary merge commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Important Lesson From My Error&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most important lesson I learned was that a GitHub repository and a local Git repository can have different histories.&lt;/p&gt;

&lt;p&gt;When I received:&lt;/p&gt;

&lt;p&gt;! [rejected] main -&amp;gt; main (fetch first)&lt;/p&gt;

&lt;p&gt;I initially thought there was something wrong with my Git configuration.&lt;/p&gt;

&lt;p&gt;There wasn't.&lt;/p&gt;

&lt;p&gt;Git was protecting the existing history on GitHub.&lt;/p&gt;

&lt;p&gt;The solution was to first retrieve the remote history:&lt;/p&gt;

&lt;p&gt;git pull origin main --rebase&lt;/p&gt;

&lt;p&gt;and then push my changes:&lt;/p&gt;

&lt;p&gt;git push -u origin main&lt;/p&gt;

&lt;p&gt;After that, future pushes became much simpler because my local main branch was tracking origin/main.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Better Workflow for Future Projects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Going forward, when I create a local project and want to push it to GitHub, I need to be aware of whether the GitHub repository is completely empty.&lt;/p&gt;

&lt;p&gt;If the GitHub repository already contains files such as a README or an initial commit, I should synchronize the repositories before pushing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thought&lt;/strong&gt;&lt;br&gt;
This may look like a small Git exercise, but it was valuable because I didn't just learn how to push files to GitHub—I encountered and resolved an actual Git version-control problem.&lt;/p&gt;

&lt;p&gt;As I continue my Cloud and DevOps engineering journey, understanding Git is essential because Git is used extensively for source-code management, collaboration, CI/CD pipelines, infrastructure-as-code projects, and DevOps automation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One error message such as&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;rejected (non-fast-forward)&lt;br&gt;
can initially be frustrating, but understanding why Git rejected the push makes the solution much easier to understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My key takeaway is&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Before pushing, make sure your local repository and remote repository are synchronized.&lt;/p&gt;

&lt;p&gt;And when the remote has commits that the local repository doesn't have, one possible solution is:&lt;/p&gt;

&lt;p&gt;git pull origin main --rebase&lt;br&gt;
git push origin main&lt;br&gt;
This exercise is another step forward in my journey from learning Git to applying Git as part of my Cloud and DevOps workflow.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>git</category>
      <category>azure</category>
    </item>
    <item>
      <title>Enterprise-Grade Static Website Hosting on Azure: Deploy, Secure with SSL, and Connect a Custom Domain</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Wed, 12 Aug 2026 07:55:15 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/enterprise-grade-static-website-hosting-on-azure-deploy-secure-with-ssl-and-connect-a-custom-3gd0</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/enterprise-grade-static-website-hosting-on-azure-deploy-secure-with-ssl-and-connect-a-custom-3gd0</guid>
      <description>&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Today more and more organizations are using serverless static website hosting in order to provide fast, secure and cost-efficient web experiences. Instead of having to maintain virtual machines or web servers, companies can store their HTML, CSS, JavaScript and media files directly in Azure Blob Storage, which in turn reduces their operational burden and at the same time improves scalability and reliability.&lt;/p&gt;

&lt;p&gt;In order to offer users a professional experience, organizations generally set up a custom domain name (for example &lt;a href="http://www.flackern.com" rel="noopener noreferrer"&gt;www.flackern.com&lt;/a&gt;) and secure their websites by using HTTPS together with an SSL/TLS certificate; this guarantees that communication between users and the website is encrypted and thus protects sensitive information while also enhancing trust.&lt;/p&gt;

&lt;p&gt;For this end-to-end project we will create a fully production-ready solution by deploying a static website to Azure Storage, setting up Azure DNS, mapping a custom domain, enabling HTTPS using either Azure CDN or Azure Front Door, and then verifying secure access via a web browser.&lt;/p&gt;

&lt;p&gt;When you are done going through this step by step guide, you will own a fully functional, secure, serverless website that is running on Microsoft Azure in accordance with enterprise best practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By completing this project, you will learn how to:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Create an Azure Storage Account&lt;br&gt;
Enable Static Website Hosting&lt;br&gt;
Upload website files&lt;br&gt;
Configure Azure DNS&lt;br&gt;
Purchase or use an existing domain&lt;br&gt;
Map a custom domain&lt;br&gt;
Enable HTTPS (SSL/TLS)&lt;br&gt;
Validate website accessibility&lt;br&gt;
Understand enterprise serverless architecture&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_Before starting, ensure you have:&lt;br&gt;
_&lt;br&gt;
An active Azure subscription&lt;br&gt;
Owner or Contributor permissions&lt;br&gt;
A registered domain name &lt;br&gt;
A static website (HTML, CSS, JavaScript)&lt;br&gt;
Azure Portal access&lt;br&gt;
Visual Studio Code (optional for editing files)&lt;br&gt;
Basic knowledge of DNS and web hosting&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Deployment Workflow

                Create Resource Group
                       │
                       ▼
             Create Storage Account
                       │
                       ▼
           Enable Static Website Hosting
                       │
                       ▼
            Upload Website Files
                       │
                       ▼
            Test Azure Web Endpoint
                       │
                       ▼
             Create Azure DNS Zone
                       │
                       ▼
               Map Custom Domain
                       │
                       ▼
         Configure Azure CDN / Front Door
                       │
                       ▼
              Enable HTTPS (SSL)
                      │
                      ▼
            Verify Secure Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Download a Free Website Template&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Procedure&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Visit Tooplate (&lt;a href="https://www.tooplate.com/" rel="noopener noreferrer"&gt;https://www.tooplate.com/&lt;/a&gt;)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;.&lt;em&gt;&lt;strong&gt;Select a template of your choice and Download it&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;em&gt;.Download the ZIP package and from your download extract all files locally&lt;/em&gt;&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;_Step 2: Login to your Microsoft Azure Portal by going to &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsoy237p1y4mwjzy0w1tw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsoy237p1y4mwjzy0w1tw.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create a Resources Group&lt;/strong&gt;&lt;br&gt;
We need to create our Resources Group first before we go ahead to create our storage account&lt;/p&gt;

&lt;p&gt;. &lt;em&gt;Search for Resource Group in the search bar at the top of your portal&lt;br&gt;
page and Select/Click on Resource Group&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjucnhxme1mvxfevfum8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjucnhxme1mvxfevfum8l.png" alt=" " width="799" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;.&lt;em&gt;Click on Create to create Resource Group&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fambztbyevkiqeswmu1vk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fambztbyevkiqeswmu1vk.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;.&lt;em&gt;Type the Resource group name, select the region and click Next&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foew2u3gef5gegcr5664x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foew2u3gef5gegcr5664x.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;. &lt;em&gt;Apply tags to your resources to logically organize them by categories and click Next&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6t80nzuat5vgyye73lm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6t80nzuat5vgyye73lm.png" alt=" " width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;.&lt;em&gt;Review the resources group and click on Create&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fduuye7nhka25i8dptk51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fduuye7nhka25i8dptk51.png" alt=" " width="799" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;. _ Click on Resource Group on the left to bring out the resource group you 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqhv95jy7dnjv0virwzbz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqhv95jy7dnjv0virwzbz.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Create an Azure Storage Account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.&lt;em&gt;Search for Storage in the search bar at the top of your portal page and Select/Click on Storage account&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs0v5248eco19s743aogs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs0v5248eco19s743aogs.png" alt=" " width="799" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;In the Basics tab, under Project details, make sure the correct subscription is selected and for the Storage Resource Group click on the list arrow and select resource group you have already created above&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;.Storage account name - flakern2026 (Choose a unique name)&lt;br&gt;
.Region -Select a region&lt;br&gt;
.Preferred Storage Type: Azure Blob Storage&lt;br&gt;
.Performance - Select Standard&lt;br&gt;
.Redundancy - Select Local Redundant Storage (LRS)&lt;br&gt;
.Click the next button&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Click the next button or configure the other sections if required, otherwise leave as default&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Under the security, toggle the Allow enabling anonymous access on individual containers.(This is to give access to our static website)&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Under Encryption, tags leave as default and click Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click on Review + Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;br&gt;
Check if storage account has configured properly or not, if properly configured it will show the create option otherwise you need to check all the configurations again. Then click on the Create 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8xvqn17tjxw5bxzknne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8xvqn17tjxw5bxzknne.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After Deployment, if the deployment is successful it will show your deployment is complete, then click on Go to Resource and you will see our storage account is been created&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzkz35twfn1fequ8hq6j8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzkz35twfn1fequ8hq6j8.png" alt=" " width="800" height="339"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnq1jzu86w1g8hnhpiz6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnq1jzu86w1g8hnhpiz6d.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Enable Static Website Hosting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.&lt;strong&gt;&lt;em&gt;On the left pane search bar type static website and click on static website&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3vqh4t0jz9b41l3xqm17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3vqh4t0jz9b41l3xqm17.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enable Static Website and configure&lt;/strong&gt;:&lt;br&gt;
.Index Document Name:index.html&lt;br&gt;
.Error Document Path: 404.html&lt;br&gt;
.And click Save&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Enabling static websites on the blob service allows you to host static content.&lt;br&gt;
In the Index document name field, provide the name for your default index page, for instance index.html. This is the page that displays when a user navigates to the root of your static website.&lt;br&gt;
In the Error document path field, specify the path to a default error page of your site(404.html). This is the default error page that is displayed when a user attempts to navigate to a page that does not exist in your static website&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure created a storage container to host the static website $WEB, Click on it or Navigate to Containers&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqk5zpcrxebh9rnc22yb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqk5zpcrxebh9rnc22yb0.png" alt=" " width="799" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Upload Website Files&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;click on Upload&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Navigate to where the website folder is located on the computer&lt;/strong&gt;&lt;/em&gt;.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Drag and Drop the files from the location to the provided box&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwnpxm4y5iixdbqoxfdn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwnpxm4y5iixdbqoxfdn.png" alt=" " width="800" height="322"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bf73fionk1yb86ft1eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bf73fionk1yb86ft1eb.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload:&lt;br&gt;
index.html/css/images/js/font/news-detail.html/about this template.txt&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1u9rssmc22egnf97mrqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1u9rssmc22egnf97mrqc.png" alt=" " width="799" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7 — Verify the Deployment By Testing the Azure Website Endpoint&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Open the endpoint: go back to static web site and copy the endpoint&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Confirm the website loads successfully&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdy6vaglnkjjwovvy1ljv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdy6vaglnkjjwovvy1ljv.png" alt=" " width="799" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can open this URL in your browser to view your static website.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://flackern2026.z1.web.core.windows.net/" rel="noopener noreferrer"&gt;https://flackern2026.z1.web.core.windows.net/&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fua2m5sdfzz1egrb6i33s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fua2m5sdfzz1egrb6i33s.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Create an Azure DNS Zone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigate to: Azure DNS Zones → Create&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Configuration:&lt;br&gt;
Name: flackernagentic.com&lt;br&gt;
Resource Group: Flackern-RG&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqr5dy8h03pcx83z4a5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqr5dy8h03pcx83z4a5w.png" alt=" " width="799" height="347"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwp64vrxx8ig1q3a959xl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwp64vrxx8ig1q3a959xl.png" alt=" " width="800" height="355"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg585ye84uzb2d3qy9evy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg585ye84uzb2d3qy9evy.png" alt=" " width="799" height="353"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8zac260e8k7o5sc0q263.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8zac260e8k7o5sc0q263.png" alt=" " width="800" height="350"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4t4qc17wrm3e0rfx5l4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4t4qc17wrm3e0rfx5l4e.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Configure DNS Records&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create the appropriate DNS records.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Click on Recordsets -&amp;gt; +Add&lt;/strong&gt;&lt;br&gt;
Root Domain (Apex)&lt;br&gt;
If using Azure Front Door or Azure CDN, configure an ALIAS or A record according to the service documentation.&lt;br&gt;
Subdomain&lt;br&gt;
Create a CNAME,@,_dnsauth record:&lt;br&gt;
Name         Type                 Points To&lt;br&gt;
www      CNAME      Azure CDN or Front Door endpoint&lt;br&gt;
@             A               YES  (Azure Resources)&lt;br&gt;
_dnsauth      TXT             _3brw0rg1m1a2xpj0b0d67juoch804vg&lt;br&gt;
&lt;strong&gt;If your domain is managed by another registrar, update the nameservers or create the required records there.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frek2cx0cjuquvzjtt2aq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frek2cx0cjuquvzjtt2aq.png" alt=" " width="799" height="347"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdcer7j34k8y4h38t72c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdcer7j34k8y4h38t72c1.png" alt=" " width="800" height="353"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5e1vyi4n1vz9rroohh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5e1vyi4n1vz9rroohh8.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8gvg4d3oes5xqe63u9el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8gvg4d3oes5xqe63u9el.png" alt=" " width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9: Configure Azure Front Door or Azure CDN&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Type Front Door on the search box and click on Front Door icon&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft2alx6q3ivap74d2ffew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft2alx6q3ivap74d2ffew.png" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click on 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q53iq56n5aju2c5nxt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q53iq56n5aju2c5nxt5.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Scroll Down and ensure that Azure Front Door and Quick Create is selected&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Then click on continue to create front Door&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmtp512k509zwug7zj3rx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmtp512k509zwug7zj3rx.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create A Front Door Profile&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Subscription :Azure Subscription&lt;br&gt;
*Resource Group: Select the Resource group created&lt;br&gt;
*Profile Name: Give your front door a profile name&lt;br&gt;
*Tier: Standard&lt;br&gt;
*Endpoint Name: Give it a unique name&lt;br&gt;
*Endpoint hostname: Comes by default&lt;br&gt;
*Origin Type: Toggle down and select storage(static website)&lt;br&gt;
*Origin hostname: Toggle down and select static website created&lt;br&gt;
**Click on Next-&amp;gt;Review + Create&lt;/em&gt;*&lt;br&gt;
&lt;strong&gt;After Validation have been passed click on 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x7zlz0cqa1l06e2ng3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x7zlz0cqa1l06e2ng3y.png" alt=" " width="799" height="317"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfht68129hy1kt63kwc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfht68129hy1kt63kwc1.png" alt=" " width="800" height="350"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5q972b68iixfwpbm9i0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5q972b68iixfwpbm9i0d.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wait until all your resource is been deploy successfully.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;When your resource deployment is complete, click on Go to 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbw2bzxlcggtcep1ndrn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbw2bzxlcggtcep1ndrn.png" alt=" " width="800" height="349"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6uyh0pu66dd6jukuii57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6uyh0pu66dd6jukuii57.png" alt=" " width="799" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Step 10: Update Default Route *&lt;/em&gt;&lt;br&gt;
*To your left click on settings(Toggle Down) and click on Front Door Manager&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8x2hafndhdriftayndgt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8x2hafndhdriftayndgt.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*Click on Default-route(Toggle down)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdq4pmozhj2h3jnf80lt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdq4pmozhj2h3jnf80lt.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*On Default-Route: Update Route-&amp;gt;Click on "Add a new domain"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fynar9js56zwkemrbzl82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fynar9js56zwkemrbzl82.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11: Configure Domain Name&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;On this project we are not using domain name gotten from Azure but we are using domain name gotten from Domain name provider&lt;/strong&gt;&lt;br&gt;
*Domain type: Highlight Non-azure validated Domain&lt;br&gt;
*DNS Management: Highlight all other DNS services&lt;br&gt;
*Custom Domain: We will be using domain name gotten from domain name providers &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9rzusirocksbkg5wypl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9rzusirocksbkg5wypl7.png" alt=" " width="800" height="348"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fccbwxcy2mp7owpw2jksk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fccbwxcy2mp7owpw2jksk.png" alt=" " width="800" height="351"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5mulhu8fih8w0rz3yfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi5mulhu8fih8w0rz3yfr.png" alt=" " width="799" height="347"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forxx9cpb9iszu9glufs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forxx9cpb9iszu9glufs3.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: Register with a domain name with domain name providers like&lt;/strong&gt; &lt;strong&gt;Qservers, Godaddy, Namecheap, Hostgator&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mvrs9ubhh55dqqkoq98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4mvrs9ubhh55dqqkoq98.png" alt=" " width="799" height="361"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvl2gzbo9nrv4ue0v2g4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvl2gzbo9nrv4ue0v2g4i.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Click on Domain on the left side *&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F822z1cjq4fy02072dvz0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F822z1cjq4fy02072dvz0.png" alt=" " width="799" height="345"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Under the Validation state for our website you can see pending&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy925ic7ctlk6adtga8mg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy925ic7ctlk6adtga8mg.png" alt=" " width="799" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In order to solve the pending issue we click on pending and Validate custom domain ownership by copying the record 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1y0jbmwhhuwqwbiny7fp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1y0jbmwhhuwqwbiny7fp.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12: Configure DNS Records on Domain Provider Platform&lt;/strong&gt;&lt;br&gt;
Create the appropriate DNS records.&lt;br&gt;
Copy the following from Azure under Validate custom Domain Ownership and go ahead and paste it under "Add a new DNS record" in your domain name provider&lt;br&gt;
   COPY(AZURE)                                       PASTE(DN PROVIDER)&lt;br&gt;
Record Type: TXT                                TYPE: TXT&lt;br&gt;
Record Name: &lt;em&gt;dnsauth                           Host Name:_dnsauth &lt;br&gt;
Record Value: _3brw0rg1m1a2xpj0b0d67juoch804vg  Add/value:_3brw0rg1&lt;br&gt;
_Click on SAVE CHANGE&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjoip9nqy1rvsg98kbcv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjoip9nqy1rvsg98kbcv6.png" alt=" " width="799" height="348"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;This show we have addded DNS Record successfully&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8jbyz5i901r1o5xs9ha2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8jbyz5i901r1o5xs9ha2.png" alt=" " width="799" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 13: Verify the Secure Website&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Open: &lt;a href="https://www.flackernagentic.com" rel="noopener noreferrer"&gt;https://www.flackernagentic.com&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Verify that:&lt;br&gt;
*The website loads correctly.&lt;br&gt;
*The browser shows a secure padlock.&lt;br&gt;
*The certificate is valid.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6jk1jbh4jizw81bqxuqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6jk1jbh4jizw81bqxuqb.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Hosting a static website on Azure Blob Storage is a smart, serverless way to put your site online — perfect for things like portfolios, landing pages, business sites, or marketing campaigns. When you hook up Azure Storage with services like Azure DNS and Azure CDN or Azure Front Door, you end up with a web setup that’s safe, can handle traffic spikes, and doesn’t break the bank.&lt;/p&gt;

&lt;p&gt;For this project, you set up Azure resources, turned on static website hosting, uploaded your site files, attached a custom domain, added HTTPS for security, and double-checked everything worked. The whole process hits all the marks for modern cloud architecture. It’s a great example to show off your skills in Azure admin, networking, DNS management, and web deployment skills for any Cloud or DevOps engineering portfolio.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>linux</category>
      <category>azure</category>
    </item>
    <item>
      <title>Secure VM Access Without Public IPs: A Beginner's Guide to Azure Bastion Service for Secure And Efficient VM Access</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Mon, 06 Jul 2026 18:47:46 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/secure-vm-access-without-public-ips-a-beginners-guide-to-azure-bastion-service-for-secure-and-1c0h</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/secure-vm-access-without-public-ips-a-beginners-guide-to-azure-bastion-service-for-secure-and-1c0h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Securely managing virtual machines is one of the major challenges of cloud engineering. Generally, administrators use SSH (for Linux VM) and RDP (for Windows) for accessing Azure VMs via public IP addresses. This is a good approach but exposing SSH (port 22) and RDP (port 3389) to the Internet increases the attack surface of your environment hence making it susceptible to brute force and other forms of attacks.&lt;/p&gt;

&lt;p&gt;To overcome this problem, Azure Bastion is a Platform as a Service (PaaS) solution which provides secure SSH and RDP connection from Azure portal using HTTPS (Port 443). The use of Azure Bastion eliminates the need of assigning public IP addresses to virtual machines thus making them safer and easy to manage.&lt;/p&gt;

&lt;p&gt;In this tutorial, you will be able to know how to implement Azure Bastion, set up the required networking configuration, connect to an Ubuntu virtual machine using SSH and understand Azure Bastion security benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What is Azure Bastion?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Bastion is a managed Azure service that provides secure browser-based SSH and RDP connectivity to Azure Virtual Machines without exposing them to the public internet.&lt;/p&gt;

&lt;p&gt;Instead of connecting directly to your VM's public IP, you connect through the Azure Portal, and Azure Bastion establishes a secure session over Microsoft's private network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Benefits of Azure Bastion&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;No Public IP required for Virtual Machines&lt;br&gt;
Secure browser-based SSH and RDP access&lt;br&gt;
No need to expose ports 22 or 3389&lt;br&gt;
Reduced attack surface&lt;br&gt;
Fully managed Platform as a Service (PaaS)&lt;br&gt;
Uses HTTPS (Port 443)&lt;br&gt;
Integrates seamlessly with Azure Virtual Networks&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Objectives&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;In this project, you will:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Create an Azure Virtual Network&lt;br&gt;
Create the AzureBastionSubnet&lt;br&gt;
Deploy Azure Bastion&lt;br&gt;
Create an Ubuntu Virtual Machine&lt;br&gt;
Connect to the VM using Azure Bastion&lt;br&gt;
Verify secure SSH connectivity&lt;br&gt;
Understand Azure Bastion architecture and best practices&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Before beginning, ensure you have:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;An active Microsoft Azure subscription&lt;br&gt;
Access to the Azure Portal&lt;br&gt;
Basic knowledge of Azure Virtual Machines&lt;br&gt;
A web browser&lt;br&gt;
Permissions to create Azure resources&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Azure Bastion Architecture&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 1: Sign in to Azure Portal&lt;/strong&gt;&lt;br&gt;
On your web browser, head over to &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt; and log in with your Microsoft account. If you don't have an account, create or sign up and provide the required information so your Microsoft account can be activated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxj6vh0rlqvbs5tjmn2q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxj6vh0rlqvbs5tjmn2q1.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;A successful login bring you to this page below,&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5zy0fevw15kihzmicz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg5zy0fevw15kihzmicz2.png" alt=" " width="799" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a Resource Group&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Search for Resource Groups on search bar and click on Resource group from the dropdown&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F24ix9u6xord9gmicsc6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F24ix9u6xord9gmicsc6i.png" alt=" " width="799" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;-&lt;strong&gt;Type the Resource group name, select the region and click 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1c0it3irqux116kaz8su.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1c0it3irqux116kaz8su.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apply tags to your resources to logically organize them by categories and click Next&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forcvoqwg0bzg58kmjpw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forcvoqwg0bzg58kmjpw2.png" alt=" " width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review the resources group and click on 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fimnkhdqdsr26w5egp2cv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fimnkhdqdsr26w5egp2cv.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Click on Resource Group on the left to bring out the resource group you created&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa62p3c4tlawdhrxxipa0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa62p3c4tlawdhrxxipa0.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create a Virtual Network&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. .Click on Resource group created and right on the Resource Group page Search for Virtual Network on search bar and click on Virtual Network from the dropdown__&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flaedsuexyllyh80ksp8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flaedsuexyllyh80ksp8s.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Click on +Create(With a plus sign)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy19o23uc24g9lx3fahic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy19o23uc24g9lx3fahic.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Define Basic Settings&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Subscription: Select your subscription&lt;br&gt;
Resource group: Choose an existing resource group or create a new one.&lt;br&gt;
Region: Select the same region as your resource group&lt;br&gt;
Virtual Network Name: Provide a name for the VNet.&lt;br&gt;
Click on Next and Next under the Security&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft5em7hxcfxz184y79qd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft5em7hxcfxz184y79qd5.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;3. Define IP Address Space&lt;/strong&gt;&lt;br&gt;
Enter the IPV4 address 10.0.0.0/16 space for your virtual network. The image below shows that we can have 65,536 IP addresses within this network.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;NOTE:Whenever you create your VNet there is a subnet that comes with it defaultly. We delete the subnet and create our own Subnet&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhehglyfj8mupjn9ql0cp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhehglyfj8mupjn9ql0cp.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-Click Next -&amp;gt; Review + Create -&amp;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhi9uiu8mturzc5afvb1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhi9uiu8mturzc5afvb1z.png" alt=" " width="799" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.Click on Create, the deployment will be submitted, and the VNet will be created&lt;br&gt;
Click on Go To Resources and you will see the the Created VNet&lt;/strong&gt;&lt;/p&gt;

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

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

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

&lt;p&gt;_&lt;strong&gt;Step 4: Configure Subnets&lt;/strong&gt; _&lt;br&gt;
&lt;strong&gt;Now, let's Create two subnets within the virtual network&lt;/strong&gt;:&lt;br&gt;
_1 AzureBastionSubnet&lt;br&gt;
2 Default Subnet( Create another subnet)&lt;br&gt;
_&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type Subnet on the search bar and click on Subnet&lt;br&gt;
 Click +Subnet to define each subnet&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm582uvrzwf0y18ujipq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm582uvrzwf0y18ujipq7.png" alt=" " width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subnet Creation- Add a Subnet&lt;/strong&gt;&lt;br&gt;
_AzureBastionSubnet&lt;br&gt;
Azure Bastion requires a dedicated subnet named exactly:&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1u1jsunmpy1knzntbvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1u1jsunmpy1knzntbvk.png" alt=" " width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Configure each subnet as follows:&lt;/strong&gt;&lt;br&gt;
_Subnet purpose: Azure Bastion&lt;br&gt;
Subnet Name: AzureBastionSubnet&lt;br&gt;
Subnet Address range: Specify the subnet range within the virtual network address space (10.0.0.0/26). _&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create another subnet(Default VM Subnet)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F47hd25t1ix7vlunucq8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F47hd25t1ix7vlunucq8a.png" alt=" " width="799" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5: Create an Ubuntu Virtual Machine&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1.Type "Virtual Machines" in the search bar at the top. Once you see virtual machine display click on the virtual machine&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnhxfbqpc4p80plhb39ct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnhxfbqpc4p80plhb39ct.png" alt=" " width="799" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When you click on "Create" button, it will display a drop down as shown below. You will then click on the Azure virtual machine highlighted in red arrow. This will take you to the project details where you will begin to fill the basic configuration for you to start creating your virtual machine&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy7u52io1yiv1ppsy3ajz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy7u52io1yiv1ppsy3ajz.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;Create virtual Machine under the BASIC CONFIGURATIONS by filling the following tabs as follows:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subscription: Select your subscription(Azure Subscription 1)&lt;br&gt;
Resource Group: Use an existing or create a resource group (FlackernProj-rg)&lt;br&gt;
Virtual machine name: flackern-VM or use your desired username&lt;br&gt;
Region: Select a nearby or preferred location ((Africa) South Africa North)&lt;br&gt;
Availability options: Leave it as default (Availability Zone)&lt;br&gt;
Availability Zone: Zone 1 (For this demo we select only one zone)&lt;br&gt;
Security type: Standard&lt;br&gt;
Image: Ubuntu Server 24.04 LTS - x64 Gen2&lt;br&gt;
VM architecture: x64&lt;br&gt;
Size: Standard_B2as_v2 - 2 vcpus, 8 GiB memory ($71.32)&lt;br&gt;
Authentication type: SSH public key&lt;br&gt;
Username: Use your desired username&lt;br&gt;
SSH public key source: Generate new key pair&lt;br&gt;
SSH Key Type: RSA SSH Format&lt;br&gt;
Key pair name: flackern-vm_key or use your desired username&lt;br&gt;
Public inbound ports: NONE&lt;br&gt;
Select inbound ports: All traffic from the internet will be blocked by default. &lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;3.Configure Disks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click on Next : Disks &amp;gt;, this leads you to on the next page, you can use the default OS disk size, use the Image default (30 GiB) and for the OS disk type, use the default settings Premium SSD (locally-redundant storage) unless you have unique configuration requirements.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;4.Networking Configuration&lt;/strong&gt;&lt;br&gt;
On the bottom of the last page in Step 3, Click on Next : Networking &amp;gt;, this leads you to the Network interface page below:&lt;br&gt;
Create your virtual network and subnet or make use of the one you have created before&lt;br&gt;
Virtual Network: flackernproj-Vnet (Vnet created before)&lt;br&gt;
Subnet : Default Subnet (flackern-subnet)&lt;br&gt;
Public IP: None&lt;br&gt;
Public Inbound Port: None&lt;br&gt;
&lt;strong&gt;Note: We are creating a private VM,so you select None for Public IP and Public Inbound Port.&lt;/strong&gt;&lt;br&gt;
*&lt;em&gt;**Remember: Public VM, Public IP&lt;/em&gt;*&lt;br&gt;
          &lt;strong&gt;Private VM, No 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuyjeez9i3duo74jtd116.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuyjeez9i3duo74jtd116.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;5.Management, monitoring, Advanced, Tags: These pages usually displayed as default. Find their default screenshots below. However, you may wish to skip them and proceed to “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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffb34c1clgntejclmkg36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffb34c1clgntejclmkg36.png" alt=" " width="800" height="481"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5o9ebw72xb2gn3xpmu9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5o9ebw72xb2gn3xpmu9r.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4b7gnwc8u2txrj669sg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4b7gnwc8u2txrj669sg.png" alt=" " width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5. Generate SSH private Key&lt;/strong&gt;&lt;br&gt;
After a successful Linux VM deployment process, Azure will validate the configuration&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then Click "Review + create". This will show validation passed as highlighted below.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fub0cs17yrqcyosfmbjw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fub0cs17yrqcyosfmbjw2.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then click “Create” . This will take you to the next page to generate new key pair. Then, you will click on “Download private key and create resource” as shown below. The new key pair will then be downloaded on your PC, while Azure will also provision your VM.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7s7al6qrx19z0qmqhvwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7s7al6qrx19z0qmqhvwi.png" alt=" " width="799" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download private key and create resource, afterwards, the deployment will start.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wait for Deployment&lt;/strong&gt;: Azure will now provision your virtual machine. This process may take a few minutes. Then the next page will show that your deployment is complete as shown below, then you will click on “Go to Resource”&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyblh307d3ae52a517ueh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyblh307d3ae52a517ueh.png" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Deploy Azure Bastion&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Type "Bastion" in the search bar at the top. Once you see Bastion display click on the Bastion&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6f7pykgvd057x4b85i5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6f7pykgvd057x4b85i5.png" alt=" " width="799" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you click on "Create" button,this will take you to the project details where you will begin to fill the basic configuration for you to start creating your Bastion&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Advanced, Tags: These pages usually displayed as default. Find their default screenshots below. However, you may wish to skip them and proceed to “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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffnmtv75uoq6wegc8hrx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffnmtv75uoq6wegc8hrx2.png" alt=" " width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click on Create after validation is passed&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Far10wj44wjtwnaakldnm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Far10wj44wjtwnaakldnm.png" alt=" " width="799" height="364"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazjryxads2i32jb9hfhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazjryxads2i32jb9hfhg.png" alt=" " width="800" height="353"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4zpcg8g6l8ln7lcneela.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4zpcg8g6l8ln7lcneela.png" alt=" " width="800" height="359"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqknnzb47p5ystuibj7ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqknnzb47p5ystuibj7ox.png" alt=" " width="799" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect to VM using Bastion:&lt;/strong&gt;&lt;br&gt;
Once the VM is deployed, go to the VM in the Azure portal.&lt;br&gt;
Click on the Connect button.&lt;br&gt;
Select Bastion as the type of connection.&lt;br&gt;
Enter the credentials (username and password or SSH key) and click Connect.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzc50ne9ifvjv467ddgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzc50ne9ifvjv467ddgg.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provide your credentials to securely connect to the virtual machine using Bastion&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Connection Settings&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
Protocol: SSH&lt;br&gt;
Port : 22&lt;br&gt;
Authentication Type: SSH Private Key from Local File&lt;br&gt;
Username: Use the username you created&lt;br&gt;
Local File: Pick up the Key-pem you downloaded on your download,open the file on your azure portal and click on connect&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Immediately you Click Connect, within a few seconds, Azure opens an SSH session directly in your browser.(We are connecting to our VM Securely)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feic4yffpqd2897jqthk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feic4yffpqd2897jqthk6.png" alt=" " width="800" height="431"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmp7p9la19mvgv5tgvuj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmp7p9la19mvgv5tgvuj6.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Congratulations we have successfully SSH into our Virtual Machine securely using Bastion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Azure Bastion is one of the most effective ways to securely manage Azure Virtual Machines without exposing them to the public internet. By providing browser-based SSH and RDP access over HTTPS, it eliminates the need for public IP addresses and open management ports, significantly improving the security posture of your cloud environment.&lt;/p&gt;

&lt;p&gt;In this step by step guide you created a Virtual Network, configured the required AzureBastionSubnet, deployed an Azure Bastion host, created an Ubuntu virtual machine, and successfully connected to it using a secure browser-based SSH session. &lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>cloud</category>
      <category>azure</category>
    </item>
    <item>
      <title>Deploying My First Ubuntu Virtual Machine on Microsoft Azure: SSH Access, Apache2 Installation, and Web Server Configuration"</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Tue, 23 Jun 2026 22:21:55 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/deploying-my-first-ubuntu-virtual-machine-on-microsoft-azure-ssh-access-nginx-installation-and-33bd</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/deploying-my-first-ubuntu-virtual-machine-on-microsoft-azure-ssh-access-nginx-installation-and-33bd</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;Microsoft Azure Virtual Machines (VMs) provide scalable cloud computing resources that allow users to deploy and manage operating systems in the cloud. In this project, I created an Ubuntu 22.04 Virtual Machine in Azure, connected to it using SSH from both Git Bash through the Visual Studio Code, updated the server, installed Apache2, configured network security settings, and deployed a custom web page accessible through a public IP address.&lt;/p&gt;

&lt;p&gt;This hands-on lab helped me gain practical experience with Azure Infrastructure as a Service (IaaS), Linux administration, SSH connectivity, and web server deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Objectives&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Create an Ubuntu 22.04 Azure VM&lt;br&gt;
Download and secure a .pem private key&lt;br&gt;
Connect to the VM using Git Bash&lt;br&gt;
Update and upgrade Ubuntu packages&lt;br&gt;
Install and verify Apache2&lt;br&gt;
Create a custom web page&lt;br&gt;
Access the website through a browser&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Prerequisites&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Active Azure Subscription&lt;br&gt;
Azure Portal access&lt;br&gt;
Git Bash installed&lt;br&gt;
Internet connection&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1. Log In to Azure Portal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On your web browser, head over to &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt; and log in with your Microsoft account. If you don't have an account, create or sign up and provide the required information so your Microsoft account can be activated.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;A successful login bring you to this page below,&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazdlzl9fymkhvdgdxnei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazdlzl9fymkhvdgdxnei.png" alt=" " width="799" height="252"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;**_Step 2: Create a Resources Group&lt;br&gt;
_&lt;/em&gt;**&lt;br&gt;
&lt;strong&gt;We need to create our Resources Group first before we go ahead to create our virtual machine&lt;/strong&gt;&lt;br&gt;
. &lt;em&gt;Search for Resource Group in the search bar at the top of your portal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;page and Select/Click on Resource Group.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Click on Create to create Resource Group&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Type the Resource group name, select the region and click Next&lt;/strong&gt;&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8p2eha92ifs3m1q81vqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8p2eha92ifs3m1q81vqc.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Apply tags to your resources to logically organize them by categories and click Next&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1gfplexa7mdawxa02tde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1gfplexa7mdawxa02tde.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
Review the resources group and click on Create&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtp2xnvtdtmb85mynok8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtp2xnvtdtmb85mynok8.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
_ Click on Resource Group on the left to bring out the resource group you created_&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 2. Create a New Virtual Machine&lt;/strong&gt;&lt;br&gt;
 Type "Virtual Machines" in the search bar at the top. Once you see virtual machine display click on the virtual machine&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Once you click on the virtual machine, your screen will be displayed as shown below. Click on CREATE&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;When you click on  "Create" button, it will display a drop down as shown below. You will then click on the Azure virtual machine highlighted in red arrow. This will take you to the project details where you will begin to fill the basic configuration for you to start creating your virtual machine.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo9hpc41udauya77g3602.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo9hpc41udauya77g3602.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;br&gt;
Create virtual Machine under the &lt;strong&gt;BASIC CONFIGURATIONS&lt;/strong&gt; by filling the following tabs as follows:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Subscription: Select your subscription(Azure Subscription 1)&lt;br&gt;
Resource Group: Use an existing or create a resource group (FlackernProj-rg)&lt;br&gt;
Virtual machine name: flackern-vm or use your desired username&lt;br&gt;
Region: Select a nearby or preferred location ((Africa) South Africa North)&lt;br&gt;
Availability options: Leave it as default (Availability Zone)&lt;br&gt;
Availability Zone: Zone 1 (For this demo we select only one zone)&lt;br&gt;
Security type: Standard&lt;br&gt;
Image: Ubuntu Server 24.04 LTS - x64 Gen2&lt;br&gt;
VM architecture: x64&lt;br&gt;
Size: Standard_B2as_v2 - 2 vcpus, 8 GiB memory ($71.32)&lt;br&gt;
Authentication type: SSH public key&lt;br&gt;
Username: Use your desired username&lt;br&gt;
SSH public key source: Generate new key pair&lt;br&gt;
SSH Key Type: RSA SSH Format&lt;br&gt;
Key pair name: flackern-vm_key or use your desired username&lt;br&gt;
Public inbound ports: Allow selected ports&lt;br&gt;
Select inbound ports: HTTP (80) and SSH (22)&lt;/em&gt;&lt;/p&gt;

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

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

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

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

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

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

&lt;p&gt;&lt;strong&gt;Step 3. Configure Disks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click on Next : Disks &amp;gt;, this leads you to on the next page, you can use the default OS disk size, use the Image default (30 GiB) and for the OS disk type, use the default settings Premium SSD (locally-redundant storage) unless you have unique configuration requirements.&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Step 4. Networking Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;On the bottom of the last page in Step 3, Click on Next : Networking &amp;gt;, this leads you to the Network interface page below:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Create your virtual network and subnet or make use of the one you have created before&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;&lt;strong&gt;Management,&lt;/strong&gt; &lt;strong&gt;monitoring&lt;/strong&gt;, &lt;strong&gt;Advanced&lt;/strong&gt;, &lt;strong&gt;Tags&lt;/strong&gt;: These pages usually displayed as default. Find their default screenshots below. However, you may wish to skip them and proceed to “Review+Create”.&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Step 5. Generate SSH private Key&lt;/strong&gt;&lt;br&gt;
After a successful Linux VM deployment process, Azure will validate the configuration&lt;/p&gt;

&lt;p&gt;_Then Click "Review + create". This will show validation passed as highlighted below.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Then click “Create” . This will take you to the next page to generate new key pair. Then, you will click on “Download private key and create resource” as shown below. The new key pair will then be downloaded on your PC, while Azure will also provision your VM.&lt;br&gt;
_&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4haud37056qw7m9xdeot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4haud37056qw7m9xdeot.png" alt=" " width="799" height="348"&gt;&lt;/a&gt;&lt;br&gt;
Download private key and create resource, afterwards, the deployment will start.&lt;/p&gt;

&lt;p&gt;_Wait for Deployment: Azure will now provision your virtual machine. This process may take a few minutes. Then the next page will show that your deployment is complete as shown below, then you will click on “Go to Resource”&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb1ctx0p88w1nxso3vyx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb1ctx0p88w1nxso3vyx2.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Next, click on “Connect” and then “Connect”. This will take you to a page with other options to connect your VM.&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F77dh2mlf5oy33pynsyfh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F77dh2mlf5oy33pynsyfh.png" alt=" " width="799" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieve Public IP Address&lt;/strong&gt;: Once the virtual machine is deployed, note down the Public IP address on Azure portal overview page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Also go to your download and save the downloaded key pair into a file for later use when connecting via SSH.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: SSH into VM Using Git Bash -&lt;/strong&gt;Connect via SSH Key Authentication*&lt;em&gt;:&lt;/em&gt;*&lt;br&gt;
Open your Command Line Interface on Windows or Terminal on your Visual studio code using gitbash or power shell&lt;br&gt;
Move the .pem file into a secure folder.&lt;br&gt;
Set permissions:&lt;br&gt;
chmod 600 flackern-vm_key.pem&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 7: SSH into VM Using Azure Cloud Shell&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Connect:&lt;/em&gt;&lt;br&gt;
ssh -i flackern-vm_key.pem &lt;a href="mailto:flackern-vm@102.37.144.183"&gt;flackern-vm@102.37.144.183&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkimqdv9grla37p0djs9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkimqdv9grla37p0djs9.png" alt=" " width="799" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Update Ubuntu Packages&lt;/strong&gt;&lt;br&gt;
Using sudo apt update and click enter.This will update our virtual machine&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 9: Install Apache2&lt;/strong&gt;&lt;br&gt;
Instal apache2 on our VM and click enter&lt;br&gt;
Install:&lt;br&gt;
sudo apt install apache2 -y&lt;/p&gt;

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

&lt;p&gt;Now let us confirm if apache2! Was actually installed on the virtual machine, we can do this by going to your Azure site and copy the ip address and paste it on the web page and see the result.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Test Your Web Server&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Open a web browser and enter the public IP address you obtained earlier. If apache2 is running correctly, you should see a default welcome page.&lt;br&gt;
Congratulations! You have successfully created a Linux virtual machine on Microsoft Azure and installed the Apache2 web server. This is a foundational step for hosting web applications or deploying other web services.&lt;/em&gt;&lt;/p&gt;

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

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>azure</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Creating An Azure Virtual Network(VNET) And Multiple Subnets: A Step-By-Step Beginner's Guide</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Mon, 08 Jun 2026 10:58:44 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/creating-an-azure-virtual-networkvnet-and-multiple-subnets-a-step-by-step-beginners-guide-31n6</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/creating-an-azure-virtual-networkvnet-and-multiple-subnets-a-step-by-step-beginners-guide-31n6</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
A virtual Network (VNet) is a logically isolated private network you create inside Azure. Virtual Network (VNET) is one of the essential building blocks of Microsoft Azure networking architecture and also the foundation of your networking setup.&lt;/p&gt;

&lt;p&gt;Virtual Network allows resources running in Microsoft Azure, like Virtual Machines, Storage Accounts, Applications, to communicate with each other, internet, and even on-premises network environments.&lt;/p&gt;

&lt;p&gt;A Subnet is a subdivision of your VNet. It allows you to divide your network into smaller, logical sections and assign different resources to different sections based on their purpose.&lt;/p&gt;

&lt;p&gt;Subnets are logical segments of a Virtual Network which assist in organizing and securing network resources. In this project, I have designed an Azure Virtual Network with three separate Subnets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Objectives&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The objectives of this project are to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
Create an Azure Virtual Network (VNet)&lt;/li&gt;
&lt;li&gt;
Configure an address space for the VNet&lt;/li&gt;
&lt;li&gt;
Create three separate subnets&lt;/li&gt;
&lt;li&gt;
Understand Azure networking fundamentals&lt;/li&gt;
&lt;li&gt;
Document the deployment process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Prerequisites&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before starting, ensure you have:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;An active Azure Subscription&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Access to Azure Portal&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Internet Connection&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Appropriate permissions to create Azure resources&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Azure Portal:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Architecture Overview&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Azure Virtual Network (10.0.0.0/16)&lt;br&gt;
│&lt;br&gt;
├── Subnet-1 (10.0.1.0/24)&lt;br&gt;
│&lt;br&gt;
├── Subnet-2 (10.0.2.0/24)&lt;br&gt;
│&lt;br&gt;
└── Subnet-3 (10.0.3.0/24)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Step 1: Sign in to Azure Portal&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Open Azure Portal.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign in using your Azure credentials.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frfcjaujbglkh34d4ndxt.png" alt=" " width="799" height="392"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 2: Create a Resource Group&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Search for Resource Groups on search bar and click on Resource group from the dropdown&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%2Fftxfmid9i2rzq3ji9e85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fftxfmid9i2rzq3ji9e85.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on Create &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%2Frqnalypadnsmyigdtjub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqnalypadnsmyigdtjub.png" alt=" " width="799" height="356"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type the Resource group name, select the region and click Next&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%2Fngo1ands50odfhhdnw40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngo1ands50odfhhdnw40.png" alt=" " width="799" height="356"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply tags to your resources to logically organize them by categories and click Next&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%2Fd614dpdqg07zqfs14hm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd614dpdqg07zqfs14hm0.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review the resources group and click on Create&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%2Fu8fmvzbzzeqx5459nvro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8fmvzbzzeqx5459nvro.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on Resource Group on the left to bring out the resource group you 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%2F9geemikytuzzcpnqci33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9geemikytuzzcpnqci33.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 3: Create a Virtual Network&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
1.Click on Resource group created and right on the Resource Group page Search for Virtual Network on search bar and click on Virtual Network from the dropdown &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%2F16dea1nfr2snamp823e8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16dea1nfr2snamp823e8.png" alt=" " width="799" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on +Create(With a plus sign)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdd5kii9xdkafsjsaxt1p.png" alt=" " width="799" height="353"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Define Basic Settings&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Subscription: Select your subscription&lt;br&gt;
Resource group: Choose an existing resource group or create a new one.&lt;br&gt;
Region: Select the same region as your resource group&lt;br&gt;
Virtual Network Name: Provide a name for the VNet.&lt;br&gt;
Click on Next and Next under the Security&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%2Faarfvcgkdynqzdnsr88z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faarfvcgkdynqzdnsr88z.png" alt=" " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;3. Define  IP Address Space&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Enter the IPV4 address 10.0.0.0/16 space for your virtual network. The image below shows that we can have 65,536 IP addresses within this network.&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%2Falb9pya5xgp33lx1bcwt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Falb9pya5xgp33lx1bcwt.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_NOTE: Whenever you create your VNet there is a subnet that comes with it defaultly. We delete the subnet and create our own Subnet&lt;br&gt;
_&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%2Fmfcjia49zh4xdwqrvian.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfcjia49zh4xdwqrvian.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;- Click Next -&amp;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%2F5fs7qcm6naalhhlh5ur4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fs7qcm6naalhhlh5ur4.png" alt=" " width="800" height="353"&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%2Fuwixasnz5s9mnjxu8pzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwixasnz5s9mnjxu8pzz.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-4. Click on Create, the deployment will be submitted, and the VNet will be created&lt;/strong&gt;&lt;br&gt;
_Click on Go To Resources and you will see the the Created VNet&lt;br&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%2Fxjfbnwclneep2r5bps92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjfbnwclneep2r5bps92.png" alt=" " width="800" height="350"&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%2Fn0vsqfaef3b6rkhsauoi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0vsqfaef3b6rkhsauoi.png" alt=" " width="800" height="351"&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%2F2d15hj8gbpbkaqrkkp4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d15hj8gbpbkaqrkkp4x.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_Step 4: Configure Subnets _&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Now, let's configure the Three subnets within the virtual network:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type Subnet on the search bar and click on Subnet&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%2Fzxd4pyy9q0km9w2uzikr.png" alt=" " width="799" height="347"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Configure each subnet as follows:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Subnet Name: Enter a name for the subnet (e.g., Subnet1, Subnet2,Subnet3, etc.).&lt;br&gt;
Subnet Address range: Specify the subnet range within the virtual network address space (10.0.0.0/24). Ensure each subnet range is within the /24 address space 10.0.0.0 - 10.0.0.255)&lt;/strong&gt;&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;To have a view of the subnets created, click on Settings on the left pane and then on Subnets&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%2F8uthrvyosyod4aplkq6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8uthrvyosyod4aplkq6f.png" alt=" " width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations! You have successfully created an Azure virtual network with Three subnets using the address space (10.0.0.0/24)&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>cloud</category>
      <category>community</category>
    </item>
    <item>
      <title>From Template to Cloud: Hosting a Free Static Website on Azure Blob Storage Step-by-Step</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Fri, 05 Jun 2026 12:34:49 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/from-template-to-cloud-hosting-a-free-static-website-on-azure-blob-storage-step-by-step-fdo</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/from-template-to-cloud-hosting-a-free-static-website-on-azure-blob-storage-step-by-step-fdo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Website hosting has been greatly improved through the use of cloud computing. This has made it easier for individuals as well as businesses to access, scale, and use hosting services at a reasonable price. One of the easiest and most efficient methods that developers may use to host a static site on Microsoft Azure is the Static Website Hosting option offered by Azure Blob Storage, which allows developers to upload their static files without the need for a traditional web or virtual server (i.e., HTML, CSS, JavaScript, and media files).&lt;/p&gt;

&lt;p&gt;In this project, I will download a free static website template from Tooplate, customize the downloaded version using Visual Studio Code (VS Code), and then deploy the new version to Azure Blob Storage for public viewing. This will involve editing all content, images, styles, and branding so that the template reflects how I want it to look when it is completed.&lt;/p&gt;

&lt;p&gt;To develop my own static website using Azure Blob Storage, I will first navigate to Tooplate and browse the templates available for modification (or further development). After deciding which template is most suitable, I will download the ZIP package of the template and extract it onto my local computer's disk drive. Then, I will open the ZIP file's contents using VS Code to customize all aspects of the website prior to publishing.&lt;/p&gt;

&lt;p&gt;After customizing the template, we will create an Azure storage account, enable Static Website Hosting, upload the customized/static website files to the Azure Blob Storage $web container, and then publish the created static website into the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Project Objectives&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.Download a free static website template from Tooplate.&lt;br&gt;
.Go to VS code and edit the downloaded template from there&lt;br&gt;
.Create a Resources Group&lt;br&gt;
.Create an Azure Storage Account.&lt;br&gt;
.Enable Azure Static Website Hosting.&lt;br&gt;
.Upload website files to Azure Blob Storage.&lt;br&gt;
.Deploy and access the website through Azure's public endpoint.&lt;br&gt;
.Document the deployment process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Prerequisites&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we begin, ensure you have the following installed on your machine:&lt;br&gt;
Active Azure Subscription&lt;br&gt;
Microsoft Azure Account(&lt;a href="https://dev.tourl"&gt;portal.azure.com&lt;/a&gt;)&lt;br&gt;
VS Code download and install &lt;a href="https://dev.tourl"&gt;(https://code.visualstudio.com/Download)&lt;/a&gt;&lt;br&gt;
Internet Connection&lt;br&gt;
ZIP Extraction Tool&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 1: Download a Free Website Template&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Procedure&lt;/strong&gt;&lt;br&gt;
Visit Tooplate &lt;a href="https://dev.tourl"&gt;(https://www.tooplate.com/)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;Browse available templates.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;Select a template of your choice and Download it&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;Download the ZIP package and from your download extract all files locally&lt;/p&gt;

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

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

&lt;p&gt;Step 2: Download the latest version of vs code and install it.&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Open the vs code&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;Click on file -&amp;gt; Select Open Folder-&amp;gt; Select the unzip folder and the folder containing the /index.html,css ,js,images ,fonts ,news-detail.html will be upload on the Vs code template&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;Click index.html which has the code as seen&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;You can edit some elements especially those on white characters&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;You can edit elements as they appear in the lines 48&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Be careful not to change the code, so the browser will not be scattered &lt;/p&gt;

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

&lt;p&gt;The new edited index.html page will look like this after what you edited on the template is save.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Storage Hierarchy:&lt;/strong&gt;&lt;br&gt;
Azure Subscription → Resource Group → Storage Account → Container → Blob Files&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_Step 3:First thing login to your Microsoft Azure Portal by going to &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;.&lt;br&gt;
_&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%2Fuky0xxog0u0ffp05c4x3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuky0xxog0u0ffp05c4x3.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_Step 4: Create a Resources Group&lt;br&gt;
_&lt;/strong&gt;&lt;br&gt;
We need to create our Resources Group first before we go ahead to create our storage account&lt;br&gt;
. Search for Resource Group in the search bar at the top of your portal&lt;/p&gt;

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

&lt;p&gt;. &lt;em&gt;Click on Create to create Resource Group&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;. &lt;em&gt;Type the Resource group name, select the region and click Next&lt;/em&gt;&lt;/p&gt;

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

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

&lt;p&gt;. &lt;em&gt;Apply tags to your resources to logically organize them by categories and click Next&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;. &lt;em&gt;Review the resources group and click on Create&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;. _ Click on Resource Group on the left to bring out the resource group you created_&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5: Create an Azure Storage Account&lt;/strong&gt;&lt;br&gt;
.&lt;em&gt;Search for Storage in the search bar at the top of your portal page and Select/Click on Storage account.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;_Click on Create _&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;In the Basics tab, under Project details, make sure the correct subscription is selected and for the Storage Resource Group click on the list arrow and select resource group you have already created above.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;Storage account name - flakernpro (Choose a unique name)&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Region -Select a region&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Preferred Storage Type: Azure Blob Storage&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Performance - Select Standard&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Redundancy - Select Local Redundant Storage (LRS)&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Click the next button &lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Click the next button or configure the other sections if required, otherwise leave as default.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Under the security, toggle the Allow enabling anonymous access on individual containers.(This is to give access to our static website)&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Under Encryption, tags leave as default and click Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click on Review + Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;br&gt;
Check if storage account has configured properly or not, if properly configured it will show the create option otherwise you need to check all the configurations again. Then click on the Create Button.&lt;/p&gt;

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

&lt;p&gt;After Deployment, if the deployment is successful it will show your deployment is complete, then click on Go to Resource and you will see our storage account is been created.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;_Step 6: Enable Static Website Hosting&lt;br&gt;
_&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;On the left pane search bar type static website and click on static website.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Enable Static Website and configure:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Index Document Name:index.html&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Error Document Path: 404.html&lt;br&gt;
 &lt;strong&gt;.&lt;/strong&gt;And click Save&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Enabling static websites on the blob service allows you to host static content.&lt;br&gt;
In the Index document name field, provide the name for your default index page, for instance index.html. This is the page that displays when a user navigates to the root of your static website.&lt;br&gt;
In the Error document path field, specify the path to a default error page of your site(404.html). This is the default error page that is displayed when a user attempts to navigate to a page that does not exist in your static website.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure created a storage container to host the static website $WEB, Click on it or Navigate to Containers&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;On Data storage dropdown&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Click container&lt;br&gt;
&lt;strong&gt;.&lt;/strong&gt;Click $WEB&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 7: Upload Website Files&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;click on Upload&lt;/strong&gt;.&lt;br&gt;
Navigate to where the website folder is located on the computer.&lt;br&gt;
Drag and Drop the files from the location to the provided box.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Upload:&lt;br&gt;
index.html/css/images/js/font/news-detail.html/about this template.txt&lt;/em&gt;&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%2Fnqrr13ij12d5c1g5ebkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqrr13ij12d5c1g5ebkn.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Step 8 — Verify the Deployment&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Open the endpoint: go back to static web site and copy the endpoint&lt;/p&gt;

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

&lt;p&gt;You can open this URL in your browser to view your static website.&lt;br&gt;
&lt;a href="https://flackernprod.z19.web.core.windows.net/" rel="noopener noreferrer"&gt;https://flackernprod.z19.web.core.windows.net/&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;In this project, I successfully deployed a free static website template downloaded from Tooplate to Azure Blob Storage using Azure Static Website Hosting. This approach actually provides a simple, secure, scalable, and cost-effective solution for hosting static websites without the difficulty of managing web servers.&lt;/p&gt;

&lt;p&gt;The project reinforced key Azure concepts such as Resource Group, Storage Accounts, Blob Containers, Static Website Hosting, and cloud-based web deployment. For beginners entering cloud computing, DevOps, or Azure administration, this is an excellent hands-on project that demonstrates practical cloud hosting skills while building confidence in Azure services.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>cloud</category>
      <category>azure</category>
    </item>
    <item>
      <title>Azure Entra ID User &amp; Role Management — Step-by-Step Practical Guide With A Simple Excercise</title>
      <dc:creator>olakunle makanjuola</dc:creator>
      <pubDate>Mon, 25 May 2026 17:50:55 +0000</pubDate>
      <link>https://dev.to/olakunle_makanjuola_92754/azure-entra-id-user-role-management-step-by-step-practical-guide-with-a-simple-excercise-3h5n</link>
      <guid>https://dev.to/olakunle_makanjuola_92754/azure-entra-id-user-role-management-step-by-step-practical-guide-with-a-simple-excercise-3h5n</guid>
      <description>&lt;p&gt;Before going into the step by step practical guide on Creating User Via Azure Active Directory (Microsoft Entra ID) and Assigning Roles with RBAC,I will like to define key concepts to learn:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Entra ID: Azure's Identity Management System&lt;/strong&gt;
Microsoft Entra ID(previously called Azure Active Directory or Azure AD) is the service that manages all identities in Azure. Every user account, every application identity, every group, all of them are stored and managed here. When you log into the Azure Portal, Entra ID is checking your credentials behind the scene.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;2. Identity And Access Management(IAM)&lt;/strong&gt;&lt;br&gt;
Identity and Access Management(IAM) Is the system that answers three very important questions about every person or application that tries to use cloud: WHO are you? Are you really who you say you are? And what are you ALLOWED to do here? Which talks about IDENTITY! AUTHENTICATION! AUTHORISATION!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Role Based Access Control(RBAC)&lt;/strong&gt;&lt;br&gt;
RBAC is how Azure controls what a logged-in user is allowed to DO. Instead of giving everyone full admin access. RBAC lets you assign specific roles to specific people. RBAC allows administrators to assign permissions based on roles instead of assigning permissions individually.&lt;br&gt;
Examples:&lt;br&gt;
Global Administrator&lt;br&gt;
User Administrator&lt;br&gt;
Security Administrator&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.Principle of Least Privilege (PoLP)&lt;/strong&gt;&lt;br&gt;
Users should only have the minimum access required to perform their duties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Entra ID User &amp;amp; Role Management Practice Exercise&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a new user in Azure Entra ID.&lt;/p&gt;

&lt;p&gt;Sign in with the newly created user account.&lt;/p&gt;

&lt;p&gt;Grant the user Global Administrator access.&lt;/p&gt;

&lt;p&gt;Using the newly promoted account, create another new user in Azure Entra ID.&lt;/p&gt;

&lt;p&gt;After creating the second user, revoke the Global Administrator access from the first user account.&lt;/p&gt;

&lt;p&gt;Document the entire process with screenshots and explanations&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Practice Exercise involved:&lt;/strong&gt;&lt;br&gt;
In this exercise, I carried out administrative tasks in Microsoft Azure using Microsoft Entra ID.&lt;br&gt;
Creating users in Azure Entra ID&lt;br&gt;
Assigning Global Administrator privileges&lt;br&gt;
Testing administrative access&lt;br&gt;
Revoking elevated permissions&lt;br&gt;
Demonstrating Identity and Access Management (IAM) best practices&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This step by step guide will helped us gain practical experience in Azure identity administration and role-based access control (RBAC).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before starting, ensure you have:&lt;br&gt;
An active Azure subscription&lt;br&gt;
Access to Azure Portal&lt;br&gt;
First thing login to your Microsoft Azure Portal by going to &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you do not have an azure account sign up and create an account for free with this link &lt;a href="https://azure.microsoft.com/en-us/free/" rel="noopener noreferrer"&gt;https://azure.microsoft.com/en-us/free/&lt;/a&gt;. Registration will require a phone number and a debit or credit card details to validate your account even for the free account. You have a choice between the free or pay as you go account.&lt;/p&gt;

&lt;p&gt;Official Portal:&lt;br&gt;
&lt;a href="https://dev.tourl"&gt;Microsoft Azure Portal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Create a New User in Azure Entra ID&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.First thing login to your Microsoft Azure Portal by going to &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;2.Search for &lt;strong&gt;Microsoft Entra ID&lt;/strong&gt; in the search bar at the top of your portal page and &lt;strong&gt;Select Microsoft Entra ID.&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%2Frr561aqk801lz25p4khj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr561aqk801lz25p4khj.png" alt=" " width="788" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You are now in the Default Directory| Overview page.&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;Navigate to Users → + New user → Create new user.&lt;/strong&gt;&lt;br&gt;
Type Users on the search box and click on Users then click on + New User with a drop down arrow and click on create a new user &lt;/p&gt;

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

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

&lt;p&gt;4.&lt;strong&gt;Fill in the details:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;User principal name: Shalom1503&lt;br&gt;
Display name: Shalom Ife&lt;br&gt;
Password:***************&lt;br&gt;
First name: Shalom&lt;br&gt;
Last name: Ife&lt;br&gt;
Usage location: Nigeria&lt;br&gt;
&lt;strong&gt;And click on Next(Property)-&amp;gt; Next(Assignment)-&amp;gt; Review + create -&amp;gt; Create&lt;/strong&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Step 2 — Sign In with the Newly Created User Account&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a new browser/incognito window&lt;/li&gt;
&lt;li&gt;Go to: Microsoft Sign In Page&lt;/li&gt;
&lt;li&gt;Sign in using:
. Newly created username
. Username: &lt;a href="mailto:Shalom1503@makansgreatolakunleoutlook.onmicrosoft.com"&gt;Shalom1503@makansgreatolakunleoutlook.onmicrosoft.com&lt;/a&gt;
. Password: saved password
. Change password when prompted
. Complete MFA setup when prompted by scanning the QRCODE&lt;/li&gt;
&lt;/ol&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Step 3: Assign a Role to a User(Grant Global Administrator Access)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Come to Default Directory through the Entra ID &lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;2.Type USER on the search box and Click on the USER → SHALOM IFE(New User Created)&lt;/p&gt;

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

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

&lt;p&gt;3.Select Assigned roles → + Add assignment.&lt;/p&gt;

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

&lt;p&gt;4.Choose admin roles that you want to assign to user and add it&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4 — Use the Newly Promoted Account to Create Another User&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# Sign in with the promoted user account to create another new user in Azure Entra ID&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;1.login to your Microsoft Azure Portal by going to &lt;br&gt;
     (&lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;https://portal.azure.com&lt;/a&gt;)&lt;br&gt;
   2.From the Default Directory page of the User created &lt;br&gt;
    '&lt;a href="mailto:Shalom1503@makansgreatolakunleoutlook.onmicrosoft.com"&gt;Shalom1503@makansgreatolakunleoutlook.onmicrosoft.com&lt;/a&gt;".&lt;br&gt;
       &lt;strong&gt;Click on +ADD → User → Create new user.&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%2F8ocz1jmqzy5rs887e7da.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ocz1jmqzy5rs887e7da.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 &lt;strong&gt;Fill in the details:&lt;/strong&gt;&lt;br&gt;
   User principal name: Favour1403&lt;br&gt;
   Display name: Favour Timi&lt;br&gt;
   Password:***************&lt;br&gt;
   First Name:************&lt;br&gt;
   Last Name:*************&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And click on Next(Properties)-&amp;gt; Next(Assignment)-&amp;gt;&lt;br&gt;&lt;br&gt;
   Review + create -&amp;gt; Create&lt;/strong&gt; &lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Step 5 — Revoke Global Administrator Access from the First User&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Sign in using the original administrator account&lt;br&gt;
 login to your Microsoft Azure Portal by going to&lt;br&gt;&lt;br&gt;
 &lt;a href="https://portal.azure.com/auth/login/" rel="noopener noreferrer"&gt;https://portal.azure.com/auth/login/&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%2Fue9xps53jci5kqujt54m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fue9xps53jci5kqujt54m.png" alt=" " width="449" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;3.Click on Manage button under the overview to bring down the arrow&lt;br&gt;&lt;br&gt;
  which brings out the Roles and administrator button.&lt;br&gt;
  &lt;strong&gt;OVERVIEW -&amp;gt; MANAGE -&amp;gt; ROLES AND ADMINISTRATOR&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%2F0n8w7ut172xxvw6d30jx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n8w7ut172xxvw6d30jx.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the search bar under the Administrator Roles, type the Global Administrator Roles given to the User and click on it &lt;/p&gt;

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

&lt;p&gt;5.Click on the User given the Global administrator Roles(Shalom Ife)&lt;/p&gt;

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

&lt;p&gt;6.Click the button in front of Global Administrator to make the X Remove Assignments button active and click on it and it will ask whether to Remove selected assignment. Click on YES&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%2Fdgt2ify3rco4uuih9t9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgt2ify3rco4uuih9t9r.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.This successfully removed assignment "Global Administrator" from the &lt;br&gt;
 USER (Shalom Ife)&lt;/p&gt;

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

&lt;p&gt;Removing/Revoking privileged access follows the concept called the Principle of Least Privilege (PoLP), ensuring users only retain permissions necessary for their tasks or give people only the minimum access needed to do their job&lt;/p&gt;

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

&lt;p&gt;This assignment provided hands-on experience with Azure identity and access management using Microsoft Entra ID. This allow us to learn how to create users, assign administrative privileges, manage RBAC roles, and apply security best practices in a cloud environment.&lt;/p&gt;

&lt;p&gt;The exercise also reinforced the importance of privilege management and secure administrative operations in enterprise cloud environments.&lt;/p&gt;

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