<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Oladosu Ibrahim</title>
    <description>The latest articles on Forem by Oladosu Ibrahim (@sudaisib).</description>
    <link>https://forem.com/sudaisib</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3288237%2F8e6ae6bc-a508-4f82-a522-37a204d9905d.jpeg</url>
      <title>Forem: Oladosu Ibrahim</title>
      <link>https://forem.com/sudaisib</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sudaisib"/>
    <language>en</language>
    <item>
      <title>Getting Data from Multiple Sources in Power BI</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Sun, 21 Dec 2025 15:27:32 +0000</pubDate>
      <link>https://forem.com/sudaisib/getting-data-from-multiple-sources-in-power-bi-17bc</link>
      <guid>https://forem.com/sudaisib/getting-data-from-multiple-sources-in-power-bi-17bc</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most important skills every Data Analyst must master is the ability to connect Power BI to multiple data sources, understand the data structure, and assess data quality before building reports.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk you through how to get data from multiple sources in Power BI Desktop, preview the data using Power Query, and use data profiling features to quickly identify data quality issues.&lt;/p&gt;

&lt;p&gt;This guide is practical and mirrors real-world Power BI projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What You Will Learn&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By the end of this guide, you will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;Power BI Desktop&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Connect to &lt;strong&gt;SQL Server databases&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Import data from &lt;strong&gt;CSV files&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Preview and understand data using &lt;strong&gt;Power Query Editor&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Column Quality, Column Distribution, and Column Profile&lt;/strong&gt; features&lt;/li&gt;
&lt;li&gt;Identify common data quality issues before modeling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with Power BI Desktop
&lt;/h2&gt;

&lt;p&gt;To begin, download the starter files used in this lab from Microsoft’s official repository:&lt;/p&gt;

&lt;p&gt;🔗 Download link:&lt;br&gt;
&lt;a href="https://github.com/MicrosoftLearning/PL-300-Microsoft-Power-BI-Data-Analyst/raw/Main/Allfiles/Labs/01-get-data-in-power-bi/01-get-data.zip" rel="noopener noreferrer"&gt;https://github.com/MicrosoftLearning/PL-300-Microsoft-Power-BI-Data-Analyst/raw/Main/Allfiles/Labs/01-get-data-in-power-bi/01-get-data.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downloading:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract the folder to
&lt;code&gt;C:\Users\Student\Downloads\01-get-data&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;01-Starter-Sales Analysis.pbix&lt;/strong&gt; file in &lt;strong&gt;Power BI Desktop&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This starter file has been preconfigured to disable automatic relationship detection, allowing us to focus strictly on &lt;strong&gt;data loading and profiling&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Data from Microsoft Excel&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In real business environments, most enterprise data lives in databases. Let’s connect Power BI to &lt;strong&gt;SQL Server&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Steps&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In Power BI Desktop, go to &lt;strong&gt;Home → Get Data → More&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%2Fft09umokwkx6jceb968v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft09umokwkx6jceb968v.png" alt="Image1" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Microsoft Excel&lt;/strong&gt; and &lt;strong&gt;Connect&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdhl0j49mf8wwydg4mwz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdhl0j49mf8wwydg4mwz.png" alt="Image2" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Server&lt;/strong&gt; field, enter:&lt;br&gt;
&lt;code&gt;localhost&lt;/code&gt;&lt;br&gt;
(Leave the Database field blank)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;strong&gt;Windows authentication&lt;/strong&gt; if prompted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ignore the encryption warning and continue&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once connected, expand the &lt;strong&gt;AdventureWorksDW2020&lt;/strong&gt; database.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Select the following tables:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;DimEmployee&lt;/li&gt;
&lt;li&gt;DimEmployeeSalesTerritory&lt;/li&gt;
&lt;li&gt;DimProduct&lt;/li&gt;
&lt;li&gt;DimReseller&lt;/li&gt;
&lt;li&gt;DimSalesTerritory&lt;/li&gt;
&lt;li&gt;FactResellerSales&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Transform Data&lt;/strong&gt; to open &lt;strong&gt;Power Query Editor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You have now connected Power BI to &lt;strong&gt;six tables from SQL Server&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Previewing and Understanding Data in Power Query
&lt;/h2&gt;

&lt;p&gt;Power Query allows you to &lt;strong&gt;inspect your data before loading it&lt;/strong&gt; into the data model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exploring the Queries Pane
&lt;/h3&gt;

&lt;p&gt;On the left side, you’ll see one query per table. Each query represents a connection to a data source.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reviewing the DimEmployee Table
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;DimEmployee&lt;/strong&gt; table stores employee details.&lt;/p&gt;

&lt;p&gt;Key observations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The table contains &lt;strong&gt;296 rows and 33 columns&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Some columns contain &lt;strong&gt;Table or Value links&lt;/strong&gt;, which represent relationships&lt;/li&gt;
&lt;li&gt;These columns can later be used to merge or relate tables&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using Data Profiling Features in Power Query
&lt;/h2&gt;

&lt;p&gt;Data profiling helps you &lt;strong&gt;quickly assess data quality and structure&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Column Quality
&lt;/h3&gt;

&lt;p&gt;Enable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View → Column Quality&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Valid values&lt;/li&gt;
&lt;li&gt;Empty (null) values&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Position&lt;/strong&gt; column contains &lt;strong&gt;94% empty values&lt;/strong&gt;, which is a potential data quality issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Column Distribution
&lt;/h3&gt;

&lt;p&gt;Enable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View → Column Distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps you understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distinct values&lt;/li&gt;
&lt;li&gt;Unique values&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EmployeeKey&lt;/strong&gt; has 296 distinct and unique values
This makes it a good &lt;strong&gt;primary key&lt;/strong&gt; for relationships.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Column Profile
&lt;/h3&gt;

&lt;p&gt;Enable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View → Column Profile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the &lt;strong&gt;DimReseller&lt;/strong&gt; table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;BusinessType&lt;/strong&gt; column shows a data issue&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;“Warehouse” appears twice as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Warehouse&lt;/li&gt;
&lt;li&gt;Ware House (misspelled)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This kind of inconsistency must be cleaned before analysis.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reviewing the Fact Table
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;FactResellerSales&lt;/strong&gt; table stores transaction-level sales data.&lt;/p&gt;

&lt;p&gt;Key insight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;TotalProductCost&lt;/strong&gt; column has &lt;strong&gt;8% missing values&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Missing cost data can affect profit calculations and business decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Identifying this early prevents inaccurate reporting later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Data from CSV Files
&lt;/h2&gt;

&lt;p&gt;Not all data comes from databases. Analysts often work with flat files like CSVs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Importing a CSV File
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In Power Query Editor:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Home → New Source → Text/CSV

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;ResellerSalesTargets.csv&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Review the preview and click &lt;strong&gt;OK&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;One row per salesperson per year&lt;/li&gt;
&lt;li&gt;Monthly sales targets&lt;/li&gt;
&lt;li&gt;No empty values (hyphens are used instead)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Importing Another CSV File
&lt;/h3&gt;

&lt;p&gt;Repeat the same steps to import &lt;strong&gt;ColorFormats.csv&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Product colors&lt;/li&gt;
&lt;li&gt;HEX codes for background and font formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, you should have &lt;strong&gt;two new CSV-based queries&lt;/strong&gt; added to your model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Step Matters in Real Projects
&lt;/h2&gt;

&lt;p&gt;Before building visuals and dashboards, every Data Analyst must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the &lt;strong&gt;structure of the data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Identify &lt;strong&gt;missing values and inconsistencies&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Confirm &lt;strong&gt;unique keys for relationships&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Know which columns need &lt;strong&gt;cleaning or transformation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skipping this step often leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrong insights&lt;/li&gt;
&lt;li&gt;Broken relationships&lt;/li&gt;
&lt;li&gt;Misleading dashboards&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Getting data from multiple sources in Power BI is more than just clicking &lt;strong&gt;Get Data&lt;/strong&gt;.&lt;br&gt;
It’s about &lt;strong&gt;understanding your data before modeling and visualization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Power Query gives you powerful tools to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect data quality&lt;/li&gt;
&lt;li&gt;Detect issues early&lt;/li&gt;
&lt;li&gt;Build reliable and trustworthy reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mastering this step puts you on the right path to becoming a &lt;strong&gt;confident Power BI Data Analyst&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>data</category>
      <category>analyst</category>
    </item>
    <item>
      <title>Building and Updating Docker Containers: A Practical Hands-On Guide for Beginners</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Thu, 11 Dec 2025 18:56:09 +0000</pubDate>
      <link>https://forem.com/sudaisib/building-and-updating-docker-containers-a-practical-hands-on-guide-for-beginners-3bd1</link>
      <guid>https://forem.com/sudaisib/building-and-updating-docker-containers-a-practical-hands-on-guide-for-beginners-3bd1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today’s fast-paced development environment, consistency and portability are critical. Applications must run reliably across different machines, environments, or even in the cloud. Docker provides a solution by packaging your application along with its dependencies into a &lt;strong&gt;container&lt;/strong&gt;, ensuring it behaves the same everywhere.&lt;/p&gt;

&lt;p&gt;In this hands-on guide, you’ll learn how to containerize a simple Node.js “Todo List” application. You don’t need prior experience with Node.js — the focus is on understanding how Docker builds, packages, and runs applications.&lt;/p&gt;

&lt;p&gt;By the end of this tutorial, you’ll be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a Docker image using a Dockerfile&lt;/li&gt;
&lt;li&gt;Run your application inside a container&lt;/li&gt;
&lt;li&gt;Expose your app to your local host&lt;/li&gt;
&lt;li&gt;Understand how images, containers, and layers interact&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Ensure you have the following tools installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Desktop (latest version)&lt;/li&gt;
&lt;li&gt;Git (for cloning the sample app)&lt;/li&gt;
&lt;li&gt;VS Code or another code editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools allow you to build and run containers smoothly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Prepare the Application
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open a new folder in VS Code and name it &lt;code&gt;container&lt;/code&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%2F8k8ai20ar5pe5wxrue7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8k8ai20ar5pe5wxrue7l.png" alt="Image1" width="800" height="429"&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%2F4spup3r8vwnkd6vinz41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4spup3r8vwnkd6vinz41.png" alt="Image2" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open a terminal in that folder.&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%2Fxalmd9wl5cyrdnecu37h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxalmd9wl5cyrdnecu37h.png" alt="Image3" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone the sample Node.js application:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/docker/getting-started-app.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see the following folder structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getting-started-app/
│── .dockerignore
│── package.json
│── README.md
│── spec/
│── src/
└── yarn.lock
&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.amazonaws.com%2Fuploads%2Farticles%2Fm3apftr4gbr0imfk6g74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3apftr4gbr0imfk6g74.png" alt="Image4" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the source code you will containerize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create the Dockerfile
&lt;/h2&gt;

&lt;p&gt;In the &lt;code&gt;getting-started-app&lt;/code&gt; folder, create a file named &lt;strong&gt;Dockerfile&lt;/strong&gt; and add:&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%2Fl71kl8wl37faxq04r9lx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl71kl8wl37faxq04r9lx.png" alt="Image5" width="800" height="429"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# syntax=docker/dockerfile:1&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:lts-alpine&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--production&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "src/index.js"]&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FROM&lt;/strong&gt; selects a lightweight Node.js image&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WORKDIR&lt;/strong&gt; sets the working directory inside the container&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COPY&lt;/strong&gt; transfers your source code into the container&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RUN&lt;/strong&gt; installs your dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CMD&lt;/strong&gt; defines the command to start the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EXPOSE&lt;/strong&gt; documents the port your app listens on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This file tells Docker how to build your image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Build the Docker Image
&lt;/h2&gt;

&lt;p&gt;Navigate to your project folder by doing ls and cd into the folder/directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/getting-started-app
&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.amazonaws.com%2Fuploads%2Farticles%2Fit6r9uxsp936gi36cu4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit6r9uxsp936gi36cu4d.png" alt="Image6" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; getting-started &lt;span class="nb"&gt;.&lt;/span&gt;
&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.amazonaws.com%2Fuploads%2Farticles%2Fnd1z87gffui7by4btic2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnd1z87gffui7by4btic2.png" alt="Image7" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What happens here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Docker downloads the Node.js base image (if not already on your machine)&lt;/li&gt;
&lt;li&gt;Copies your app files&lt;/li&gt;
&lt;li&gt;Installs dependencies&lt;/li&gt;
&lt;li&gt;Packages everything into a Docker image named &lt;code&gt;getting-started&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 4: Run Your Container
&lt;/h2&gt;

&lt;p&gt;Start the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3000:3000 getting-started
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flags explained:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-d&lt;/strong&gt;: runs the container in the background&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p HOST:CONTAINER&lt;/strong&gt;: maps container port 3000 to your local port 3000&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Visit &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; in your browser. Your Todo List app should be running. Add tasks, mark them complete, and see how everything works inside the container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Verify Running Containers
&lt;/h2&gt;

&lt;p&gt;To check which containers are running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see the container ID, image name, port mappings, and status — confirming that your app is active.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Update the Application
&lt;/h2&gt;

&lt;p&gt;Suppose you want to change the “empty text” message to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You have no todo items yet! Add one above!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Edit &lt;code&gt;src/static/js/app.js&lt;/code&gt; and update line 56:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- &amp;lt;p className="text-center"&amp;gt;No items yet! Add one above!&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ &amp;lt;p className="text-center"&amp;gt;You have no todo items yet! Add one above!&amp;lt;/p&amp;gt;
&lt;/span&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fdl968qjp3wp0tvycjlel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdl968qjp3wp0tvycjlel.png" alt="Image8" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rebuild the Docker image:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; getting-started &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Start a new container using the updated code, You probably saw an error.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3000:3000 getting-started
&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.amazonaws.com%2Fuploads%2Farticles%2F9scmgnyeig3644jpyc18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9scmgnyeig3644jpyc18.png" alt="Image9" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop the old container:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
docker stop &amp;lt;container-id&amp;gt; 
docker &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;container-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker ps&lt;/strong&gt;: To get the ID of the container, then insert the Container ID into the docker stop and docker rm to update&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the updated container:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-dp&lt;/span&gt; 127.0.0.1:3000:3000 getting-started
&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.amazonaws.com%2Fuploads%2Farticles%2Fxysircb2hlk8iqzvf2b7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxysircb2hlk8iqzvf2b7.png" alt="Image10" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refresh &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; to see your updated text.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>containers</category>
      <category>software</category>
    </item>
    <item>
      <title>Implementing Intersite Connectivity in Azure: Seamless Communication Across Virtual Networks</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Thu, 23 Oct 2025 11:04:32 +0000</pubDate>
      <link>https://forem.com/sudaisib/implementing-intersite-connectivity-in-azure-seamless-communication-across-virtual-networks-2jhh</link>
      <guid>https://forem.com/sudaisib/implementing-intersite-connectivity-in-azure-seamless-communication-across-virtual-networks-2jhh</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In cloud environments, organizations often segment their IT infrastructure into multiple virtual networks (VNets) for better security, performance, and management. For instance, a company may separate core IT services such as DNS and security from departmental workloads like manufacturing or R&amp;amp;D.&lt;/p&gt;

&lt;p&gt;However, in many cases, applications and services across these networks still need to communicate securely for example, when a manufacturing app needs to access a shared DNS or authentication service hosted in the core network.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Azure Intersite Connectivity&lt;/strong&gt; comes in. By implementing &lt;strong&gt;Virtual Network Peering&lt;/strong&gt;, you can connect multiple VNets in Azure, allowing traffic to flow privately through Microsoft’s backbone network without requiring VPNs or gateways.&lt;/p&gt;

&lt;p&gt;In this hands-on lab, you’ll explore how to establish communication between two Azure virtual networks and verify connectivity using Network Watcher and PowerShell. You’ll also create a &lt;strong&gt;custom route&lt;/strong&gt; to control traffic flow for specific subnets.&lt;/p&gt;

&lt;p&gt;By the end, you’ll understand how to interconnect Azure VNets to build secure, scalable multi-tier cloud architectures.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Create and configure multiple virtual networks and virtual machines.&lt;/li&gt;
&lt;li&gt;Use Network Watcher to troubleshoot connections between VNets.&lt;/li&gt;
&lt;li&gt;Configure &lt;strong&gt;VNet peering&lt;/strong&gt; to enable secure communication.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;custom route&lt;/strong&gt; to manage and control traffic between subnets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Lab Scenario&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Your organization operates separate virtual networks for core IT services and manufacturing systems. For security reasons, these environments are isolated — but certain business processes require secure communication between them.&lt;/p&gt;

&lt;p&gt;In this exercise, you’ll configure peering between these VNets, allowing both areas to communicate over Azure’s backbone while maintaining network segmentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Task 1: Create a Core Services Virtual Machine and Virtual Network&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Begin by deploying your first virtual machine and network.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to the &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;Azure portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for &lt;strong&gt;Virtual Machines&lt;/strong&gt; and select &lt;strong&gt;Create → 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.amazonaws.com%2Fuploads%2Farticles%2Fvo260odh9ze370fa15rn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo260odh9ze370fa15rn.png" alt="Image1" width="800" height="439"&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%2F0py30xvtgeh5n15hb0gn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0py30xvtgeh5n15hb0gn.png" alt="Image2" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the Basics tab, provide the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group: &lt;code&gt;az104-rg5&lt;/code&gt; (create one if needed)&lt;/li&gt;
&lt;li&gt;Virtual machine name: &lt;code&gt;CoreServicesVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Region: East US&lt;/li&gt;
&lt;li&gt;Image: Windows Server 2019 Datacenter – x64 Gen2&lt;/li&gt;
&lt;li&gt;Size: Standard_D2s_v3&lt;/li&gt;
&lt;li&gt;Username: &lt;code&gt;localadmin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: create a complex one&lt;/li&gt;
&lt;li&gt;Public inbound ports: None
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsw3i9tarabgh7uv1ubz5.png" alt="Image3" width="800" height="435"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5u8q0wlok0n4m4e5j7p.png" alt="Image4" width="800" height="432"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;strong&gt;Networking&lt;/strong&gt; tab, choose &lt;strong&gt;Create new&lt;/strong&gt; for Virtual Network and set:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;CoreServicesVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Address range: &lt;code&gt;10.0.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet name: &lt;code&gt;Core&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet range: &lt;code&gt;10.0.0.0/24&lt;/code&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xswvija90dc7x4buplq.png" alt="Image5" width="800" height="434"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable boot diagnostics under the &lt;strong&gt;Monitoring&lt;/strong&gt; tab.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffudca6ijxfuibs1u9sre.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffudca6ijxfuibs1u9sre.png" alt="Image6" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review and create the 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.amazonaws.com%2Fuploads%2Farticles%2F8wdj690wr3rsu2ry15uw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wdj690wr3rsu2ry15uw.png" alt="Image7" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This creates both the virtual network and the VM that will represent your core services environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Task 2: Create a Manufacturing Virtual Machine and Virtual Network&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Next, create another virtual machine in a separate virtual network.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;From the &lt;strong&gt;Virtual Machines&lt;/strong&gt; page, select &lt;strong&gt;Create → Virtual machine&lt;/strong&gt; again.&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%2Fvo260odh9ze370fa15rn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo260odh9ze370fa15rn.png" alt="Image8" width="800" height="439"&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%2F0py30xvtgeh5n15hb0gn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0py30xvtgeh5n15hb0gn.png" alt="Image9" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide the following configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group: &lt;code&gt;az104-rg5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Virtual machine name: &lt;code&gt;ManufacturingVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Region: East US&lt;/li&gt;
&lt;li&gt;Image: Windows Server 2019 Datacenter – x64 Gen2&lt;/li&gt;
&lt;li&gt;Size: Standard_D2s_v3&lt;/li&gt;
&lt;li&gt;Username: &lt;code&gt;localadmin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: same secure password&lt;/li&gt;
&lt;li&gt;Public inbound ports: None
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbj9gz897qesu9jhyjsi.png" alt="Image10" width="800" height="431"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Under &lt;strong&gt;Networking&lt;/strong&gt;, create a new virtual network:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;ManufacturingVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Address range: &lt;code&gt;172.16.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet name: &lt;code&gt;Manufacturing&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet range: &lt;code&gt;172.16.0.0/24&lt;/code&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0yc8w43gqnca95h7z8m.png" alt="Image11" width="800" height="434"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable boot diagnostics and create the VM.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have two isolated environments — Core Services and Manufacturing — ready for intersite connectivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 3: Test the Connection Between Virtual Machines Using Network Watcher
&lt;/h2&gt;

&lt;p&gt;Before establishing peering, let’s verify that the VMs cannot currently communicate.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the portal, search for &lt;strong&gt;Network Watcher&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%2Fvodpvabo9wwmnwlf299l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvodpvabo9wwmnwlf299l.png" alt="Image12" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Network diagnostic tools&lt;/strong&gt;, select &lt;strong&gt;Connection troubleshoot&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the following parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source type: Virtual machine&lt;/li&gt;
&lt;li&gt;Source VM: &lt;code&gt;CoreServicesVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Destination type: Virtual machine&lt;/li&gt;
&lt;li&gt;Destination VM: &lt;code&gt;ManufacturingVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Protocol: TCP&lt;/li&gt;
&lt;li&gt;Destination port: 3389
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixw4l0beby3avzzz5axw.png" alt="Image13" width="800" height="434"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the diagnostic test.&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%2Firept0kem6s0j5y1yu9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firept0kem6s0j5y1yu9g.png" alt="Image14" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result will show &lt;strong&gt;Unreachable&lt;/strong&gt;, confirming that traffic cannot flow between VNets without peering.&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%2F373qsbzbu4refttcxtpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F373qsbzbu4refttcxtpz.png" alt="Image15" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Task 4: Configure Virtual Network Peering Between VNets&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, enable connectivity by creating a peering relationship.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Navigate to the &lt;code&gt;CoreServicesVnet&lt;/code&gt; 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.amazonaws.com%2Fuploads%2Farticles%2F52489037sya464nilzq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52489037sya464nilzq2.png" alt="Image16" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Settings&lt;/strong&gt;, select &lt;strong&gt;Peerings&lt;/strong&gt; and choose &lt;strong&gt;+ Add&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%2Fq6e71i2w2wqvnfta497q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6e71i2w2wqvnfta497q.png" alt="Image17" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Peering link name: &lt;code&gt;CoreServicesVnet-to-ManufacturingVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network: &lt;code&gt;ManufacturingVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Allow access both ways (check both boxes for access and forwarded traffic).
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0kplcz8978ifuvvalwo.png" alt="Image18" width="800" height="428"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to save the configuration.&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%2Fpsyv6dqj6kdjj8d7vpc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsyv6dqj6kdjj8d7vpc6.png" alt="Image19" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your VNets are now linked via Azure’s private backbone — enabling secure intersite communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 5: Create a Custom Route
&lt;/h2&gt;

&lt;p&gt;To control traffic flow between subnets, you’ll create a user-defined route (UDR).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;code&gt;CoreServicesVnet&lt;/code&gt; 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.amazonaws.com%2Fuploads%2Farticles%2Fvdt6gsh14ihjuih3czod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdt6gsh14ihjuih3czod.png" alt="Image20" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Subnets&lt;/strong&gt;, select &lt;strong&gt;+ Subnet&lt;/strong&gt; and create a new one named &lt;code&gt;perimeter&lt;/code&gt; with address range &lt;code&gt;10.0.1.0/24&lt;/code&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%2F022f5miqsx484g3ogyq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F022f5miqsx484g3ogyq0.png" alt="Image21" width="800" height="522"&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%2F3rezqjoli9f84ph0k62d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rezqjoli9f84ph0k62d.png" alt="Image22" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the portal, search for &lt;strong&gt;Route tables&lt;/strong&gt; and create a new route table named &lt;code&gt;rt-CoreServices&lt;/code&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%2Fw9mieyanoakoxyxr1ruj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9mieyanoakoxyxr1ruj.png" alt="Image23" width="800" height="530"&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%2Fwspjy9ebsh3a99s66gjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwspjy9ebsh3a99s66gjd.png" alt="Image24" width="800" height="524"&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%2Fu4snoimwwi0lwx7u7w7c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4snoimwwi0lwx7u7w7c.png" alt="Image25" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once created, open the route table and add a new route:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route name: &lt;code&gt;PerimetertoCore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Destination type: IP Addresses&lt;/li&gt;
&lt;li&gt;Destination: &lt;code&gt;10.0.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Next hop type: Virtual appliance&lt;/li&gt;
&lt;li&gt;Next hop address: &lt;code&gt;10.0.1.7&lt;/code&gt; (representing a future Network Virtual Appliance)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k3r4bmvsj41s6ibbnzd.png" alt="Image26" width="800" height="531"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0kszna9h34lo2b5n5f6.png" alt="Image27" width="800" height="530"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Associate this route table with the &lt;strong&gt;Core&lt;/strong&gt; subnet of your CoreServicesVnet.&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%2Fveezo3rn4f8g3606vjgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fveezo3rn4f8g3606vjgp.png" alt="Image28" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With this, traffic from the perimeter subnet will be routed through the NVA before reaching internal services — providing an additional layer of control and security.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Cleanup&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To avoid unnecessary costs, delete the resources after completing the lab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the resource group &lt;code&gt;az104-rg5&lt;/code&gt; from the Azure portal.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;You’ve successfully implemented intersite connectivity between two virtual networks in Azure. This setup is foundational for enterprise-grade architectures — enabling cross-department communication, hybrid setups, and multi-region workloads.&lt;/p&gt;

&lt;p&gt;In the next lab, you’ll build upon this by exploring more advanced traffic control mechanisms and network security configurations to further strengthen your Azure infrastructure.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>network</category>
      <category>networking</category>
    </item>
    <item>
      <title>Implementing Azure Web Apps: From Setup to Scaling Your Cloud Applications</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Tue, 21 Oct 2025 16:45:30 +0000</pubDate>
      <link>https://forem.com/sudaisib/implementing-azure-web-apps-from-setup-to-scaling-your-cloud-applications-3ie8</link>
      <guid>https://forem.com/sudaisib/implementing-azure-web-apps-from-setup-to-scaling-your-cloud-applications-3ie8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As businesses modernize their IT infrastructure, hosting web applications in the cloud has become a key strategy for improving scalability, reliability, and cost efficiency. Many organizations still rely on on-premises servers to host their company websites, but these setups often come with high maintenance costs, limited scalability, and hardware refresh challenges.&lt;/p&gt;

&lt;p&gt;To eliminate the burden of physical infrastructure, companies are increasingly adopting &lt;strong&gt;Azure App Service&lt;/strong&gt; a fully managed &lt;strong&gt;Platform as a Service (PaaS)&lt;/strong&gt; solution for hosting web applications built on popular runtime stacks like &lt;strong&gt;.NET, Java, Python, Node.js, and PHP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this hands-on lab, you’ll learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and configure an Azure Web App.&lt;/li&gt;
&lt;li&gt;Set up a deployment slot for staging and production environments.&lt;/li&gt;
&lt;li&gt;Configure continuous deployment using GitHub.&lt;/li&gt;
&lt;li&gt;Swap deployment slots for seamless updates.&lt;/li&gt;
&lt;li&gt;Implement autoscaling to ensure performance under variable loads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of this guide, you’ll understand how Azure Web Apps help teams deploy faster, scale smarter, and maintain high availability all without managing servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skilling Objectives
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Deploy a PHP-based Azure Web App using App Service.&lt;/li&gt;
&lt;li&gt;Configure staging and production deployment slots for testing and release management.&lt;/li&gt;
&lt;li&gt;Automate deployments using a GitHub repository.&lt;/li&gt;
&lt;li&gt;Perform slot swaps to promote tested code into production.&lt;/li&gt;
&lt;li&gt;Configure autoscaling to automatically adjust resources based on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Task 1: Create and Configure an Azure Web App
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why start here?
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Azure Web App&lt;/strong&gt; is the foundational component of Azure App Service. It provides a managed environment to host your website code, manage scaling, and integrate DevOps pipelines — all without provisioning virtual machines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign in to the &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;Azure portal&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for &lt;strong&gt;App Services&lt;/strong&gt; and select &lt;strong&gt;+ Create → Web App&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%2Fv3wjt1txlj4wro6g4ye3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3wjt1txlj4wro6g4ye3.png" alt="Image1" width="800" height="428"&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%2Fuxk1g2978qmgjy2hkqe0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxk1g2978qmgjy2hkqe0.png" alt="Image2" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;em&gt;Basics&lt;/em&gt; tab, provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subscription:&lt;/strong&gt; Your Azure subscription&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource group:&lt;/strong&gt; Create or select an existing group&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web app name:&lt;/strong&gt; A unique name (e.g., &lt;code&gt;WebAppDemo123&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish:&lt;/strong&gt; Code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime stack:&lt;/strong&gt; PHP 8.2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operating system:&lt;/strong&gt; Linux&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Region:&lt;/strong&gt; East US&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing plan:&lt;/strong&gt; Premium V3 (P1V3)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fov27sdtprygetsaq9lgp.png" alt="Image3" width="800" height="428"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl73fkzk1w11goh2puqr.png" alt="Image4" width="800" height="428"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + Create → 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%2Fov1j37jzn5e9s8qld2rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fov1j37jzn5e9s8qld2rp.png" alt="Image5" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployment completes, click &lt;strong&gt;Go to Resource&lt;/strong&gt; to view your newly created Web App.&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%2Fucredhkq7oswfdiu0u2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucredhkq7oswfdiu0u2k.png" alt="Image6" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a fully managed Azure Web App running PHP on Linux ready for configuration and deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 2: Create and Configure a Deployment Slot
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Deployment slots&lt;/strong&gt; allow you to host multiple versions of your app within the same App Service plan. They are invaluable for &lt;strong&gt;staging&lt;/strong&gt;, &lt;strong&gt;testing&lt;/strong&gt;, and &lt;strong&gt;blue-green deployments&lt;/strong&gt; without downtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;From your Web App’s blade, open the &lt;strong&gt;Default domain&lt;/strong&gt; link to confirm the app is running.&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%2F0f4u2tbt6ha3heclmhol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f4u2tbt6ha3heclmhol.png" alt="Image7" 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.amazonaws.com%2Fuploads%2Farticles%2Fy4wpk3i0qmjocjtt7ko4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4wpk3i0qmjocjtt7ko4.png" alt="Image8" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Return to the portal and navigate to &lt;strong&gt;Deployment slots&lt;/strong&gt; under your Web App.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;+ Add Slot&lt;/strong&gt;, name it &lt;code&gt;staging&lt;/code&gt;, and choose &lt;strong&gt;Do not clone settings&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yjo6grgfmgoqc038tpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yjo6grgfmgoqc038tpt.png" alt="Image9" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Add&lt;/strong&gt;. Once created, you’ll see both &lt;strong&gt;Production&lt;/strong&gt; and &lt;strong&gt;Staging&lt;/strong&gt; slots listed.&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%2Fjd19evu8hygi8hc8k3f8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd19evu8hygi8hc8k3f8.png" alt="Image10" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;strong&gt;staging&lt;/strong&gt; slot to view its unique URL.&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%2Fasq9yqmf8wvhvajdbjg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasq9yqmf8wvhvajdbjg7.png" alt="Image11" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a staging environment to test your app safely before releasing it to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 3: Configure Web App Deployment Settings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;Continuous deployment ensures that your app service always reflects the latest tested code. By connecting your Web App to a GitHub repository, updates can be deployed automatically to your staging environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;staging&lt;/strong&gt; slot, select &lt;strong&gt;Deployment Center → Settings&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;strong&gt;Source&lt;/strong&gt;, select &lt;strong&gt;External Git&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%2F1f1ejaz1pi6mzxj1fg9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1f1ejaz1pi6mzxj1fg9x.png" alt="Image12" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You notice an Error SCM basic authentication is disabled, click &lt;strong&gt;Enabled it&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%2Fuuh0xu6wyo8gcwbhtdjn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuh0xu6wyo8gcwbhtdjn.png" alt="Image13" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the box for SCM basic Auth Publishing Credentials to enable &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%2Fdbftz5hvbu8jbrhn7yi1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbftz5hvbu8jbrhn7yi1.png" alt="Image14" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the repository field, enter:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://github.com/Azure-Samples/php-docs-hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Set the &lt;strong&gt;Branch&lt;/strong&gt; to &lt;code&gt;master&lt;/code&gt; and click &lt;strong&gt;Save&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%2F7x1brv1o0s1yrniftuf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7x1brv1o0s1yrniftuf7.png" alt="Image15" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Overview&lt;/strong&gt; and open the &lt;strong&gt;Default domain&lt;/strong&gt; link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify the deployed app displays &lt;strong&gt;“Hello World!”&lt;/strong&gt; confirming that deployment succeeded.&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%2Flsjzf8x3soucca8idj0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsjzf8x3soucca8idj0i.png" alt="Image16" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This setup enables automated updates from your GitHub repository to your staging environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 4: Swap Deployment Slots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;Swapping deployment slots allows you to promote code that has been tested in staging directly into production with minimal risk and zero downtime. It’s an essential practice in modern DevOps workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate back to &lt;strong&gt;Deployment slots&lt;/strong&gt; in your Web App.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Swap&lt;/strong&gt;, review settings, and then select &lt;strong&gt;Start Swap&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%2Fclwzsd0vlftci9zxhqya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclwzsd0vlftci9zxhqya.png" alt="Image17" 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.amazonaws.com%2Fuploads%2Farticles%2Fgebcs6ki2jzjlmu2s82g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgebcs6ki2jzjlmu2s82g.png" alt="Image18" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the swap completes, go back to your Web App &lt;strong&gt;Overview&lt;/strong&gt; and open the production domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify that the production app now displays the &lt;strong&gt;“Hello World!”&lt;/strong&gt; page.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your previously tested staging code is now live in production — ensuring safe and seamless deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 5: Configure and Test Autoscaling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;Autoscaling ensures that your web app performs optimally under fluctuating traffic. Azure automatically adjusts the number of running instances based on real-time metrics like CPU usage or response time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In your App Service plan, go to &lt;strong&gt;Scale out (App Service plan)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Automatic&lt;/strong&gt; scaling mode.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Maximum burst&lt;/strong&gt; field, set &lt;strong&gt;2&lt;/strong&gt; and click &lt;strong&gt;Save&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%2F1uazxxouc96hecjnroj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uazxxouc96hecjnroj7.png" alt="Image19" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Notice an Error occurred after Scaling out&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%2F2pdjxm53kn1s74dlk1hj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pdjxm53kn1s74dlk1hj.png" alt="Image20" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To simulate load, navigate to &lt;strong&gt;Diagnose and solve problems → Load Test your App&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%2Flpsfeb0oog5ej2b0dogf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpsfeb0oog5ej2b0dogf.png" alt="Image21" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new load test, assign a Unique name for the test (&lt;code&gt;webtest&lt;/code&gt;), Review and 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%2Fvzxztk1kt221yaf267xz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzxztk1kt221yaf267xz.png" alt="Image22" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the Overview | Create by adding HTTP requests, select 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%2F8yoschokj869yvv44gf4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yoschokj869yvv44gf4.png" alt="Image23" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the Test plan tab, click &lt;strong&gt;Add request&lt;/strong&gt;. In the URL field, paste in your &lt;strong&gt;Default domain URL&lt;/strong&gt;. Ensure this is properly formatted and begins with &lt;strong&gt;https://&lt;/strong&gt;. Select &lt;strong&gt;Add&lt;/strong&gt; to save your changes.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4knjoeyr4ixzb1c8q3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4knjoeyr4ixzb1c8q3g.png" alt="Image24" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select Review + create and 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%2Fpf9n4gkx7zxdnfzuykn3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpf9n4gkx7zxdnfzuykn3.png" alt="Image26" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Observe live metrics such as &lt;strong&gt;Virtual users&lt;/strong&gt;, &lt;strong&gt;Response time&lt;/strong&gt;, and &lt;strong&gt;Requests per second&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%2F5s85cx9jtd2s3399oifc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5s85cx9jtd2s3399oifc.png" alt="Image27" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop the test once you verify that scaling is working correctly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Autoscaling dynamically adjusts resources to maintain performance while optimizing cost — a key feature for production workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleanup Your Resources
&lt;/h2&gt;

&lt;p&gt;To avoid unnecessary costs, delete your lab resources after completion.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Go to your resource group.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Delete resource group&lt;/strong&gt;, enter the name, and confirm.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z48kp5f2gixcoy51atu.png" alt="Image28" width="800" height="436"&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;By completing this hands-on guide, you’ve implemented a full lifecycle workflow for deploying and managing web apps in Azure — from setup and deployment to autoscaling and cleanup.&lt;/p&gt;

&lt;p&gt;Azure Web Apps simplifies application hosting by eliminating the need for physical infrastructure, offering built-in deployment pipelines, and supporting high availability and scalability out of the box.&lt;/p&gt;

&lt;p&gt;Whether you’re migrating from on-premises servers or building new cloud-native applications, &lt;strong&gt;Azure App Service&lt;/strong&gt; empowers your organization to innovate faster while keeping operations secure, scalable, and cost-effective.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>staticwebapps</category>
      <category>cloudcomputing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Strengthening Identity Security: Performing Basic Multifactor Authentication (MFA) Tasks</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Tue, 30 Sep 2025 14:15:10 +0000</pubDate>
      <link>https://forem.com/sudaisib/strengthening-identity-security-performing-basic-multifactor-authentication-mfa-tasks-23d3</link>
      <guid>https://forem.com/sudaisib/strengthening-identity-security-performing-basic-multifactor-authentication-mfa-tasks-23d3</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Passwords alone are no longer enough to keep accounts secure. Cyber threats continue to grow, and attackers often try to steal or guess credentials to gain unauthorized access. This is where &lt;strong&gt;Multifactor Authentication (MFA)&lt;/strong&gt; becomes essential. MFA adds an extra layer of security by requiring users to verify their identity with a second factor—like a phone notification, code, or trusted device—before granting access.&lt;/p&gt;

&lt;p&gt;In this walkthrough, you’ll learn how to set up and configure basic MFA tasks in Microsoft Entra ID. The exercise includes enabling per-user MFA, reviewing service settings, and configuring account lockout policies to protect against suspicious activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Enable and manage per-user MFA.&lt;/li&gt;
&lt;li&gt;Configure MFA service settings to suit your organization’s needs.&lt;/li&gt;
&lt;li&gt;Set account lockout rules to protect against repeated unauthorized attempts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Enable / Disable Per-user MFA Settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Microsoft Entra admin center&lt;/strong&gt; at &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;https://entra.microsoft.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Log in using your tenant credentials.&lt;/li&gt;
&lt;li&gt;From the menu on the left, open the &lt;strong&gt;Identity&lt;/strong&gt; submenu.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Users&lt;/strong&gt;, then &lt;strong&gt;All users&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the top of the page, select &lt;strong&gt;Per-user MFA&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%2F7es7511vwgg8vebbo2l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7es7511vwgg8vebbo2l9.png" alt="Image1" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Place a checkmark next to &lt;strong&gt;Bhogeswar Kalita&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Enable MFA&lt;/strong&gt; from the list.&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%2Fhiwpfg3wgfgr85l2t2bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhiwpfg3wgfgr85l2t2bw.png" alt="Image2" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A message box will appear with an optional setup URL you can share with the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After a few seconds, notice that &lt;em&gt;Enforced&lt;/em&gt; now appears next to Bhogeswar’s name.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Review the Service Settings for MFA&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Entra admin center, go to the &lt;strong&gt;Identity&lt;/strong&gt; submenu again.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Users&lt;/strong&gt;, then &lt;strong&gt;All users&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Per-user MFA&lt;/strong&gt; option.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Service settings&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlqp0jpzdcvk06wp0puo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlqp0jpzdcvk06wp0puo.png" alt="Image4" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review the following configurable options:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App passwords&lt;/strong&gt;: Allow legacy apps to work with MFA.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trusted IPs&lt;/strong&gt;: Define safe IP ranges where MFA can be bypassed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification options&lt;/strong&gt;: Choose which second-factor methods users can use (phone call, mobile app, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remember MFA on trusted device&lt;/strong&gt;: Allow users on trusted devices to skip re-authentication for a set number of days.

&lt;ol&gt;
&lt;li&gt;If no changes are required, select &lt;strong&gt;Discard&lt;/strong&gt; to exit.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynz1vhzs13tbmmjo5hty.png" alt="Image3" width="800" height="377"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Configure MFA Account Lockout Settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Entra admin center, open the &lt;strong&gt;Protection&lt;/strong&gt; submenu.&lt;/li&gt;
&lt;li&gt;Scroll down and select &lt;strong&gt;Show more&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Multifactor authentication&lt;/strong&gt;, then select &lt;strong&gt;Account lockout&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the following values:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Number of MFA denials to trigger account lockout&lt;/strong&gt;: &lt;code&gt;3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes until account lockout counter is reset&lt;/strong&gt;: &lt;code&gt;180&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes until account is automatically unblocked&lt;/strong&gt;: &lt;code&gt;15&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; to apply the settings.&lt;/li&gt;
&lt;li&gt;Review additional MFA options such as &lt;strong&gt;Fraud alert&lt;/strong&gt;, &lt;strong&gt;Block/unblock users&lt;/strong&gt;, and &lt;strong&gt;Notifications&lt;/strong&gt; for stronger security management.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Are We Performing MFA Tasks?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Performing MFA tasks is essential because it ensures that even if a password is stolen or guessed, attackers cannot gain access without the second factor of authentication. It provides stronger identity protection, reduces the risk of unauthorized access, and helps organizations maintain compliance with security best practices. MFA is one of the most effective ways to defend against phishing, password theft, and unauthorized logins.&lt;/p&gt;

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

&lt;p&gt;In this exercise, you enabled per-user MFA, reviewed MFA service settings, and configured account lockout policies. By adding MFA to your organization’s identity management strategy, you provide users with stronger protection while keeping attackers at bay. This simple yet powerful layer of security greatly improves the overall resilience of your Microsoft Entra environment.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Enhancing Account Security in Microsoft Entra ID: Password Protection and Self-Service Reset</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Tue, 30 Sep 2025 13:24:30 +0000</pubDate>
      <link>https://forem.com/sudaisib/enhancing-account-security-in-microsoft-entra-id-password-protection-and-self-service-reset-2j4a</link>
      <guid>https://forem.com/sudaisib/enhancing-account-security-in-microsoft-entra-id-password-protection-and-self-service-reset-2j4a</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Passwords remain a cornerstone of digital security, but weak or reused passwords are a common vulnerability. Microsoft Entra ID provides robust tools to enforce strong password policies, protect accounts from brute-force attacks, and empower users to reset their passwords securely without relying on IT support.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn how to configure &lt;strong&gt;password protection settings&lt;/strong&gt; and explore the &lt;strong&gt;self-service password reset (SSPR) feature&lt;/strong&gt;, helping your organization enhance security and streamline user management.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Configure lockout policies and custom banned password lists.&lt;/li&gt;
&lt;li&gt;Enforce strong password rules and smart lockout.&lt;/li&gt;
&lt;li&gt;Enable and configure self-service password reset for specific user groups.&lt;/li&gt;
&lt;li&gt;Define authentication methods and registration policies for SSPR.&lt;/li&gt;
&lt;li&gt;Configure notifications for password reset events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Configure Password Protection&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt; and log in with your tenant credentials.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the left menu, navigate to &lt;strong&gt;Protection → Authentication methods → Password protection&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Smart Lockout Policies:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lockout threshold&lt;/strong&gt;: 5 (Number of failed login attempts before account locks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lockout duration&lt;/strong&gt;: 30 seconds (Time the account remains locked)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Configure Custom Banned Passwords:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;Enforce custom list&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter: &lt;code&gt;Contoso&lt;/code&gt;, &lt;code&gt;London&lt;/code&gt;, &lt;code&gt;Widget&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Enable Enforcement Mode:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;strong&gt;Mode&lt;/strong&gt; to &lt;strong&gt;Enforced&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we configure password protection:&lt;/strong&gt;&lt;br&gt;
Setting lockout policies and banned password lists prevents brute-force attacks and ensures users create strong, secure passwords.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Configure Self-Service Password Reset (SSPR)&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Entra admin center, go to &lt;strong&gt;Protection → Password reset&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2A Enable SSPR for a Specific Group&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Find &lt;strong&gt;Self-service password enabled&lt;/strong&gt; and set the value to &lt;strong&gt;Selected&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%2Fah69dflqim16qcq19rom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah69dflqim16qcq19rom.png" alt="Image1" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;No groups selected&lt;/strong&gt;, then choose the &lt;strong&gt;Project23&lt;/strong&gt; 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%2Fpqg5mxmmtas8bpccamfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqg5mxmmtas8bpccamfc.png" alt="Image2" width="800" height="504"&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%2Feijtkjemvwhyq5z492gw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feijtkjemvwhyq5z492gw.png" alt="Image3" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Select → Save&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%2Fv3ujaslbg5e6dwffphyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3ujaslbg5e6dwffphyf.png" alt="Image4" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we enable SSPR:&lt;/strong&gt;&lt;br&gt;
Self-service password reset empowers users to securely reset their own passwords, reducing IT support tickets and improving productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2B Configure Authentication Methods&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Authentication methods&lt;/strong&gt; in the Password reset menu.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Number of methods required to reset&lt;/strong&gt; to &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enable the following methods for users:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile phone&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile app code&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Why authentication methods matter:&lt;/strong&gt;&lt;br&gt;
Users must verify their identity using trusted methods before resetting passwords, ensuring that only authorized individuals can perform a reset.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2C Configure Registration Requirements&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Registration → Require users to register when signing in?&lt;/strong&gt; and set it to &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Number of days before users are asked to re-confirm&lt;/strong&gt; to &lt;code&gt;90&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&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%2Frf1ehxyzji76ntjj4gv5.png" alt="Image5" width="800" height="546"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Purpose of registration:&lt;/strong&gt;&lt;br&gt;
Ensures users provide up-to-date authentication information, which strengthens security and guarantees that SSPR functions correctly when needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2D Configure Notifications&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Notifications&lt;/strong&gt; within Password reset.&lt;/li&gt;
&lt;li&gt;Leave &lt;strong&gt;Notify users on password reset?&lt;/strong&gt; at &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Change &lt;strong&gt;Notify all admins when other admins reset their password?&lt;/strong&gt; to &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&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%2Fcdcdp4nzaxvoutti473x.png" alt="Image6" width="800" height="703"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why notifications are important:&lt;/strong&gt;&lt;br&gt;
Notifications keep users and administrators informed of password changes, helping detect unauthorized resets and improving accountability.&lt;/p&gt;

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

&lt;p&gt;In this walkthrough, you configured password protection policies to enforce strong passwords and prevent account attacks. You also enabled and customized self-service password reset, defining authentication methods, registration policies, and notifications.&lt;/p&gt;

&lt;p&gt;By applying these features in Microsoft Entra ID, you reduce the risk of compromised accounts, empower users to manage their credentials securely, and streamline IT operations—all while maintaining strong organizational security.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Mastering Identity Management in Microsoft Entra ID: From Users to Roles</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 29 Sep 2025 16:42:01 +0000</pubDate>
      <link>https://forem.com/sudaisib/mastering-identity-management-in-microsoft-entra-id-from-users-to-roles-2g82</link>
      <guid>https://forem.com/sudaisib/mastering-identity-management-in-microsoft-entra-id-from-users-to-roles-2g82</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Groups in Microsoft Entra ID simplify how access is managed across applications, licenses, and resources. Instead of assigning permissions to individual users one by one, administrators can create groups, add users as members, and assign policies or licenses to the group. This makes administration more efficient, consistent, and scalable.&lt;/p&gt;

&lt;p&gt;In this walkthrough, you will explore beginner-level group management tasks such as creating groups, assigning members, configuring dynamic membership, and applying licenses. These are essential skills for managing identity and access at scale.&lt;/p&gt;

&lt;p&gt;This exercise should take approximately &lt;strong&gt;15 minutes to complete&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;Microsoft 365 group&lt;/strong&gt; for collaboration.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;Security group&lt;/strong&gt; with dynamic membership.&lt;/li&gt;
&lt;li&gt;Add users to groups using different methods.&lt;/li&gt;
&lt;li&gt;Assign licenses and ownership at the group level.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a Microsoft 365 Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Log in with your tenant administrator credentials.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the left menu, select &lt;strong&gt;Groups → All groups → + New group&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%2Fi3fv3oinptbhgy9fn72p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3fv3oinptbhgy9fn72p.png" alt="Image1" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the following details:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group type&lt;/strong&gt;: Microsoft 365&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group name&lt;/strong&gt;: &lt;code&gt;Project23&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group description&lt;/strong&gt;: &lt;em&gt;This group consists of members of the new AI Simulation software with codename Project23&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Membership type&lt;/strong&gt;: Assigned&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Members&lt;/strong&gt;, select &lt;strong&gt;+ Add members → Bhogeswar Kalita → Select&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%2Fk94ro9l4yog54lt95ln3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk94ro9l4yog54lt95ln3.png" alt="Image2" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo34dmwla5ldsajititsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo34dmwla5ldsajititsa.png" alt="Image3" width="800" height="664"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we create Microsoft 365 groups:&lt;/strong&gt; They provide a shared workspace for collaboration in Outlook, Teams, and SharePoint, making it easier for project members to communicate and share resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Create a Security Group with Dynamic Membership&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt;, go to &lt;strong&gt;Groups → All groups → + New group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the following details:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group type&lt;/strong&gt;: Security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group name&lt;/strong&gt;: &lt;code&gt;Guest Users&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group description&lt;/strong&gt;: &lt;em&gt;This group has all the Guest users currently in the tenant.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Membership type&lt;/strong&gt;: Dynamic User&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Under &lt;strong&gt;Dynamic user members&lt;/strong&gt;, select &lt;strong&gt;Add dynamic query&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure the query:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Property&lt;/strong&gt;: &lt;code&gt;userType&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Operator&lt;/strong&gt;: Equals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Value&lt;/strong&gt;: Guest&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save → Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Wait about 2 minutes for the group to populate, then select &lt;strong&gt;Refresh&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we create Security groups:&lt;/strong&gt; They are used to manage access to resources or apply security policies. With dynamic membership, users are automatically added or removed based on rules, reducing manual administration.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Add an Existing User to a Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Groups → All groups → Project23&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%2F9e71xd57d8ixo7pn4arb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e71xd57d8ixo7pn4arb.png" alt="Image 6" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Members → + Add members&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%2Fu2c6t5en9tbp1i86t6ix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2c6t5en9tbp1i86t6ix.png" alt="Image5" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mark the box next to &lt;strong&gt;External User&lt;/strong&gt; and click &lt;strong&gt;Select&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%2Frzm6l9cakxisa7pscl3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzm6l9cakxisa7pscl3p.png" alt="Image6" width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we add users to groups:&lt;/strong&gt; Group membership ensures users inherit access and licenses automatically, reducing errors and improving consistency compared to managing each account individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Add Licenses and Owners to a Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Assign Group Owners&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Groups → All groups → Project23&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Owners → + Add owners&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Mark the box next to &lt;strong&gt;Bhogeswar Kalita&lt;/strong&gt; and click &lt;strong&gt;Select&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 By default, the tenant administrator is the owner if no one is specified.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Assign Group Licenses&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://admin.microsoft.com" rel="noopener noreferrer"&gt;Microsoft 365 admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Billing → Licenses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Microsoft Power Automate Free&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Groups tab → + Assign licenses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;Project23&lt;/code&gt; group from the dropdown.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Assign&lt;/strong&gt; and refresh to confirm.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we assign licenses to groups:&lt;/strong&gt; Group-based licensing streamlines administration—when new members are added to the group, they automatically inherit the required licenses without manual intervention.&lt;/p&gt;

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

&lt;p&gt;In this exercise, you learned how to create Microsoft 365 and Security groups, add users, configure dynamic membership, assign licenses, and define group ownership in Microsoft Entra ID.&lt;/p&gt;

&lt;p&gt;Groups are a cornerstone of modern identity management, helping administrators manage collaboration, enforce security, and scale license assignments efficiently. By mastering these basics, you can streamline user access and reduce administrative overhead across your organization.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>Performing Basic User Management Tasks in Microsoft Entra ID: A Step-by-Step Guide</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 29 Sep 2025 11:49:19 +0000</pubDate>
      <link>https://forem.com/sudaisib/performing-basic-user-management-tasks-in-microsoft-entra-id-a-step-by-step-guide-3b1h</link>
      <guid>https://forem.com/sudaisib/performing-basic-user-management-tasks-in-microsoft-entra-id-a-step-by-step-guide-3b1h</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Identity and Access Management (IAM) is one of the most critical responsibilities for IT administrators. Microsoft Entra ID (formerly Azure Active Directory) provides the foundation for securely managing users, roles, and access to resources in the cloud.&lt;/p&gt;

&lt;p&gt;In this guide, you’ll perform &lt;strong&gt;basic user management tasks&lt;/strong&gt; in Entra ID—from creating a new user to assigning licenses, roles, and even importing users in bulk. These are the essential skills every &lt;strong&gt;Identity and Access Administrator&lt;/strong&gt; needs to master.&lt;/p&gt;

&lt;p&gt;This exercise should take about &lt;strong&gt;10 minutes to complete&lt;/strong&gt; and covers five common user management tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By following this walkthrough, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new user and confirm login.&lt;/li&gt;
&lt;li&gt;Assign Microsoft 365 licenses.&lt;/li&gt;
&lt;li&gt;Invite an external guest user.&lt;/li&gt;
&lt;li&gt;Assign administrative roles.&lt;/li&gt;
&lt;li&gt;Bulk import multiple users from a CSV file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The setup involves using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Entra admin center&lt;/strong&gt; – for creating and managing users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft 365 admin center&lt;/strong&gt; – for assigning licenses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSV templates&lt;/strong&gt; – for bulk user import.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools together provide a complete foundation for identity lifecycle management in the cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a New User&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Log in with your tenant administrator credentials.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to &lt;strong&gt;Users → All users → + New user → Create new user&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%2Fqrnbudx0sihpq4jsz2hl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrnbudx0sihpq4jsz2hl.png" alt="Image1" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fill in the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User principal name&lt;/strong&gt;: &lt;code&gt;BhogeswarK&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display name&lt;/strong&gt;: &lt;code&gt;Bhogeswar Kalita&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First name&lt;/strong&gt;: &lt;code&gt;Bhogeswar&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Last name&lt;/strong&gt;: &lt;code&gt;Kalita&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usage location&lt;/strong&gt;: United States (or your region)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1earl4tdg46ai62zi5c.png" alt="Image2" width="800" height="525"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7aa8esvmvoyel2b87pwh.png" alt="Image3" width="800" height="292"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy and save the auto-generated password.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + Create → 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%2Fvcueryb7lo33v9o05vs1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvcueryb7lo33v9o05vs1.png" alt="Image4" width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✅ &lt;strong&gt;Subtask: Confirm Login&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open an &lt;strong&gt;InPrivate browsing window&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Entra admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sign in with:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Username&lt;/strong&gt;: &lt;code&gt;BhogeswarK@yourtenantname.onmicrosoft.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password&lt;/strong&gt;: saved password&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Complete MFA setup if prompted.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dp5im9z4fm1i81xljcb.png" alt="Image5" width="800" height="418"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucu5f4gr3ecaxsko7ti2.png" alt="Image6" width="800" height="428"&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Assign a License to the User&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://admin.microsoft.com" rel="noopener noreferrer"&gt;Microsoft 365 admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Billing → Licenses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Microsoft Power Automate Free&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+ Assign licenses&lt;/strong&gt;, choose &lt;strong&gt;Bhogeswar Kalita&lt;/strong&gt;, then &lt;strong&gt;Assign&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A confirmation message will appear.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Invite an External User&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Entra admin center&lt;/a&gt;, go to &lt;strong&gt;Users → All users → + New user&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Invite external user&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%2Fd55sxsh2zo7ihay875kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd55sxsh2zo7ihay875kr.png" alt="Image7" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt;: &lt;code&gt;ExtUser@testemail.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display name&lt;/strong&gt;: &lt;code&gt;External User&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message&lt;/strong&gt;: “Thank you for joining the company for this short work project.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Review + Invite→ Invite&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%2F7hq05hhkdslq5acgwv32.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hq05hhkdslq5acgwv32.png" alt="Image8" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Assign a Role to a User&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Method 1: Assign Role via User Settings&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Users → All users → Bhogeswar Kalita&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%2Fgb9fzfq5k8s4ijn19h7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgb9fzfq5k8s4ijn19h7a.png" alt="Image9" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Assigned roles → + Add assignment&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%2Fxe2nemm9pazf6in1yttd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxe2nemm9pazf6in1yttd.png" alt="Image10" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the dropdown, choose &lt;strong&gt;Attribute Definition Reader&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Eligible → Add&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%2F2l88kbg4473q680ishr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l88kbg4473q680ishr8.png" alt="Image11" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 5: Bulk Import Users&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Entra admin center&lt;/a&gt;, go to &lt;strong&gt;Users → All users → Bulk operations → Bulk 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%2Fehk586z0793wqqn882zn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehk586z0793wqqn882zn.png" alt="Image12" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the &lt;strong&gt;CSV template&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the file with your users’ details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Required fields&lt;/strong&gt;: Username, Display name, Initial password.&lt;/li&gt;
&lt;li&gt;Optional: Department, Usage location, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the file (e.g., &lt;code&gt;APL0501-BulkUser.csv&lt;/code&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%2F4fpo512zpfidrlumfd9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fpo512zpfidrlumfd9t.png" alt="Image13" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upload the file back into the Bulk create wizard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Submit&lt;/strong&gt; and wait for the success notification.&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%2F7nltd14swp420acdirai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7nltd14swp420acdirai.png" alt="Image14" width="313" height="902"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;In this walkthrough, you performed the &lt;strong&gt;five core user management tasks&lt;/strong&gt; in Microsoft Entra ID: creating users, assigning licenses, inviting guests, assigning roles, and importing users in bulk.&lt;/p&gt;

&lt;p&gt;Mastering these basics ensures that you can effectively manage user identities, streamline onboarding, and secure access across your organization.&lt;/p&gt;

&lt;p&gt;With these skills, you’re well-prepared to take on more advanced &lt;strong&gt;Identity and Access Administration&lt;/strong&gt; tasks such as conditional access policies, identity governance, and lifecycle automation.&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>azure</category>
      <category>database</category>
      <category>security</category>
    </item>
    <item>
      <title>Creating DNS Zones and Configuring DNS Settings in Azure: A Step-by-Step Guide</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 22 Sep 2025 12:12:01 +0000</pubDate>
      <link>https://forem.com/sudaisib/creating-dns-zones-and-configuring-dns-settings-in-azure-a-step-by-step-guide-1knd</link>
      <guid>https://forem.com/sudaisib/creating-dns-zones-and-configuring-dns-settings-in-azure-a-step-by-step-guide-1knd</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Applications often need to communicate using domain names instead of raw IP addresses. Managing these names securely inside your Azure environment is best done with Azure Private DNS, which eliminates the need for a custom DNS solution. With Private DNS zones, you can define custom domain names (like contoso.com) and resolve them directly within your virtual network.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn how to create a private DNS zone, link it to a virtual network, and add DNS records that support internal workload communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ol&gt;
&lt;li&gt;Create and configure a private DNS zone.&lt;/li&gt;
&lt;li&gt;Link the DNS zone to a virtual network.&lt;/li&gt;
&lt;li&gt;Add DNS records for internal resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Overview&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ol&gt;
&lt;li&gt;A &lt;strong&gt;private DNS zone&lt;/strong&gt; named &lt;code&gt;private.contoso.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;virtual network link&lt;/strong&gt; connecting the DNS zone to app-vnet.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;DNS record&lt;/strong&gt; for the backend subnet to allow name-based resolution of workloads.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdmww1ffi4465bw08tji.png" alt="Image1" width="800" height="352"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This setup ensures that workloads inside app-vnet can communicate using domain names, improving readability and maintainability of the environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a Private DNS Zone&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You’ll start by creating a private DNS zone.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Private DNS zones&lt;/strong&gt; and select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae9zgorchkvie2p4ir8d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae9zgorchkvie2p4ir8d.png" alt="Image2" width="800" height="709"&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%2Fzrj79b68a8pwxnly30v8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrj79b68a8pwxnly30v8.png" alt="Image3" width="800" height="673"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select your subscription and resource group (for example, RG1).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the zone name &lt;code&gt;private.contoso.com&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose a region such as &lt;strong&gt;East US&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt; and then &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployment is complete, open the DNS zone 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.amazonaws.com%2Fuploads%2Farticles%2Fr2cr50xxn9jbafkksqpj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2cr50xxn9jbafkksqpj.png" alt="Image4" width="800" height="664"&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%2F8g974t1cgku3x1zp6p7z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8g974t1cgku3x1zp6p7z.png" alt="Image5" width="800" height="683"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Link the DNS Zone to the Virtual Network&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Next, link the DNS zone to your app-vnet so that workloads can resolve records from the zone.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the portal, open the DNS zone you just created (&lt;code&gt;private.contoso.com&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;In the DNS management blade, select &lt;strong&gt;+ Virtual network links&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose &lt;strong&gt;+ Add&lt;/strong&gt; to create a new link.&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%2F3kjqskidwe0tvfyhk30i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kjqskidwe0tvfyhk30i.png" alt="Image6" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide a link name such as &lt;code&gt;app-vnet-link&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the virtual network &lt;code&gt;app-vnet&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;Auto registration&lt;/strong&gt; to automatically register virtual machine hostnames.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Create&lt;/strong&gt; and wait for deployment to complete.&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%2Flxye4ju3dgl8uc4vpfzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxye4ju3dgl8uc4vpfzx.png" alt="Image7" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Create a DNS Record Set&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, add a record for the backend subnet.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the DNS zone &lt;code&gt;private.contoso.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the DNS management blade, select &lt;strong&gt;+ Recordsets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Notice that Azure may have already created A records for your virtual machines.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;+ Add&lt;/strong&gt; to create a new record set.&lt;/li&gt;
&lt;li&gt;Enter the name &lt;code&gt;backend&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Choose record type &lt;strong&gt;A&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the TTL to &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter the IP address &lt;code&gt;10.1.1.5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add&lt;/strong&gt; to save the record.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxj56ehc0drvdmx1qeiu.png" alt="Image8" width="584" height="904"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This record means that any workload inside app-vnet can resolve &lt;code&gt;backend.private.contoso.com&lt;/code&gt; to the private IP &lt;code&gt;10.1.1.5&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;In this walkthrough, you created a private DNS zone in Azure, linked it to your virtual network, and configured a DNS record for the backend subnet. With this setup, workloads can communicate using domain names instead of IP addresses, while relying on Azure’s built-in DNS service.&lt;/p&gt;

&lt;p&gt;This approach reduces complexity, improves readability, and provides a secure way to manage internal name resolution without deploying a custom DNS infrastructure.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Configuring Network Routing in Azure: A Step-by-Step Guide</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 22 Sep 2025 11:51:24 +0000</pubDate>
      <link>https://forem.com/sudaisib/configuring-network-routing-in-azure-a-step-by-step-guide-54f8</link>
      <guid>https://forem.com/sudaisib/configuring-network-routing-in-azure-a-step-by-step-guide-54f8</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In any cloud deployment, network routing is a core component of security and traffic management. By default, Azure automatically handles routing within a virtual network. However, in scenarios where outbound traffic must be filtered and inspected by a firewall, custom routes are required.&lt;/p&gt;

&lt;p&gt;This guide walks you through the process of configuring network routing in Azure by creating a route table, associating it with subnets, and directing outbound traffic through an Azure Firewall for inspection and policy enforcement.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ol&gt;
&lt;li&gt;Create and configure a custom route table.&lt;/li&gt;
&lt;li&gt;Associate the route table with frontend and backend subnets.&lt;/li&gt;
&lt;li&gt;Add a route that forces outbound traffic through a firewall’s private IP.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The architecture consists of a single application virtual network (app-vnet) with multiple subnets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A frontend subnet hosting the application’s frontend workloads.&lt;/li&gt;
&lt;li&gt;A backend subnet hosting the application’s backend workloads.&lt;/li&gt;
&lt;li&gt;An Azure Firewall deployed inside the virtual network to filter and inspect traffic.&lt;/li&gt;
&lt;li&gt;A route table that overrides Azure’s default system routes and sends all outbound traffic through the firewall.&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%2Fbj7wyi36mglu9yectxtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbj7wyi36mglu9yectxtl.png" alt="Image1" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This design ensures that every outbound request from your workloads is inspected by the firewall before leaving the virtual network.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Record the Firewall’s Private IP Address&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before you configure the route table, you need the firewall’s private IP address.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Firewall&lt;/strong&gt; and select your firewall instance (for example, app-vnet-firewall).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01pbo0y7p85l425pjyqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01pbo0y7p85l425pjyqg.png" alt="Image2" width="800" height="788"&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%2Fvbh28ncnzlaj583p41op.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbh28ncnzlaj583p41op.png" alt="Image3" width="800" height="757"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the &lt;strong&gt;Overview&lt;/strong&gt; page, copy the &lt;strong&gt;Private IP address&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%2F9rz9souepliouuy44zdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rz9souepliouuy44zdf.png" alt="Image4" width="800" height="760"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This private IP will be used as the next hop in your custom route.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Create a Route Table&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now create a custom route table to override Azure’s system routes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Route tables&lt;/strong&gt; and select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F443ubkhwgoyb40p9cqmd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F443ubkhwgoyb40p9cqmd.png" alt="Image5" width="800" height="804"&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%2Fkua2xx9r39a1eh7hq59f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkua2xx9r39a1eh7hq59f.png" alt="Image6" width="800" height="756"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use your existing subscription and resource group (for example, RG1).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the region (such as East US).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name the route table (for example, app-vnet-firewall-rt).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt;, then &lt;strong&gt;Create&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs59psxh4y1ft3fbralas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs59psxh4y1ft3fbralas.png" alt="Image7" width="800" height="880"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployment is complete, open the new route table.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ija0jbyswb7x7h979nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ija0jbyswb7x7h979nf.png" alt="Image8" width="800" height="679"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Associate the Route Table with Subnets&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Next, you need to link the route table to the subnets where traffic should be filtered.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the route table you just created.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Settings&lt;/strong&gt; blade, select &lt;strong&gt;Subnets&lt;/strong&gt; and then choose &lt;strong&gt;+ Associate&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Associate the route table with the &lt;strong&gt;frontend subnet&lt;/strong&gt; of app-vnet.&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%2Fdeygozxq23ap47zndylw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdeygozxq23ap47zndylw.png" alt="Image9" width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repeat the same process and associate it with the &lt;strong&gt;backend 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%2F1idu4tneffyhc7f32qtv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1idu4tneffyhc7f32qtv.png" alt="Image10" width="800" height="667"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now both frontend and backend workloads will send traffic using this route table.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Create a Route in the Route Table&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Finally, you’ll create a custom route that directs all outbound traffic to the firewall.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the same route table and select &lt;strong&gt;Routes&lt;/strong&gt; under the Settings blade.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;+ Add&lt;/strong&gt; to create a new route.&lt;/li&gt;
&lt;li&gt;Enter a route name such as &lt;code&gt;outbound-firewall&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For destination type, select &lt;strong&gt;IP addresses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;0.0.0.0/0&lt;/code&gt; as the destination address range to capture all outbound traffic.&lt;/li&gt;
&lt;li&gt;For the next hop type, select &lt;strong&gt;Virtual appliance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the private IP address of the firewall you recorded earlier.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add&lt;/strong&gt; to save the route.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcebkl1jshwogd17lagil.png" alt="Image11" width="800" height="665"&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;In this walkthrough, you configured network routing in Azure to ensure all outbound traffic passes through a firewall for inspection. You created a route table, associated it with your application’s frontend and backend subnets, and defined a custom route that directs all traffic to the firewall.&lt;/p&gt;

&lt;p&gt;With this setup, your workloads are protected by centralized routing rules, ensuring that security policies are consistently enforced across the environment.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>networking</category>
      <category>cloudcomputing</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Creating and Configuring Azure Firewall: A Step-by-Step Guide</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 15 Sep 2025 16:15:18 +0000</pubDate>
      <link>https://forem.com/sudaisib/creating-and-configuring-azure-firewall-a-step-by-step-guide-1j8b</link>
      <guid>https://forem.com/sudaisib/creating-and-configuring-azure-firewall-a-step-by-step-guide-1j8b</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As applications scale and attract more users, ensuring secure and controlled network access becomes a critical requirement. Azure Firewall is a fully managed, cloud-native network security service that provides centralized control, advanced filtering, and protection against threats. It enables organizations to apply consistent security policies across workloads while allowing essential communication such as application updates and DNS resolution.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn how to create and configure Azure Firewall, build a firewall policy, and add both application and network rules that secure your application virtual network (app-vnet).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By following this walkthrough, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy an Azure Firewall into an existing virtual network.&lt;/li&gt;
&lt;li&gt;Configure a firewall policy for centralized management.&lt;/li&gt;
&lt;li&gt;Create an application rule that allows outbound access to Azure DevOps for continuous updates.&lt;/li&gt;
&lt;li&gt;Create a network rule that supports DNS resolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The solution uses a single application virtual network (app-vnet) that hosts workloads. Azure Firewall is deployed inside a dedicated subnet called &lt;strong&gt;AzureFirewallSubnet&lt;/strong&gt;, where it inspects and filters traffic. A firewall policy defines the security rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An application rule grants the application access to Azure DevOps services.&lt;/li&gt;
&lt;li&gt;A network rule allows DNS resolution.&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%2Fa46plqz4axqnrczz6ytk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa46plqz4axqnrczz6ytk.png" alt="Image1" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This design ensures secure outbound communication while maintaining centralized security management.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create Azure Firewall Subnet&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Azure Firewall requires a dedicated subnet named &lt;strong&gt;AzureFirewallSubnet&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Virtual networks&lt;/strong&gt; and open your application virtual network (app-vnet).&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%2Fpuwhcfxpj7014hpzwhtr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpuwhcfxpj7014hpzwhtr.png" alt="Image2" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feumx0twas26h1tlcl9hm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feumx0twas26h1tlcl9hm.png" alt="Image3" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Subnets&lt;/strong&gt; and then choose &lt;strong&gt;+ Subnet&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name the subnet &lt;em&gt;AzureFirewallSubnet&lt;/em&gt; and assign the address range &lt;code&gt;10.1.63.0/26&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave other settings as default and save.&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%2Fz2mhzoy34lby1t4ka18y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2mhzoy34lby1t4ka18y.png" alt="Image4" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Deploy Azure Firewall&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Firewall&lt;/strong&gt; and select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F424g4nrdp28kbkb8xxrp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F424g4nrdp28kbkb8xxrp.png" alt="Image 5" width="800" height="789"&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%2Fmwxe70psbv9cn9l05nid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwxe70psbv9cn9l05nid.png" alt="Image6" width="800" height="635"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use resource group &lt;strong&gt;RG1&lt;/strong&gt; and name the firewall &lt;em&gt;app-vnet-firewall&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the &lt;strong&gt;Standard SKU&lt;/strong&gt; and configure it to use a new firewall policy named &lt;em&gt;fw-policy&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;East US&lt;/strong&gt; as the region, attach it to the existing virtual network &lt;em&gt;app-vnet&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.amazonaws.com%2Fuploads%2Farticles%2Frjm9szdfvatx27vgfmc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjm9szdfvatx27vgfmc0.png" alt="Image7" width="800" height="667"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new Firewall Policy called &lt;em&gt;fw-policy&lt;/em&gt; and a new public IP address called &lt;em&gt;fwpip&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.amazonaws.com%2Fuploads%2Farticles%2F3dzvi2x70ja6osycyj0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dzvi2x70ja6osycyj0f.png" alt="Image9" width="385" height="316"&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%2Fvqwq1bm3jc3f5q4anl66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqwq1bm3jc3f5q4anl66.png" alt="Image 10" width="307" height="265"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complete the wizard by selecting &lt;strong&gt;Review + create&lt;/strong&gt; and then &lt;strong&gt;Create&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg6c1ci7rya8y1m4apw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg6c1ci7rya8y1m4apw1.png" alt="Image8" width="800" height="433"&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%2Fd0yswrsw6g4ln6z4jx9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0yswrsw6g4ln6z4jx9p.png" alt="Image11" width="800" height="808"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: Deployment may take several minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Configure Firewall Policy&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Add an Application Rule&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Firewall Policies&lt;/strong&gt; and open &lt;em&gt;fw-policy&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.amazonaws.com%2Fuploads%2Farticles%2Fdrz0csw1x8qlz5zvbr0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrz0csw1x8qlz5zvbr0v.png" alt="Image12" width="800" height="627"&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%2F2hk8x3iynl77b6f16st6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hk8x3iynl77b6f16st6.png" alt="Image13" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Application rules&lt;/strong&gt; and add a new rule collection.&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%2Fgl3z6ie0acomqhj308ae.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl3z6ie0acomqhj308ae.png" alt="Image14" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name it &lt;em&gt;app-vnet-fw-rule-collection&lt;/em&gt;, set the priority to 200, and the action to Allow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a rule called &lt;em&gt;AllowAzurePipelines&lt;/em&gt; that allows HTTPS traffic from the source address range &lt;code&gt;10.1.0.0/23&lt;/code&gt; to the fully qualified domain names (FQDNs) &lt;code&gt;dev.azure.com&lt;/code&gt; and &lt;code&gt;azure.microsoft.com&lt;/code&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%2Fzeobfw1julgea8dohuk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeobfw1julgea8dohuk7.png" alt="Image15" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This rule ensures that your application can securely communicate with Azure DevOps for updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Add a Network Rule&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In &lt;em&gt;fw-policy&lt;/em&gt;, open &lt;strong&gt;Network rules&lt;/strong&gt; and add a new rule collection.&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%2Fp9fvz2fr96akdcg8vtwq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp9fvz2fr96akdcg8vtwq.png" alt="Image16" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name it &lt;em&gt;app-vnet-fw-nrc-dns&lt;/em&gt;, set the priority to 200, and the action to Allow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a rule called &lt;em&gt;AllowDns&lt;/em&gt; that permits UDP traffic on port 53 from the source address range &lt;code&gt;10.1.0.0/23&lt;/code&gt; to the IP addresses &lt;code&gt;1.1.1.1&lt;/code&gt; and &lt;code&gt;1.0.0.1&lt;/code&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%2Fqaloq8g4yw6pw9rk172i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqaloq8g4yw6pw9rk172i.png" alt="Image17" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This rule ensures that DNS queries from the application workloads are resolved successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Verify the Deployment&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Azure portal, search for &lt;strong&gt;Firewall&lt;/strong&gt; and open &lt;em&gt;app-vnet-firewall&lt;/em&gt;. Confirm that the provisioning state shows &lt;strong&gt;Succeeded&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Next, search for &lt;strong&gt;Firewall policies&lt;/strong&gt; and open &lt;em&gt;fw-policy&lt;/em&gt;. Ensure that its provisioning state also shows &lt;strong&gt;Succeeded&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;In this walkthrough, you created and configured Azure Firewall to secure an application virtual network. You deployed the firewall into a dedicated subnet, created a centralized firewall policy, and added both application and network rules.&lt;/p&gt;

&lt;p&gt;With this setup, your application is now protected by a managed firewall service while still maintaining necessary outbound access for updates and DNS resolution. This approach centralizes network security and prepares your environment for future scaling and advanced protection needs.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>networking</category>
      <category>api</category>
    </item>
    <item>
      <title>Hosting Your Resume Website on GitHub: A Step-by-Step Guide</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Fri, 12 Sep 2025 23:13:51 +0000</pubDate>
      <link>https://forem.com/sudaisib/hosting-your-resume-website-on-github-a-step-by-step-guide-2dj5</link>
      <guid>https://forem.com/sudaisib/hosting-your-resume-website-on-github-a-step-by-step-guide-2dj5</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Version control isn’t just for professional developers, it’s a powerful tool for anyone who wants to showcase their projects online. With &lt;strong&gt;Git and GitHub Pages&lt;/strong&gt;, you can turn a simple HTML file into a live website in minutes.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure Git with your username and email.&lt;/li&gt;
&lt;li&gt;Initialize a Git repository and create your first HTML file.&lt;/li&gt;
&lt;li&gt;Push your project to GitHub.&lt;/li&gt;
&lt;li&gt;Host your resume website using &lt;strong&gt;GitHub Pages&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end, you’ll have your resume running as a personal website, accessible to anyone with the link.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Set up Git with your global configuration (username and email).&lt;/li&gt;
&lt;li&gt;Create a new project directory and initialize it with Git.&lt;/li&gt;
&lt;li&gt;Add and commit files using Git commands.&lt;/li&gt;
&lt;li&gt;Push your repository to GitHub.&lt;/li&gt;
&lt;li&gt;Deploy a simple HTML file as a live website using GitHub Pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Configure Git&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before creating a project, you need to configure Git with your identity. This ensures your commits are properly linked to your account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"Sudais@1998"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"oladosuadeniyi39@gmail.com"&lt;/span&gt;
&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.amazonaws.com%2Fuploads%2Farticles%2F2e3wzu7kl7sq7idjizmv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2e3wzu7kl7sq7idjizmv.png" alt="Image1" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Create a New Project Directory&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Create a folder for your resume project, navigate into it, and initialize Git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;sudaisdirectory
&lt;span class="nb"&gt;cd &lt;/span&gt;sudaisdirectory
git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that Git has been initialized by listing hidden files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-al&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Add an HTML File&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Create your main HTML file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;index.html
vi index.html
&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.amazonaws.com%2Fuploads%2Farticles%2Frhptk000zhgqws9fbl5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhptk000zhgqws9fbl5j.png" alt="Image2" width="647" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside &lt;code&gt;vi&lt;/code&gt;, press &lt;strong&gt;i&lt;/strong&gt; to enter insert mode and paste your HTML code.&lt;br&gt;
When done, press &lt;strong&gt;Esc&lt;/strong&gt;, then type:&lt;br&gt;
&lt;/p&gt;

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

&lt;p&gt;This saves and quits the editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Connect to GitHub&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, go to your &lt;strong&gt;GitHub account&lt;/strong&gt; and create a new repository (e.g., &lt;code&gt;my-resume&lt;/code&gt;). Copy the repository link and connect it to your local project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin https://github.com/Sudais1998/my-resume.git
&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.amazonaws.com%2Fuploads%2Farticles%2Fqxuc1nxb77ior68tw538.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxuc1nxb77ior68tw538.png" alt="Image4" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 5: Commit and Push Your Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Add your files to Git’s staging area, commit them, and push them to GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git status
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"new commit"&lt;/span&gt;
git push origin master
&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.amazonaws.com%2Fuploads%2Farticles%2Fukst7gx742sypftpkezz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukst7gx742sypftpkezz.png" alt="Image5" width="800" height="821"&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%2Fg3emn75km7jqcx66aue3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3emn75km7jqcx66aue3.png" alt="Image6" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 6: Deploy with GitHub Pages&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;On GitHub, go to your repository and select master.&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%2Fblueuyzjbkwo6um6r819.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fblueuyzjbkwo6um6r819.png" alt="Image7" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;index.html&lt;/strong&gt; to view the code&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%2Fzqax7wuh907bhfmo29jl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqax7wuh907bhfmo29jl.png" alt="Image8" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the &lt;strong&gt;Settings&lt;/strong&gt; tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll to &lt;strong&gt;Pages&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under “Source,” select the &lt;strong&gt;master branch&lt;/strong&gt; and save.&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%2Fvv48b1wlmwfa4xf83t3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv48b1wlmwfa4xf83t3i.png" alt="Image9" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployed, GitHub will provide you with a live link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;visit site&lt;/strong&gt; or &lt;strong&gt;click on the link&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%2Ffimmlyjmcjlpmm4sce5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffimmlyjmcjlpmm4sce5y.png" alt="Image10" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 7: View Your Resume Website&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open the GitHub Pages link.&lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;index.html&lt;/code&gt; file should now be live as a personal resume website.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6qcdqyhzoxktylcjnv8.png" alt="Image11" width="800" height="394"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In this hands-on guide, you’ve learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure Git with your identity.&lt;/li&gt;
&lt;li&gt;Create a project and version-control it locally.&lt;/li&gt;
&lt;li&gt;Push your repository to GitHub.&lt;/li&gt;
&lt;li&gt;Deploy a static site with &lt;strong&gt;GitHub Pages&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a beginner-friendly yet professional way to publish your resume or portfolio. With this foundation, you can expand your project to include more HTML pages, CSS styling, or even JavaScript features, making your personal website stand out.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>linux</category>
      <category>cloudcomputing</category>
    </item>
  </channel>
</rss>
