<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[An Azure Cloud Lab Journey...]]></title><description><![CDATA[An Azure Cloud Lab Journey...]]></description><link>https://shirincloudlab.com</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 03:44:16 GMT</lastBuildDate><atom:link href="https://shirincloudlab.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[AZ-140 Lab tips II:]]></title><description><![CDATA[PowerShell Script for VM Size Comparison
This script lists all session hosts with their host pool, VM name, and VM size across all host pools(loop through multiple resource groups):
Connect-AzAccount

# Get all host pools
$hostPools = Get-AzWvdHostPo...]]></description><link>https://shirincloudlab.com/az-140-lab-tips-ii</link><guid isPermaLink="true">https://shirincloudlab.com/az-140-lab-tips-ii</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Tue, 02 Sep 2025 17:47:36 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-powershell-script-for-vm-size-comparison"><strong>PowerShell Script for VM Size Comparison</strong></h2>
<p>This script lists all session hosts with their <strong>host pool</strong>, <strong>VM name</strong>, and <strong>VM size</strong> across all host pools(loop through multiple resource groups):</p>
<pre><code class="lang-powershell"><span class="hljs-built_in">Connect-AzAccount</span>

<span class="hljs-comment"># Get all host pools</span>
<span class="hljs-variable">$hostPools</span> = <span class="hljs-built_in">Get-AzWvdHostPool</span>

<span class="hljs-comment"># Get all VMs in the subscription once</span>
<span class="hljs-variable">$allVMs</span> = <span class="hljs-built_in">Get-AzVM</span>

<span class="hljs-comment"># Prepare output array</span>
<span class="hljs-variable">$allVMInfo</span> = <span class="hljs-selector-tag">@</span>()

<span class="hljs-keyword">foreach</span> (<span class="hljs-variable">$pool</span> <span class="hljs-keyword">in</span> <span class="hljs-variable">$hostPools</span>) {
    <span class="hljs-variable">$sessionHosts</span> = <span class="hljs-built_in">Get-AzWvdSessionHost</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$pool</span>.ResourceGroupName <span class="hljs-literal">-HostPoolName</span> <span class="hljs-variable">$pool</span>.Name

    <span class="hljs-keyword">foreach</span> (<span class="hljs-variable">$sessionHost</span> <span class="hljs-keyword">in</span> <span class="hljs-variable">$sessionHosts</span>) {
        <span class="hljs-variable">$vmName</span> = <span class="hljs-variable">$sessionHost</span>.Name.Split(<span class="hljs-string">"/"</span>)[-<span class="hljs-number">1</span>]

        <span class="hljs-comment"># Search for the matching VM in all VMs</span>
        <span class="hljs-variable">$vm</span> = <span class="hljs-variable">$allVMs</span> | <span class="hljs-built_in">Where-Object</span> { <span class="hljs-variable">$_</span>.Name <span class="hljs-operator">-eq</span> <span class="hljs-variable">$vmName</span> }

        <span class="hljs-variable">$vmSize</span> = <span class="hljs-keyword">if</span> (<span class="hljs-variable">$vm</span>) { <span class="hljs-variable">$vm</span>.HardwareProfile.VmSize } <span class="hljs-keyword">else</span> { <span class="hljs-string">"Not Found"</span> }
        <span class="hljs-variable">$vmRG</span> = <span class="hljs-keyword">if</span> (<span class="hljs-variable">$vm</span>) { <span class="hljs-variable">$vm</span>.ResourceGroupName } <span class="hljs-keyword">else</span> { <span class="hljs-string">"Unknown"</span> }

        <span class="hljs-variable">$allVMInfo</span> += [<span class="hljs-type">PSCustomObject</span>]<span class="hljs-selector-tag">@</span>{
            HostPool     = <span class="hljs-variable">$pool</span>.Name
            SessionHost  = <span class="hljs-variable">$sessionHost</span>.Name
            VMName       = <span class="hljs-variable">$vmName</span>
            VMSize       = <span class="hljs-variable">$vmSize</span>
            ResourceGroup = <span class="hljs-variable">$vmRG</span>
            Status       = <span class="hljs-variable">$sessionHost</span>.Status
        }
    }
}

<span class="hljs-comment"># Display the result</span>
<span class="hljs-variable">$allVMInfo</span> | <span class="hljs-built_in">Format-Table</span>

<span class="hljs-comment"># Optional: export to CSV</span>
<span class="hljs-variable">$allVMInfo</span> | <span class="hljs-built_in">Export-Csv</span> <span class="hljs-literal">-Path</span> <span class="hljs-string">"AVD_VM_Sizes.csv"</span> <span class="hljs-literal">-NoTypeInformation</span>
</code></pre>
]]></content:encoded></item><item><title><![CDATA[AZ-700 Lab 03]]></title><description><![CDATA[M03 - Unit 4: Configure an ExpressRoute Gateway
Exercise Scenario
To connect your Azure virtual network to your on-premises network using ExpressRoute, you must first create a virtual network gateway. A virtual network gateway serves two key purposes...]]></description><link>https://shirincloudlab.com/az-700-lab-03</link><guid isPermaLink="true">https://shirincloudlab.com/az-700-lab-03</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Mon, 14 Jul 2025 19:53:34 GMT</pubDate><content:encoded><![CDATA[<h1 id="heading-m03-unit-4-configure-an-expressroute-gateway"><strong>M03 - Unit 4: Configure an ExpressRoute Gateway</strong></h1>
<h2 id="heading-exercise-scenario"><strong>Exercise Scenario</strong></h2>
<p>To connect your Azure virtual network to your on-premises network using ExpressRoute, you must first create a virtual network gateway. A virtual network gateway serves two key purposes:</p>
<ul>
<li><p>To exchange IP routes between the networks</p>
</li>
<li><p>To route network traffic between them</p>
</li>
</ul>
<p><strong>Note:</strong> The interactive lab simulations previously available for this exercise have been retired.</p>
<p><strong>Estimated Time:</strong> 60 minutes (includes approximately 45 minutes of deployment wait time)</p>
<hr />
<h2 id="heading-gateway-types"><strong>Gateway Types</strong></h2>
<p>When creating a virtual network gateway, several settings must be configured. One essential setting is <code>-GatewayType</code>, which determines whether the gateway is used for ExpressRoute or VPN traffic. The two gateway types are:</p>
<ul>
<li><p><strong>VPN</strong> – Use this gateway type to send encrypted traffic over the public internet. Commonly referred to as a <em>VPN Gateway</em>, it supports Site-to-Site, Point-to-Site, and VNet-to-VNet connections.</p>
</li>
<li><p><strong>ExpressRoute</strong> – Use this gateway type for private, dedicated connections. This is referred to as an <em>ExpressRoute Gateway</em> and is specifically used when configuring ExpressRoute.</p>
</li>
</ul>
<p><strong>Note:</strong> Each virtual network can have only one virtual network gateway per gateway type. For example, you can have one gateway with <code>-GatewayType VPN</code> and another with <code>-GatewayType ExpressRoute</code> in the same virtual network.</p>
<hr />
<h2 id="heading-job-skills"><strong>Job Skills</strong></h2>
<p>In this lab, you will:</p>
<ul>
<li><p>Create a virtual network and gateway subnet</p>
</li>
<li><p>Create a virtual network gateway</p>
</li>
</ul>
<hr />
<h2 id="heading-task-1-create-the-vnet-and-gateway-subnet"><strong>Task 1: Create the VNet and Gateway Subnet</strong></h2>
<ol>
<li><p>In the Azure portal, in the <strong>Search resources, services, and docs</strong> box, enter <code>virtual network</code>, then select <strong>Virtual networks</strong> from the results.</p>
</li>
<li><p>On the <strong>Virtual networks</strong> page, select <strong>+ Create</strong>.</p>
</li>
<li><p>In the <strong>Create virtual network</strong> pane, on the <strong>Basics</strong> tab, enter the following values:</p>
</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Setting</td><td>Value</td></tr>
</thead>
<tbody>
<tr>
<td>Virtual Network Name</td><td>CoreServicesVNet</td></tr>
<tr>
<td>Resource Group</td><td>ContosoResourceGroup</td></tr>
<tr>
<td>Location</td><td>East US</td></tr>
</tbody>
</table>
</div><ol start="4">
<li><p>Select <strong>Next: IP Addresses</strong>.</p>
</li>
<li><p>In the <strong>IP Addresses</strong> tab, under <em>IPv4 address space</em>, enter:<br /> <code>10.20.0.0/16</code>,<br /> then select <strong>+ Add subnet</strong>.</p>
</li>
<li><p>In the <strong>Add subnet</strong> pane, enter:</p>
</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Setting</td><td>Value</td></tr>
</thead>
<tbody>
<tr>
<td>Subnet purpose</td><td>Virtual Network Gateway</td></tr>
<tr>
<td>Gateway Subnet address</td><td>10.20.0.0/27</td></tr>
</tbody>
</table>
</div><p><em>Note:</em> The subnet name will be auto-filled as <code>GatewaySubnet</code>.</p>
<ol start="7">
<li><p>Select <strong>Add</strong>.</p>
</li>
<li><p>On the <strong>Create virtual network</strong> page, select <strong>Review + Create</strong>.</p>
</li>
<li><p>After validation passes, select <strong>Create</strong>.</p>
</li>
</ol>
<p><strong>Note:</strong> If you're using a dual-stack virtual network and plan to use IPv6 private peering over ExpressRoute, select <strong>Add IPv6 address space</strong> and enter the required range.</p>
<hr />
<h2 id="heading-task-2-create-the-virtual-network-gateway"><strong>Task 2: Create the Virtual Network Gateway</strong></h2>
<ol>
<li><p>In the Azure portal, in <strong>Search resources, services and docs</strong>, enter <code>virtual network gateway</code>, then select <strong>Virtual network gateways</strong> from the results.</p>
</li>
<li><p>On the <strong>Virtual network gateways</strong> page, select <strong>+ Create</strong>.</p>
</li>
<li><p>In the <strong>Create virtual network gateway</strong> page, use the following configuration:</p>
</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Setting</td><td>Value</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Resource Group</strong></td><td>ContosoResourceGroup</td></tr>
<tr>
<td><strong>Name</strong></td><td>CoreServicesVnetGateway</td></tr>
<tr>
<td><strong>Region</strong></td><td>East US</td></tr>
<tr>
<td><strong>Gateway type</strong></td><td>ExpressRoute</td></tr>
<tr>
<td><strong>SKU</strong></td><td>Standard</td></tr>
<tr>
<td><strong>Virtual network</strong></td><td>CoreServicesVNet</td></tr>
<tr>
<td><strong>Public IP address</strong></td><td>Create new</td></tr>
<tr>
<td><strong>Public IP name</strong></td><td>CoreServicesVnetGateway-IP</td></tr>
</tbody>
</table>
</div><ol start="4">
<li><p>Select <strong>Review + Create</strong>.</p>
</li>
<li><p>After validation, select <strong>Create</strong>.</p>
</li>
<li><p>Once deployment completes (this may take up to 45 minutes), select <strong>Go to resource</strong>.</p>
</li>
</ol>
<hr />
<h2 id="heading-extend-your-learning-with-copilot"><strong>Extend Your Learning with Copilot</strong></h2>
<p>Use Microsoft Copilot to explore more about Azure networking tools and options. Try these prompts in the Edge browser or visit <a target="_blank" href="https://copilot.microsoft.com">copilot.microsoft.com</a>:</p>
<ul>
<li><p><em>How is Azure ExpressRoute different from Virtual WAN? Can they be used together? Provide examples.</em></p>
</li>
<li><p><em>What are the key considerations when choosing between ExpressRoute Provider Model and ExpressRoute Direct?</em></p>
</li>
<li><p><em>Create a comparison table of ExpressRoute SKUs and their features.</em></p>
</li>
</ul>
<hr />
<h2 id="heading-learn-more-with-self-paced-training"><strong>Learn More with Self-Paced Training</strong></h2>
<ul>
<li><p><strong>Introduction to Azure ExpressRoute</strong><br />  Learn what Azure ExpressRoute is and the functionality it provides.</p>
</li>
<li><p><strong>Design and Implement ExpressRoute</strong><br />  Understand how to design and implement ExpressRoute, ExpressRoute Global Reach, and ExpressRoute FastPath.</p>
</li>
</ul>
<hr />
<h2 id="heading-key-takeaways"><strong>Key Takeaways</strong></h2>
<ul>
<li><p><strong>Azure ExpressRoute</strong> enables private, dedicated connections between your on-premises network and Azure/Microsoft 365 services.</p>
</li>
<li><p>Microsoft guarantees <strong>99.95% availability</strong> for ExpressRoute connections.</p>
</li>
<li><p>Traffic travels over a private, dedicated circuit—third parties cannot intercept the traffic.</p>
</li>
<li><p>ExpressRoute connections can be established through four models:</p>
<ul>
<li><p>CloudExchange Co-location</p>
</li>
<li><p>Point-to-Point Ethernet</p>
</li>
<li><p>Any-to-Any (IPVPN)</p>
</li>
<li><p>ExpressRoute Direct</p>
</li>
</ul>
</li>
<li><p>ExpressRoute features are determined by the <strong>SKU</strong>: Local, Standard, and Premium.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[AZ - 700 Lab 2]]></title><description><![CDATA[M02-Unit 3 Create and configure a virtual network gateway
Scenario
You will configure a VPN gateway to securely connect CoreServicesVnet (East US) and ManufacturingVnet (North Europe) using VNet-to-VNet VPN.

Task 1: Create CoreServicesVnet and Manuf...]]></description><link>https://shirincloudlab.com/az-700-lab-2</link><guid isPermaLink="true">https://shirincloudlab.com/az-700-lab-2</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Thu, 01 May 2025 18:44:37 GMT</pubDate><content:encoded><![CDATA[<h1 id="heading-m02-unit-3-create-and-configure-a-virtual-network-gateway">M02-Unit 3 Create and configure a virtual network gateway</h1>
<h2 id="heading-scenario">Scenario</h2>
<p>You will configure a VPN gateway to securely connect <strong>CoreServicesVnet</strong> (East US) and <strong>ManufacturingVnet</strong> (North Europe) using VNet-to-VNet VPN.</p>
<ul>
<li><p>Task 1: Create CoreServicesVnet and ManufacturingVnet</p>
</li>
<li><p>Task 2: Create CoreServicesVM</p>
</li>
<li><p>Task 3: Create ManufacturingVM</p>
</li>
<li><p>Task 4: Connect to the VMs using RDP</p>
</li>
<li><p>Task 5: Test the connection between the VMs</p>
</li>
<li><p>Task 6: Create CoreServicesVnet Gateway</p>
</li>
<li><p>Task 7: Create ManufacturingVnet Gateway</p>
</li>
<li><p>Task 8: Connect CoreServicesVnet to ManufacturingVnet</p>
</li>
<li><p>Task 9: Connect ManufacturingVnet to CoreServicesVnet</p>
</li>
<li><p>Task 10: Verify that the connections connect</p>
</li>
<li><p>Task 11: Test the connection between the VMs</p>
</li>
</ul>
<p>For more info click on the image below:</p>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M02-Unit%203%20Create%20and%20configure%20a%20virtual%20network%20gateway.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/3-exercise-create-configure-local-network-gateway.png" alt="Diagram of virtual network gateway." /></a></p>
<h3 id="heading-task-1-create-coreservicesvnet-and-manufacturingvnet">Task 1: Create CoreServicesVnet and ManufacturingVnet</h3>
<ol>
<li><p>Open <strong>Cloud Shell</strong> in the Azure portal and select <strong>PowerShell</strong>.</p>
</li>
<li><p>Upload: <code>azuredeploy.json</code> and <code>azuredeploy.parameters.json</code></p>
</li>
<li><p>Run:</p>
</li>
</ol>
<pre><code class="lang-powershell"><span class="hljs-variable">$RGName</span> = <span class="hljs-string">"ContosoResourceGroup"</span>
<span class="hljs-built_in">New-AzResourceGroup</span> <span class="hljs-literal">-Name</span> <span class="hljs-variable">$RGName</span> <span class="hljs-literal">-Location</span> <span class="hljs-string">"eastus"</span>
<span class="hljs-built_in">New-AzResourceGroupDeployment</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$RGName</span> <span class="hljs-literal">-TemplateFile</span> azuredeploy.json <span class="hljs-literal">-TemplateParameterFile</span> azuredeploy.parameters.json
</code></pre>
<hr />
<h3 id="heading-task-2-amp-3-create-coreservicesvm-and-manufacturingvm">Task 2 &amp; 3: Create CoreServicesVM and ManufacturingVM</h3>
<ol>
<li><p>Upload:<code>CoreServicesVMazuredeploy.json</code> and <code>ManufacturingVMazuredeploy.json</code></p>
</li>
<li><p>Run (for each):</p>
</li>
</ol>
<pre><code class="lang-powershell"><span class="hljs-built_in">New-AzResourceGroupDeployment</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$RGName</span> <span class="hljs-literal">-TemplateFile</span> &lt;template&gt;.json <span class="hljs-literal">-TemplateParameterFile</span> &lt;parameters&gt;.json
</code></pre>
<p>e.g. for manufacturingvm:</p>
<pre><code class="lang-powershell"><span class="hljs-variable">$RGName</span> = <span class="hljs-string">"ContosoResourceGroup"</span> 
<span class="hljs-built_in">New-AzResourceGroupDeployment</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$RGName</span> <span class="hljs-literal">-TemplateFile</span> ManufacturingVMazuredeploy.json <span class="hljs-literal">-TemplateParameterFile</span> ManufacturingVMazuredeploy.parameters.json
</code></pre>
<h3 id="heading-task-4-connect-to-vms-using-rdp">Task 4: Connect to VMs Using RDP</h3>
<ol>
<li><p>In Azure Portal, go to <strong>Virtual Machines</strong>.</p>
</li>
<li><p>Select each VM, click <strong>Connect &gt; RDP</strong>, download and open the file.</p>
</li>
<li><p>Log in with:</p>
<ul>
<li><p>Username: TestUser</p>
</li>
<li><p>Password: (used during deployment)</p>
</li>
</ul>
</li>
<li><p>Accept privacy settings and select <strong>Yes</strong> on network prompt.</p>
</li>
<li><p>On <strong>CoreServicesVM</strong>, run:</p>
<pre><code class="lang-powershell"> ipconfig
</code></pre>
<ul>
<li>Note the IPv4 address.</li>
</ul>
</li>
</ol>
<h3 id="heading-task-5-test-initial-connection-should-fail">Task 5: Test Initial Connection (Should Fail)</h3>
<ol>
<li><p>On <strong>ManufacturingVM</strong>, run:</p>
<pre><code class="lang-powershell"> <span class="hljs-built_in">Test-NetConnection</span> &lt;CoreServicesVM_IP&gt; <span class="hljs-literal">-Port</span> <span class="hljs-number">3389</span>
</code></pre>
<ul>
<li>Connection should fail.</li>
</ul>
</li>
</ol>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/master/Instructions/media/test-netconnection-fail.png" alt="Test-NetConnection failed." /></p>
<h3 id="heading-task-6-create-coreservicesvnet-gateway">Task 6: Create CoreServicesVnet Gateway</h3>
<ol>
<li><p>Go to <strong>Virtual Network Gateways</strong> &gt; <strong>+ Create</strong>.</p>
</li>
<li><p>Use the following settings:</p>
<ul>
<li><p>Name: CoreServicesVnetGateway</p>
</li>
<li><p>Region: East US</p>
</li>
<li><p>Gateway type: VPN</p>
</li>
<li><p>SKU: VpnGw1</p>
</li>
<li><p>Generation: 1</p>
</li>
<li><p>Virtual Network: CoreServicesVnet</p>
</li>
<li><p>Subnet: GatewaySubnet (10.20.0.0/27)</p>
</li>
<li><p>Public IP: Create new → Name: CoreServicesVnetGateway-ip (disable active-active mode)</p>
</li>
</ul>
</li>
</ol>
<hr />
<h3 id="heading-task-7-create-manufacturingvnet-gateway">Task 7: Create ManufacturingVnet Gateway</h3>
<ol>
<li><p>In ManufacturingVnet, go to <strong>Subnets</strong> &gt; <strong>+ Subnet</strong>.</p>
<ul>
<li><p>Purpose: GatewaySubnet</p>
</li>
<li><p>Size: /27</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746132886108/bd9f2587-9a82-46e2-9203-1e3c8e22c83b.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Then create the gateway:</p>
<ul>
<li><p>Name: ManufacturingVnetGateway</p>
</li>
<li><p>Region: North Europe (to be able to select manufacturing vnet)</p>
</li>
<li><p>Same settings as above</p>
</li>
<li><p>Public IP name: ManufacturingVnetGateway-ip (disable active-active)</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746133198375/0b9a8df1-5a21-4351-87ad-37217317e2df.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-task-8-connect-coreservicesvnet-to-manufacturingvnet">Task 8: Connect CoreServicesVnet to ManufacturingVnet</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746133583071/06ff6f44-3589-48f7-94fb-a397addc8f45.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p>Go to <strong>CoreServicesVnetGateway</strong> &gt; <strong>Connections</strong> &gt; <strong>+ Add</strong>.</p>
</li>
<li><p>Use these settings:</p>
<ul>
<li><p>Name: CoreServicesGW-to-ManufacturingGW</p>
</li>
<li><p>Connection type: VNet-to-VNet</p>
</li>
<li><p>First vnet Gateway: CoreServicesVnetGateway</p>
</li>
<li><p>Second Vnet Gateway: ManufacturingVnetGateway</p>
</li>
<li><p>Shared key: abc123</p>
</li>
<li><p>Protocol: IKEv2</p>
</li>
<li><p>Region: East US</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-task-9-connect-manufacturingvnet-to-coreservicesvnet">Task 9: Connect ManufacturingVnet to CoreServicesVnet</h3>
<ol>
<li><p>Go to <strong>ManufacturingVnetGateway</strong> &gt; <strong>Connections</strong> &gt; <strong>+ Add</strong>.</p>
</li>
<li><p>Use:</p>
<ul>
<li><p>Name: ManufacturingGW-to-CoreServicesGW</p>
</li>
<li><p>Connection type: VNet-to-VNet</p>
</li>
<li><p>First Vnet Gateway: ManufacturingVnetGateway</p>
</li>
<li><p>Second Gateway: CoreServicesVnetGateway</p>
</li>
<li><p>Shared key: abc123</p>
</li>
<li><p>Region: North Europe</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746137331427/ed9e53cc-532e-4111-9de0-be07cd13662e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746137427093/3a817fd9-f417-477c-8406-9376b9f1e78b.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-task-10-verify-vpn-connection">Task 10: Verify VPN Connection</h3>
<ol>
<li><p>Go to <strong>Connections</strong> in Azure portal.</p>
</li>
<li><p>Refresh until both connections show <strong>Connected</strong>.</p>
</li>
</ol>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/master/Instructions/media/connections-status-connected.png" alt="VPN Gateway connections successfully created." /></p>
<h3 id="heading-task-11-test-final-connection">Task 11: Test Final Connection</h3>
<ol>
<li><p>On <strong>ManufacturingVM</strong>, run:</p>
<pre><code class="lang-powershell"> <span class="hljs-built_in">Test-NetConnection</span> &lt;CoreServicesVM_IP&gt; <span class="hljs-literal">-Port</span> <span class="hljs-number">3389</span>
</code></pre>
<ul>
<li>Connection should succeed.</li>
</ul>
</li>
</ol>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/master/Instructions/media/test-connection-succeeded.png" alt="Test-NetConnection succeeded." /></p>
<h2 id="heading-clean-up-resources">Clean Up Resources</h2>
<p>To delete the resources, run:</p>
<pre><code class="lang-powershell"><span class="hljs-built_in">Remove-AzResourceGroup</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">'ContosoResourceGroup'</span> <span class="hljs-literal">-Force</span> <span class="hljs-literal">-AsJob</span>
</code></pre>
<h2 id="heading-extend-your-learning">Extend Your Learning</h2>
<p>Try these prompts in Microsoft Copilot:</p>
<ol>
<li>What are the types of Azure VPN gateways? Azure supports <strong>three main types</strong> of VPN gateway configurations:</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Type</strong></td><td><strong>Purpose</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Site-to-Site (S2S)</strong></td><td>Connects on-premises network to an Azure VNet using IPsec/IKE tunnel.</td></tr>
<tr>
<td><strong>Point-to-Site (P2S)</strong></td><td>Allows individual clients (e.g., remote workers) to connect to Azure.</td></tr>
<tr>
<td><strong>VNet-to-VNet</strong></td><td>Connects two or more Azure VNets together securely.</td></tr>
</tbody>
</table>
</div><p>You can mix S2S, P2S, and VNet-to-VNet on the same gateway (with compatible SKUs).</p>
<ol start="2">
<li>How do VPN gateway SKUs differ? Azure VPN Gateway SKUs differ by <strong>performance, features, and pricing</strong>. Key differences include:</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>SKU</strong></td><td><strong>Max Throughput</strong></td><td><strong>Max S2S Tunnels</strong></td><td><strong>P2S Support</strong></td><td><strong>BGP</strong></td><td><strong>Active-Active</strong></td><td><strong>Zone-Redundant</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Basic</td><td>~100 Mbps</td><td>10</td><td>No</td><td>No</td><td>No</td><td>No</td></tr>
<tr>
<td>VpnGw1</td><td>~650 Mbps</td><td>30</td><td>Yes</td><td>Yes</td><td>Yes</td><td>No</td></tr>
<tr>
<td>VpnGw2</td><td>~1 Gbps</td><td>30</td><td>Yes</td><td>Yes</td><td>Yes</td><td>No</td></tr>
<tr>
<td>VpnGw3</td><td>~1.25 Gbps</td><td>30</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr>
<tr>
<td>VpnGw4/5</td><td>5–10 Gbps+</td><td>100+</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr>
<tr>
<td>ErGw1–3</td><td>Used for <strong>ExpressRoute</strong>, not VPN connections.</td><td></td><td></td><td></td><td></td></tr>
</tbody>
</table>
</div><p><strong>Tip:</strong> Choose based on <strong>bandwidth needs</strong>, <strong>tunnel count</strong>, and <strong>features</strong> like BGP or zone redundancy.</p>
<ol start="3">
<li><p>What are the costs for Azure VPN gateways?Azure VPN Gateway pricing depends on:</p>
<ul>
<li><p><strong>SKU selected</strong> (Basic, VpnGw1, etc.)</p>
</li>
<li><p><strong>Data transfer</strong> (ingress is free; egress has cost)</p>
</li>
<li><p><strong>Time-based billing</strong> (hourly rate)</p>
</li>
<li><p><strong>Optional features</strong> (e.g., zone redundancy)</p>
</li>
</ul>
</li>
</ol>
<h4 id="heading-example-as-of-2024-subject-to-change"><strong>Example (as of 2024 – subject to change):</strong></h4>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>SKU</strong></td><td><strong>Approx. Cost/Hour</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Basic</td><td>~$0.04/hr</td></tr>
<tr>
<td>VpnGw1</td><td>~$0.09/hr</td></tr>
<tr>
<td>VpnGw2</td><td>~$0.20/hr</td></tr>
<tr>
<td>VpnGw3</td><td>~$0.35/hr</td></tr>
<tr>
<td>VpnGw5</td><td>~$1.25/hr</td></tr>
</tbody>
</table>
</div><h2 id="heading-key-takeaways">Key Takeaways</h2>
<ul>
<li><p>Azure VPN Gateway provides secure cross-region or hybrid connectivity using IPsec/IKE.</p>
</li>
<li><p>VNet-to-VNet connections require gateways in each VNet and shared keys for IPsec tunnels.</p>
</li>
<li><p>Bidirectional configuration is necessary.</p>
</li>
<li><p>Different SKUs provide different performance levels and costs.</p>
</li>
</ul>
<hr />
<h1 id="heading-m02-unit-7-create-a-virtual-wan-using-azure-portal"><strong>M02 - Unit 7: Create a Virtual WAN Using Azure Portal</strong></h1>
<h2 id="heading-scenario-1"><strong>Scenario</strong></h2>
<p>In this exercise, you’ll create a <strong>Virtual WAN</strong> for Contoso, including a <strong>hub</strong> and a <strong>VNet connection</strong>. click on the image below for more inforamtion:</p>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M02-Unit%207%20Create%20a%20Virtual%20WAN%20by%20using%20Azure%20Portal.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/7-exercise-create-virtual-wan-by-using-azure-portal.png" alt="Diagram of virtual network WAN architecture." /></a></p>
<h2 id="heading-tasks"><strong>Tasks</strong></h2>
<ul>
<li><p>Task 1: Create a Virtual WAN</p>
</li>
<li><p>Task 2: Create a hub by using Azure Portal</p>
</li>
<li><p>Task 3: Connect a VNet to the Virtual Hub</p>
</li>
</ul>
<h3 id="heading-task-1-create-a-virtual-wan"><strong>Task 1: Create a Virtual WAN</strong></h3>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/master/Instructions/media/search-for-virtual-wan.png" alt="Search for Virtual WAN in Azure Portal." /></p>
<ol>
<li><p>Go to the <strong>Azure Portal</strong>.</p>
</li>
<li><p>Search for <strong>Virtual WANs</strong> and select <strong>+ Create</strong>.</p>
</li>
<li><p>On the <strong>Basics</strong> tab, fill in:</p>
<ul>
<li><p><strong>Subscription</strong>: (Use existing)</p>
</li>
<li><p><strong>Resource Group</strong>: ContosoResourceGroup</p>
</li>
<li><p><strong>Location</strong>: Any region (WAN is global, but region needed for resource placement)</p>
</li>
<li><p><strong>Name</strong>: ContosoVirtualWAN</p>
</li>
<li><p><strong>Type</strong>: Standard</p>
</li>
</ul>
</li>
<li><p>Select <strong>Review + Create</strong>, then <strong>Create</strong>.</p>
</li>
</ol>
<h3 id="heading-task-2-create-a-virtual-hub"><strong>Task 2: Create a Virtual Hub</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746138629410/d46441d6-699b-494e-b2c5-4cd937ade859.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p>Open the <strong>ContosoVirtualWAN</strong> you created.</p>
</li>
<li><p>Under <strong>Connectivity</strong>, select <strong>Hubs</strong> &gt; <strong>+ New Hub</strong>.</p>
</li>
<li><p>On the <strong>Basics</strong> tab:</p>
<ul>
<li><p><strong>Region</strong>: West US</p>
</li>
<li><p><strong>Name</strong>: ContosoVirtualWANHub-WestUS</p>
</li>
<li><p><strong>Hub private address space</strong>: 10.60.0.0/24</p>
</li>
<li><p><strong>Capacity</strong>: 2 Routing infrastructure units</p>
</li>
<li><p>Leave routing preference as default.</p>
</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746138744281/e35cd72f-eecd-4ac0-b4b9-ea73f532c3a7.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><p>Go to the <strong>Site-to-site</strong> tab:</p>
<ul>
<li><p><strong>Create Site-to-site VPN Gateway</strong>: Yes</p>
</li>
<li><p><strong>Gateway scale units</strong>: 2</p>
</li>
<li><p>Leave AS number and routing preference as default.</p>
</li>
</ul>
</li>
<li><p>Click <strong>Review + Create</strong>, then <strong>Create</strong>.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746138773421/046e2db0-26bd-4ada-a05f-858438ae5749.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Note: VPN gateway creation can take up to 30 minutes.</p>
</blockquote>
<h3 id="heading-task-3-connect-a-vnet-to-the-virtual-hub"><strong>Task 3: Connect a VNet to the Virtual Hub</strong></h3>
<ol>
<li><p>Go to the <strong>ContosoVirtualWAN</strong> &gt; <strong>Virtual network connections</strong> &gt; <strong>+ Add connection</strong>.</p>
</li>
<li><p>Fill in:</p>
<ul>
<li><p><strong>Connection name</strong>: ContosoVirtualWAN-to-ResearchVNet</p>
</li>
<li><p><strong>Hub</strong>: ContosoVirtualWANHub-WestUS</p>
</li>
<li><p><strong>Subscription</strong>: (No change)</p>
</li>
<li><p><strong>Resource Group</strong>: ContosoResourceGroup</p>
</li>
<li><p><strong>Virtual network</strong>: ResearchVNet</p>
</li>
<li><p><strong>Propagate to none</strong>: Yes</p>
</li>
<li><p><strong>Associate Route Table</strong>: Default</p>
</li>
</ul>
</li>
<li><p>Select <strong>Create</strong>.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746141222719/4a53c361-af15-419a-a855-6a9ab3c3106d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746141268603/422bd961-1cc8-48a0-a560-5349464d96ec.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-clean-up-resources-1"><strong>Clean Up Resources</strong></h2>
<p>In <strong>Cloud Shell</strong>, run:</p>
<pre><code class="lang-powershell"><span class="hljs-built_in">Remove-AzResourceGroup</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">'ContosoResourceGroup'</span> <span class="hljs-literal">-Force</span> <span class="hljs-literal">-AsJob</span>
</code></pre>
<h2 id="heading-extend-your-learning-with-copilot"><strong>Extend Your Learning with Copilot</strong></h2>
<p>Try these questions at <a target="_blank" href="https://copilot.microsoft.com">copilot.microsoft.com</a>:</p>
<ol>
<li><p>What type of network architecture does Azure VWAN use?Azure Virtual WAN uses a <strong>hub-and-spoke architecture</strong>.</p>
<ul>
<li><p>The <strong>hub</strong> is a Microsoft-managed virtual network that acts as a central point for connectivity.</p>
</li>
<li><p><strong>Spokes</strong> include VNets, branch offices (via site-to-site VPN), remote users (via point-to-site VPN), and ExpressRoute circuits.</p>
</li>
<li><p>Traffic between spokes flows through the hub using Microsoft’s <strong>global backbone</strong>, enabling optimized, scalable, and secure routing.</p>
</li>
</ul>
</li>
<li><p>What are the differences between Azure VWAN Basic and Standard?</p>
</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Basic</strong></td><td><strong>Standard</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Site-to-Site VPN</td><td>✅ Yes</td><td>✅ Yes</td></tr>
<tr>
<td>Point-to-Site VPN</td><td>❌ No</td><td>✅ Yes</td></tr>
<tr>
<td>ExpressRoute support</td><td>❌ No</td><td>✅ Yes</td></tr>
<tr>
<td>VNet-to-VNet via Hub</td><td>❌ No</td><td>✅ Yes</td></tr>
<tr>
<td>Inter-region hub connectivity</td><td>❌ No</td><td>✅ Yes</td></tr>
<tr>
<td>Custom routing (route tables)</td><td>❌ No</td><td>✅ Yes</td></tr>
</tbody>
</table>
</div><ul>
<li><p><strong>Use Basic</strong> for simple S2S VPN-only deployments.</p>
</li>
<li><p><strong>Use Standard</strong> for full enterprise, hybrid, or global network integration.</p>
</li>
</ul>
<ol start="3">
<li>Can I create an Azure VWAN using scripting tools?Yes. Azure VWAN supports deployment via:</li>
</ol>
<ul>
<li><strong>Azure CLI</strong></li>
</ul>
<pre><code class="lang-powershell">az network vwan create -<span class="hljs-literal">-name</span> ContosoVirtualWAN -<span class="hljs-literal">-resource</span><span class="hljs-literal">-group</span> ContosoResourceGroup -<span class="hljs-literal">-location</span> eastus -<span class="hljs-literal">-type</span> Standard
</code></pre>
<ul>
<li><strong>Azure PowerShell</strong></li>
</ul>
<pre><code class="lang-powershell"><span class="hljs-built_in">New-AzVirtualWan</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-string">"ContosoResourceGroup"</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">"ContosoVirtualWAN"</span> <span class="hljs-literal">-Location</span> <span class="hljs-string">"East US"</span> ` <span class="hljs-literal">-Type</span> <span class="hljs-string">"Standard"</span>
</code></pre>
<h2 id="heading-key-takeaways-1"><strong>Key Takeaways</strong></h2>
<ul>
<li><p><strong>Azure Virtual WAN</strong> simplifies global connectivity using a <strong>hub-and-spoke</strong> architecture.</p>
</li>
<li><p><strong>Use cases</strong> include: Site-to-Site, Point-to-Site, and ExpressRoute.</p>
</li>
<li><p><strong>Basic VWAN</strong> supports only Site-to-Site VPN.</p>
</li>
<li><p><strong>Standard VWAN</strong> supports all scenarios, including enhanced routing, hubs, and multiple VPN types.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[AZ - 700 - 03 - Design and implement Azure ExpressRoute]]></title><description><![CDATA[Introduction
Azure ExpressRoute is a private, enterprise-grade connection that enables secure and reliable network connectivity between your on-premises infrastructure and Microsoft’s global network. It bypasses the public internet and provides high ...]]></description><link>https://shirincloudlab.com/az-700-03-design-and-implement-azure-expressroute</link><guid isPermaLink="true">https://shirincloudlab.com/az-700-03-design-and-implement-azure-expressroute</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Fri, 25 Apr 2025 23:46:08 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>Azure ExpressRoute is a private, enterprise-grade connection that enables secure and reliable network connectivity between your on-premises infrastructure and Microsoft’s global network. It bypasses the public internet and provides high throughput, low latency, and consistent performance for mission-critical workloads.</p>
<h2 id="heading-architecture-overview"><strong>Architecture Overview</strong></h2>
<p>Azure ExpressRoute uses a hub-and-spoke model involving:</p>
<ul>
<li><p>A physical on-premises site(on the left)</p>
</li>
<li><p>Private fiber connectivity to Microsoft’s edge</p>
</li>
<li><p>Microsoft Secure Edge routers</p>
</li>
<li><p>Azure VNets (private address space)</p>
</li>
<li><p>Microsoft public services (e.g., Microsoft 365, Azure SQL, Storage)</p>
</li>
</ul>
<p>A <strong>Meet-Me Room (MMR)</strong> is a <strong>secure physical location within a colocation data center</strong> where multiple telecommunications carriers, cloud providers (like Microsoft), and enterprises <strong>interconnect their networks</strong>.</p>
<p><a target="_blank" href="https://learn.microsoft.com/en-us/shows/on-demand-instructor-led-training-series/az-700-module-1"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746212846151/8ad7bc3b-1267-4aca-89e8-ef6da0055fa7.png" alt class="image--center mx-auto" /></a></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746214087375/3bf48cc9-ef8f-4618-b5f5-99117d01ea58.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-connection-models"><strong>Connection Models</strong></h2>
<h3 id="heading-1-expressroute-via-service-provider-model-layer-3"><strong>1. ExpressRoute via Service Provider Model (Layer 3)</strong></h3>
<ul>
<li><p>Connectivity is managed through a partner or a colocation facility.</p>
</li>
<li><p>The partner establishes the cross-connect to Microsoft’s edge via a Meet Me Room (MMR).</p>
</li>
<li><p>Suitable for standard enterprise workloads with high availability (two connections) and moderate control.</p>
</li>
</ul>
<h3 id="heading-2-expressroute-direct-layer-2"><strong>2. ExpressRoute Direct (Layer 2)</strong></h3>
<ul>
<li><p>Provides a dedicated port pair (10 Gbps or 100 Gbps) directly to Microsoft.</p>
</li>
<li><p>Enables direct monitoring (e.g., signal light levels, propagation).</p>
</li>
<li><p>Offers granular control and is ideal for enterprises needing extreme performance and flexibility.</p>
</li>
<li><p>Requires customer setup and responsibility for all routing and cabling.</p>
</li>
</ul>
<h2 id="heading-expressroute-circuit"><strong>ExpressRoute Circuit</strong></h2>
<p>A circuit is the logical container for the ExpressRoute connection. Once provisioned:</p>
<ul>
<li><p>You can attach it to virtual networks.</p>
</li>
<li><p>Use it for both public and private Azure services.</p>
</li>
<li><p>Choose bandwidth, location, SKU, and routing preferences.</p>
</li>
</ul>
<p>A <strong>Meet-Me Room (MMR)</strong> is a <strong>secure physical location within a colocation data center</strong> where multiple telecommunications carriers, cloud providers (like Microsoft), and enterprises <strong>interconnect their networks</strong>.</p>
<p>in the image below (express direct) we have a 100Gbps fiber connection between on-prem and microsoft secure edge, with two differnt circut one 40 Gbps to m365 services and one 5 Gbps to azure services.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746214344310/dacde148-4919-48f1-967e-610c35800d4b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746224485050/e4f6c0c5-3f6c-416a-981a-1316c52b0021.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><strong>ExpressRoute</strong> is the overall Azure service that enables private connectivity between your on-premises network and Microsoft cloud services.</p>
</li>
<li><p><strong>SKU Options</strong> refer to the <strong>tiers and configurations you choose when provisioning an ExpressRoute circuit</strong> — essentially, <strong>SKUs are part of the circuit configuration</strong>.</p>
</li>
</ul>
<h2 id="heading-sku-options"><strong>SKU Options</strong></h2>
<ul>
<li><p><strong>Standard</strong>: Access to Azure services within a geopolitical region(e.g. US east, US West).</p>
</li>
<li><p><strong>Local</strong>: Restricts access to one (sometimes two) Azure region. Lower cost.</p>
</li>
<li><p><strong>Premium</strong>: Enables global access across regions and increases route limits.</p>
</li>
</ul>
<p>Each SKU allows varying capabilities depending on network size, access needs, and resiliency requirements.</p>
<h2 id="heading-edge-and-region-mapping"><strong>Edge and Region Mapping</strong></h2>
<ul>
<li><p>ExpressRoute peering is done at Microsoft Edge locations.</p>
</li>
<li><p>These are globally distributed and not limited to Azure regions.</p>
</li>
<li><p>For example, a customer in Perth can peer through a local Edge site to reach multiple paired Azure regions.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746226712866/34804aa8-0aef-4993-969d-7f5f27a4fc69.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-billing-models"><strong>Billing Models</strong></h2>
<p>Two billing options are available:</p>
<ol>
<li><p><strong>Unlimited data</strong>: Fixed monthly fee with unrestricted traffic.</p>
</li>
<li><p><strong>Metered data</strong>: Pay-per-GB model; more cost-effective for lighter usage.</p>
</li>
</ol>
<p>The Azure pricing calculator helps determine the best model based on expected throughput.</p>
<h2 id="heading-deployment-process-in-azure-portal"><strong>Deployment Process in Azure Portal</strong></h2>
<p>The complete setup may take several weeks, but we can start by reviewing how the provisioning process works in the Azure portal, assuming the cabling is correctly positioned.</p>
<ol>
<li><p>Create an ExpressRoute circuit.</p>
</li>
<li><p>Choose deployment region and provider.</p>
</li>
<li><p>Select SKU, bandwidth and billing method</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746226932527/7426fa90-90d6-4adc-a841-3dd26491b225.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746227816656/922abfa1-2315-40cb-9162-4f9b37a17a51.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746227595062/b3f3e9a4-0eb2-4ed6-8e8a-83eeacae6f8d.png" alt class="image--center mx-auto" /></p>
<p><strong>if we choose provider model depends on the region that we select we have different provider:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746227621959/b8bfa6f0-0dc6-4218-923e-a4e925bedab9.png" alt class="image--center mx-auto" /></p>
<p>Next, configure the <strong>gateway</strong> to land traffic—this process will be familiar if you’ve set up a VPN gateway before(we just select express route instead of VPN).</p>
<ol>
<li><p>Provision a virtual network gateway in Azure.</p>
</li>
<li><p>Attach the gateway to the ExpressRoute circuit.</p>
</li>
<li><p>Complete provider-side setup or configure Direct ports.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746228457199/74c1fe50-17a8-4653-8a98-46f4e839d9fc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746228695460/da790d32-d729-44e6-99d1-61099b19fb0c.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-express-route-peering-types"><strong>Express Route Peering Types:</strong></h2>
<p>What actually goes across our express route circuit?</p>
<ol>
<li><p>Private peering</p>
</li>
<li><p>Microsoft peering</p>
</li>
</ol>
<p>Here one connection across an Expressroute can carry both Microsoft peering traffic and private peering traffic, you can use one or the other or both:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746228942946/8f57f64d-6114-4312-8ee3-3c3281464387.png" alt class="image--center mx-auto" /></p>
<p>So one connection through express route can carry both microsoft and private peering traffic.</p>
<h3 id="heading-private-peering-in-azure-expressroute"><strong>Private Peering in Azure ExpressRoute</strong></h3>
<p>Private peering is used to access Azure Virtual Networks (VNets) through private IP address space. It enables connectivity between your on-premises network and Azure resources via ExpressRoute.</p>
<p><strong>Configuration requirements:</strong></p>
<ul>
<li><p><strong>IP subnets</strong>: Two subnets not part of any VNet address space—one for the primary link, one for the secondary.</p>
</li>
<li><p><strong>VLAN ID</strong>: A valid on-premises VLAN ID to establish the peering.</p>
</li>
<li><p><strong>ASN</strong>: An Autonomous System Number for BGP peering.</p>
</li>
<li><p><strong>BGP session</strong>: Configure your on-prem Edge router to advertise routes to Azure via BGP.</p>
</li>
<li><p><strong>MD5 hash (optional)</strong>: Use for BGP session authentication if required.</p>
</li>
</ul>
<blockquote>
<p>VLAN ID is used in ExpressRoute private peering to separate traffic types at the data link layer between your router and Microsoft’s edge (MSEE). VNets don’t use VLANs because they operate at Layer 3, using subnets, route tables, and security rules for isolation.</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746229519177/cc68fc55-cd84-4b03-b096-59a1bcdbe87d.png" alt class="image--center mx-auto" /></p>
<p>Now, once you have this private pairing established, we just need to go through and actually do the connection itself.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746229635219/98e44241-8586-4dfe-8813-96ec65f548fa.png" alt class="image--center mx-auto" /></p>
<p>If you have a provisioned ExpressRoute circuit, go to the <strong>Connections</strong> tab and select <strong>Add</strong>. Then, choose the virtual network you want to connect. You’ll need a <strong>gateway subnet</strong> in the VNet, along with an <strong>ExpressRoute gateway</strong>—either already provisioned or created during this step. Once the gateway is in place, you can configure additional settings such as <strong>routing weight</strong> for traffic distribution.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1746229718776/9b89abf8-367e-4c47-99d2-3d048b9e24a9.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-microsoft-peering-in-azure-expressroute"><strong>Microsoft Peering in Azure ExpressRoute</strong></h3>
<p>Microsoft peering enables private connectivity to <strong>Microsoft public services</strong> such as Microsoft 365, Azure Storage, and Azure SQL via ExpressRoute.</p>
<p><strong>Configuration requirements:</strong></p>
<ul>
<li><p><strong>Public IP prefixes</strong>: Must be owned by your organization and registered with a recognized <strong>Routing Internet Registry (RIR/IRR)</strong>.</p>
</li>
<li><p><strong>Subnets</strong>: A pair of registered subnets—one for the primary link, one for the secondary.</p>
</li>
<li><p><strong>ASN</strong>: Autonomous System Number used for BGP peering.</p>
</li>
<li><p><strong>VLAN ID</strong>: Valid on-premises VLAN ID for establishing the peering session.</p>
</li>
<li><p><strong>Advertised prefixes</strong>: A list of all public IPs your organization plans to advertise over the BGP session.</p>
</li>
<li><p><strong>Routing Registry Name</strong>: The registry (e.g., ARIN, RIPE) that confirms ownership of the advertised prefixes.</p>
</li>
<li><p><strong>BGP configuration</strong>: To establish routing between your network and Microsoft.</p>
</li>
<li><p><strong>Route filters</strong>: Define which Microsoft services and regions are accessible over the peering session.</p>
</li>
</ul>
<h2 id="heading-route-filters-and-bgp-communities"><strong>Route Filters and BGP Communities</strong></h2>
<ul>
<li><p>Route filters control which services we want to carry over Microsoft Peering.</p>
</li>
<li><p>BGP communities identify specific Azure services and regions.</p>
</li>
<li><p>You can selectively include services like Storage or SQL while excluding services like Exchange or SharePoint, which are optimized for internet routing.</p>
</li>
</ul>
<p>Consider this scenario: you’re a customer consuming Azure services hosted in <strong>Australia East</strong>, and you’re specifically interested in accessing <strong>storage services</strong>. Instead of routing all Microsoft traffic through your ExpressRoute circuit, you can apply a <strong>route filter</strong> to select a <strong>BGP community</strong> that corresponds only to <strong>Azure Storage in Australia East</strong>. This allows you to <strong>target exactly the services you need</strong>.</p>
<p>You’re not required to select all traffic types. In fact, services like <strong>Microsoft 365 (e.g., Exchange Online, SharePoint)</strong> are <strong>designed and optimized for internet routing</strong>, so using ExpressRoute for them is typically unnecessary unless you have a specialized scenario. Using <strong>route filters</strong> gives you precise control over what traffic flows through your ExpressRoute circuit.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747080474892/2fbad0b9-b7ad-4d3d-94be-0cf495f42f2f.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-resiliency-and-high-availability"><strong>Resiliency and High Availability</strong></h2>
<p>In the context of <strong>“Resiliency and High Availability”</strong> for Azure ExpressRoute, <strong>resiliency</strong> refers to the system’s <strong>ability to recover quickly from failures and continue operating with minimal disruption</strong>. Here’s how it breaks down:</p>
<p><strong>Resiliency</strong> ensures your network connection can withstand failures (e.g. link failure, hardware fault) without going down completely.</p>
<p><strong>High Availability</strong> complements this by <strong>ensuring constant uptime</strong>—you always have at least one active path for traffic.</p>
<ul>
<li><p>ExpressRoute circuits are active-active by default.</p>
</li>
<li><p>Each circuit has dual connections and subnets.</p>
</li>
<li><p>Use Bidirectional Forwarding Detection (BFD) for rapid failure detection.(BFD is able to detect if an express route goes down very quickly)</p>
</li>
<li><p>BFD is enabled by default and helps reduce failover time from minutes to seconds.</p>
</li>
</ul>
<h2 id="heading-multi-region-redundancy"><strong>Multi-Region Redundancy</strong></h2>
<ul>
<li><p>Enterprises can provision ExpressRoute circuits in multiple Azure regions.</p>
</li>
<li><p>Weighted BGP routing enables active-passive or load-balanced setups.</p>
</li>
<li><p>Multiple circuits can serve as failover paths.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747082348813/5ebc72be-e8e9-4bd3-b809-99b1a479fcaa.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747083252988/93f0eab7-d728-4f7a-834e-80567c7defc4.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-hybrid-redundancy-with-vpn-as-a-secondry-failover-for-express-route"><strong>Hybrid Redundancy with VPN (as a secondry failover for express route)</strong></h2>
<ul>
<li><p>A VPN can serve as a backup for ExpressRoute in case of circuit failure.</p>
</li>
<li><p>This creates two diverse paths:</p>
<ul>
<li><p>Private fiber (ExpressRoute)</p>
</li>
<li><p>Public internet (VPN)</p>
</li>
</ul>
</li>
<li><p>The same Azure VPN gateway can serve dual purposes (primary for VPN, failover for ExpressRoute).</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747083402039/bc3217ec-25bd-45f9-8ad9-0c96933b6625.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-encryption-over-expressroute"><strong>Encryption over ExpressRoute</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747083773277/50d27cdd-6c9f-446b-9967-a584beef8ce5.png" alt class="image--center mx-auto" /></p>
<p>By default, ExpressRoute traffic is private but not encrypted. Two encryption options exist:</p>
<ol>
<li><p><strong>Overlay VPN (IPsec)</strong>: Create a VPN tunnel over the ExpressRoute connection.</p>
</li>
<li><p><strong>MACsec</strong>: Layer 2 encryption available with ExpressRoute Direct.</p>
</li>
</ol>
<p>Encryption should be planned during initial deployment to meet compliance requirements.</p>
<h2 id="heading-expressroute-global-reach"><strong>ExpressRoute Global Reach</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747084000687/a2b6617d-b99b-4ce1-8f15-285a99ee4c4a.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Enables connectivity between two on-premises sites through Microsoft’s global network.</p>
</li>
<li><p>Bypasses Azure VNets entirely.</p>
</li>
<li><p>Use case: connecting San Francisco and London data centers via existing ExpressRoute circuits.</p>
</li>
</ul>
<p>This is configured by linking the two circuits and enabling route propagation between them.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747084102459/a5f52172-097e-4643-9b7a-dbdf3987897c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747084185114/a617a6a0-2ee1-48b6-8d47-2302f35c2621.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-fastpath"><strong>FastPath</strong></h2>
<ul>
<li><p>Improves performance for high-throughput scenarios.</p>
</li>
<li><p>Bypasses the ExpressRoute gateway after initial setup (control plane) and sends traffic directly on the data plane.</p>
</li>
<li><p>Requires Ultra Performance Gateway SKU (Gateway v3).</p>
</li>
<li><p>Ideal for scenarios like remote desktop sessions, where low latency is critical.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747084220953/6af5b0b5-92ea-46d7-aa35-0f303cd65722.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-configure-expressroute-fastpath">Configure ExpressRoute FastPath:</h3>
<p>Updating an existing connection to enable FastPath:</p>
<pre><code class="lang-powershell"><span class="hljs-variable">$connection</span> = <span class="hljs-built_in">Get-AzVirtualNetworkGatewayConnection</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">"MyConnection"</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-string">"MyRG"</span>
<span class="hljs-variable">$connection</span>.ExpressRouteGatewayBypass = <span class="hljs-variable">$True</span>
<span class="hljs-built_in">Set-AzVirtualNetworkGatewayConnection</span> <span class="hljs-literal">-VirtualNetworkGatewayConnection</span> <span class="hljs-variable">$connection</span>
</code></pre>
<h2 id="heading-monitoring-and-troubleshooting-expressroute-connection"><strong>Monitoring and Troubleshooting ExpressRoute Connection</strong></h2>
<h3 id="heading-verify-circuit-provisioning-and-state-through-the-azure-portal"><strong>Verify circuit provisioning and state through the Azure portal</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747085037782/82861850-1fb3-4b0e-a45c-093d2ccf9a1c.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-powershell"><span class="hljs-built_in">Get-AzExpressRouteCircuit</span>
</code></pre>
<ul>
<li>Shows all the backend data for current express route that is provisioned including: provisioning state, bandwidth, provider, location, etc.</li>
</ul>
<p><strong>Provider Status: Provisioned</strong> → The service provider has completed their setup.</p>
<p><strong>Circuit Status: Enabled</strong> → You (the customer) have finished your side of the configuration.</p>
<p>These two indicators help you quickly understand where the setup stands and who is responsible for the next step.</p>
<h3 id="heading-reset-a-failed-circuit">Reset a failed circuit:</h3>
<pre><code class="lang-powershell"><span class="hljs-built_in">Connect-AzAccount</span> 
<span class="hljs-built_in">Get-AzSubscription</span> 
<span class="hljs-built_in">Select-AzSubscription</span> <span class="hljs-literal">-SubscriptionName</span> <span class="hljs-string">"Replace_with_your_subscription_name"</span> 
<span class="hljs-variable">$ckt</span> = <span class="hljs-built_in">Get-AzExpressRouteCircuit</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">"ExpressRouteARMCircuit"</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-string">"ExpressRouteResourceGroup"</span> 
<span class="hljs-built_in">Set-AzExpressRouteCircuit</span> <span class="hljs-literal">-ExpressRouteCircuit</span> <span class="hljs-variable">$ckt</span>
</code></pre>
<pre><code class="lang-powershell"><span class="hljs-built_in">Set-AzExpressRouteCircuit</span>
</code></pre>
<ul>
<li>Refreshes a circuit even without changes. Useful for resetting failed states.</li>
</ul>
<h3 id="heading-validate-peering-configuration">Validate Peering Configuration</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747086833511/4013eb4b-1240-4c72-9837-5599ac078166.png" alt class="image--center mx-auto" /></p>
<p>ExpressRoute circuit is up and running, but <strong>peering isn’t functioning properly</strong> (we’re not seeing private or Microsoft traffic flow across the connection)</p>
<ul>
<li><p>Check connection and provisioning status under the circuit’s Peering tab.</p>
</li>
<li><p>Ensure subnets and peerings are configured and advertised correctly.</p>
</li>
</ul>
<h3 id="heading-validate-arp-layer-2-diagnostics"><strong>Validate ARP: Layer 2 Diagnostics</strong></h3>
<ul>
<li>Use ARP tables to validate device connections and MAC-level communication.</li>
</ul>
<h3 id="heading-network-performance-testing"><strong>Network Performance Testing</strong></h3>
<ul>
<li><p>Use the <strong>Azure Connectivity Toolkit (Azure Cwrt)</strong> to simulate and test:</p>
<ul>
<li><p>Throughput</p>
</li>
<li><p>Latency</p>
</li>
<li><p>Packet behavior</p>
</li>
</ul>
</li>
<li><p>Also supports synthetic traffic testing with different packet sizes and patterns.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747086987151/e3785e34-cf87-4d08-9fa3-b373729e6246.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h2 id="heading-summary-service-provider-model-vs-direct"><strong>Summary: Service Provider Model vs. Direct</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Service Provider Model</strong></td><td><strong>ExpressRoute Direct</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Routing Layer</td><td>Layer 3</td><td>Layer 2</td></tr>
<tr>
<td>Setup</td><td>Via partner/provider</td><td>Customer-controlled</td></tr>
<tr>
<td>Control Level</td><td>Moderate</td><td>High</td></tr>
<tr>
<td>Encryption Options</td><td>VPN overlay</td><td>VPN or MACsec</td></tr>
<tr>
<td>Bandwidth Options</td><td>Up to 10 Gbps</td><td>Up to 100 Gbps</td></tr>
<tr>
<td>Use Case</td><td>General enterprise</td><td>High-throughput/regulated</td></tr>
</tbody>
</table>
</div><h2 id="heading-final-considerations"><strong>Final Considerations</strong></h2>
<ul>
<li><p>Choose the right SKU and model (Direct vs Provider) based on:</p>
<ul>
<li><p>Bandwidth needs</p>
</li>
<li><p>Regional access</p>
</li>
<li><p>Security/compliance requirements</p>
</li>
</ul>
</li>
<li><p>Configure peering, encryption, and redundancy early to avoid operational complexity later.</p>
</li>
<li><p>Monitor proactively using built-in tools and routing visibility.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[AZ - 700 Lab 1]]></title><description><![CDATA[You need to create three virtual networks:
1.  CoreServicesVnet

Region: East US

Purpose: Main network (web services, databases, shared services like DC/DNS).

Connectivity: Needs VPN connection to on-premises.

Address Space: Large (because of expe...]]></description><link>https://shirincloudlab.com/az-700-lab-1</link><guid isPermaLink="true">https://shirincloudlab.com/az-700-lab-1</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Fri, 25 Apr 2025 22:05:06 GMT</pubDate><content:encoded><![CDATA[<p>You need to create <strong>three virtual networks</strong>:</p>
<h3 id="heading-1-coreservicesvnet"><strong>1.  CoreServicesVnet</strong></h3>
<ul>
<li><p><strong>Region</strong>: East US</p>
</li>
<li><p><strong>Purpose</strong>: Main network (web services, databases, shared services like DC/DNS).</p>
</li>
<li><p><strong>Connectivity</strong>: Needs VPN connection to on-premises.</p>
</li>
<li><p><strong>Address Space</strong>: <strong>Large</strong> (because of expected growth).</p>
</li>
<li><p><strong>Address Space</strong>: 10.20.0.0/16</p>
</li>
<li><p><strong>Subnets</strong>:</p>
<ul>
<li><p>GatewaySubnet → 10.20.0.0/27</p>
</li>
<li><p>SharedServicesSubnet → 10.20.10.0/24</p>
</li>
<li><p>DatabaseSubnet → 10.20.20.0/24</p>
</li>
<li><p>PublicWebServiceSubnet → 10.20.30.0/24</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-2-manufacturingvnet"><strong>2. ManufacturingVnet</strong></h3>
<ul>
<li><p><strong>Region</strong>: West Europe</p>
</li>
<li><p><strong>Purpose</strong>: Manufacturing operations, lots of connected devices (IoT).</p>
</li>
<li><p><strong>Connectivity</strong>: No mention of VPN, but must support many devices.</p>
</li>
<li><p><strong>Address Space</strong>: <strong>Medium to Large</strong>, scalable.</p>
</li>
<li><p><strong>Address Space</strong>: 10.30.0.0/16</p>
</li>
<li><p><strong>Subnets</strong>:</p>
<ul>
<li><p>ManufacturingSystemSubnet → 10.30.10.0/24</p>
</li>
<li><p>SensorSubnet1 → 10.30.20.0/24</p>
</li>
<li><p>SensorSubnet2 → 10.30.21.0/24</p>
</li>
<li><p>SensorSubnet3 → 10.30.22.0/24</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-3-researchvnet"><strong>3. ResearchVnet</strong></h3>
<ul>
<li><p><strong>Region</strong>: Southeast Asia</p>
</li>
<li><p><strong>Purpose</strong>: Research &amp; Development (small, stable).</p>
</li>
<li><p><strong>Connectivity</strong>: No VPN mentioned.</p>
</li>
<li><p><strong>Address Space</strong>: <strong>Small</strong></p>
</li>
<li><p><strong>Address Space</strong>: 10.40.0.0/16</p>
</li>
<li><p><strong>Subnet</strong>:</p>
<ul>
<li>ResearchSystemSubnet → 10.40.0.0/24</li>
</ul>
</li>
</ul>
<p>    <a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%204%20Design%20and%20implement%20a%20Virtual%20Network%20in%20Azure.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/design-implement-vnet-peering.png" alt /></a></p>
<p>Click on the image above for more info</p>
<p>You will create the following resources:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Virtual Network</strong></td><td><strong>Region</strong></td><td><strong>Address Space</strong></td><td><strong>Subnets</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>CoreServicesVnet</strong></td><td>East US</td><td>10.20.0.0/16</td><td>GatewaySubnet (10.20.0.0/27), SharedServicesSubnet (10.20.10.0/24), DatabaseSubnet (10.20.20.0/24), PublicWebServiceSubnet (10.20.30.0/24)</td></tr>
<tr>
<td><strong>ManufacturingVnet</strong></td><td>West Europe</td><td>10.30.0.0/16</td><td>ManufacturingSystemSubnet (10.30.10.0/24), SensorSubnet1 (10.30.20.0/24), SensorSubnet2 (10.30.21.0/24), SensorSubnet3 (10.30.22.0/24)</td></tr>
<tr>
<td><strong>ResearchVnet</strong></td><td>Southeast Asia</td><td>10.40.0.0/16</td><td>ResearchSystemSubnet (10.40.0.0/24)</td></tr>
</tbody>
</table>
</div><p>These virtual networks and subnets are designed to support current resources and future growth.</p>
<h3 id="heading-in-this-exercise-you-will"><strong>In this exercise, you will:</strong></h3>
<ul>
<li><p><strong>Task 1</strong>: Create the <strong>Contoso</strong> resource group.</p>
</li>
<li><p><strong>Task 2</strong>: Create <strong>CoreServicesVnet</strong> and its subnets.</p>
</li>
<li><p><strong>Task 3</strong>: Create <strong>ManufacturingVnet</strong> and its subnets.</p>
</li>
<li><p><strong>Task 4</strong>: Create <strong>ResearchVnet</strong> and its subnet.</p>
</li>
<li><p><strong>Task 5</strong>: Verify the VNets and Subnets are created.</p>
</li>
</ul>
<h2 id="heading-lab-instructions-create-resource-group-virtual-networks-and-subnets"><strong>Lab Instructions: Create Resource Group, Virtual Networks, and Subnets</strong></h2>
<h3 id="heading-task-1-create-the-contoso-resource-group"><strong>Task 1: Create the Contoso Resource Group</strong></h3>
<ol>
<li><p>Go to the <strong>Azure portal</strong>.</p>
</li>
<li><p>On the home page, under <strong>Azure services</strong>, select <strong>Resource groups</strong>.</p>
</li>
<li><p>Select <strong>+ Create</strong>.</p>
</li>
<li><p>Configure as follows:</p>
<ul>
<li><p><strong>Resource group</strong>: ContosoResourceGroup</p>
</li>
<li><p><strong>Region</strong>: (US) East US</p>
</li>
<li><p><strong>Tags</strong>: No changes needed</p>
</li>
</ul>
</li>
<li><p>Click <strong>Review + create</strong>, then <strong>Create</strong>.</p>
</li>
<li><p>Verify that <strong>ContosoResourceGroup</strong> appears in the Resource Groups list.</p>
</li>
</ol>
<h3 id="heading-task-2-create-the-coreservicesvnet-virtual-network-and-subnets"><strong>Task 2: Create the CoreServicesVnet Virtual Network and Subnets</strong></h3>
<ol>
<li><p>From the Azure portal, search for <strong>Virtual Networks</strong> in the Global Search bar and select it.</p>
</li>
<li><p>Select <strong>+ Create</strong>.</p>
</li>
<li><p>Configure as follows:</p>
<ul>
<li><p><strong>Resource Group</strong>: ContosoResourceGroup</p>
</li>
<li><p><strong>Name</strong>: CoreServicesVnet</p>
</li>
<li><p><strong>Region</strong>: (US) East US</p>
</li>
<li><p><strong>IPv4 address space</strong>: 10.20.0.0/16</p>
<p>  <em>(Remove or overwrite the default address space)</em></p>
</li>
</ul>
</li>
</ol>
<p>    <a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%204%20Design%20and%20implement%20a%20Virtual%20Network%20in%20Azure.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/global-search-bar.PNG" alt="Azure portal home page Global Search bar results for virtual network." /></a></p>
<ol start="4">
<li><p>Add subnets:</p>
<ul>
<li><p><strong>GatewaySubnet</strong></p>
<ul>
<li><p>Subnet purpose: Virtual Network Gateway</p>
</li>
<li><p>Subnet address range: 10.20.0.0/27</p>
</li>
</ul>
</li>
<li><p><strong>SharedServicesSubnet</strong></p>
<ul>
<li>Subnet address range: 10.20.10.0/24</li>
</ul>
</li>
<li><p><strong>DatabaseSubnet</strong></p>
<ul>
<li>Subnet address range: 10.20.20.0/24</li>
</ul>
</li>
<li><p><strong>PublicWebServiceSubnet</strong></p>
<ul>
<li>Subnet address range: 10.20.30.0/24</li>
</ul>
</li>
</ul>
</li>
<li><p>After adding subnets, select <strong>Review + create</strong>.</p>
</li>
<li><p>Verify validation passes, then select <strong>Create</strong>.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745863617080/b1cdea19-2e86-4430-afee-569b88b60c6d.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-task-3-create-the-manufacturingvnet-virtual-network-and-subnets"><strong>Task 3: Create the “ManufacturingVnet” Virtual Network and Subnets</strong></h3>
<ol>
<li><p>Repeat steps 1–6.</p>
</li>
<li><p>Configure as follows:</p>
<ul>
<li><p><strong>Resource Group</strong>: ContosoResourceGroup</p>
</li>
<li><p><strong>Name</strong>: ManufacturingVnet</p>
</li>
<li><p><strong>Region</strong>: (Europe) West Europe</p>
</li>
<li><p><strong>IPv4 address space</strong>: 10.30.0.0/16</p>
</li>
</ul>
</li>
<li><p>Add subnets:</p>
<ul>
<li><p><strong>ManufacturingSystemSubnet</strong>: 10.30.10.0/24</p>
</li>
<li><p><strong>SensorSubnet1</strong>: 10.30.20.0/24</p>
</li>
<li><p><strong>SensorSubnet2</strong>: 10.30.21.0/24</p>
</li>
<li><p><strong>SensorSubnet3</strong>: 10.30.22.0/24</p>
</li>
</ul>
</li>
<li><p>Review, validate, and create.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745864075609/d2e466c2-9d04-4d67-884c-858f37b962b6.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-task-4-create-the-researchvnet-virtual-network-and-subnet"><strong>Task 4: Create the “ResearchVnet” Virtual Network and Subnet</strong></h3>
<ol>
<li><p>Repeat steps 1–6.</p>
</li>
<li><p>Configure as follows:</p>
<ul>
<li><p><strong>Resource Group</strong>: ContosoResourceGroup</p>
</li>
<li><p><strong>Name</strong>: ResearchVnet</p>
</li>
<li><p><strong>Region</strong>: Southeast Asia</p>
</li>
<li><p><strong>IPv4 address space</strong>: 10.40.0.0/16</p>
</li>
</ul>
</li>
<li><p>Add subnet:</p>
<ul>
<li><strong>ResearchSystemSubnet</strong>: 10.40.0.0/24</li>
</ul>
</li>
<li><p>Review, validate, and create.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745864450002/d3fe96b8-ce03-418f-9e68-d553b1c82c52.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-task-5-verify-the-creation-of-vnets-and-subnets"><strong>Task 5: Verify the Creation of VNets and Subnets</strong></h3>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%204%20Design%20and%20implement%20a%20Virtual%20Network%20in%20Azure.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/verify-subnets-annotated.png" alt="List of subnets in CoreServicesVnet." /></a></p>
<ol>
<li><p>In the Azure portal home page, select <strong>All resources</strong>.</p>
</li>
<li><p>Verify the following VNets exist:</p>
<ul>
<li><p>CoreServicesVnet</p>
</li>
<li><p>ManufacturingVnet</p>
</li>
<li><p>ResearchVnet</p>
</li>
</ul>
</li>
<li><p>For each VNet:</p>
<ul>
<li><p>Select the VNet.</p>
</li>
<li><p>Under <strong>Settings</strong>, select <strong>Subnets</strong>.</p>
</li>
<li><p>Confirm all subnets and IP address ranges are correct.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-key-takeaways"><strong>Key Takeaways</strong></h3>
<ul>
<li><p><strong>Azure Virtual Network</strong> is the building block for your private network in Azure.</p>
</li>
<li><p>Ensure <strong>non-overlapping</strong> address spaces between networks.</p>
</li>
<li><p><strong>Subnets</strong> allow resource segmentation and future expansion planning.</p>
</li>
<li><p>Always <strong>reserve extra IP space</strong> for future subnet growth.</p>
</li>
</ul>
<hr />
<h1 id="heading-m01-unit-6-configure-dns-settings-in-azure">M01 - Unit 6 Configure DNS settings in Azure</h1>
<h3 id="heading-exercise-scenario">Exercise Scenario</h3>
<p>In this unit, you will configure DNS name resolution for Contoso Ltd. You will create a <strong>private DNS zone</strong> named <code>contoso.com</code>, link VNets for registration and resolution, create two VMs, and test the configuration.</p>
<p><strong>Tasks:</strong></p>
<ul>
<li><p>Task 1: Create a private DNS Zone</p>
</li>
<li><p>Task 2: Link VNets for auto registration</p>
</li>
<li><p>Task 3: Create Virtual Machines to test the configuration</p>
</li>
<li><p>Task 4: Verify records in the DNS zone</p>
</li>
</ul>
<p>Click on the picture below for more info:</p>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%206%20Configure%20DNS%20settings%20in%20Azure.md"><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/master/Instructions/media/6-exercise-configure-domain-name-servers-configuration-azure.png" alt="Diagram of DNS architecture." /></a></p>
<h3 id="heading-task-1-create-a-private-dns-zone">Task 1: Create a Private DNS Zone</h3>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%206%20Configure%20DNS%20settings%20in%20Azure.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/create-private-dns-zone.png" alt="Azure Portal home page with DNS search." /></a></p>
<ol>
<li><p>Go to the <strong>Azure Portal</strong>.</p>
</li>
<li><p>In the search bar, enter <strong>DNS</strong> and select <strong>Private DNS zones</strong>.</p>
</li>
<li><p>Select <strong>+ Create</strong> and fill in:</p>
<ul>
<li><p><strong>Resource Group</strong>: <code>ContosoResourceGroup</code></p>
</li>
<li><p><strong>Name</strong>: <code>contoso.com</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745865621927/e44429d6-643b-48ac-8036-43d2c7c75a59.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Select <strong>Review + create</strong>, then <strong>Create</strong>.</p>
</li>
</ol>
<h3 id="heading-task-2-link-vnets-for-auto-registration">Task 2: Link VNets for Auto Registration</h3>
<ol>
<li><p>In <code>contoso.com</code>, under <strong>DNS Management</strong>, select <strong>Virtual network links</strong> → <strong>+ Add</strong>.</p>
</li>
<li><p>Add the following links:</p>
<ul>
<li><p><strong>CoreServicesVnetLink</strong></p>
<ul>
<li><p>Virtual Network: <code>CoreServicesVnet</code></p>
</li>
<li><p>Auto registration: Enabled</p>
</li>
</ul>
</li>
<li><p><strong>ManufacturingVnetLink</strong></p>
<ul>
<li><p>Virtual Network: <code>ManufacturingVnet</code></p>
</li>
<li><p>Auto registration: Enabled</p>
</li>
</ul>
</li>
<li><p><strong>ResearchVnetLink</strong></p>
<ul>
<li><p>Virtual Network: <code>ResearchVnet</code></p>
</li>
<li><p>Auto registration: Enabled</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>After each, select <strong>Refresh</strong> and verify the links and auto-registration are enabled.</p>
</li>
</ol>
<p><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/add-network-link-dns.png" alt="contoso.com | Virtual links with + Add highlighted." /></p>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%206%20Configure%20DNS%20settings%20in%20Azure.md"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745865775925/fedf71f0-6efe-470f-855a-e4a6ebe85193.png" alt class="image--center mx-auto" /></a></p>
<h3 id="heading-task-3-create-virtual-machines-to-test">Task 3: Create Virtual Machines to Test</h3>
<ol>
<li><p>In the Azure portal, open the <strong>Cloud Shell</strong> (top-right icon). Select <strong>PowerShell</strong>.</p>
</li>
<li><p>Upload files <code>azuredeploy.json</code> and <code>azuredeploy.parameters.json</code> from <code>F:\Allfiles\Exercises\M01</code>.</p>
</li>
<li><p>Run the following command:</p>
<pre><code class="lang-powershell"> powershellCopyEdit<span class="hljs-variable">$RGName</span> = <span class="hljs-string">"ContosoResourceGroup"</span>
 <span class="hljs-built_in">New-AzResourceGroupDeployment</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$RGName</span> <span class="hljs-literal">-TemplateFile</span> azuredeploy.json <span class="hljs-literal">-TemplateParameterFile</span> azuredeploy.parameters.json
</code></pre>
</li>
<li><p>After deployment, verify two VMs are created in <strong>Virtual Machines</strong>.</p>
</li>
</ol>
<h3 id="heading-task-4-verify-records-in-dns-zone">Task 4: Verify Records in DNS Zone</h3>
<ol>
<li><p>In <strong>Private DNS zones</strong>, open <code>contoso.com</code>.</p>
</li>
<li><p>Verify <strong>host (A) records</strong> for both VMs are listed.</p>
</li>
<li><p>Note their names and IP addresses.</p>
</li>
</ol>
<p><a target="_blank" href="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/blob/master/Instructions/Exercises/M01-Unit%206%20Configure%20DNS%20settings%20in%20Azure.md"><img src="https://github.com/MicrosoftLearning/AZ-700-Designing-and-Implementing-Microsoft-Azure-Networking-Solutions/raw/master/Instructions/media/contoso_com-dns-zone.png" alt="Contoso.com DNS zone showing auto-registered host A records." /></a></p>
<h2 id="heading-connect-to-test-vms-via-rdp">Connect to Test VMs via RDP</h2>
<ol>
<li><p>In <strong>Virtual Machines</strong>, select <strong>TestVM1</strong> → <strong>Connect &gt; RDP</strong> → <strong>Download</strong> the RDP file.</p>
</li>
<li><p>Repeat for <strong>TestVM2</strong>.</p>
</li>
<li><p>Connect to the VMs and on both VMs:</p>
<ul>
<li><p>Accept <strong>Privacy settings</strong> if prompted.</p>
</li>
<li><p>Select <strong>Yes</strong> if asked about <strong>Network discoverability</strong> (may not appear on Windows Server).</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-test-name-resolution">Test Name Resolution</h2>
<p>On <strong>TestVM1</strong>:</p>
<ol>
<li><p>Open <strong>Command Prompt</strong>.</p>
</li>
<li><p>Run: ipconfig /all (Verify IP matches what you noted earlier.)</p>
</li>
<li><p>Run: ping TestVM2.contoso.com (Ping may timeout because of Windows Firewall.)</p>
</li>
<li><p>Alternatively, run: nslookup TestVM2.contoso.com (Verify successful name resolution.)</p>
</li>
</ol>
<h2 id="heading-extend-your-learning-with-copilot">Extend Your Learning with Copilot</h2>
<p>Use <a target="_blank" href="https://copilot.microsoft.com">copilot.microsoft.com</a> to explore:</p>
<ul>
<li>Differences between <strong>Azure DNS</strong> and <strong>Azure Private DNS</strong>.</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Azure DNS (Public)</strong></td><td><strong>Azure Private DNS</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Visibility</strong></td><td>Public — resolvable over the internet</td><td>Private — resolvable only within your Azure VNets</td></tr>
<tr>
<td><strong>Use case</strong></td><td>Host internet-facing domain names (e.g. websites)</td><td>Internal name resolution for Azure resources</td></tr>
<tr>
<td><strong>Example domain</strong></td><td><a target="_blank" href="http://www.contoso.com">www.contoso.com</a></td><td>vm1.contoso.local or <a target="_blank" href="http://vm1.contoso.com">vm1.contoso.com</a> (private use)</td></tr>
<tr>
<td><strong>Who can query it?</strong></td><td>Any device on the internet</td><td>Only VMs within linked virtual networks</td></tr>
<tr>
<td><strong>Typical usage</strong></td><td>Websites, APIs, mail servers</td><td>Internal VM-to-VM communication</td></tr>
<tr>
<td><strong>Linked VNets required?</strong></td><td>No</td><td>Yes (must link VNets to the private zone)</td></tr>
<tr>
<td><strong>Zone types</strong></td><td>Only public</td><td>Private (with optional auto-registration)</td></tr>
</tbody>
</table>
</div><ul>
<li><p>Purpose of <strong>auto-registration</strong> in Azure Private DNS.</p>
<ul>
<li><p><strong>No need for manual DNS record management.</strong></p>
</li>
<li><p>Ensures DNS is always up to date — even if VMs restart or their IPs change.</p>
</li>
<li><p>Great for dynamic environments where VMs are created and deleted often.</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-key-takeaways-1">Key Takeaways</h2>
<ul>
<li><p><strong>Azure DNS</strong> hosts DNS domains for public and private use.</p>
</li>
<li><p><strong>Public zones</strong> resolve domains over the internet.</p>
</li>
<li><p><strong>Private DNS zones</strong> manage DNS inside Azure VNETs.</p>
</li>
<li><p><strong>DNS zones</strong> are collections of DNS records mapping domain names to information.</p>
</li>
</ul>
<p>2- link subnet</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745865892315/a7d0987b-5ae1-487f-882a-d837a80a3ab9.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-m01-unit-8-connect-two-azure-virtual-networks-using-global-virtual-network-peering">M01 - Unit 8: Connect Two Azure Virtual Networks Using Global Virtual Network Peering</h1>
<h2 id="heading-exercise-scenario-1">Exercise Scenario</h2>
<p>In this lab, you will configure connectivity between <strong>CoreServicesVnet</strong> and <strong>ManufacturingVnet</strong> by setting up <strong>global VNet peering</strong>.</p>
<p><strong>Tasks:</strong></p>
<ul>
<li><p>Task 1: Create a Virtual Machine to test the configuration</p>
</li>
<li><p>Task 2: Connect to Test VMs using RDP</p>
</li>
<li><p>Task 3: Test the connection between the VMs</p>
</li>
<li><p>Task 4: Create VNet peerings between CoreServicesVnet and ManufacturingVnet</p>
</li>
<li><p>Task 5: Test the connection again</p>
</li>
</ul>
<h2 id="heading-task-1-create-a-virtual-machine-manufacturingvm">Task 1: Create a Virtual Machine (ManufacturingVM)</h2>
<ol>
<li><p>Open <strong>Azure Portal</strong> → Click <strong>Cloud Shell</strong> → Choose <strong>PowerShell</strong>.</p>
</li>
<li><p>Select <strong>No Storage Account required</strong> if prompted, then <strong>Apply</strong>.</p>
</li>
<li><p>Upload these files to Cloud Shell:</p>
<ul>
<li><p><code>ManufacturingVMazuredeploy.json</code></p>
</li>
<li><p><code>ManufacturingVMazuredeploy.parameters.json</code></p>
</li>
</ul>
</li>
<li><p>Deploy the VM:</p>
<pre><code class="lang-powershell"> <span class="hljs-variable">$RGName</span> = <span class="hljs-string">"ContosoResourceGroup"</span>
 <span class="hljs-built_in">New-AzResourceGroupDeployment</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$RGName</span> <span class="hljs-literal">-TemplateFile</span> ManufacturingVMazuredeploy.json <span class="hljs-literal">-TemplateParameterFile</span> ManufacturingVMazuredeploy.parameters.json
</code></pre>
</li>
<li><p>After deployment, verify that <strong>ManufacturingVM</strong> is created.</p>
</li>
</ol>
<h2 id="heading-task-2-connect-to-the-test-vms-using-rdp">Task 2: Connect to the Test VMs Using RDP</h2>
<ol>
<li><p>Go to <strong>Virtual Machines</strong> → Select <strong>ManufacturingVM</strong> → <strong>Connect &gt; RDP</strong> → <strong>Download RDP File</strong>.</p>
</li>
<li><p>Save and connect (Repeat for <strong>TestVM1</strong>.)</p>
</li>
<li><p>On both VMs:</p>
<ul>
<li><p>Accept <strong>privacy settings</strong>.</p>
</li>
<li><p>Select <strong>Yes</strong> for <strong>network discoverability</strong> (if prompted).</p>
</li>
</ul>
</li>
<li><p>On <strong>TestVM1</strong>, open <strong>PowerShell</strong>, run: ipconfig, note the <strong>IPv4 address</strong>.</p>
</li>
</ol>
<h2 id="heading-task-3-test-initial-connection-between-vms">Task 3: Test Initial Connection Between VMs</h2>
<ol>
<li><p>On <strong>ManufacturingVM</strong>, open <strong>PowerShell</strong>.</p>
</li>
<li><p>Test connectivity to <strong>TestVM1</strong>'s IP (example <code>10.20.20.4</code>):</p>
<pre><code class="lang-powershell"> <span class="hljs-built_in">Test-NetConnection</span> <span class="hljs-number">10.20</span>.<span class="hljs-number">20.4</span> <span class="hljs-literal">-Port</span> <span class="hljs-number">3389</span>
</code></pre>
<ul>
<li>Connection should <strong>fail</strong> (no peering yet). ( VMs are in two different VNets: <strong>TestVM1</strong> is in CoreServicesVnet &amp; <strong>ManufacturingVM</strong> is in ManufacturingVnet)</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-task-4-create-vnet-peerings">Task 4: Create VNet Peerings</h2>
<ol>
<li><p>In <strong>Azure Portal</strong>, go to <strong>Virtual Networks</strong> → Select <strong>CoreServicesVnet</strong> → <strong>Peerings</strong> → <strong>+ Add</strong>.</p>
</li>
<li><p>Configure:</p>
<ul>
<li><p><strong>Peering link name</strong>: <code>CoreServicesVnet-to-ManufacturingVnet</code></p>
</li>
<li><p><strong>Virtual Network</strong>: <code>ManufacturingVnet</code></p>
</li>
<li><p>Enable:</p>
<ul>
<li><p>Allow CoreServicesVnet to access ManufacturingVnet</p>
</li>
<li><p>Allow forwarded traffic</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>In <strong>ManufacturingVnet</strong>, create reverse peering:</p>
<ul>
<li><p><strong>Peering link name</strong>: <code>ManufacturingVnet-to-CoreServicesVnet</code></p>
</li>
<li><p>Enable:</p>
<ul>
<li><p>Allow ManufacturingVnet to access CoreServicesVnet</p>
</li>
<li><p>Allow forwarded traffic</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Verify both peerings show <strong>Connected</strong>.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745868391011/9f8b8da4-0c4f-493c-b0ba-dda91e323ae4.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745868434619/d9ad419b-60fd-4137-ad97-73b9ded7a394.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745868575016/91ca74ed-ada8-47e1-80d4-2614194a89b3.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745868592018/9595bbc6-6f07-4ee8-b824-3ca61cb4189c.png" alt class="image--center mx-auto" /></p>
<p>  Now the <strong>connection should succeed</strong> (TCP test succeeded: true).</p>
</li>
</ul>
<hr />
<h2 id="heading-task-5-test-connection-again">Task 5: Test Connection Again</h2>
<ol>
<li><p>On <strong>ManufacturingVM</strong>, run:</p>
<pre><code class="lang-powershell"> <span class="hljs-built_in">Test-NetConnection</span> <span class="hljs-number">10.20</span>.<span class="hljs-number">20.4</span> <span class="hljs-literal">-Port</span> <span class="hljs-number">3389</span>
</code></pre>
</li>
</ol>
<hr />
<h2 id="heading-clean-up-resources">Clean Up Resources</h2>
<ol>
<li><p>In <strong>Cloud Shell (PowerShell)</strong>, run:</p>
<pre><code class="lang-powershell"> <span class="hljs-built_in">Remove-AzResourceGroup</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">'ContosoResourceGroup'</span> <span class="hljs-literal">-Force</span> <span class="hljs-literal">-AsJob</span>
</code></pre>
<ul>
<li>Resources will delete asynchronously.</li>
</ul>
</li>
</ol>
<h2 id="heading-extend-your-learning-with-copilot-1">Extend Your Learning with Copilot</h2>
<p>Try these prompts:</p>
<ul>
<li><p><strong>What are the most common errors when configuring Azure virtual network peering?</strong></p>
<ul>
<li><p><strong>Overlapping IP Ranges:</strong> VNets have overlapping address spaces — peering fails.</p>
</li>
<li><p><strong>One-Way Peering Only:</strong> Peering is not set up in both directions.</p>
</li>
<li><p><strong>“Allow Traffic” Not Enabled:</strong> Required traffic settings are missing during peering setup.</p>
</li>
<li><p><strong>NSGs Blocking Traffic:</strong> Network Security Groups block communication even after peering.</p>
</li>
<li><p><strong>Gateway Transit Misconfigured:</strong> Incorrect gateway settings when sharing VPN or ExpressRoute.</p>
</li>
<li><p><strong>Missing Permissions Across Subscriptions:</strong> Insufficient rights to peer VNets in different subscriptions.</p>
</li>
<li><p><strong>Global Peering Blocked by Policy:</strong> Policies prevent cross-region VNet peering.</p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p><strong>If I peer VNet1 with VNet2 and VNet2 with VNet3, is VNet1 automatically peered with VNet3?</strong></p>
<ul>
<li><strong>No</strong>, VNet1 is <strong>not automatically peered</strong> with VNet3. Azure VNet peering is not transitive.</li>
</ul>
</li>
<li><p><strong>Can firewalls and gateways affect Azure VNet peering?</strong></p>
<ul>
<li><strong>Yes — firewalls and gateways can affect Azure VNet peering communication.</strong></li>
</ul>
</li>
</ul>
<h3 id="heading-how-firewalls-affect-peering"><strong>How firewalls affect peering:</strong></h3>
<ul>
<li><p><strong>NSGs (Network Security Groups)</strong> or <strong>Azure Firewall</strong> can <strong>block traffic</strong> between peered VNets.</p>
</li>
<li><p>Even if peering is correctly set up, if:</p>
<ul>
<li><p>NSGs <strong>block inbound or outbound traffic</strong>, or</p>
</li>
<li><p>Azure Firewall <strong>doesn’t allow the route</strong>,</p>
<p>  ➤ <strong>VMs won’t be able to communicate.</strong></p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-how-gateways-affect-peering"><strong>How gateways affect peering:</strong></h3>
<ul>
<li><p>Peering doesn’t <strong>automatically share VPN or ExpressRoute gateways</strong>.</p>
</li>
<li><p>To share a gateway:</p>
<ul>
<li><p>In <strong>Hub VNet</strong>, enable <strong>“Allow gateway transit”</strong>.</p>
</li>
<li><p>In <strong>Spoke VNet</strong>, enable <strong>“Use remote gateway”</strong>.</p>
</li>
</ul>
</li>
<li><p>Missing either setting = <strong>gateway traffic fails</strong>.</p>
</li>
</ul>
<h2 id="heading-key-takeaways-2">Key Takeaways</h2>
<ul>
<li><p><strong>Azure VNet peering</strong> allows seamless communication between VNets.</p>
</li>
<li><p><strong>Global peering</strong> connects VNets across different Azure regions.</p>
</li>
<li><p>Traffic between peered VNets uses <strong>Microsoft’s private backbone</strong> (not public internet).</p>
</li>
<li><p>You can resize VNet address spaces without downtime when VNets are peered.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[AZ - 700 - 02 - Design and implement hybrid networking]]></title><description><![CDATA[Hybrid Networking with Azure: Connecting enterprise network to Azure
To build a secure and scalable hybrid network, start with VPNs. Site-to-Site VPNs, Point-to-Site VPNs, Azure Virtual WAN to connect and manage multiple sites or regions or Network V...]]></description><link>https://shirincloudlab.com/az-700-02-design-and-implement-hybrid-networking</link><guid isPermaLink="true">https://shirincloudlab.com/az-700-02-design-and-implement-hybrid-networking</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Tue, 22 Apr 2025 23:32:20 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-hybrid-networking-with-azure-connecting-enterprise-network-to-azure"><strong>Hybrid Networking with Azure:</strong> Connecting enterprise network to Azure</h2>
<p>To build a secure and scalable hybrid network, start with VPNs. <strong>Site-to-Site VPNs</strong>, <strong>Point-to-Site VPNs</strong>, <strong>Azure Virtual WAN</strong> to connect and manage multiple sites or regions or <strong>Network Virtual Appliances (NVAs)</strong> for added security and routing control.</p>
<p><strong>Azure VPN Gateway</strong> enables secure connections between your Azure environment and other locations. Before deploying a connection, you need a defined endpoint for the data—this is where the VPN Gateway setup begins.</p>
<p>We’ll briefly cover:</p>
<ul>
<li><p><strong>Types of connections</strong> you can establish using the VPN Gateway</p>
</li>
<li><p><strong>Configuration options</strong> available for setup and deployment</p>
</li>
<li><p><strong>Gateway generations and SKUs</strong> to help you choose the best fit for your needs</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745515427572/6a6a9b5f-c962-4aea-85dc-93518a5bfa22.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-azure-vpn-gateway-connection-types-amp-setup-essentials"><strong>Azure VPN Gateway: Connection Types &amp; Setup Essentials</strong></h3>
<p><strong>Site-to-Site (S2S) VPN</strong></p>
<p>Connects an on-premises location to Azure. It can also link two Azure environments, though virtual network <strong>peering</strong> is more common now.</p>
<p><strong>Point-to-Site (P2S) VPN</strong></p>
<p>Allows individual devices—like laptops or phones—to securely connect to your Azure network using a VPN client or native Windows support.Perfect for remote work and on-the-go access.</p>
<p><strong>Setup Requirements</strong></p>
<p>Regardless of the connection type, you’ll need:</p>
<ul>
<li><p>A VPN Gateway in your Azure virtual network</p>
</li>
<li><p>A public IP address for access</p>
</li>
<li><p>Proper routing to allow traffic into your virtual network</p>
</li>
</ul>
<h3 id="heading-azure-vpn-gateway-planning-provisioning-amp-connection-setup"><strong>Azure VPN Gateway: Planning, Provisioning &amp; Connection Setup</strong></h3>
<p>Before deploying a VPN Gateway in Azure, <strong>planning is critical</strong>. Start by creating a dedicated <strong>gateway subnet</strong> in your virtual network. You’ll need a <strong>/27 or /28 CIDR block</strong>, depending on your scaling needs. Only Azure-managed gateways (VPN and ExpressRoute) should use this subnet.</p>
<blockquote>
<p><strong>When you create your gateway subnet, gateway VMs are deployed to the gateway subnet and configured with the required VPN gateway settings.</strong></p>
</blockquote>
<p><strong>Important:</strong></p>
<ul>
<li><p>One gateway per virtual network</p>
</li>
<li><p>Never deploy non-gateway resources to the gateway subnet (e.g. no additional VMs)</p>
</li>
</ul>
<p>Azure handles backend scaling automatically, ensuring your selected SKU meets bandwidth demands.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745519937844/a9b764a7-16e6-41d6-91f0-3864e47d3054.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-gateway-deployment-essentials"><strong>Gateway Deployment Essentials</strong></h4>
<p>To deploy a VPN gateway:</p>
<ul>
<li><p>Specify name, region, VPN type (Route-based or Policy-based), SKU, and generation</p>
</li>
<li><p>Route-based (preferred) supports IKEv2 (آیک) and dynamic routing</p>
</li>
<li><p>Policy-based supports only IKEv1 and is considered legacy</p>
</li>
<li><p>Your choice of gateway SKU affects the number of connections and the aggregate throughput benchmark.</p>
</li>
<li><p>Associate a virtual network that includes the gateway subnet.</p>
</li>
<li><p>The gateway needs a public IP address.</p>
</li>
</ul>
<p>Provisioning takes about <strong>45 minutes</strong>, so plan accordingly.</p>
<p><strong>Gateway SKU and Generation Comparison</strong>:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745520101050/311e2e34-9e3f-4702-a2c1-2de72181cb3d.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><em>Gen1</em>: 650 Mbps–1.25 Gbps</p>
</li>
<li><p><em>Gen2</em>: Starts at 1.25 Gbps and scales higher</p>
</li>
<li><p>You can resize within the same generation</p>
</li>
</ul>
<p>The Basic SKU (not shown) is legacy and should not be used.</p>
<h3 id="heading-site-to-site-vpn-setup"><strong>Site-to-Site VPN Setup</strong></h3>
<p>A Site-to-Site (S2S) VPN allows you to establish a <strong>secure connection over the public internet</strong> between Azure and another location—whether that’s an on-premises data center, a private network, or even another cloud provider. This setup ensures that data remains protected while traversing public infrastructure.</p>
<p>To set this up, there are several steps involved, each addressing a piece of the connection:</p>
<p><strong>Typical Setup</strong>:</p>
<ul>
<li><p>On the <strong>Azure side</strong>, you’ll have a <strong>Virtual Network (VNet)</strong> with subnets and a <strong>VPN Gateway</strong> already provisioned.</p>
</li>
<li><p>On the <strong>on-premises side</strong>, your network (with resources like VMs) includes a <strong>VPN-capable edge device</strong>.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745520759510/5e134622-7b6b-4a61-a8d0-838198c66f90.png" alt class="image--center mx-auto" /></p>
<p>The connection is made by <strong>creating and linking resources</strong> like the <strong>local network gateway</strong>, <strong>VPN gateway</strong>, and <strong>VPN connection object</strong> in Azure.</p>
<p><strong>Steps</strong>:</p>
<ol>
<li><strong>Create a local network gateway on azure</strong> – A pointer resource in Azure that defines your on-prem location using a public IP or FQDN. Also specify the address space (e.g., 192.168.3.x) to configure proper routing.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745524836016/3b617e38-e3ec-4c25-a809-78192dfb20d0.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p><strong>Configure the VPN device on-prem</strong> – Use Microsoft’s prebuilt scripts for popular devices (Cisco, Ubiquiti, etc.). Generate and apply a shared key – Used for secure authentication.</p>
</li>
<li><p><strong>Create a VPN connection</strong> – Link the <strong>Azure VPN Gateway</strong> with the <strong>local network gateway</strong> using the <strong>shared key</strong>.</p>
<ul>
<li><p><strong>Create the connection object</strong> after your VPN gateway is deployed and the on-prem device is configured.</p>
</li>
<li><p><strong>Name the connection</strong> and set the type to <strong>Site-to-site (IPSec)</strong>.</p>
</li>
<li><p><strong>Select</strong> both the <strong>Azure VPN Gateway</strong> and the <strong>Local Network Gateway</strong>.</p>
</li>
<li><p><strong>Enter the pre-shared key</strong> used by the on-premises VPN device.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745525814588/312ac270-45fd-4d71-8914-8752965913c5.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><p>always validate using <strong>Network Watcher</strong>, logs, and health probes to confirm connectivity and performance.</p>
<ul>
<li><p><strong>Validate VPN throughput</strong> to the VNet</p>
</li>
<li><p><strong>Utilize Network Watcher</strong> for diagnostics</p>
</li>
<li><p><strong>Use diagnostic logs</strong> to troubleshoot the Azure VPN Gateway</p>
</li>
<li><p><strong>Check UDR and NSGs</strong> on the gateway subnet</p>
</li>
<li><p><strong>Verify the on-premises VPN device</strong> is validated</p>
</li>
<li><p><strong>Verify shared key and VPN peer IPs</strong></p>
</li>
<li><p><strong>Use Azure gateway health probe</strong> for status</p>
</li>
<li><p><strong>Check if the on-prem VPN device</strong> supports perfect forward secrecy</p>
</li>
</ul>
</li>
</ol>
<p>So in summary:</p>
<ul>
<li><p><strong>Create a virtual network</strong> with a <strong>GatewaySubnet</strong>.</p>
</li>
<li><p><strong>Provision a Virtual Network Gateway</strong> in that VNet.</p>
</li>
<li><p><strong>Create a Local Network Gateway</strong> with on-prem IP and address space.</p>
</li>
<li><p><strong>Configure the on-prem VPN device</strong> with matching settings.</p>
</li>
<li><p><strong>Create the Site-to-Site VPN connection</strong> using a shared key.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745531841891/848f5c79-c722-43d9-9df0-8f9b158c4a90.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-point-to-site-vpn-setup"><strong>Point-to-Site VPN Setup</strong></h3>
<p>Point-to-site (P2S) VPNs allow user devices (laptops, phones) to connect to Azure securely.</p>
<p><strong>Requirements</strong>:</p>
<ul>
<li><p>Azure VPN Gateway already provisioned</p>
</li>
<li><p>Proper <strong>IP address pool</strong> for connected users</p>
</li>
<li><p>Compatible VPN clients (OpenVPN, SSTP, IKEv2)</p>
</li>
</ul>
<p><strong>Authentication Options</strong>:</p>
<ul>
<li><p>Azure Entra ID (formerly Azure AD)</p>
</li>
<li><p>On-prem Active Directory via <strong>RADIUS server</strong></p>
</li>
<li><p>Choose based on identity store and protocol type</p>
</li>
</ul>
<p>Configure in the Azure portal under <strong>Point-to-site configuration</strong>. Plan IP pool size based on expected simultaneous users.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745534366873/4cf1c63a-3746-4a0f-b5d1-596b53579559.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-point-to-site-configuration-in-azure"><strong>Point-to-Site Configuration in Azure:</strong></h3>
<p>To keep things smooth, no matter the <strong>authentication method or connection type</strong>, you need to go through the <strong>initial setup</strong> to ensure Point-to-Site works.</p>
<p>Head to your <strong>Virtual Network Gateway</strong>, scroll down, and click <strong>Point-to-site configuration</strong>. Here, configure key settings—especially the <strong>address pool</strong> for Point-to-Site connections. You’ll need a <strong>subnet</strong> with enough <strong>private IPs</strong> for each user connecting. Think about how many <strong>simultaneous users</strong> you’ll support—10, 100, 1,000, or more. Make sure there’s enough <strong>IP space</strong> to allow everyone to connect.</p>
<p>If you’re deploying <strong>resilient options</strong> like an <strong>active-active gateway</strong>, you’ll need <strong>additional IPs</strong> to support failover. Plan carefully—your <strong>address range</strong> and <strong>number of IPs per user</strong> will affect your setup. Once that’s done and <strong>authentication is configured</strong>, users can securely connect from anywhere.</p>
<p>In <strong>Address pool</strong>, enter the private IP range you want to assign to VPN clients. VPN clients will get IPs dynamically from this range. Use a <strong>/29 subnet</strong> for active/passive, <strong>/28</strong> for active/active setups.</p>
<h3 id="heading-vpn-gateway-resiliency-options"><strong>VPN Gateway Resiliency Options</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745537454650/986fd143-f2f4-4a8d-bba4-335fc2d6cd1f.png" alt class="image--center mx-auto" /></p>
<p>To ensure high availability:</p>
<p><strong>1.</strong> Deploy virtual gateway in <strong>Availability Zones</strong> format(if region supports it):</p>
<p>e.g. We have <strong>two gateway instances</strong>, deployed in <strong>separate availability zones</strong>. These zones are <strong>physically isolated</strong>—with different power, cooling, and data centers—to ensure high uptime. All traffic can go to one location, but in case of a <strong>failure or config issue</strong>, it will <strong>automatically fail over</strong> to the other instance.</p>
<p>This setup ensures <strong>high availability</strong> and is one of the simplest ways to boost uptime.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745537738254/56a12cc3-3920-4307-8f6d-63fc9202851c.png" alt class="image--center mx-auto" /></p>
<p>By default, gateways are in <strong>active-standby mode</strong>—only one connection is needed, and in case of failure, traffic shifts to the standby gateway. It’s easy to set up and works well for most cases.</p>
<p><strong>2. Active-Active Configuration</strong>:</p>
<p>Improves uptime by allowing multiple active paths. Requires extra on-prem setup and dual connections.</p>
<p>However, if <strong>cutover downtime isn’t acceptable</strong>, or you need <strong>higher uptime</strong>, choose the <strong>active-active deployment</strong>. This setup requires:</p>
<ul>
<li><p>Multiple connections on your side</p>
</li>
<li><p>Following Azure’s <strong>high availability architecture guidance</strong></p>
</li>
<li><p>Planning for different <strong>network topologies</strong></p>
</li>
</ul>
<p>With active-active, your <strong>VPN connection remains up</strong> even if one side or gateway goes down. You’ll have <strong>four possible paths</strong>, so if one fails, others stay available.</p>
<h3 id="heading-azure-virtual-wan-overview"><strong>Azure Virtual WAN Overview</strong></h3>
<p>Azure Virtual WAN (vWAN) simplifies enterprise connectivity across regions, sites, and connection types.</p>
<p><strong>Benefits</strong>:</p>
<ul>
<li><p>Centralized routing and policy management</p>
</li>
<li><p>Supports <strong>Site-to-Site, Point-to-Site</strong>, and <strong>ExpressRoute</strong></p>
</li>
<li><p>Inter-region connectivity via linked hubs</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745538429831/1e26a1a7-f42b-4072-9c84-df6427e19536.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-azure-virtual-wan-types-amp-capabilities"><strong>Azure Virtual WAN Types &amp; Capabilities</strong></h3>
<ul>
<li><p><strong>Basic Virtual WAN / Hub</strong></p>
<ul>
<li>Supports: Site-to-site VPN only</li>
</ul>
</li>
<li><p><strong>Standard Virtual WAN / Hub</strong></p>
<ul>
<li><p>Supports:</p>
<ul>
<li><p>ExpressRoute</p>
</li>
<li><p>User VPN (Point-to-site)</p>
</li>
<li><p>VPN (Site-to-site)</p>
</li>
<li><p>Inter-hub and VNet-to-VNet transiting through the virtual hub</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="heading-hub-private-address-space-key-points"><strong>Hub Private Address Space – Key Points</strong></h3>
<ul>
<li><p><strong>Minimum address space</strong> required to create a hub is <strong>/24</strong>.</p>
</li>
<li><p>You <strong>don’t need to manually plan subnets</strong> for services in the virtual hub.(more flexible than vnet)</p>
</li>
<li><p><strong>Azure Virtual WAN is a managed service</strong>—it automatically creates the necessary subnets for each gateway or service.</p>
</li>
<li><p>This includes services like:</p>
<ul>
<li><p>VPN gateways</p>
</li>
<li><p>ExpressRoute gateways</p>
</li>
<li><p>User VPN (Point-to-site) gateways</p>
</li>
<li><p>Firewall, routing, etc.</p>
</li>
</ul>
</li>
</ul>
<p><strong>Deployment Steps</strong>:</p>
<ul>
<li><p>Choose region, SKU (Basic or Standard), and private address space</p>
</li>
<li><p>Standard SKU supports multi-region and all connection types</p>
</li>
<li><p>Configure route tables for traffic flow between regions and branches</p>
</li>
</ul>
<p><strong>Cross-tenant routing</strong>: Azure Virtual WAN allows you to connect virtual networks from <strong>other Azure tenants</strong> into a <strong>shared Virtual WAN hub</strong>, enabling secure and centralized cross-tenant networking.</p>
<p>Whether you’re in a single-tenant or <strong>multi-tenant</strong> setup, it all comes down to one thing: <strong>routing</strong>—just like everything else in virtual networking.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745603017761/d447aa06-26d1-4c46-b7d3-8507b9c071e8.png" alt class="image--center mx-auto" /></p>
<p>Just like in virtual networks, <strong>Azure Virtual WAN</strong> uses <strong>route tables</strong> to control traffic flow and define the <strong>next hop</strong>. In vWAN, you <strong>propagate a route table at the hub</strong>, which then gets automatically associated and pushed out to connected resources—so everything around the hub knows what’s inside it.</p>
<p>The <strong>central hub</strong> can handle up to <strong>50 Gbps of aggregate throughput</strong>, making it ideal for connecting multiple sites with high traffic demands.</p>
<p>By setting up route connections and defining paths in your <strong>routing tables</strong>, you control where traffic flows. Configuration is straightforward through the <strong>default route table</strong>, and for more advanced setups, click on the image below:</p>
<p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/virtual-wan/about-virtual-hub-routing"><img src="https://learn.microsoft.com/en-us/azure/virtual-wan/media/about-virtual-hub-routing/concepts-propagation.png" alt="Diagram shows propagation." /></a></p>
<h3 id="heading-deploying-network-virtual-appliances-nvas-into-a-virtual-hub"><strong>Deploying Network Virtual Appliances (NVAs) into a virtual hub:</strong></h3>
<p>NVAs are third-party appliances like firewalls or SD-WAN tools deployed in Virtual WAN hubs. (Click on the image below for more info)</p>
<p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/virtual-wan/about-virtual-hub-routing"><img src="https://learn.microsoft.com/en-us/azure/virtual-wan/media/about-nva-hub/high-level-process.png" alt="Process overview" /></a></p>
<p><strong>Steps</strong>:</p>
<ol>
<li><p><strong>Choose from Azure Marketplace</strong> – Vendors like Fortinet and VMware offer pre-configured solutions.</p>
</li>
<li><p><strong>Provision into Virtual WAN hub</strong></p>
</li>
<li><p><strong>Scale correctly</strong> – Select the appropriate scale unit for required bandwidth</p>
</li>
<li><p><strong>Use vendor-provided tokens</strong> for secure setup (Sometimes, the vendor requires you to provide an authentication token to verify that you’re a registered user. This must be obtained directly from the vendor.)</p>
</li>
</ol>
<p>These are fully managed deployments, not manual VMs, and scale with your network needs.</p>
]]></content:encoded></item><item><title><![CDATA[AZ - 700 - Introduction to Azure Virtual Networks
from Designing and Implementing Microsoft Azure Networking Solutions]]></title><description><![CDATA[For the complete learning material, please click here or visit Microsoft learn website.
Key Capabilities of Azure Virtual Networks

Enable communication with the internet

Facilitate communication between Azure resources

Support hybrid connectivity ...]]></description><link>https://shirincloudlab.com/az-700-introduction</link><guid isPermaLink="true">https://shirincloudlab.com/az-700-introduction</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Tue, 15 Apr 2025 23:55:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1744918197335/73959a38-c0df-4784-8300-d54a1e148db3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For the complete learning material, please click <a target="_blank" href="https://learn.microsoft.com/en-us/training/courses/az-700t00">here</a> or visit Microsoft learn website.</p>
<h3 id="heading-key-capabilities-of-azure-virtual-networks"><strong>Key Capabilities of Azure Virtual Networks</strong></h3>
<ul>
<li><p>Enable communication with the internet</p>
</li>
<li><p>Facilitate communication between Azure resources</p>
</li>
<li><p>Support hybrid connectivity with on-premises environments</p>
</li>
<li><p>Provide network traffic filtering through security groups and firewalls</p>
</li>
<li><p>Allow for custom routing of network traffic</p>
</li>
</ul>
<h3 id="heading-virtual-network-address-space"><strong>Virtual Network address space:</strong></h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>RFC 1918</strong></td><td><strong>Azure Reserved IPs</strong></td><td><strong>Unavailable Address Ranges</strong></td></tr>
</thead>
<tbody>
<tr>
<td>10.0.0.0 – 10.255.255.255 (/8)</td><td>x.x.x.0: Network address</td><td>224.0.0.0/4 (Multicast)</td></tr>
<tr>
<td>172.16.0.0 – 172.31.255.255 (/12)</td><td>x.x.x.1: Default gateway</td><td>255.255.255.255/32 (Broadcast)</td></tr>
<tr>
<td>192.168.0.0 – 192.168.255.255 (/16)</td><td>x.x.x.2 &amp; x.x.x.3: Azure DNS mapping</td><td>127.0.0.0/8 (Loopback)</td></tr>
<tr>
<td></td><td>x.x.x.255: Broadcast address</td><td>169.254.0.0/16 (Link-local)</td></tr>
<tr>
<td></td><td></td><td>168.63.129.16/32 (Internal DNS)</td></tr>
</tbody>
</table>
</div><p>Azure frequently utilizes <strong>internal DNS</strong> to facilitate communication between internal resources. <strong>168.63.129.16</strong> doesn’t tell clients <em>what</em> IP to have, but it enables:</p>
<ul>
<li><p>DNS to resolve other IPs</p>
</li>
<li><p>Access to metadata, including their own assigned IPs</p>
</li>
<li><p>Communication with Azure’s control and health systems</p>
</li>
</ul>
<p>It’s essential to <strong>keep this IP reachable</strong> for smooth VM operation</p>
<blockquote>
<p>Some Azure services like <strong>VPN Gateway</strong> and <strong>Azure Bastion</strong> require a <strong>dedicated subnet</strong> in your VNet. Azure uses this space to <strong>provision and manage</strong> the service within your private network.</p>
</blockquote>
<p>Naming convention for a public IP resource for a production SharePoint workload residing in the West US region might be pip-sharepoint-prod-westus-001:</p>
<p><img src="https://learn.microsoft.com/en-us/training/wwl-azure/introduction-to-azure-virtual-networks/media/components-azure-resource-name-e0dedd6c.png" alt="Diagram of a resource naming example." /></p>
<p>Use of DHCP are not allowed in azure.</p>
<p>Based on what services we chooses size of the network will match:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744828775385/51c8f6de-b8f6-45f6-9872-a59397aa7f72.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744828791367/a3683415-fcd3-408a-a2d6-1f614c000d3b.png" alt class="image--center mx-auto" /></p>
<p><strong>Internet facing resources:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744829189390/9632c12a-4d06-4736-81d1-41a74c9ebca7.png" alt class="image--center mx-auto" /></p>
<p>We can choose two major IP SKUs but we recommend using the <strong>Standard SKU</strong> all the times:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Basic SKU(Retiring in Sep 2025)</strong></td><td><strong>Standard SKU</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Assigned with static or dynamic allocation method</td><td>Always use static allocation method</td></tr>
<tr>
<td>Open by default. NSGs are recommended but optional</td><td>Secure by default and closed to inbound traffic</td></tr>
<tr>
<td>Assigned to network interfaces, VPN gateway, public load balancers, or Application Gateways</td><td>Allow inbound traffic with NSG</td></tr>
<tr>
<td>Doesn’t support availability zone scenarios</td><td>Assigned to network interfaces, standard public load balancers, or Application Gateways</td></tr>
<tr>
<td></td><td>Can be zone-redundant, zonal, or no-zone</td></tr>
</tbody>
</table>
</div><h3 id="heading-byoip-bring-your-own-ip">BYOIP (Bring Your Own IP)</h3>
<p>Rather than creating a Public IP you can go through the process of route authorization workig with registry to proof your own the IP Address and use it in azure.</p>
<p>Three phase process to bring an IP prefix to azure:</p>
<ul>
<li><p>Validation</p>
</li>
<li><p>Porovision</p>
</li>
<li><p>Commision</p>
</li>
</ul>
<p>How do we create a Public IP in Azure: We choose our RG and region (public IPs are differ per region in azure) and then choose regional and not global for now..and then it will create one from range of IPs that we have.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744831962729/8da1b854-e2cc-470d-912d-f1e79bab5f5a.png" alt class="image--center mx-auto" /></p>
<p>or we can create a public IP Prefix its almost the same except its only available for Standard SKU and also some different things about the prefix that we want:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744836986912/76cd7b11-714b-45d5-8155-ed0a0eeb861c.png" alt class="image--center mx-auto" /></p>
<p>After creation:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744837099348/03d06ba0-bf9b-47f8-a68e-2fdf8b3cd952.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-designing-name-resolution"><strong>Designing Name Resolution</strong></h2>
<h3 id="heading-public-dns"><strong>Public DNS:</strong></h3>
<p>Public DNS services resolve domain names to IP addresses for resources accessible over the internet, such as web servers. Azure DNS is a hosting service for DNS domains that enables name resolution using Microsoft Azure’s global infrastructure.</p>
<p>Within Azure DNS, you can manually create address records in the appropriate DNS zones. The most commonly used record types include:</p>
<ul>
<li><p><strong>A/AAAA records</strong> – for mapping domain names to IPv4 or IPv6 addresses</p>
</li>
<li><p><strong>CNAME records</strong> – for creating alias names that map to other domain names</p>
</li>
</ul>
<h3 id="heading-azure-dns-zones"><strong>Azure DNS Zones:</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744839036968/443d9c04-84cd-4034-a393-472c8564dcf7.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>A DNS zone hosts the DNS records for a domain</p>
</li>
<li><p>The same zone name can be reused in a different resource group or a different Azure subscription</p>
</li>
<li><p>Where multiple zones share the same name, each instance is assigned different name server addresses</p>
</li>
<li><p>Root/Parent domain is registered at the registrar and pointed to Azure Name Servers</p>
</li>
<li><h3 id="heading-dns-delegation"><strong>DNS Delegation</strong></h3>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744840320580/9da8031a-ae87-45d1-ac66-0d7120a796e6.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>When delegating a domain to Azure DNS, you must use all four name servers provided by Azure DNS.</p>
</li>
<li><p>After creating the DNS zone, update the parent registrar with the Azure DNS name servers.</p>
</li>
<li><p>For child zones, add the corresponding NS records to the parent domain to complete the delegation.</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-dns-record-sets"><strong>DNS Record Sets</strong></h3>
<ul>
<li><p>A record set is a group of DNS records within a zone that share the same name and record type.</p>
</li>
<li><p>Azure DNS supports all standard DNS record types, including: A, AAAA, CAA, CNAME, MX, NS, PTR, SOA, SRV, and TXT.</p>
</li>
<li><p>A record set cannot contain duplicate records.</p>
</li>
<li><p>Changing the record type using the drop-down menu will alter the required input fields.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744840498215/696d80ff-0916-4d07-8bc1-7c4fea267270.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-design-name-resolution"><strong>Design Name Resolution</strong></h2>
<h3 id="heading-dns-for-private-domains"><strong>DNS for Private Domains</strong></h3>
<ul>
<li><p>Use custom domain names for internal resources</p>
</li>
<li><p>Enables name resolution for virtual machines within and across virtual networks (VNets)</p>
</li>
<li><p>Automatically manages hostname records</p>
</li>
<li><p>Eliminates the need for custom DNS solutions</p>
</li>
<li><p>Supports all common DNS record types</p>
</li>
<li><p>Available in all Azure regions</p>
</li>
</ul>
<p>With private zone in azure we get auto registration of new resources as they get created. So we dont need to go create the new record every time we create new resources</p>
<h2 id="heading-private-zone-scenario"><strong>Private zone scenario</strong>:</h2>
<p>In the setup below, a virtual network is configured so that every new virtual machine added to it automatically updates DNS records to reflect the new instance. On the left-hand side, VNETs are marked for registration.</p>
<p>To accomplish this, a private DNS zone was created through the Azure portal, and the virtual network was pointed to it. As a result, any new resources—such as virtual machines assigned a private IP—will automatically have a DNS record created in the Azure DNS private zone. If a virtual machine is later deleted, its corresponding DNS record will also be automatically removed.</p>
<p>Also user can find and resolve the name/IP of these VMs from any <strong>associated</strong> VNet and there is a big reason why this is happening <strong>significance of IP address 168.63.129.16</strong>!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744918250022/dffd8e72-c7bd-45c1-a1a3-f1b784cc3c5f.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-significance-of-ip-address-1686312916">Significance of IP address 168.63.129.16</h2>
<p>This is a special IP address that Azure uses to send important information—like metadata—to resources inside a virtual network. It plays a key role in things like DHCP requests, “ready” signals from VMs, and most importantly, <strong>DNS resolution</strong>. Thanks to this IP, virtual machines in Azure can contact the Azure Resource Manager and discover other resources using DNS.</p>
<p>Then, Azure reserves the IPs x.x.x.2 and x.x.x.3 in each subnet to help complete these DNS requests. It’s important to understand what this IP does and how it supports communication inside the virtual network.</p>
<p>So in short 168.63.129.16:</p>
<ul>
<li><p>Enables the VM Agent to communicate with the Azure platform to signal that it is in a “Ready” state</p>
</li>
<li><p>Enables communication with the DNS virtual server to provide filtered name resolution to the resources (such as VM) that do not have a custom DNS server</p>
</li>
<li><p>Enables health probes from Azure load balancer to determine the health state of VMs</p>
</li>
<li><p>Enables the VM to obtain a dynamic IP address from the DHCP service in Azure</p>
</li>
<li><p>Enables Guest Agent heartbeat messages for the PaaS role</p>
</li>
</ul>
<p>This setup is designed to work within Azure, but what happens if you’re in a <strong>hybrid environment</strong> (part on-premises, part in Azure)?</p>
<p>There are a couple of ways to handle it. First, let’s talk about how you can manage DNS yourself. You’re <strong>not required</strong> to use Azure’s built-in DNS services—if you already have your own DNS servers, you can absolutely use them.</p>
<p>In fact, you can set up a combination of your own <strong>DNS servers and forwarders</strong> to manage DNS requests for <strong>private DNS zones</strong> in Azure.</p>
<p>Let’s walk through an example of how this would work.</p>
<h3 id="heading-configure-dns-settings-inside-an-azure-virtual-network">Configure DNS settings inside an Azure Virtual Network</h3>
<p>In the on-premises environment, DNS zones and supporting servers are already in place to handle internal name resolution.</p>
<p>To extend this capability into Azure, DNS queries related to Azure virtual networks can be forwarded from the on-premises environment. Azure virtual networks can be configured to use on-premises DNS servers. If those servers are unable to resolve a query, the request can be forwarded to a DNS forwarder within Azure.</p>
<p>This approach enables name resolution for Azure-based resources in hybrid environments. The only requirement is a functional DNS server or forwarder hosted in Azure to process the unresolved queries.</p>
<p>For further details on implementing DNS in hybrid setups, consult the official <a target="_blank" href="https://learn.microsoft.com">Microsoft Learn documentation</a> on name resolution strategies.</p>
<h3 id="heading-provide-your-own-dns-solution"><strong>Provide Your Own DNS Solution</strong></h3>
<p>When setting up your own DNS in a hybrid or custom environment, make sure to:</p>
<ul>
<li><p>Provide proper <strong>host name resolution</strong> for internal resources.</p>
</li>
<li><p>Enable <strong>recursive resolution</strong> to resolve external domain names (like websites on the internet).</p>
</li>
<li><p>Ensure your DNS server is <strong>accessible on TCP and UDP port 53</strong>. Update <strong>NSG rules</strong> (Network Security Groups) to allow traffic to your DNS listener endpoint.</p>
</li>
<li><p><strong>Secure your DNS</strong> against public internet access to protect against external threats and attacks.</p>
</li>
</ul>
<h3 id="heading-enable-cross-vnet-connectivity-with-peering"><strong>Enable Cross-VNet Connectivity with Peering</strong></h3>
<ul>
<li><p>VNet Peering</p>
</li>
<li><p>Gateway Transit and Connectivity</p>
</li>
<li><p>Service Chaining</p>
</li>
<li><p>Configure VNet Peering</p>
</li>
<li><p>Demonstration</p>
</li>
<li><p>Learning Recap</p>
</li>
</ul>
<h3 id="heading-understanding-vnet-peering-in-azure"><strong>Understanding VNet Peering in Azure</strong></h3>
<p>VNet peering is a straightforward yet powerful way to enable communication between virtual networks.</p>
<h4 id="heading-same-region-peering"><strong>🔹 Same Region Peering</strong></h4>
<p>When two virtual networks are located in the same Azure region, <strong>regional VNet peering</strong> is used. This setup is common in scenarios like:</p>
<ul>
<li><p>Implementing a <strong>hub-and-spoke network topology</strong></p>
</li>
<li><p>Linking <strong>two workloads</strong> in separate VNets within the same region</p>
</li>
</ul>
<h4 id="heading-cross-region-peering"><strong>🔹 Cross-Region Peering</strong></h4>
<p>VNet peering can also span <strong>across different Azure regions</strong>. In this case, Azure uses its <strong>backbone network</strong> to enable private communication between Region A and Region B.</p>
<p>This is especially useful when:</p>
<ul>
<li><p>Interconnecting <strong>multiple sites</strong></p>
</li>
<li><p>Hosting workloads in <strong>different Azure regions</strong></p>
</li>
</ul>
<h4 id="heading-setup-and-configuration"><strong>🔹 Setup and Configuration</strong></h4>
<p>Whether you’re working in the same region or across regions, the <strong>configuration process is nearly identical</strong>. You can use:</p>
<ul>
<li><p><strong>Azure Portal</strong></p>
</li>
<li><p><strong>Azure CLI</strong></p>
</li>
<li><p><strong>ARM Templates</strong></p>
</li>
</ul>
<p>During setup, you’ll define:</p>
<ul>
<li><p><strong>Traffic direction</strong>: Unidirectional or bidirectional</p>
</li>
<li><p><strong>Permissions</strong>: On both VNets for proper access</p>
</li>
</ul>
<h4 id="heading-important-considerations"><strong>⚠️ Important Considerations</strong></h4>
<ul>
<li><p><strong>Address Space Must Not Overlap</strong>: Azure will <strong>block peering</strong> between VNets with overlapping address spaces.</p>
</li>
<li><p><strong>Plan Carefully</strong>: Proper planning ensures traffic flows as expected and avoids routing conflicts.</p>
</li>
</ul>
<h4 id="heading-peering-flexibility"><strong>🔁 Peering Flexibility</strong></h4>
<p>VNet peering supports:</p>
<ul>
<li><p><strong>Intra-subscription peering</strong></p>
</li>
<li><p><strong>Cross-subscription peering</strong></p>
</li>
<li><p><strong>Cross-tenant peering</strong></p>
</li>
</ul>
<p>This flexibility makes it a strong solution for organizations with <strong>diverse network architectures</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745007640409/31bf82c1-b8e8-4776-bd7e-e95f239de1fa.png" alt class="image--center mx-auto" /></p>
<p>Here’s a refined and structured version of your explanation, great for documentation or presentation:</p>
<hr />
<h3 id="heading-common-scenarios-for-vnet-peering"><strong>Common Scenarios for VNet Peering</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745018447735/8cf98038-d9ff-4800-97a4-4a2d4b6756b9.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-scenario-1-hub-and-spoke-with-a-network-virtual-appliance-nva"><strong>Scenario 1 : Hub-and-Spoke with a Network Virtual Appliance (NVA)</strong></h3>
<p>In this setup, a <strong>spoke VNet</strong> (e.g., VNet A) connects to a <strong>central hub</strong> that hosts shared resources, such as a <strong>network virtual appliance (NVA)</strong>—commonly a firewall or security device.</p>
<ul>
<li><p>The goal is to route outbound traffic from VNet A through the NVA before it leaves the virtual network.</p>
</li>
<li><p>This is achieved by:</p>
<ul>
<li><p><strong>Configuring a custom route</strong> at the <strong>subnet level</strong> in VNet A (UDR:User-Defined Route).</p>
</li>
<li><p>Setting the <strong>next hop</strong> to traverse the <strong>peer</strong> connection and direct traffic through the NVA in the hub.</p>
</li>
</ul>
</li>
</ul>
<p>As long as there is <strong>no overlapping address space</strong>, this configuration is simple and effective.</p>
<h3 id="heading-scenario-2-centralized-gateway-with-gateway-transit"><strong>Scenario 2 : Centralized Gateway with Gateway Transit</strong></h3>
<p>Another common architecture involves connecting Azure VNets to an <strong>on-premises network</strong> through a <strong>centralized VPN or ExpressRoute gateway</strong> located in a hub VNet.</p>
<ul>
<li><p>Instead of deploying a separate gateway in every VNet:</p>
<ul>
<li><p>A <strong>single gateway</strong> is hosted in the <strong>hub network</strong>.</p>
</li>
<li><p><strong>Gateway Transit</strong> is enabled in the peering settings.</p>
</li>
</ul>
</li>
</ul>
<p>This allows:</p>
<ul>
<li><p>Spoke VNets (like VNet B) to <strong>reuse the central gateway</strong> to reach on-prem resources.</p>
</li>
<li><p><strong>Centralized control</strong>, reducing both <strong>cost</strong> and <strong>security exposure</strong>.</p>
</li>
<li><p>Better <strong>management of traffic flow and access policies</strong> across the environment.</p>
</li>
</ul>
<p>Centralizing access to gateways, NVAs, and firewalls helps maintain <strong>network consistency and security</strong>.</p>
<h3 id="heading-key-takeaways"><strong>Key Takeaways</strong></h3>
<ul>
<li><p>VNet peering is essential for <strong>scalable</strong>, <strong>secure</strong>, and <strong>cost-efficient</strong> architectures.</p>
</li>
<li><p>Use <strong>custom routes</strong> for controlled traffic flow.</p>
</li>
<li><p>Enable <strong>Gateway Transit</strong> to optimize hybrid connectivity.</p>
</li>
<li><p>Ensure <strong>non-overlapping address spaces</strong> for all peered VNets.</p>
</li>
</ul>
<h2 id="heading-service-chaining"><strong>Service chaining</strong></h2>
<p>One key advantage of using a hub-and-spoke peering model is <strong>service chaining</strong>.</p>
<p>By leveraging a central hub to control route next-hops and manage traffic flows, we can enforce secure, streamlined, and controlled communication between different segments of the network.</p>
<p><strong>Service chaining</strong> means <strong>intentionally routing traffic through a specific set of network services or appliances</strong>—usually in a central hub—<strong>before it reaches its destination</strong>.</p>
<ul>
<li><p>e.g. Instead of allowing traffic to go <strong>directly</strong> from one VNET to another, you’re <strong>forcing it to pass through the hub</strong>.</p>
</li>
<li><p>In that hub, you might have things like a <strong>firewall</strong>, an <strong>IDS/IPS</strong>, a <strong>routing or inspection appliance</strong> (e.g., a third-party NVA or Azure Firewall)</p>
</li>
<li><p>The hub “chains” these services together so <strong>every packet</strong> must pass through your chosen security and control layers.</p>
</li>
</ul>
<p>So, “service chaining” = <strong>a controlled, centralized path where traffic is inspected, filtered, or modified before reaching its destination</strong>.</p>
<p>This allows you to:</p>
<ul>
<li><p>Apply consistent security policies</p>
</li>
<li><p>Monitor traffic centrally</p>
</li>
<li><p>Avoid exposing VNets directly to each other</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745262460773/f2491994-b659-4ad5-b3da-5792795b2d3c.png" alt class="image--center mx-auto" /></p>
<p>You can see here in the Azure portal, several virtual networks are already up and running. The goal is to create a <strong>global peering</strong> between <strong>two hub networks</strong>—specifically linking the <strong>East US hub</strong> with the <strong>West US hub</strong>.</p>
<p>To begin:</p>
<ol>
<li><p>The <strong>East US</strong> virtual network is selected.</p>
</li>
<li><p>From the left-hand menu, the <strong>Peerings</strong> section is accessed.</p>
</li>
<li><p>Existing peerings may be visible—such as one connecting to a spoke—demonstrating that a virtual network can support <strong>multiple peerings</strong>, which is essential in a <strong>hub-and-spoke</strong> topology.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745262506410/98f1c615-af82-4b44-b159-9deef4c5d90f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745262560893/98c16ad2-34cb-4031-b276-241504394daa.png" alt class="image--center mx-auto" /></p>
<p>In this model:</p>
<ul>
<li><p>The <strong>hub</strong> serves as the central shared network.</p>
</li>
<li><p><strong>Spokes</strong> are virtual networks where resources are deployed.</p>
</li>
</ul>
<p>The next step involves establishing a <strong>hub-to-hub</strong> peering. Although the architecture differs, the configuration steps remain the same as standard VNet peering.</p>
<p>By selecting <strong>Add</strong>, a configuration panel is presented where:</p>
<ul>
<li><p>A peering name can be defined (e.g., “<strong>hub-eastus-to-hub-westus2</strong>”).</p>
</li>
<li><p>Access permissions between the virtual networks are configured.</p>
</li>
<li><p>Options such as <strong>forwarded traffic</strong>—which allows routing through the hub—can be enabled.</p>
</li>
</ul>
<p>Only the basic access and forwarding options will be selected at this stage, as a gateway has not yet been configured.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745261299860/5d6a6ed9-49f0-470f-ae96-a4f603f9be0d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745261365134/0cccba5a-a43b-4b2d-ae6d-cae1207f59bb.png" alt class="image--center mx-auto" /></p>
<p>We need to set it up in opposite direction so the process is then repeated in the <strong>West US hub</strong>, creating the reciprocal connection back to the <strong>East US hub</strong> (e.g., “hub-westus-to-hub-eastus”).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745262026485/9dfcf360-0965-46d0-ae65-2609b0e1e7fc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745261969653/cd1f0cf6-e67b-431a-8ed5-fa5962c47ca2.png" alt class="image--center mx-auto" /></p>
<p>Although peering is <strong>bidirectional</strong>, Azure treats each direction as a <strong>separate resource</strong>. When <strong>Add</strong> is selected, two deployments are triggered—one for each direction.</p>
<p>With these steps completed, a <strong>global hub-to-hub connection</strong> is successfully established.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745270480941/5fb9fcd5-eed0-4f5f-9e03-f1227accb210.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745271221721/a86c23d4-ed97-459c-afd5-9a73030a68ce.png" alt class="image--center mx-auto" /></p>
<p>After refreshing, the connection will show as <strong>Connected</strong>. You can click into the hub at any time to view or modify details. Some defaults may have been adjusted automatically based on available settings.</p>
<p>If <strong>full synchronization</strong> is shown, the setup is complete. Further customizations are optional.</p>
<p>At this point, the virtual networks are linked, and resources can communicate securely over the private connection you’ve set up.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745271249261/0f8319e2-ba91-431a-918d-519ca422251a.png" alt class="image--center mx-auto" /></p>
<p>From the <strong>virtual networks</strong> view, the <strong>West US hub</strong> can be checked. Under <strong>Peerings</strong>, the reverse connection will appear, confirming successful pairing. Connection details are visible, and changes can be made as needed. If subnet settings are updated, use the <strong>Sync</strong> button to apply them.</p>
<h3 id="heading-azure-virtual-network-traffic-routing-default-behavior"><strong>Azure Virtual Network Traffic Routing (Default Behavior)</strong></h3>
<p>When you create a virtual network (VNet) in Azure, traffic is managed by a <strong>default system route table</strong>—even if you don’t configure anything manually. This ensures basic connectivity from day one.</p>
<p>Azure supports <strong>three types of routes</strong>:</p>
<ol>
<li><p><strong>Default routes</strong> – Built-in for internal traffic and internet access.</p>
</li>
<li><p><strong>Optional default routes</strong> – Auto-added in specific scenarios like <strong>VNet peering</strong>.</p>
</li>
<li><p><strong>Custom routes (UDRs)</strong> – User-defined and always take <strong>priority</strong> over default routes.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745271775953/82df0f03-b2eb-4029-848f-9d0755e20734.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745273059298/47de1b5e-8987-4607-9674-e489b8dac676.png" alt class="image--center mx-auto" /></p>
<p>By default:</p>
<ul>
<li><p>Traffic can flow <strong>within and across subnets</strong> inside a VNet.</p>
</li>
<li><p>Traffic stays <strong>within the VNet</strong> unless peering or another connection is added.</p>
</li>
<li><p>An <strong>internet route</strong> is included by default (though this may change in the future).</p>
</li>
</ul>
<p>Custom route tables can be applied at the <strong>subnet level</strong>, and Azure’s defaults remain as a <strong>fallback</strong> if needed.</p>
<p><strong>What is “fallback” in this context?</strong></p>
<p>In Azure, <strong>“fallback”</strong> means that if <strong>no custom route</strong> matches the traffic, then Azure will automatically use the <strong>default or optional default routes</strong> instead.</p>
<p>So, if you apply a <strong>custom route table</strong> to a subnet and it doesn’t explicitly cover certain traffic (like internet-bound traffic or traffic to another subnet), <strong>Azure’s built-in routes will still handle that traffic</strong> unless you’ve overridden them.</p>
<h3 id="heading-custom-virtual-network-routing-in-azure"><strong>Custom Virtual Network Routing in Azure</strong></h3>
<p>Azure uses default routing, but <strong>User Defined Routes (UDRs)</strong> let you change traffic flow to meet needs like <strong>security, compliance, or efficiency</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745278195969/30a5b012-09dc-44d9-9a39-d95c6e0c57a6.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Default behavior</strong>: Subnets in the same VNet can communicate freely. Outbound traffic doesn’t pass through firewalls unless configured.</p>
</li>
<li><p><strong>UDRs &amp; Route Tables</strong>:</p>
<ul>
<li><p>Create a <strong>route table</strong> with a custom <strong>next hop</strong> (e.g., firewall, NVA, gateway).</p>
</li>
<li><p>Associate the route table with the target <strong>subnet</strong>.</p>
</li>
</ul>
</li>
<li><p><strong>Use Cases</strong>:</p>
<ul>
<li><p>Route <strong>internet-bound traffic</strong> through a firewall.</p>
</li>
<li><p>Route <strong>inter-subnet traffic</strong> through a <strong>Network Virtual Appliance (NVA)</strong> for inspection.</p>
</li>
<li><p>Route <strong>unknown traffic</strong> to an <strong>on-premises gateway</strong>.</p>
</li>
</ul>
</li>
<li><p><strong>Additional Tools</strong>:</p>
<ul>
<li><p>Use <strong>diagnostics</strong> to troubleshoot routes.</p>
</li>
<li><p>Use <strong>Route Server</strong> when working with <strong>third-party appliances</strong>.</p>
</li>
</ul>
</li>
</ul>
<p>Next hop settings control how traffic flows—and that can make or break your network’s security and performance.</p>
<h3 id="heading-applying-a-route-table-in-azure"><strong>Applying a Route Table in Azure</strong></h3>
<p>Once you have a <strong>route table</strong> set up, you can enforce custom traffic flows by associating it with a <strong>subnet</strong>.</p>
<p><strong>Example:</strong></p>
<ul>
<li><p>Goal: Route traffic for a specific <strong>IP range</strong> (e.g., 10.0.0.0/24) through a <strong>Virtual Appliance</strong>.</p>
</li>
<li><p>Steps:</p>
<ol>
<li><p><strong>Create a route</strong> (e.g., “to-private-subnet”).</p>
</li>
<li><p>Set the <strong>destination</strong> IP range.(e.g., 10.0.0.0/24)</p>
</li>
<li><p>Set the <strong>next hop</strong> to the <strong>virtual appliance</strong> (can be a firewall, NVA, etc.).</p>
</li>
<li><p><strong>Associate</strong> the route table with the target <strong>subnet</strong>(screenshot on the right).</p>
</li>
</ol>
</li>
</ul>
<p>This small change <strong>enforces custom routing</strong>, impacting traffic flow significantly.</p>
<p>Another common use: <strong>Routing traffic back to on-premises</strong>—another strong case for using custom route tables.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745337497188/cf1a9231-681c-4d2f-befd-671202805ea3.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-forced-tunneling"><strong>Forced Tunneling:</strong></h3>
<ul>
<li><strong>Purpose</strong>: Redirect <strong>all outbound traffic</strong> to a specific device for inspection.</li>
</ul>
<ol>
<li><p>For <strong>forced tunneling</strong> add a <strong>default route</strong>:</p>
<ul>
<li><ul>
<li><p><strong>Prefix</strong>: 0.0.0.0/0</p>
<ul>
<li><strong>Next hop</strong>: <strong>VPN Gateway</strong> (not Virtual Appliance in this case)</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Associate the route table</strong> to the required <strong>VNet subnet(s)</strong>.</p>
</li>
</ol>
<h3 id="heading-vpn-gateway-requirements"><strong>VPN Gateway Requirements:</strong></h3>
<ul>
<li><p>Must be a <strong>route-based</strong> VPN gateway.</p>
</li>
<li><p>A <strong>default site connection</strong> must be defined among on-premises sites.</p>
</li>
<li><p>The <strong>on-prem VPN device</strong> must use 0.0.0.0/0 as <strong>traffic selectors</strong> to accept all traffic.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745352149290/cb1411be-4a97-44a7-8ba3-749fe3115eac.png" alt class="image--center mx-auto" /></p>
<p><strong>Benefits</strong>:</p>
<ul>
<li><p>Enforces security policies</p>
</li>
<li><p>Centralizes traffic inspection</p>
</li>
<li><p>Ensures compliance</p>
</li>
</ul>
<h3 id="heading-why-not-virtual-appliance-for-forced-tunneling-via-vpn"><strong>Why not Virtual Appliance for forced tunneling via VPN?</strong></h3>
<ul>
<li><p>Azure <strong>doesn’t allow internet-bound traffic to exit via an NVA</strong> by default unless that NVA has internet access and specific routing (which defeats the purpose of forced tunneling to on-prem).</p>
</li>
<li><p>When you want to <strong>force all internet traffic</strong> to go <strong>back to your on-premises environment</strong> (for inspection, filtering, etc.), it <strong>must</strong> be routed to the <strong>VPN Gateway</strong>.</p>
</li>
<li><p>Azure will only forward that traffic through a VPN if:</p>
<ul>
<li><p>The <strong>default route</strong> (0.0.0.0/0) points to the <strong>VPN Gateway</strong>.</p>
</li>
<li><p>The <strong>on-prem VPN device</strong> is configured to accept <strong>all traffic</strong> using 0.0.0.0/0 as the traffic selector.</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-so-use"><strong>So use:</strong></h3>
<ul>
<li><p><strong>Virtual Appliance</strong> → for inspection within Azure.</p>
</li>
<li><p><strong>VPN Gateway</strong> → for <strong>forced tunneling to on-premises</strong>.</p>
</li>
</ul>
<h2 id="heading-propagating-routes-in-azure"><strong>Propagating Routes in Azure</strong></h2>
<p>By default, user-defined routes (UDRs) only affect the subnet they’re assigned to. If you want those routes to <strong>extend beyond that subnet</strong>—for example, to your network appliances—you’ll need a way to dynamically <strong>share and propagate</strong> them.</p>
<p>This is where <strong>Azure Route Server</strong> <strong>(ARS)</strong> comes in.</p>
<h3 id="heading-what-is-azure-route-server"><strong>What Is Azure Route Server?</strong></h3>
<p>Azure Route Server enables <strong>dynamic routing</strong> by using <strong>BGP (Border Gateway Protocol)</strong> to exchange routes between your Azure virtual network and your network virtual appliances (NVAs).</p>
<h3 id="heading-why-use-bgp"><strong>Why Use BGP?</strong></h3>
<ul>
<li><p>BGP lets different network devices (even from different vendors) <strong>communicate available IP ranges</strong> to one another.</p>
</li>
<li><p>It supports <strong>bulk route sharing</strong> efficiently, using route prefixes.</p>
</li>
<li><p>It’s dynamic: when routes change, updates are propagated automatically.</p>
</li>
</ul>
<h3 id="heading-what-azure-route-server-does"><strong>What Azure Route Server Does</strong></h3>
<ul>
<li><p><strong>Learns routes</strong> from Azure route tables.</p>
</li>
<li><p><strong>Advertises those routes</strong> to NVAs that support BGP.</p>
</li>
<li><p><strong>Withdraws routes automatically</strong> when they’re removed in Azure.</p>
</li>
<li><p>Helps eliminate <strong>manual route configuration</strong> on third-party appliances.</p>
</li>
</ul>
<h3 id="heading-when-to-use-azure-route-server"><strong>When to Use Azure Route Server</strong></h3>
<ul>
<li><p>You’re using <strong>third-party NVAs</strong> in your Azure environment.</p>
</li>
<li><p>You want <strong>automatic route propagation</strong>.</p>
</li>
<li><p>You need to <strong>minimize configuration overhead</strong> and reduce the chance of manual errors.</p>
</li>
<li><p>You want a <strong>scalable and dynamic routing setup</strong>.</p>
</li>
</ul>
<h2 id="heading-azure-virtual-network-nat-nat-gateway"><strong>Azure Virtual Network NAT (NAT Gateway)</strong></h2>
<p>Azure NAT Gateway controls <strong>outbound internet traffic</strong> from a subnet using <strong>network address translation (NAT)</strong>.</p>
<h3 id="heading-how-to-use-it"><strong>How to Use It</strong></h3>
<ol>
<li><p><strong>Create a NAT Gateway</strong></p>
</li>
<li><p><strong>Assign public IPs</strong></p>
</li>
<li><p><strong>Associate it with a subnet</strong></p>
</li>
</ol>
<p>All outbound traffic from that subnet now flows through NAT Gateway. Also <strong>return traffic</strong> follows the same path (stateful)</p>
<h3 id="heading-inbound-coexistence"><strong>Inbound Coexistence</strong></h3>
<ul>
<li><p>Inbound access can use a <strong>load balancer</strong></p>
</li>
<li><p>Outbound traffic uses <strong>NAT Gateway</strong></p>
</li>
<li><p>Works together without conflict</p>
</li>
</ul>
<h2 id="heading-how-to-set-up-an-azure-nat-gateway"><strong>How to Set Up an Azure NAT Gateway</strong></h2>
<ol>
<li><strong>Go to the Azure Portal&gt;</strong> <strong>NAT Gateways</strong> (under the Networking section)&gt; <strong>Create</strong>.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745358080227/1ee9ccc9-4236-49e3-8419-5887eb26edce.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Basics:</strong> Name, Region: same region as your virtual network (e.g., <em>East US</em>).</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745358291518/e3eeb1e9-592e-4206-bb63-ab1657e52cca.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745358425583/92d3b3dd-6e61-4d1d-8a3a-724629cdced0.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><p><strong>Outbound IP Configuration</strong></p>
<ul>
<li><p>Choose your <strong>public IP</strong> settings:</p>
<ul>
<li><p><strong>Create new public IPs</strong>, or</p>
</li>
<li><p><strong>Use existing</strong> ones.</p>
</li>
</ul>
</li>
<li><p>You can also use a <strong>Public IP Prefix</strong> (a block of contiguous IPs).</p>
</li>
</ul>
</li>
</ol>
<ul>
<li><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745358503070/6091cac4-70ff-4d43-8608-9a9a94473fcb.png" alt class="image--center mx-auto" /></li>
</ul>
<ol start="4">
<li><p><strong>Associate with Subnets</strong></p>
<ul>
<li><p>Select the <strong>virtual network</strong> and <strong>subnet(s)</strong> that will use this NAT Gateway.</p>
</li>
<li><p>Only subnets in the same region will be shown.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745358694060/f26a3f1f-96b2-403b-8657-2b2154dfcd04.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li><strong>Review &amp; Create:</strong> Review your settings &amp; Click <strong>Create</strong>.</li>
</ol>
<h3 id="heading-what-happens-next"><strong>What Happens Next?</strong></h3>
<ul>
<li><p>The NAT Gateway is integrated into your VNet.</p>
</li>
<li><p>All <strong>outbound traffic</strong> from the associated subnets will use the configured <strong>static public IP(s)</strong>.</p>
</li>
<li><p>No further changes are required on your VMs.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Az-204 - Lab 1 to Lab 10]]></title><description><![CDATA[Lab 01 - Build a web application on Azure platform as a service offering
For complete instruction please visit microsoft learn github here we will do the following:

Creating a web application on Azure by using the PaaS model.

Uploading existing web...]]></description><link>https://shirincloudlab.com/az-204-lab</link><guid isPermaLink="true">https://shirincloudlab.com/az-204-lab</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Tue, 15 Apr 2025 21:58:11 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-lab-01-build-a-web-application-on-azure-platform-as-a-service-offering"><strong>Lab 01 -</strong> Build a web application on Azure platform as a service offering</h2>
<p>For complete instruction please visit <a target="_blank" href="https://github.com/MicrosoftLearning/AZ-204-DevelopingSolutionsforMicrosoftAzure">microsoft learn github</a> here we will do the following:</p>
<ul>
<li><p>Creating a web application on Azure by using the PaaS model.</p>
</li>
<li><p>Uploading existing web app files by using the Apache Kudu zip deployment option.</p>
</li>
<li><p>Viewing and testing the newly deployed web application.</p>
</li>
</ul>
<h2 id="heading-lab-scenario">Lab Scenario</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=EiSEcU9qjfo&amp;ab_channel=MicrosoftTrainerCommunityChannel">https://www.youtube.com/watch?v=EiSEcU9qjfo&amp;ab_channel=MicrosoftTrainerCommunityChannel</a></div>
<p> </p>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-204-DevelopingSolutionsforMicrosoftAzure/master/Instructions/Labs/media/Lab01-Diagram.png" alt="Architecture diagram depicting a user building a web application on Azure platform as a service offering." /></p>
<ol>
<li><p>Create a storage account of imgstor50403225 and go to the resource &gt; <strong>Access keys</strong> &gt; copy a <strong>Connection string</strong> to Notepad then</p>
</li>
<li><p>Go to the Storage Account &gt; <strong>Containers</strong> &gt; <strong>+ Container</strong> &gt; name it imagesupload blob</p>
</li>
<li><p>Create a web App (API) of imgapi50403225 with runtime of .net 8 LTS</p>
</li>
<li><p>Configure the web app to storage account using the connection string from notepad</p>
</li>
<li><p>Deploy the API with openning vs code and the folder downloaded from this location: <a target="_blank" href="https://github.com/MicrosoftLearning/AZ-204-DevelopingSolutionsforMicrosoftAzure/tree/master/Allfiles/Labs/01/Starter/API">https://github.com/MicrosoftLearning/AZ-204-DevelopingSolutionsforMicrosoftAzure/tree/master/Allfiles/Labs/01/Starter/API</a></p>
</li>
<li><p>Enter the following CLI command:</p>
</li>
</ol>
<pre><code class="lang-powershell">az login
az webapp list -<span class="hljs-literal">-resource</span><span class="hljs-literal">-group</span> ManagedPlatform<span class="hljs-literal">-lod50403225</span> -<span class="hljs-literal">-query</span> <span class="hljs-string">"[?starts_with(name, 'imgapi')].{Name:name}"</span> -<span class="hljs-literal">-output</span> tsv
<span class="hljs-built_in">cd</span> C:\Allfiles\Labs\<span class="hljs-number">01</span>\Starter\API
az webapp deployment source config<span class="hljs-literal">-zip</span> -<span class="hljs-literal">-resource</span><span class="hljs-literal">-group</span> ManagedPlatform<span class="hljs-literal">-lod50403225</span> -<span class="hljs-literal">-src</span> api.zip -<span class="hljs-literal">-name</span> &lt;your<span class="hljs-literal">-api</span><span class="hljs-literal">-name</span>&gt;
</code></pre>
<ol start="7">
<li>To create Front-End Web App Repeat Web App creation:</li>
</ol>
<ul>
<li><p><strong>Name</strong>: imgweb50403225</p>
</li>
<li><p><strong>Use existing plan</strong>: ManagedPlan</p>
</li>
<li><p>Same stack/region/OS</p>
</li>
<li><p>Disable Insights, then <strong>Review + create</strong> &gt; <strong>Create</strong>.</p>
</li>
</ul>
<ol start="8">
<li>To configure Front-End Go to app &gt; <strong>Configuration</strong> &gt; <strong>+ New application setting</strong>:</li>
</ol>
<ul>
<li><ul>
<li><p><strong>Name</strong>: ApiUrl</p>
<ul>
<li><p><strong>Value</strong>: Your previously copied API URL (with https://)</p>
</li>
<li><p>Click <strong>Save</strong>.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ol start="9">
<li><p>To deploy Front-End, In VS Code &gt; Open Folder: C:\Allfiles\Labs\01\Starter\Web.</p>
</li>
<li><p>In terminal:</p>
</li>
</ol>
<pre><code class="lang-powershell">az login
az webapp list -<span class="hljs-literal">-resource</span><span class="hljs-literal">-group</span> ManagedPlatform<span class="hljs-literal">-lod50403225</span> -<span class="hljs-literal">-query</span> <span class="hljs-string">"[?starts_with(name, 'imgweb')].{Name:name}"</span> -<span class="hljs-literal">-output</span> tsv
<span class="hljs-built_in">cd</span> C:\Allfiles\Labs\<span class="hljs-number">01</span>\Starter\Web
az webapp deployment source config<span class="hljs-literal">-zip</span> -<span class="hljs-literal">-resource</span><span class="hljs-literal">-group</span> ManagedPlatform<span class="hljs-literal">-lod50403225</span> -<span class="hljs-literal">-src</span> web.zip -<span class="hljs-literal">-name</span> &lt;your<span class="hljs-literal">-web</span><span class="hljs-literal">-name</span>&gt;
</code></pre>
<ol start="11">
<li><p>To test the App, Browse to your front-end app, You should see grilledcheese.jpg in the gallery. Upload banhmi.jpg using the UI. Refresh if needed.</p>
<hr />
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[SC-300 - Lab 21 - 28]]></title><description><![CDATA[visit microsoft learn github for complete instructions
Lab 26: Configure Privileged Identity Management for Microsoft Entra roles
Login type = Microsoft 365 admin
A Privileged role administrator can customize Privileged Identity Management (PIM) in t...]]></description><link>https://shirincloudlab.com/sc-300-lab-21-28</link><guid isPermaLink="true">https://shirincloudlab.com/sc-300-lab-21-28</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Tue, 15 Apr 2025 18:20:30 GMT</pubDate><content:encoded><![CDATA[<p>visit <a target="_blank" href="https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ManagedAppMenuBlade/~/Users/appId/8a4ff89a-5105-446c-8a2b-e24799cc34cc/objectId/47dca9c4-5216-4d51-8577-9c49c1e32703">microsoft learn github</a> for complete instructions</p>
<h1 id="heading-lab-26-configure-privileged-identity-management-for-microsoft-entra-roles">Lab 26: Configure Privileged Identity Management for Microsoft Entra roles</h1>
<h3 id="heading-login-type-microsoft-365-admin">Login type = Microsoft 365 admin</h3>
<p>A Privileged role administrator can customize Privileged Identity Management (PIM) in their Microsoft Entra organization, including changing the experience for a user who is activating an eligible role assignment. You must become familiar with configuring PIM.</p>
]]></content:encoded></item><item><title><![CDATA[SC-300 - Lab 16 - 20]]></title><description><![CDATA[Lab 16 - Using Azure Key Vault for Managed Identities
Lab 17 - Defender for Cloud Apps application discovery and enforcing restrictions
Microsoft Defender for Cloud Apps uses network traffic logs to identify which applications users are accessing. Lo...]]></description><link>https://shirincloudlab.com/sc-300-lab-16-20</link><guid isPermaLink="true">https://shirincloudlab.com/sc-300-lab-16-20</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Wed, 09 Apr 2025 23:58:23 GMT</pubDate><content:encoded><![CDATA[<h1 id="heading-lab-16-using-azure-key-vault-for-managed-identities">Lab 16 - Using Azure Key Vault for Managed Identities</h1>
<h1 id="heading-lab-17-defender-for-cloud-apps-application-discovery-and-enforcing-restrictions">Lab 17 - Defender for Cloud Apps application discovery and enforcing restrictions</h1>
<p><strong>Microsoft Defender for Cloud Apps</strong> uses network traffic logs to identify which applications users are accessing. Logs from on-premises firewalls provide a snapshot of the most commonly used applications and the users interacting with them. Traffic from managed devices is also sent to the <strong>Defender for Cloud Apps Discovery Overview Dashboard</strong>, offering centralized visibility into app usage.</p>
<ol>
<li><p>For defender for cloud apps discovery sign in to security.microsoft.com using global administrator account &gt; Cloud Apps &gt; Cloud App Catalog &gt;and in brows by category select Cloud Storage&gt; and in the list of apps note the Risk score next to the app name.</p>
</li>
<li><p>Open dropbox on another browser and you can open it</p>
</li>
<li><p>Return to the Defender for Cloud Apps screen, and select the three-dot to the right of Dropbox and choose <strong>Unsanctioned</strong> and then the <strong>Next</strong> button .</p>
</li>
<li><p>After 5 mins try to open dropbox and you can see you cannot open dropbox anymore</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744242513810/a0393851-4627-4889-86e6-ac542868a480.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744242541675/1583901c-8064-40df-a2a4-bd9a7a9b2d22.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>it only applys on any client device that is onboarded to <strong>Microsoft Defender for Endpoint (MDE)</strong> and integrated with <strong>Microsoft Defender for Cloud Apps</strong>.</p>
</blockquote>
<p><mark>Questions that remained unanswered for this lab</mark></p>
<ol>
<li><p><mark>How to check if we have MDE licenses on azure (What are the options)</mark></p>
</li>
<li><p><mark>How to enable MDE licenses</mark></p>
</li>
</ol>
<hr />
<h1 id="heading-18-defender-for-cloud-apps-access-and-session-policies">18 - Defender for Cloud Apps Access and Session Policies</h1>
<h3 id="heading-login-type-microsoft-365-admin">Login type = Microsoft 365 admin</h3>
<p><strong>Exercise 1 - Create and test the Conditional Access App Contol policy</strong></p>
<ol>
<li>First ask user to login to forms.microsoft.com, the user should have unconditional access to Forms then configure Entra ID to work with Defender for Cloud Apps</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744303338241/388cc2a1-a23f-4344-9d05-1cd463aca2e1.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Navigate to Entra ID &gt; Identity &gt; Protection &gt; Conditional Access &gt; Create new policy &gt; Enter policy name: “Monitor the user using Forms“ &gt; select the user &gt; add Microsoft Forms on target resources&gt; under Access Control select Session and select use conditional access app control and leave the default of Monitor only selected and then enable the policy</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744303928426/4a5d1c84-1f5b-4cc2-a3fc-dd685acf79a0.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Ask the user to login to forms.microsoft.com again, user will get a pop up message “Your company is monitoring the usage of this application.“</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744303051940/0ed6b971-bef6-422a-bd34-95937c83ae71.png" alt class="image--center mx-auto" /></p>
<p><strong>Exercise 2 - Setup alerts in Microsoft Defender for Cloud Apps</strong></p>
<p>Task 1 - Access Microsoft Defender for Cloud Apps(security.microsoft.com) and create Conditional Access App Control</p>
<blockquote>
<p>Registering your application creates a trust relationship with the Microsoft identity platform. This trust is one-way—your app trusts the Microsoft identity platform, but not vice versa.</p>
</blockquote>
<p>Navigate to <strong>Microsoft Defender for Cloud Apps</strong> via <a target="_blank" href="https://security.microsoft.com">https://security.microsoft.com</a> using a <strong>Global Administrator</strong> account.</p>
<ol>
<li><p>Go to <strong>Cloud Apps</strong> &gt; <strong>Policies</strong> &gt; <strong>Policy Management</strong> &gt; <strong>+ Create policy</strong> &gt; Select <strong>Access policy</strong>. Enter policy name: <strong>“Monitor Microsoft Forms access”</strong> and Leave <strong>Category</strong> as <strong>Access control</strong>.</p>
</li>
<li><p>Under <strong>Activities matching all of the following</strong>, open the filter for <strong>Intune compliant, Microsoft Entra Hybrid joined</strong>, and unselect <strong>Microsoft Entra Hybrid joined</strong>. Also choose <strong>select apps</strong> &gt; Choose <strong>Microsoft Forms</strong>. Leave <strong>Actions</strong> set to <strong>Test</strong>.</p>
</li>
<li><p>Under <strong>Alerts</strong>, leave <strong>Create an alert…</strong> checked and select <strong>Send alert as email</strong>. Enter the <strong>lab admin email address</strong>, then press <strong>Enter</strong>. Click <strong>Create</strong> to finalize the access policy.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744309783506/2b6bba6e-c082-4d65-a8fd-1dad9e5db9fd.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Now if user logs in to the forms.microsoft.com again he will get this message</li>
</ol>
<blockquote>
<p>Your company is monitoring the usage of this application.</p>
</blockquote>
<ol start="5">
<li>Return to the browser running <strong>Defender for Cloud Apps</strong> and <strong>refresh the page</strong> then navigate to <strong>Investigate</strong> &gt; <strong>Activity log</strong> and use the <strong>App filter</strong> to select <strong>Microsoft Forms</strong>. Review the <strong>sign-in records</strong> of the user.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744310615765/c9a38ee2-3c3f-4375-95fd-de2da74f2c78.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-lab-19-register-an-application">Lab 19 - Register an application</h1>
<h3 id="heading-login-type-microsoft-365-admin-1">Login type = Microsoft 365 admin</h3>
<h3 id="heading-exercise-1-register-an-application">Exercise 1 - Register an application</h3>
<p>Task 1 - App registration:</p>
<ol>
<li><strong>Entra ID</strong>\&gt; <strong>Identity &gt; Applications &gt; App registrations</strong> &gt; <strong>+ New registration</strong>.</li>
</ol>
<p>Enter the application name: <strong>Demo app</strong>. Leave all other fields as default (Redirect URI not required).</p>
<p>Click <strong>Register</strong>.</p>
<p><img src="https://github.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/raw/master/Instructions/Labs/media/lp3-mod3-register-an-application.png" alt="Screen image displaying the Register an application page with the name and default settings highlighted" /></p>
<p>Task 2 - Configure platform settings</p>
<p>Settings for each application type, including redirect URIs, are configured in <strong>Platform configurations</strong> in the Azure portal. Some platforms, like <strong>Web</strong> and <strong>Single-page applications</strong>, require you to manually specify a redirect URI. For other platforms, like mobile and desktop, you can select from redirect URIs generated for you when you configure their other settings.</p>
<ol start="2">
<li><strong>Entra ID</strong> \&gt; <strong>Identity</strong> &gt; <strong>Application</strong> &gt; <strong>App registrations</strong> \&gt; Select your application &gt; <strong>Manage</strong> &gt; select <strong>Authentication</strong> &gt; <strong>Platform configurations</strong> &gt; <strong>+ Add a platform</strong> &gt; Select <strong>Web</strong> as the platform &gt; In <strong>Redirect URI</strong>, enter: <a target="_blank" href="https://localhost">https://localhost</a> &gt; Click <strong>Configure</strong> to save the platform settings.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744654153960/ce40bddf-a59b-4602-97f6-ad6ab36a4283.png" alt class="image--center mx-auto" /></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Platform</td><td>Configuration settings</td></tr>
</thead>
<tbody>
<tr>
<td>Web</td><td>Enter a <strong>Redirect URI</strong> for your app, the location where Microsoft identity platform redirects a user's client and sends security tokens after authentication. Select this platform for standard web applications that run on a server.</td></tr>
<tr>
<td>Single-page application</td><td>Enter a <strong>Redirect URI</strong> for your app, the location where Microsoft identity platform redirects a user's client and sends security tokens after authentication. Select this platform if you're building a client-side web app in JavaScript or with a framework like Angular, Vue.js, React.js, or Blazor WebAssembly.</td></tr>
<tr>
<td>iOS/macOS</td><td>Enter the app <strong>Bundle ID</strong>, found in XCode in <em>Info.plist</em> or Build Settings. A redirect URI is generated for you when you specify a Bundle ID.</td></tr>
<tr>
<td>Android</td><td>Enter the app <strong>Package name</strong>, which you can find in the AndroidManifest.xml file, and generate and enter the <strong>Signature hash</strong>. A redirect URI is generated for you when you specify these settings.</td></tr>
<tr>
<td>Mobile and desktop applications</td><td>Select one of the <strong>Suggested redirect URIs</strong> or specify a <strong>Custom redirect URI</strong>. For desktop applications, we recommend: <a target="_blank" href="https://login.microsoftonline.com/common/oauth2/nativeclient">https://login.microsoftonline.com/common/oauth2/nativeclient</a>. Select this platform for mobile applications that aren't using the latest Microsoft Authentication Library (MSAL) or are not using a broker. Also select this platform for desktop applications.</td></tr>
</tbody>
</table>
</div><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744654370993/f39e54d0-56a6-46f3-acdc-6c4eb705a8ba.png" alt class="image--center mx-auto" /></p>
<p>Task 3 - Add credentials, certificate and client secret</p>
<p>Credentials are used by confidential client applications that access a web API. Examples of confidential clients include web apps, other web APIs, and service-type and daemon-type applications. Credentials allow your application to authenticate as itself, requiring no interaction from a user at runtime.</p>
<p>You can add both certificates and client secrets (a string) as credentials to your confidential client app registration.</p>
<blockquote>
<p><strong>Note</strong>: Sometimes called a <em>public key</em>, certificates are the recommended credential type, because as they provide a higher level of assurance than a client secret. When using a trusted public certificate, you can add the certificate using the Certificates &amp; secrets feature. Your certificate must be one of the following file types: .cer, .pem, .crt.</p>
<p><strong>Note</strong>: The client secret, also known as an <em>application password</em>, is a string value your app can use in place of a certificate to identity itself. It's the easier of the two credential types to use. It's often used during development, but is considered less secure than a certificate. You should use certificates in your applications running in production.</p>
</blockquote>
<ol start="3">
<li><strong>Azure portal</strong> &gt; <strong>App registrations &gt;</strong> Select <strong>your application &gt;</strong> Select <strong>Certificates &amp; secrets</strong> &gt; Click <strong>+ New client secret</strong>. &gt; <strong>Enter description: SC300 lab secret &gt;</strong> Set duration: 90 days (3 months) &gt; Click <strong>Add</strong>\&gt; <strong>Save the secret's value in notepad</strong> for use in your client application code; The Certificate &amp; Secrets page will display the new secret value. It's important you copy this value as it's only shown this one time; if you refresh your page and come back, it will only show as a masked value.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744659278645/b48bf5b8-b7b4-4041-bd12-185608a9d938.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744659426028/d70e6216-ae41-4193-98bf-7f6fe4d06079.png" alt class="image--center mx-auto" /></p>
<p>With your web App registered, you're ready to add the scopes that your API's code can use to provide granular permission to consumers of your API.</p>
<p>Task 5 - Add a scope</p>
<p>The code in a client application requests permission to perform operations defined by your web API by passing an access token along with its requests to the protected resource (the web API). Your web API then performs the requested operation only if the access token it receives contains the scopes (also known as application permissions) required for the operation.</p>
<p>First, follow these steps to create an example scope named <a target="_blank" href="http://Employees.Read">Employees.Read</a>.All:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744661750967/046a4adf-d425-4973-a882-b4c659a19ebc.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li><p><strong>Applications &gt; App registrations</strong> &gt; Select your API’s app registration.</p>
<p> Select <strong>Expose an API</strong> &gt; Click <strong>+ Add a scope</strong>\&gt; Set the <strong>Application ID URI</strong> to: api://DemoAppAPI &gt; Click <strong>Save and continue</strong> &gt; In <strong>Add a scope</strong>, fill in the scope details (use “Value” column info in the table below) &gt; Set <strong>State</strong> to <strong>Enabled</strong> &gt; Click <strong>Add scope</strong>.</p>
</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Field</td><td>Description</td><td>Value</td></tr>
</thead>
<tbody>
<tr>
<td>Scope name</td><td>The name of your scope. A common scope naming convention is resource.operation.constraint.</td><td><a target="_blank" href="http://Employees.Read">Employees.Read</a>.All</td></tr>
<tr>
<td>Who can consent</td><td>Whether this scope can be consented to by users or if admin consent is required. Select Admins only for higher-privileged permissions.</td><td>Admins and users</td></tr>
<tr>
<td>Admin consent display name</td><td>A short description of the scope's purpose that only admins will see.</td><td>Read-only access to employee records</td></tr>
<tr>
<td>Admin consent description</td><td>A more detailed description of the permission granted by the scope that only admins will see.</td><td>Allow the application to have read-only access to all employee data.</td></tr>
<tr>
<td>User consent display name</td><td>A short description of the scope's purpose. Shown to users only if you set Who can consent to Admins and users.</td><td>Read-only access to your employee records</td></tr>
<tr>
<td>User consent description</td><td>A more detailed description of the permission granted by the scope. Shown to users only if you set Who can consent to Admins and users.</td><td>Allow the application to have read-only access to your employee data.</td></tr>
</tbody>
</table>
</div><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744663598172/6c9c3dcd-0a9f-459c-ab73-b9116322d65a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744665112909/f8ad655d-f0fe-41a1-ad7c-5219059ecd9c.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Note - The App ID URI acts as the prefix for the scopes you'll reference in your API's code, and it must be globally unique. You can use the default value provided, which is in the form api://&lt;application-client-id&gt;, or specify a more readable URI like <a target="_blank" href="https://contoso.com/api"><code>https://contoso.com/api</code></a>.</p>
</blockquote>
<p>(Optional) To suppress prompting for consent by users of your app to the scopes you've defined, you can <em>pre-authorize</em> the client application to access your web API. Pre-authorize <em>only</em> those client applications you trust since your users won't have the opportunity to decline consent.</p>
<p>Under <strong>Exposed an API</strong> &gt; <strong>Authorized client applications</strong> \&gt; click <strong>Add a client application</strong>\&gt; Enter the <strong>Application (client) ID</strong> of the trusted client app (you can dind app id on overview tab) &gt; Select the authorized scopes checkmark &gt; Click <strong>Add application</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744665564632/7cab04b3-2bfa-4d8f-bbdf-c076df111e7e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744665609297/2e688e0b-1d07-4a16-87d3-4347c9336c08.png" alt class="image--center mx-auto" /></p>
<p>If you followed this optional step, the client app is now a pre-authorized client app (PCA), and users won't be prompted for their consent when signing into it.</p>
<p>Task 6 - Add a scope requiring admin consent</p>
<p>Next, add another example scope named Employees.Write.All that only admins can consent to. Scopes that require admin consent are typically used for providing access to higher-privileged operations, often by client applications that run as backend services or daemons that don't sign in a user interactively.</p>
<ol start="6">
<li>Follow the above steps to add a new scope named Employee.Write.All, enable it, and click <strong>Add scope</strong> to save.</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Field</td><td>Example value</td></tr>
</thead>
<tbody>
<tr>
<td>Scope name</td><td>Employees.Write.All</td></tr>
<tr>
<td>Who can consent</td><td>Admins only</td></tr>
<tr>
<td>Admin consent display name</td><td>Write access to employee records</td></tr>
<tr>
<td>Admin consent description</td><td>Allow the application to have write access to all employee data.</td></tr>
<tr>
<td>User consent display name</td><td>None (leave empty)</td></tr>
<tr>
<td>User consent description</td><td>None (leave empty)</td></tr>
</tbody>
</table>
</div><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744669299872/27af1370-7728-40a8-bf90-0c0ec6c3c5f6.png" alt class="image--center mx-auto" /></p>
<p>As shown in the image, a scope's full string is the concatenation of your web API's <strong>Application ID URI</strong> and the scope's <strong>Scope name</strong>.</p>
<p><strong>Note</strong>: For example, if your web API's application ID URI is <a target="_blank" href="https://contoso.com/api"><code>https://contoso.com/api</code></a> and the scope name is <a target="_blank" href="http://Employees.Read">Employees.Read</a>.All, the full scope is: <a target="_blank" href="https://contoso.com/api/Employees.Read.All"><code>https://contoso.com/api/Employees.Read.All</code></a></p>
<p><strong>Note</strong>: Next, you will configure a client app's registration with access to your web API and the scopes you defined by following the steps above. Once a client app registration is granted permission to access your web API, the client can be issued an OAuth 2.0 access token by the Microsoft identity platform. When the client calls the web API, it presents an access token whose scope (scp) claim is set to the permissions you've specified in the client's app registration. You can expose additional scopes later as necessary. Consider that your web API can expose multiple scopes associated with several operations. Your resource can control access to the web API at runtime by evaluating the scope (scp) claim(s) in the OAuth 2.0 access token it receives.</p>
<h3 id="heading-exercise-2-manage-app-registration-with-a-custom-role">Exercise 2 - Manage app registration with a custom role</h3>
<p>Task 1 - Create a new custom role to grant access to manage app registrations</p>
<ol>
<li><strong>Entra ID</strong> &gt; <strong>Identity &gt; Roles and admins</strong> &gt; <strong>+ New custom role</strong> &gt; <strong>Basics</strong> tab &gt; enter the role name: My custom app role &gt; Click <strong>Next</strong> &gt; <strong>Permissions</strong> tab &gt; search for credentials &gt; Select <strong>Manage permissions</strong> from the results &gt; Click <strong>Next</strong> twice &gt; Review the settings and click <strong>Create</strong>.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744673603869/c14aef80-d54b-44d6-a9b1-febda44e7009.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p><a target="_blank" href="http://microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials">microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials</a> - Manage password single sign-on credentials or service principals. <a target="_blank" href="http://microsoft.directory/servicePrincipals/synchronizationCredentials/manage">microsoft.directory/servicePrincipals/synchronizationCredentials/manage</a> - Manage application provisioning secrets and credentials.</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744673739984/3f967045-485f-493b-88d5-3de2886ebab5.png" alt class="image--center mx-auto" /></p>
<p><strong>Why pick those two</strong> - For application provisionsing these two items are the bare minimum permissions needed to enable and enforce single sign-on for the application or service principal being created; and be able to assign the enterise application to a set of users or groups. Other permissions could also be granted. You can get a full list of available permissions at <a target="_blank" href="https://docs.microsoft.com/azure/active-directory/roles/custom-enterprise-app-permissions"><code>https://docs.microsoft.com/azure/active-directory/roles/custom-enterprise-app-permissions</code></a>.</p>
<hr />
<h1 id="heading-lab-20-implement-access-management-for-apps">Lab 20 - Implement access management for apps</h1>
<h3 id="heading-login-type-microsoft-365-admin-2">Login type = Microsoft 365 admin</h3>
<p>Your organization requires that only specific users or groups have access to enterprise applications. You must assign a user to a specific application.</p>
<h4 id="heading-task-1-add-an-app-to-your-microsoft-entra-tenant">Task 1 - Add an app to your Microsoft Entra tenant</h4>
<ol>
<li><p><strong>Identity &gt; Applications &gt; Enterprise applications</strong> &gt; <strong>+ New application</strong> &gt; <strong>Browse Microsoft Entra Gallery</strong> page &gt; search for GitHub &gt; Select <strong>GitHub Enterprise Cloud – Enterprise Account</strong> from the results &gt; Review the settings and click <strong>Create</strong>.</p>
<p> (Once created, you’ll be redirected to the <strong>GitHub Enterprise Cloud – Enterprise Account</strong> page.)</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744674658030/1eadf26c-ed12-40ae-b993-9ff7204adb32.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-task-2-assign-users-to-an-app">Task 2 - Assign users to an app</h4>
<ol start="2">
<li><p>On the <strong>GitHub Enterprise Cloud – Enterprise Account</strong> page, go to <strong>Overview &gt; Getting Started &gt; 1. Assign users and groups(</strong> <em>Or</em>, go to <strong>Manage &gt; Users and groups</strong> in the left menu.) &gt; Click <strong>+ Add user/group</strong>.</p>
<p> In the <strong>Add Assignment</strong> page, click <strong>None selected</strong> under <strong>Users and groups</strong>.</p>
<p> Select <strong>Adele Vance</strong> and your <strong>MOD administrator account</strong> &gt; Click <strong>Select</strong> &gt;Select Assign</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744674743736/211f3336-d4d0-4444-afbd-59e2eba6364d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744674846648/fa6d6b3c-a5c4-4e53-a6ab-968bc950c712.png" alt class="image--center mx-auto" /></p>
<p><img src="https://github.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/raw/master/Instructions/Labs/media/lp3-mod1-add-app-assignment.png" alt="Screen image displaying adding a user account assignment to an app with the Select button highlighted " /></p>
]]></content:encoded></item><item><title><![CDATA[Understanding Roles in Azure, Microsoft Entra, and Microsoft 365]]></title><description><![CDATA[When managing access and permissions in the Microsoft cloud ecosystem, it’s important to understand the different types of roles available across Azure, Microsoft Entra (formerly Azure Active Directory), and Microsoft 365. While they might seem simil...]]></description><link>https://shirincloudlab.com/understanding-roles-in-azure-microsoft-entra-and-microsoft-365</link><guid isPermaLink="true">https://shirincloudlab.com/understanding-roles-in-azure-microsoft-entra-and-microsoft-365</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Wed, 02 Apr 2025 23:49:15 GMT</pubDate><content:encoded><![CDATA[<p>When managing access and permissions in the Microsoft cloud ecosystem, it’s important to understand the <strong>different types of roles</strong> available across Azure, Microsoft Entra (formerly Azure Active Directory), and Microsoft 365. While they might seem similar at first glance, each serves a unique purpose within its own scope.</p>
<h2 id="heading-azure-roles-rbac">Azure Roles (RBAC)</h2>
<p>Azure uses <strong>Role-Based Access Control (RBAC)</strong> to manage access to Azure resources. These roles determine <strong>what actions users can take on Azure services</strong>.</p>
<h3 id="heading-common-built-in-azure-roles">Common Built-in Azure Roles:</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Role Name</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Owner</strong></td><td>Full access to all resources, including the ability to delegate access to others.</td></tr>
<tr>
<td><strong>Contributor</strong></td><td>Can create and manage all types of Azure resources but cannot grant access to others.</td></tr>
<tr>
<td><strong>Reader</strong></td><td>Can view existing Azure resources without making changes.</td></tr>
<tr>
<td><strong>User Access Administrator</strong></td><td>Can manage user access to Azure resources.</td></tr>
<tr>
<td><strong>VM Administrator Login</strong></td><td>Login as administrator to VMs.</td></tr>
<tr>
<td><strong>Virtual Machine User Login</strong></td><td>Login as regular user to VMs.</td></tr>
<tr>
<td><strong>Privileged Role Admin</strong></td><td>(Privileged Role Administrator) Manage role assignments in Azure AD.</td></tr>
<tr>
<td><strong>DevTest Labs User</strong></td><td>Manage DevTest Lab environments</td></tr>
<tr>
<td><strong>Key Vault Secrets Officer</strong></td><td>Manage secrets only.</td></tr>
</tbody>
</table>
</div><h3 id="heading-custom-roles"><strong>Custom Roles</strong></h3>
<p>You can also <strong>create custom roles</strong> tailored to specific needs using JSON to define:</p>
<ul>
<li><p>Allowed actions</p>
</li>
<li><p>Denied actions</p>
</li>
<li><p>Assignable scopes</p>
</li>
</ul>
<hr />
<h2 id="heading-microsoft-entra-roles-azure-ad-roles">Microsoft Entra Roles (Azure AD Roles)</h2>
<p><strong>Microsoft Entra</strong> (formerly Azure Active Directory) uses its own set of roles to manage <strong>identity-related tasks</strong> such as users, groups, security policies, and authentication settings.</p>
<h3 id="heading-common-entra-azure-ad-roles">Common Entra (Azure AD) Roles:</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Role Name</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Global Administrator</strong></td><td>Full control over all aspects of Microsoft Entra ID and Microsoft 365 services.</td></tr>
<tr>
<td><strong>User Administrator</strong></td><td>Manage users, groups, and helpdesk tasks (e.g., password resets).</td></tr>
<tr>
<td><strong>Groups Administrator</strong></td><td>Manage group settings and memberships.</td></tr>
<tr>
<td><strong>Helpdesk Administrator</strong></td><td>Reset passwords and monitor service health.</td></tr>
<tr>
<td><strong>Billing Administrator</strong></td><td>Manage subscriptions, support tickets, and billing.</td></tr>
<tr>
<td><strong>License Administrator</strong></td><td>Assign and remove licenses from users.</td></tr>
<tr>
<td><strong>Application Administrator</strong></td><td>Manage enterprise applications, including configuring SSO.</td></tr>
<tr>
<td><strong>Cloud Application Administrator</strong></td><td>Similar to Application Admin, but limited to non-gallery apps.</td></tr>
<tr>
<td><strong>Authentication Administrator</strong></td><td>Manage authentication methods, including password policies and MFA.</td></tr>
<tr>
<td><strong>Privileged Role Administrator</strong></td><td>Manage role assignments (elevated access, including PIM).</td></tr>
<tr>
<td><strong>Security Administrator</strong></td><td>View and manage all security settings.</td></tr>
<tr>
<td><strong>Security Reader</strong></td><td>View security reports and settings without making changes.</td></tr>
<tr>
<td><strong>Compliance Administrator</strong></td><td>Manage compliance data and configurations (e.g., M365 compliance center).</td></tr>
<tr>
<td><strong>Conditional Access Administrator</strong></td><td>Create and manage Conditional Access policies.</td></tr>
<tr>
<td><strong>Intune Administrator</strong></td><td>Manage Microsoft Intune and device configurations.</td></tr>
<tr>
<td><strong>Directory Readers</strong></td><td>Read basic directory info (used for apps or services needing read access).</td></tr>
<tr>
<td><strong>Directory Writers</strong></td><td>Add or update directory data (more permissions than Readers).</td></tr>
<tr>
<td><strong>Exchange Administrator</strong></td><td>Manage Exchange Online settings and mailboxes.</td></tr>
<tr>
<td><strong>Teams Administrator</strong></td><td>Manage Microsoft Teams settings.</td></tr>
<tr>
<td><strong>SharePoint Administrator</strong></td><td>Manage SharePoint sites and settings.</td></tr>
<tr>
<td><strong>Power Platform Administrator</strong></td><td>Manage Power Apps, Power Automate, and related settings.</td></tr>
<tr>
<td><strong>Reports Reader</strong></td><td>View usage reports and analytics across Microsoft 365.</td></tr>
</tbody>
</table>
</div><hr />
<h3 id="heading-privileged-identity-management-pim-integration">🔐 <strong>Privileged Identity Management (PIM) Integration</strong></h3>
<p>Many of these roles can be made <strong>eligible</strong> through PIM, so they are <strong>only activated when needed</strong>, reducing security risks.</p>
<blockquote>
<p>These roles are part of <strong>Microsoft Entra ID</strong>, which is the identity and access management service in Azure and are assigned at the <strong>directory/tenant level</strong> and are separate from Azure RBAC roles and are used to <strong>manage identity-related tasks</strong>, like users, groups, enterprise apps, security settings, and more.</p>
</blockquote>
<hr />
<h2 id="heading-microsoft-365-roles">Microsoft 365 Roles</h2>
<p>Microsoft 365 has its own set of roles designed to manage <strong>specific M365 services</strong> like Exchange Online, SharePoint, and Teams.</p>
<h2 id="heading-core-microsoft-365-admin-roles"><strong>Core Microsoft 365 Admin Roles</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Role</strong></td><td><strong>Description</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Global Administrator</strong></td><td>Full access to all Microsoft 365 services and settings. Can assign any admin role.</td></tr>
<tr>
<td><strong>User Administrator</strong></td><td>Manage users, groups, and licenses. Reset passwords.</td></tr>
<tr>
<td><strong>Billing Administrator</strong></td><td>Manage subscriptions, billing, invoices, and support tickets.</td></tr>
<tr>
<td><strong>Password Administrator</strong></td><td>Reset passwords for most users (except admins like Global Admins).</td></tr>
<tr>
<td><strong>License Administrator</strong></td><td>Assign and remove product licenses from users.</td></tr>
<tr>
<td><strong>Service Support Administrator</strong></td><td>Open support requests and view service health dashboard.</td></tr>
<tr>
<td><strong>Global Reader</strong></td><td>Read-only view across all Microsoft 365 admin centers. Great for auditors or managers.</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-product-specific-admin-roles"><strong>Product-Specific Admin Roles</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Role</strong></td><td><strong>Manages</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Exchange Administrator</strong></td><td>Mailboxes, mail flow, and Exchange Online settings.</td></tr>
<tr>
<td><strong>Teams Administrator</strong></td><td>Teams policies, meetings, messaging, and organization-wide settings.</td></tr>
<tr>
<td><strong>SharePoint Administrator</strong></td><td>Site collections, storage, and global SharePoint settings.</td></tr>
<tr>
<td><strong>Skype for Business Administrator</strong></td><td>Legacy Skype for Business settings.</td></tr>
<tr>
<td><strong>Yammer Administrator</strong></td><td>Yammer configuration for Enterprise Networks.</td></tr>
<tr>
<td><strong>Intune Administrator</strong></td><td>Devices, compliance policies, and mobile app management (via Microsoft Intune).</td></tr>
<tr>
<td><strong>Dynamics 365 Administrator</strong></td><td>Instances, security roles, and Dynamics apps.</td></tr>
<tr>
<td><strong>Power Platform Administrator</strong></td><td>Power Apps, Power Automate, DLP policies, and environment settings.</td></tr>
<tr>
<td><strong>Power BI Administrator</strong></td><td>Tenant-level settings for Power BI.</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-security-amp-compliance-roles"><strong>Security &amp; Compliance Roles</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Role</strong></td><td><strong>Manages</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Security Administrator</strong></td><td>Microsoft 365 Defender, security policies, alerts, and reports.</td></tr>
<tr>
<td><strong>Security Reader</strong></td><td>View-only access to security features and reports.</td></tr>
<tr>
<td><strong>Compliance Administrator</strong></td><td>Compliance portal, retention policies, labels, audit, etc.</td></tr>
<tr>
<td><strong>eDiscovery Manager</strong></td><td>Content search and eDiscovery cases.</td></tr>
<tr>
<td><strong>Information Protection Administrator</strong></td><td>Sensitivity labels, encryption, and data loss prevention.</td></tr>
<tr>
<td><strong>Privileged Role Administrator</strong></td><td>Assign roles, manage PIM and admin access settings.</td></tr>
<tr>
<td><strong>Audit Logs Reader</strong></td><td>Access to Microsoft 365 audit logs.</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-support-amp-reporting-roles"><strong>Support &amp; Reporting Roles</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Role</strong></td><td><strong>Manages</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Reports Reader</strong></td><td>View usage reports and analytics across Microsoft 365 services.</td></tr>
<tr>
<td><strong>Message Center Reader</strong></td><td>Read-only access to Microsoft 365 Message Center for updates and alerts.</td></tr>
<tr>
<td><strong>Service Health Reader</strong></td><td>View service health reports and incidents across the organization.</td></tr>
</tbody>
</table>
</div><hr />
<h3 id="heading-notes">🧠 Notes:</h3>
<ul>
<li><p>These roles are <strong>Entra ID (Azure AD) roles</strong> but are especially used for Microsoft 365 service management.</p>
</li>
<li><p>They can be assigned in both the <strong>Microsoft 365 admin center</strong> and the <strong>Entra admin center</strong>.</p>
</li>
</ul>
<blockquote>
<p>These roles are focused on <strong>M365 apps and services</strong>, and are often used alongside Entra roles.</p>
</blockquote>
<hr />
<h2 id="heading-summary-role-systems-at-a-glance">Summary: Role Systems at a Glance</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Platform</td><td>Role Type</td><td>Scope</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Azure</strong></td><td>RBAC Roles (Owner, Reader, etc.)</td><td>Azure resources like VMs, databases, storage</td></tr>
<tr>
<td><strong>Microsoft Entra</strong></td><td>Directory Roles (Global Admin, User Admin, etc.)</td><td>Identity and access management</td></tr>
<tr>
<td><strong>Microsoft 365</strong></td><td>Service-Specific Roles (Exchange Admin, Teams Admin, etc.)</td><td>Microsoft 365 service configuration and management</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-does-a-global-administrator-have-access-to-azure-resources"><strong>Does a Global Administrator Have Access to Azure Resources?</strong></h2>
<p>✅ <strong>Yes — to Microsoft Entra (formerly Azure AD) and Microsoft 365</strong></p>
<ul>
<li><p>Full control over:</p>
<ul>
<li><p>User and group management</p>
</li>
<li><p>Role assignments</p>
</li>
<li><p>Security configurations (e.g., MFA, Conditional Access)</p>
</li>
<li><p><strong>Microsoft 365 tenant settings</strong> (e.g., organization-wide policies, service configurations)</p>
</li>
</ul>
</li>
</ul>
<p>• ❌ <strong>No — not automatically to Azure subscriptions or resources</strong></p>
<p>• <strong>Global Administrators do not have access to Azure resources</strong> like virtual machines, storage accounts, or databases</p>
<p>• To manage these, they must be <strong>explicitly assigned an Azure RBAC role</strong> (e.g., Owner, Contributor, Reader)</p>
<hr />
<h2 id="heading-how-can-a-global-administrator-gain-access-to-azure-resources">How Can a Global Administrator Gain Access to Azure Resources?</h2>
<p>To manage Azure resources, the Global Administrator must:</p>
<ul>
<li><p>Be assigned an Azure RBAC role such as <strong>Owner</strong>, <strong>Contributor</strong>, or <strong>Reader</strong> at the <strong>subscription</strong>, <strong>resource group</strong>, or <strong>resource</strong> level</p>
</li>
<li><p>Use <strong>Privileged Identity Management (PIM)</strong> to elevate their access (if available)</p>
</li>
</ul>
<hr />
<h2 id="heading-using-privileged-identity-management-pim">Using Privileged Identity Management (PIM)</h2>
<p>If your organization uses <strong>Microsoft Entra PIM</strong>, a Global Administrator can activate temporary access to Azure resources by:</p>
<ol>
<li><p>Going to the Microsoft Entra Admin Center</p>
</li>
<li><p>Navigating to <strong>Roles and Administrators</strong></p>
</li>
<li><p>Selecting <strong>Global Administrator</strong></p>
</li>
<li><p>Activating a role like <strong>Subscription Owner</strong> or <strong>Contributor</strong> via PIM</p>
</li>
</ol>
<p>This is useful for just-in-time privileged access without assigning permanent roles.</p>
<hr />
<h2 id="heading-summary">Summary</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Role</td><td>Access to Azure Resources (RBAC)</td><td>Access to Entra (Azure AD)</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Global Administrator</strong></td><td>No (needs explicit assignment)</td><td>Yes</td></tr>
<tr>
<td><strong>Azure RBAC Roles (e.g., Owner)</strong></td><td>Yes</td><td>No (unless also assigned Entra roles)</td></tr>
</tbody>
</table>
</div><div class="hn-table">
<table>
<thead>
<tr>
<td>System</td><td>Uses Roles?</td><td>Technically RBAC?</td><td>Branded as “RBAC”?</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Azure</strong></td><td>✅</td><td>✅</td><td>✅</td></tr>
<tr>
<td><strong>Entra (Azure AD)</strong></td><td>✅</td><td>✅</td><td>❌ (branded as Directory Roles)</td></tr>
<tr>
<td><strong>Microsoft 365</strong></td><td>✅</td><td>✅</td><td>❌ (branded as Admin Roles)</td></tr>
</tbody>
</table>
</div>]]></content:encoded></item><item><title><![CDATA[SC-300 - Lab 11 - 15]]></title><description><![CDATA[visit microsoft learn github for complete instructions
Lab 11 - Assign Azure resource roles in Privileged Identity Management
Login type = Azure Resource login
Microsoft Entra Privileged Identity Management (PIM) can manage the built-in Azure resourc...]]></description><link>https://shirincloudlab.com/sc-300-lab-11-15</link><guid isPermaLink="true">https://shirincloudlab.com/sc-300-lab-11-15</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Wed, 02 Apr 2025 21:42:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1743810987261/ce2a1f6f-348e-490f-b16e-ad0403d903cb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>visit <a target="_blank" href="https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ManagedAppMenuBlade/~/Users/appId/8a4ff89a-5105-446c-8a2b-e24799cc34cc/objectId/47dca9c4-5216-4d51-8577-9c49c1e32703">microsoft learn github</a> for complete instructions</p>
<h1 id="heading-lab-11-assign-azure-resource-roles-in-privileged-identity-management">Lab 11 - Assign Azure resource roles in Privileged Identity Management</h1>
<h3 id="heading-login-type-azure-resource-login">Login type = Azure Resource login</h3>
<p>Microsoft Entra Privileged Identity Management (PIM) can manage the built-in Azure resource roles, as well as custom roles, including (but not limited to):</p>
<ul>
<li><p>Owner</p>
</li>
<li><p>User Access Administrator</p>
</li>
<li><p>Contributor</p>
</li>
<li><p>Security Admin</p>
</li>
<li><p>Security Manager</p>
</li>
</ul>
<p>You need to make a user eligible for an Azure resource role.</p>
<ol>
<li>Sign in to entra and search and select PIM and on left pane select Azure Resources and after selecting your subscription click on manage resources and click on overview</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743635551179/af03bf76-9023-47fd-b243-99c732844066.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743636116428/511f51ad-d183-4faf-960c-140301d7d948.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743636194355/eb6deb6c-7434-4039-a6fa-4f64b74d784e.png" alt class="image--center mx-auto" /></p>
<ol>
<li>Click on assignments on the left and try to assign a role to a user and on assignement page on setting under assignment type select Eligible and specify the start and end time</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743636251836/ae4924fe-99f2-48d6-b915-e4319eb13c24.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743636624222/24359124-b2c8-4ffc-b5d2-fa23eae49c91.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743636661557/af98bdb3-e071-457b-b71f-f8b5b2c82ae6.png" alt class="image--center mx-auto" /></p>
<p>or you can select Active:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743636688449/48c33ca8-628d-43df-98dd-0b90259b2c2c.png" alt class="image--center mx-auto" /></p>
<p><strong>Assignment types:</strong></p>
<ul>
<li><p><strong>Eligible</strong> assignments require the member of the role to perform an action to use the role. Actions might inclTde performing a MFA check, providing a business justification, or requesting approval from designated approvers.</p>
</li>
<li><p><strong>Active</strong> assignments do not require the member to perform any action to use the role. Members assigned as active have the privileges always assigned to the role.</p>
</li>
</ul>
<hr />
<h1 id="heading-lab-12-manage-microsoft-entra-smart-lockout-values">Lab 12 - Manage Microsoft Entra smart lockout values</h1>
<p>You’re learning to <strong>customize Smart Lockout settings</strong> in Microsoft Entra ID to enhance <strong>password protection</strong> and prevent unauthorized access by blocking repeated failed sign-in attempts (e.g., brute-force attacks).</p>
<p><strong>What Smart Lockout Does</strong></p>
<p>If a user types the wrong password too many times:</p>
<ul>
<li><p>Their account will be <strong>temporarily locked</strong> (for the duration you set).</p>
</li>
<li><p>The lockout applies to both <strong>real</strong> and <strong>malicious</strong> failed attempts (smart logic detects this).</p>
</li>
<li><p>Users will see:</p>
</li>
</ul>
<p><em>“Your account is temporarily locked to prevent unauthorized use…”</em></p>
<p><img src="https://github.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/raw/master/Instructions/Labs/media/lp2-mod3-browse-to-password-protection.png" alt="Screen image displaying the Authentication methods page and the highlighted selections to browse to Password authentication" /></p>
<p><strong>Sign in to Microsoft Entra</strong><br />Go to <a target="_blank" href="https://entra.microsoft.com">https://entra.microsoft.com</a> using a Global Admin account.</p>
<p><strong>Navigate to:</strong><br /><strong>Identity</strong> → <strong>Protection</strong> → <strong>Authentication methods</strong> → <strong>Password protection</strong></p>
<p><strong>Configure settings:</strong></p>
<ul>
<li><p>Lockout duration: <strong>120 seconds</strong></p>
</li>
<li><p>Mode: <strong>Enforced</strong></p>
</li>
<li><p><strong>Save</strong> changes</p>
</li>
</ul>
<hr />
<h1 id="heading-lab-13-implement-and-test-a-conditional-access-policy">Lab 13 - Implement and test a conditional access policy</h1>
<h3 id="heading-exercise-1-set-a-conditional-access-policy-to-block-debrab-from-accessing-sway">Exercise 1 - Set a conditional access policy to block DebraB from accessing Sway</h3>
<ol>
<li>Login on office.com with Debra’s account and confirm DebraB has access to Sway</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744045808792/6bc43db0-7793-4e67-b50c-97e28aefdea4.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744051457584/ad0b7634-92bc-483f-99c0-cf22e5be506c.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>Create a conditional access policy. Entra ID&gt; Identity &gt; Protection&gt; Conditional Access &gt; Overview&gt; Create new policy</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744048321561/1d4832c9-f6a2-4f10-b00c-0c55b234b7ff.png" alt class="image--center mx-auto" /></p>
<p>Now if she logs in she will get this error:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744048404649/35ea2705-4123-4b4e-a511-c37293cc61e1.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Under enable policy select off and try again and you can use the sway after logging off and back on again.</li>
</ol>
<h3 id="heading-exercise-2-test-conditional-access-policies-with-what-if">Exercise 2 - Test conditional access policies with "What if"</h3>
<ol>
<li>Test conditional access with what if under Entra ID&gt; Identity &gt; Protection&gt; Conditional Access &gt; policies &gt; what if &gt; under workload identity select debra &gt; under cloud apps select sway &gt; and select what if</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744052222149/b799113d-373e-434b-8fdb-33d4d19537f1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744052246962/87910842-3685-4b3e-ad4f-0235c172b233.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-exercise-3-configure-sign-in-frequency-controls-using-a-conditional-access-policy">Exercise 3 - Configure sign in frequency controls using a conditional access policy</h3>
<ol>
<li><p>Login with global administrator credential and go to Entra ID&gt; Identity &gt; Protection&gt; Conditional Access &gt; Overview&gt; Create new policy</p>
</li>
<li><p>choose a name “sign in frequency“ and then add o365 in target resources then do these settings on session:</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744056385790/164c92b1-f6bd-47fc-a98b-175df72e2ccd.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p><strong>Note:</strong> <em>Report-only mode</em> is a new Conditional Access policy state that enables administrators to assess the impact of policies before enforcing them in their environment. With this feature:</p>
<ul>
<li><p>Conditional Access policies can be configured in report-only mode.</p>
</li>
<li><p>During user sign-in, policies in report-only mode are evaluated but not enforced.</p>
</li>
<li><p>Evaluation results are recorded in the <strong>Conditional Access</strong> and <strong>Report-only</strong> tabs within the sign-in log details.</p>
</li>
<li><p>Customers with an Azure Monitor subscription can further analyze policy impact using the <strong>Conditional Access insights</strong> workbook.</p>
</li>
</ul>
</blockquote>
<hr />
<h1 id="heading-lab-14-enable-sign-in-and-user-risk-policies">Lab 14 - Enable sign in and user risk policies</h1>
<h3 id="heading-login-type-microsoft-365-admin">Login type = Microsoft 365 admin</h3>
<blockquote>
<p>To enhance security, it’s recommended to enable and configure your Microsoft Entra organization’s <strong>sign-in risk</strong> and <strong>user risk</strong> policies.</p>
</blockquote>
<ol>
<li>To enable <strong>user risk policy</strong> go to Entra ID&gt; Identity &gt; Protection &gt; Identity Protection &gt; User risk policy &gt; Assignments &gt; Select all user&gt; Then select high in user risk tab &gt; Under control select block access &gt; and leave it as enable:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744061165566/e37adbfe-70ff-46a1-9d10-1d3f76d415e5.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>To enable <strong>sign-in risk policy</strong> go to Entra ID&gt; Identity &gt; Protection &gt; Identity Protection &gt; User risk policy &gt; Assignments &gt; Select all user&gt; Then select high in user risk tab &gt; Under control select require MFA &gt; and leave it as enable and then select save</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744061305134/e2fab8e5-881f-46d2-bff5-ac4323b4e371.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-lab-15-configure-an-mfa-registration-policy">Lab 15 - Configure an MFA registration policy</h1>
<h3 id="heading-login-type-microsoft-365-admin-1">Login type = Microsoft 365 admin</h3>
<blockquote>
<p>To enable users to respond to MFA prompts, they must first register for Microsoft Entra multifactor authentication. Ensure that your organization’s MFA registration policy is configured and assigned to all users.</p>
</blockquote>
<ol>
<li>To setup MFA registration policy, sigin in to entra.microsoft.com as a Global Administrator &gt; Identity &gt; Protection &gt; Identity Protection&gt; MFA registration policy.</li>
</ol>
<blockquote>
<p>You can select all users to change it to individuals and groups or we can exclude users form the policy but you can see that we cannot change require Azure AD MFA registration.</p>
</blockquote>
<p><img src="https://github.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/raw/master/Instructions/Labs/media/lp2-mod4-browse-to-mfa-registration-policy.png" alt="Screen image displaying the MFA registration policy page with browsing path highlighted" /></p>
<blockquote>
<p>Require Azure AD MFA registration checkbox is shown to clarify the policy’s purpose, maintain UI consistency, and support auditing even though it can’t be changed.</p>
</blockquote>
<ol start="2">
<li>To configure Microsoft Entra Identity Protection policy for MFA registration click on enforce policy on the toggle on the above picture. (This requires MFA registration at next login.)</li>
</ol>
<blockquote>
<p><strong>Note</strong>: Microsoft Entra Identity Protection requires Microsoft Entra ID Premium P2 to be activated.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[SC-300 Lab Tips:]]></title><description><![CDATA[Tenant Name vs Tenant’s unique name:

Tenant Name (a.k.a. Directory Name)

This is the display name you assign to your Azure/Entra tenant.

You can set or change this to something human-readable like "Marketing" or "MyCompany Directory".

It’s shown ...]]></description><link>https://shirincloudlab.com/sc-300-lab-tips</link><guid isPermaLink="true">https://shirincloudlab.com/sc-300-lab-tips</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Fri, 28 Mar 2025 18:47:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1743811146310/a73bf11d-cd72-4535-b3f5-725dc8ba3b1b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Tenant Name vs Tenant’s unique name:</strong></p>
<ol>
<li><p><strong>Tenant Name (a.k.a. Directory Name)</strong></p>
<ul>
<li><p>This is the <strong>display name</strong> you assign to your Azure/Entra tenant.</p>
</li>
<li><p>You can set or change this to something human-readable like "Marketing" or "MyCompany Directory".</p>
</li>
<li><p>It’s shown in places like the Azure portal and Microsoft Entra admin center.</p>
</li>
<li><p>e.g. <strong>Tenant Name</strong>: Bluewave Innovations</p>
</li>
</ul>
</li>
</ol>
<ol start="2">
<li><p><strong>Tenant’s Unique Name (bluewave123)</strong></p>
<ul>
<li><p>This is the <strong>automatically generated subdomain prefix</strong> used for your default .<a target="_blank" href="http://onmicrosoft.com">onmicrosoft.com</a> domain.</p>
</li>
<li><p>It’s globally unique and tied to your tenant forever.</p>
</li>
<li><p>It’s often used behind the scenes (e.g., when no custom domain is set, during app registrations, etc.)</p>
</li>
<li><p>You <strong>can’t change</strong> this once the tenant is created.</p>
</li>
</ul>
</li>
</ol>
<p>    In your case: <a target="_blank" href="http://bluewave123.onmicrosoft.com">bluewave123.onmicrosoft.com</a></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Term</strong></td><td><strong>Example</strong></td><td><strong>Editable?</strong></td><td><strong>Purpose/Use</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Tenant Name</strong></td><td>Bluewave Innovations</td><td>✅ Yes</td><td>Display name in UI, for organizing/admin use</td></tr>
<tr>
<td><strong>Unique Tenant Name</strong></td><td>bluewave123</td><td>❌ No</td><td>Part of your default domain, system-assigned</td></tr>
<tr>
<td><strong>Tenant ID</strong></td><td>a12b3456-...</td><td>❌ No</td><td>Globally unique identifier (GUID)</td></tr>
</tbody>
</table>
</div><div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">You <em>can</em> use <a target="_self" href="http://yourdomain.com">yourdomain.com</a> as the tenant name — it’s allowed — but for a cleaner and more polished look, using just the organization name is more common.</div>
</div>

<hr />
]]></content:encoded></item><item><title><![CDATA[AZ104 Lab Tips:]]></title><description><![CDATA[Why we need storage account when we run azure PowerShell/Bash for the first time?

When you launch Azure Cloud Shell, it needs a place to:

Persist your files


Any scripts, profile customizations, or downloaded files are stored in your Cloud Shell h...]]></description><link>https://shirincloudlab.com/az104-lab-tips</link><guid isPermaLink="true">https://shirincloudlab.com/az104-lab-tips</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Fri, 28 Mar 2025 18:21:17 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-why-we-need-storage-account-when-we-run-azure-powershellbash-for-the-first-time">Why we need storage account when we run azure PowerShell/Bash for the first time?</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741201701379/b8d32770-454d-4cd2-8340-4b429850d275.png" alt class="image--center mx-auto" /></p>
<p>When you launch <strong>Azure Cloud Shell</strong>, it needs a place to:</p>
<ol>
<li><strong>Persist your files</strong></li>
</ol>
<ul>
<li><p>Any scripts, profile customizations, or downloaded files are stored in your <strong>Cloud Shell home directory</strong>.</p>
</li>
<li><p>This directory is stored in <strong>Azure Files</strong>, which requires a <strong>Storage Account</strong>.</p>
</li>
</ul>
<ol start="2">
<li><strong>Maintain your environment across sessions</strong></li>
</ol>
<ul>
<li><p>Without storage, everything would reset every time you open Cloud Shell.</p>
</li>
<li><p>The storage account ensures your files and shell environment persist.</p>
</li>
</ul>
<ol start="3">
<li><strong>Enable features like:</strong></li>
</ol>
<ul>
<li><p>Running long scripts</p>
</li>
<li><p>Saving logs</p>
</li>
<li><p>Mounting file shares</p>
</li>
<li><p>Using tools like git, vim, etc.</p>
</li>
</ul>
<p><strong>🧠 TL;DR: (Too Long; Didn’t Read)</strong></p>
<blockquote>
<p>The storage account is used to <strong>store your Cloud Shell files and environment</strong>, so your work isn’t lost between sessions.</p>
</blockquote>
<hr />
]]></content:encoded></item><item><title><![CDATA[SC-300 - Lab 1 - 5]]></title><description><![CDATA[visit microsoft learn github for complete instructions
Lab 01: Manage user roles
Your company recently hired a new employee who will perform duties as an application administrator. You must create a new user and assign the appropriate role.
Exercise ...]]></description><link>https://shirincloudlab.com/sc-300-lab-02</link><guid isPermaLink="true">https://shirincloudlab.com/sc-300-lab-02</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Fri, 21 Mar 2025 22:27:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1743810850886/92ef06b2-124b-4eaa-8a57-e388e514dba2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>visit <a target="_blank" href="https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ManagedAppMenuBlade/~/Users/appId/8a4ff89a-5105-446c-8a2b-e24799cc34cc/objectId/47dca9c4-5216-4d51-8577-9c49c1e32703">microsoft learn github</a> for complete instructions</p>
<h1 id="heading-lab-01-manage-user-roles">Lab 01: Manage user roles</h1>
<p>Your company recently hired a new employee who will perform duties as an application administrator. You must create a new user and assign the appropriate role.</p>
<h2 id="heading-exercise-1-create-a-new-user-and-test-their-application-admin-rights">Exercise 1 - Create a new user and test their application admin rights</h2>
<h4 id="heading-task-1-add-a-new-user">Task 1 - Add a new user</h4>
<ol>
<li><p>After creating a user (Chris Green) on entra, search on azure portal or entra and select <strong>Enterprise applications</strong> in the search dialog at the top of the screen.</p>
</li>
<li><p>Select on <strong>+ New application</strong>. Notice that <strong>+ Create your own application</strong> is unavailable.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742336924888/e1664167-ca76-4fec-b26f-161d24bb9289.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742337161782/a8153609-f573-4387-94c3-081f49c778de.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Try Selecting on some of the other settings like <strong>Application Proxy</strong>, <strong>User settings</strong>, and others to see that <strong>Chris Green</strong> does not have rights.</li>
</ol>
<h2 id="heading-exercise-2-assign-the-application-admin-role-and-create-an-app">Exercise 2 - Assign the application admin role and create an app</h2>
<ol>
<li>Assign the application admin role and create an app using Chris Green</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742338122817/9dd4693a-e5ff-4532-9ef8-0a1b52c5588c.png" alt class="image--center mx-auto" /></p>
<p><strong>Note</strong> - If the lab environment has already activated Microsoft Entra ID Premium P2, Privileged Identity Management (PIM) will be enabled and you wll need to select <strong>Next</strong> and assign a Permanent role to this user.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742338633712/7403f73b-bbc2-424f-97c6-9b6e70ad7e1a.png" alt class="image--center mx-auto" /></p>
<p>View the <strong>"</strong>+ Create your own application** is not grayed out. If you pick a gallery app, you will see the <strong>Create</strong> button is available.</p>
<p><strong>Note - This role now has the ability to add applications to the tenant. We will experiment more with this feature in later labs.</strong></p>
<h2 id="heading-exercise-3-remove-the-application-administrator-from-chris-green">Exercise 3 - Remove the application administrator from Chris Green</h2>
<h2 id="heading-exercise-4-bulk-import-of-users"><strong>Exercise 4 - Bulk import of users</strong></h2>
<h3 id="heading-a-using-csv"><strong>A: Using csv</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742491889665/6a88a020-7030-43b1-b4a9-5a2759e5dd37.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-b-using-powershell"><strong>B: Using PowerShell</strong></h3>
<p><strong>Microsoft Entra ID (formerly Azure AD) does not have a dedicated PowerShell module</strong> but is managed using <strong>Microsoft Graph PowerShell</strong> (Microsoft.Graph) and <strong>Azure PowerShell</strong> (Az module). Here’s how you can interact with Entra ID using PowerShell:</p>
<p><strong>Open PowerShell as Administrator</strong> and ensure <strong>PowerShell version 7.2 or higher</strong> is installed. If needed, download and install the latest version.</p>
<p><strong>Install Microsoft.Graph Module</strong> if not already installed and then confirm if its already installed:</p>
<pre><code class="lang-powershell"><span class="hljs-built_in">Install-Module</span> Microsoft.Graph
<span class="hljs-built_in">Get-InstalledModule</span> Microsoft.Graph
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742492990682/9e5aa3d0-06c8-48d7-9754-d2ca9ad39918.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742493641222/2419badc-4c70-49e4-a82c-7c8c5b0479be.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742494367676/d7880ab0-2ec4-409f-880b-e9dcc094d3f8.png" alt class="image--center mx-auto" /></p>
<p><strong>Login to Azure AD</strong> using:</p>
<pre><code class="lang-powershell"><span class="hljs-built_in">Connect-MgGraph</span> <span class="hljs-literal">-Scopes</span> <span class="hljs-string">"User.ReadWrite.All"</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742494478348/b6a4c67f-66d0-4b47-89bf-9ae1d1aef569.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Sign in via the Edge browser and accept permissions.</p>
<p>  <strong>Verify Connection &amp; View Users</strong>:</p>
<pre><code class="lang-powershell">  <span class="hljs-built_in">Get-MgUser</span>
</code></pre>
</li>
<li><p><strong>Set a Temporary Password for all New Users</strong>:</p>
<pre><code class="lang-powershell">  powershellCopyEdit<span class="hljs-variable">$PWProfile</span> = <span class="hljs-selector-tag">@</span>{
      Password = <span class="hljs-string">"&lt;Enter a complex password&gt;"</span>;
      ForceChangePasswordNextSignIn = <span class="hljs-variable">$false</span>
  }
</code></pre>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742494964153/4a7d538a-878f-45f9-978e-fbd629ac262f.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Create a New User(If you have more than one user to add, you can use a notepad txt file to add the user information and copy/paste into PowerShell.)</strong>:</p>
<pre><code class="lang-powershell">  powershell<span class="hljs-built_in">CopyEditNew-MgUser</span> `
      <span class="hljs-literal">-DisplayName</span> <span class="hljs-string">"New PW User"</span> `
      <span class="hljs-literal">-GivenName</span> <span class="hljs-string">"New"</span> <span class="hljs-literal">-Surname</span> <span class="hljs-string">"User"</span> `
      <span class="hljs-literal">-MailNickname</span> <span class="hljs-string">"newuser"</span> `
      <span class="hljs-literal">-UsageLocation</span> <span class="hljs-string">"US"</span> `
      <span class="hljs-literal">-UserPrincipalName</span> <span class="hljs-string">"newuser@&lt;labtenantname.com&gt;"</span> `
      <span class="hljs-literal">-PasswordProfile</span> <span class="hljs-variable">$PWProfile</span> <span class="hljs-literal">-AccountEnabled</span> `
      <span class="hljs-literal">-Department</span> <span class="hljs-string">"Research"</span> <span class="hljs-literal">-JobTitle</span> <span class="hljs-string">"Trainer"</span>
</code></pre>
<p>  <em>(Replace</em> <code>&lt;labtenantname.com&gt;</code> with your tenant's domain.)</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742495158730/d5a3f4a4-0a70-4e10-9b2c-9fd66147650f.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-experiment-with-managing-users">Experiment with managing users</h2>
<h2 id="heading-exercise-5-remove-a-user-from-microsoft-entra-id"><strong>Exercise 5:</strong> Remove a user from Microsoft Entra ID</h2>
<p>After deleting a user from entra we can restore the user again up to 30 days, after that the user will be deleted permanently</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742594451029/e130ef22-7ce2-47b7-9bc0-aa1e54f8b98e.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-exercise-6-add-a-windows-10-license-to-a-user-account">Exercise 6 - Add a Windows 10 license to a user account</h2>
<p>First, go to entra and make sure that the user’s location is set in the ‘User Properties’ section under the Overview tab of user account. To assign a license, go to the Microsoft 365 admin center at <a target="_blank" href="http://admin.microsoft.com">admin.microsoft.com</a>, navigate to the Licenses page, select the desired license, and then add the user.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742595744008/6e09fb21-f26a-44aa-91c4-775f75082fb8.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-lab-02-working-with-tenant-properties">Lab 02: Working with tenant properties</h1>
<h3 id="heading-login-type-microsoft-365-admin">Login type = Microsoft 365 admin</h3>
<h2 id="heading-create-a-custom-subdomains">Create a custom subdomains</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742597304990/5fe063b6-69c3-4f05-895e-6f9d532f6198.png" alt class="image--center mx-auto" /></p>
<p>you will get redirected to admin.microsoft.com</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742597773711/c1712a0a-809a-42a1-9f7b-3c7776a3ce77.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742597801809/748cf527-addf-41e0-bd56-7a6e3c4cc7a3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742597827196/aba67da3-6840-4925-8415-98d995bf418b.png" alt class="image--center mx-auto" /></p>
<p>and then you need to configure the dns setting.</p>
<h2 id="heading-changing-the-tenant-display-name">Changing the tenant display name</h2>
<p>Go to Entra admin center and click on Properties in the overview menu of the Identity section.</p>
<p><strong>IMPORTANT</strong> - When the tenant is created, the Country or region are specified at that time. This setting cannot be changed later.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Under <strong>Tenant properties</strong>, locate <strong>Tenant ID</strong>. This is your unique tenant identifier.</div>
</div>

<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742599167995/e82ff7b5-5615-42e9-89c4-1d00af709262.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742599434726/09bb727c-832c-467d-8539-c0d188a9179f.png" alt class="image--center mx-auto" /></p>
<p><strong>Azure subscriptions</strong> have a <strong>trust relationship</strong> with <strong>Microsoft Entra ID</strong>. Microsoft Entra ID is trusted to authenticate users, services, and devices for the subscription. Each subscription has a tenant ID associated with it, and there are a few ways you can find the tenant ID for your subscription.</p>
<p>The first way is shown above.</p>
<h2 id="heading-setting-your-privacy-information">Setting your privacy information</h2>
<p>Microsoft strongly recommends you add both your global privacy contact and your organization's privacy statement, so your internal employees and external guests can review your policies. Because privacy statements are uniquely created and tailored for each business, we strongly recommend you contact a lawyer for assistance.</p>
<p><strong>NOTE</strong> - For information about viewing or deleting personal data, see <a target="_blank" href="https://docs.microsoft.com/microsoft-365/compliance/gdpr-dsr-azure">https://docs.microsoft.com/microsoft-365/compliance/gdpr-dsr-azure</a>. For more information about GDPR, see the <a target="_blank" href="https://servicetrust.microsoft.com/ViewPage/GDPRGetStarted">https://servicetrust.microsoft.com/ViewPage/GDPRGetStarted</a>.</p>
<p>You add your organization's privacy information in the <strong>Properties</strong> area of Microsoft Entra ID. To access the Properties area and add your privacy information:</p>
<ul>
<li><p>I you have a user in your Azure lab tenant who works as an IT Admin, you can use him as the Privacy contact.</p>
</li>
<li><p>This person is also who Microsoft contacts if there's a data breach. If there's no person listed here, Microsoft contacts your global administrators.</p>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/refs/heads/CloudSlice-and-M36tenant/Instructions/Labs/media/properties-area.png" alt="Screen image displaying tenant properties with the Technical contact, Global contact, and Privacy statement boxes highlighted" /></p>
<p>If you don't include either your own privacy statement or your privacy contact, your external guests will see text in the Review Permissions box that says, has not provided links to their terms for you to review.</p>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/refs/heads/CloudSlice-and-M36tenant/Instructions/Labs/media/active-directory-no-privacy-statement-or-contact.png" alt="B2B Collaboration Review permissions box with message" /></p>
<p>to check your privacy statement just go to myaccount.microsoft.com and click on setting and privacy</p>
<hr />
<h1 id="heading-lab-03-assigning-licenses-using-group-membership">Lab 03: Assigning licenses using group membership</h1>
<h3 id="heading-login-type-microsoft-365-admin-1">Login type = Microsoft 365 admin</h3>
<ol>
<li>login to www.office.com with the user credentials to see the user has no license.</li>
</ol>
<ul>
<li><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742844040526/d8573774-a33d-4bf1-a8f2-461da9e6a2b3.png" alt class="image--center mx-auto" /></li>
</ul>
<ol start="2">
<li>Create a group on entra:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743095742133/d63c7398-cc75-435c-9ec7-e27716e137cf.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Add an office license to the group(go to m365 admin center and select billing\licenses\O365E3)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743095929536/8111322c-f2bf-4ac5-978b-d765b4c1b4d6.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Then go to O365E3\Groups and assign the license to the group</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743096080417/8cb8da22-4dfd-417e-8eb2-785150c9b845.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><p>go back to entra and check the group licenses:</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743096900608/dbf2d5a4-0f9f-4bcf-8856-d761acb231de.png" alt class="image--center mx-auto" /></p>
<p> ask the user to login to office.com and see the license there</p>
</li>
</ol>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/refs/heads/CloudSlice-and-M36tenant/Instructions/Labs/media/delia-office-license.png" alt="Screen image the Office.com website with Delia Dennis logged in with office applications available, because a license is assigned." /></p>
<h2 id="heading-create-a-m365-group-in-entra">Create a M365 group in Entra:</h2>
<ol>
<li>Create a group with two members and add yourself as the owner of the group</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743113466630/b218e0cc-fee0-40c8-bb3d-418c343f08ab.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Create a dynamic group with this rule syntax: <strong>user.object -ne null</strong></p>
<p> (The new dynamic group will now include B2B guest users as well as member users.)</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743113966542/62c5f57f-452b-48ae-9bb7-3a2ca7a7568c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743113771565/a0f0d4cb-79ae-4426-9bd5-31fe600fc4bf.png" alt /></p>
<h2 id="heading-experiment-with-alternate-rules">Experiment with alternate rules:</h2>
<ol>
<li><p>Try making a group with only <strong>Guest</strong> users:</p>
<ul>
<li>(user.objectid -ne null) and (user.userType -eq "Guest")</li>
</ul>
</li>
<li><p>Try make a group with only <strong>Members</strong> of the Microsoft Entra users.</p>
<ul>
<li>(user.objectid -ne null) and (user.userType -eq "Member")</li>
</ul>
</li>
</ol>
<hr />
]]></content:encoded></item><item><title><![CDATA[SC-300 - Lab 6 -10]]></title><description><![CDATA[visit microsoft learn github for complete instructions
Lab 06: Add a federated identity provider
Lab scenario
Your company works with many vendors and, on occasion, you need to add some vendor accounts to your directory as a guest and allow them to u...]]></description><link>https://shirincloudlab.com/sc-300-lab</link><guid isPermaLink="true">https://shirincloudlab.com/sc-300-lab</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Tue, 18 Mar 2025 22:59:18 GMT</pubDate><content:encoded><![CDATA[<p>visit <a target="_blank" href="https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ManagedAppMenuBlade/~/Users/appId/8a4ff89a-5105-446c-8a2b-e24799cc34cc/objectId/47dca9c4-5216-4d51-8577-9c49c1e32703">microsoft learn github</a> for complete instructions</p>
<h1 id="heading-lab-06-add-a-federated-identity-provider">Lab 06: Add a federated identity provider</h1>
<h2 id="heading-lab-scenario">Lab scenario</h2>
<p>Your company works with many vendors and, on occasion, you need to add some vendor accounts to your directory as a guest and allow them to use their Google account to sign-in.</p>
<h3 id="heading-exercise-1-configure-identity-providers">Exercise 1 - Configure identity providers</h3>
<h4 id="heading-task-1-configure-google-to-be-used-as-an-identity-provider">Task 1 - Configure Google to be used as an identity provider</h4>
<ol>
<li>Go to the Google APIs at <a target="_blank" href="https://console.developers.google.com">https://console.developers.google.com</a>, and sign in with your Google account. We recommend that you use a shared team Google account.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743115799530/055d6799-ff94-4ef7-be85-a105182f2837.png" alt class="image--center mx-auto" /></p>
<p>2- Click on select a project and then create a new project</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743116043568/2a33ba48-710e-4700-858b-d2d691ed085a.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Select the project and on the left menu select OAuth consent screen</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743176658399/842e14af-5a08-430b-a5a0-07736977823e.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Click <strong>“Get Started”</strong>, select the app name <strong>Entra ID</strong>, and sign in with your <strong>Gmail account</strong>.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743176723682/75ac4908-355f-44df-82c7-bc4f5b99db9a.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li>For the <strong>Audience</strong>, choose <strong>External</strong>.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743176895503/3c4a1b90-1a83-4b92-a6bb-83bd2cb27ef1.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li>Contact information:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743177041448/e6a56d6b-bbde-4d5d-8ee1-1fec202a3c18.png" alt class="image--center mx-auto" /></p>
<ol start="7">
<li>I agree to.. :</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743177341328/a953f621-d00b-450b-91c6-8696afb002ae.png" alt class="image--center mx-auto" /></p>
<ol start="8">
<li>Click continue and create:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743177414834/b4e41344-3d7f-4d00-a477-31f56b0823c5.png" alt class="image--center mx-auto" /></p>
<ol start="9">
<li>Click on create OAuth client and for application type select web application, name: Entra B2B, under authorized redirect URIs select the following URIs:</li>
</ol>
<blockquote>
<p><a target="_blank" href="https://login.microsoftonline.com">https://login.microsoftonline.com</a></p>
<p><a target="_blank" href="https://login.microsoftonline.com/te/**tenant">https://login.microsoftonline.com/te/**tenant</a> ID**/oauth2/authresp</p>
<p>(where &lt;tenant ID&gt; is your tenant ID)</p>
<ul>
<li><p>To find your tenant id and tenant (directory)name:</p>
</li>
<li><p>Entra&gt;<strong>“Identity”</strong> &gt; <strong>“Overview”</strong> (under <em>Tenant</em>).</p>
</li>
<li><p>Azure &gt;the top-right corner&gt; account name &gt; <strong>“Switch directory”</strong> (if needed)&gt;Click on your directory&gt; Under <strong>Overview</strong></p>
</li>
</ul>
<p><a target="_blank" href="https://login.microsoftonline.com/te/**tenant">https://login.microsoftonline.com/te/**tenant</a> name**.<a target="_blank" href="http://onmicrosoft.com/oauth2/authresp">onmicrosoft.com/oauth2/authresp</a></p>
<p>(where &lt;tenant name&gt; is your tenant name)</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743179723016/98b785e6-d6bb-4b40-b12d-7a2df83f1e54.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743179751980/71f8729c-5514-4130-bb21-2e4d18597f95.png" alt class="image--center mx-auto" /></p>
<ol start="10">
<li>Select <strong>Create</strong>. Copy your <strong>client ID</strong> and <strong>client secret</strong>. You'll use them when you add the identity provider in the Azure portal. You can leave your project at a publishing status of Testing</li>
</ol>
<h4 id="heading-task-2-add-a-test-user">Task 2 - Add a test user</h4>
<ol>
<li>On https:// console.cloud.google.com go to <strong>APIs &amp; Services</strong> &gt; <strong>OAuth consent screen</strong>, then select Audience and add users under test ussers:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743180307990/922cae2f-53e5-41bd-bbda-b3fde362702d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743180945685/1740e7fa-1d1b-40ba-9be5-afeda4861179.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>Enter your gmail and click on save</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743181026810/c3cf9acb-8b66-49d5-8b88-a38d119be301.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-exercise-2-configure-azure-to-work-with-an-external-identity-provider">Exercise 2 - Configure Azure to work with an External identity provider</h3>
<h4 id="heading-task-1-configure-microsoft-entra-id-for-google-federation">Task 1 - Configure Microsoft Entra ID for Google federation</h4>
<ol>
<li><p>Select <strong>Microsoft Entra ID</strong> &gt; <strong>Identity</strong> &gt; <strong>External Identities</strong> &gt; <strong>All identity providers</strong> &gt; <strong>Google</strong> &gt; <strong>Configure</strong></p>
<p> (Microsoft provides a direct federation for <strong>Google</strong> as an identity provider)</p>
</li>
<li><p>Enter the client ID and Client secret that we optained (or you can find it in console.cloud.google.com &gt; &gt; API and Services &gt; credentials )</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743181789707/00ba73e4-2db8-4abc-84d0-7526a770ab90.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743182068886/0100822b-a644-47ec-8de7-ffc1a9656fe3.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-task-2-invite-you-test-user-account">Task 2 - Invite you Test User account</h4>
<ol>
<li><p>If you used an existing Gmail account, remember to delete the account with <strong>External Identities | All identity providers</strong>. You can also return to the Google developer console and delete the project that you created.</p>
</li>
<li><p><strong>Entra</strong> &gt; <strong>All users</strong> &gt; <strong>Invite External user</strong> and enter your test gmail information</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743182890576/f8b0fb92-1e74-4d9c-8e7b-c2513a55dcdf.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-task-3-accept-the-invitation-and-login">Task 3 - Accept the invitation and login</h4>
<ol>
<li>check your email and accept the invite and follow the prompts untill you gets to myapplications.microsoft.com</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183254563/6cb193ff-c84b-49f1-97ec-5b43d8482d66.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183307355/39e2dc5a-ff29-482b-bd56-6cb379b7e0ea.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183320961/7fd916c3-39ce-4dec-9dff-219172bea4df.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183372610/4e85c48d-c4ca-44b7-a0a2-a8ce2700e2d6.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-task-4-login-to-microsoft-365-using-your-google-account">Task 4 - Login to Microsoft 365 using your Google account</h4>
<ol>
<li>Login to login.microsoft.com using your gmail account(choose sigin in option and then choose sign in to an organization)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183768209/65639350-5b6c-4f9d-b56f-0b742b72a6e8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183820834/4ef830b7-b2f0-4101-b17a-c9788046febd.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>enter yout lab tenant domain name</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183930247/ef5a3211-e5e4-4c5c-b890-71c69b7e61ae.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183960139/76f63300-cb89-4677-90bf-e7fcf0c58935.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>and then it takes you to google login page:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743184030676/afa82dd3-ed04-423c-8f78-bae921fd7483.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743183996091/6bebdb1a-a928-489f-8d45-8d986b99d2d7.png" alt class="image--center mx-auto" /></li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743184075084/e46384f0-f377-4e70-8e07-c462ad9e55ce.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-lab-07-add-hybrid-identity-with-microsoft-entra-connect-optional">Lab 07: Add Hybrid Identity with Microsoft Entra Connect (Optional)</h2>
<hr />
<h2 id="heading-lab-08-enable-multi-factor-authentication">Lab 08: Enable multi-factor authentication</h2>
<p>Login type = Microsoft 365 admin</p>
<p>A Microsoft Entra ID Premium license is required for this exercise.</p>
<ol>
<li>Login to entra and search for multifactor authentication (or just go to identity&gt; protection&gt; risky activity &gt; multifactor authentication)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743195317028/92383635-869b-47cd-9a71-826311f7c0f3.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>Under configure click on additional cloud-based multifactor authentication settings</li>
</ol>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/SC-300-Identity-and-Access-Administrator/refs/heads/CloudSlice-and-M36tenant/Instructions/Labs/media/lp2-mod1-set-additional-mfa-settings.png" alt="Screenshot showing MFA options in the dashboard" /></p>
<ol start="3">
<li>You can enable/ disable or enforce MFA from here:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743195800326/75144173-ce6c-42b3-848f-c79734d09ee4.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>In service settings : You can also enable or disable app passwords here, which allow users to create unique account passwords for apps that don't support multi-factor authentication. This feature lets the user authenticate with their Microsoft Entra identity using a different password specific to that app.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743196131802/492ab9ad-41db-4be1-8992-d558615ed8ba.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-task-2-setup-conditional-access-rules-for-mfa-for-delia-dennis">Task 2 - Setup conditional access rules for MFA for Delia Dennis</h4>
<ol>
<li>Go to Entra &gt; Identity&gt; Protection &gt; Conditional Access and for the policy name: MFA_for_username and then select the user:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743200871874/207eb5aa-f8c0-4053-9715-3ff65b32a814.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>For target resource select office 365 (previously we gave her o365 license)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743201917960/893f96ce-5a04-4677-9683-e24227f9e90c.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>For network select no for configure</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743202160267/0af12942-84ba-41df-b493-aa6779b0fabe.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Also any network or location configured for condition:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743202372693/a6b7ccb4-81df-48cf-8bab-f5cb3e5fe990.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li>Under grant do these settings and enable the policy and click on create:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743202555523/10cd5f28-aa4f-434f-82ac-6182032a69fc.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-task-3-test-delias-login">Task 3 - Test Delia's login</h4>
<ol>
<li>login on www.office.com using Delia’s credential. You can see you need to have MFA.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743202824220/c9942085-21e9-43e5-9bc9-a61b5261ce1a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743202844723/f6ea4c6a-b972-4028-a01f-eae7d49c88ca.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-exercise-2-configure-mfa-to-be-required-for-login">Exercise 2 - Configure MFA to be required for login</h3>
<h4 id="heading-task-1-configure-microsoft-entra-per-user-mfa">Task 1 - Configure Microsoft Entra Per-User MFA</h4>
<ol>
<li>click on per user MFA</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743203619896/2e7ba38a-69f0-4eaf-aaf8-6ece93fb6a20.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>select the user and enable the MFA for the user and then try to login with the user:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743203758323/381ca560-8b50-4dbd-9b71-fabfe225c014.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>When you want to login you will be asked to use microsoft authenticator:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743204120204/f93157fb-3e2f-42be-8409-2ebfa06b4296.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-lab-09-configure-and-deploy-self-service-password-reset">Lab 09 - Configure and deploy self-service password reset</h1>
<ol>
<li>Create a security group of 3 users:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743534114074/ffc55e1f-4040-408f-9cd1-8e7b67f6b4a7.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Enable SSPR for your test group (add the group on entra&gt;protection&gt;password reset&gt;properties):</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743535029709/8059f600-fff4-48be-befe-502374f0b42c.png" alt class="image--center mx-auto" /></p>
<p> Under *<em>Manage</em>, select and review the default values for each of the <strong>Authentication methods</strong>, <strong>Registration</strong>, <strong>Notifications</strong>, and <strong>Customization</strong> settings.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743535252602/02a8a0c4-94ac-48b6-8157-e580deef7c75.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743535737893/21e90d5e-a98b-4a6b-8963-78392477dec5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743536193901/341b9541-f081-425d-9e0a-3fa363b434b4.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743536217113/d46d36c3-9a9b-486c-87ba-f81a0636f5ef.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Register a user in our test group for SSPR ( just login with the user on <a target="_blank" href="https://login.microsoftonline.com/">https://login.microsoftonline.com/</a> ) and you will get this prompt:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743537382049/b4c07015-a9aa-4628-86d0-499c7538f86e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743537404190/1836cab0-41de-4ee6-9682-23b259d8be9a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743537441436/57f3258a-11a6-48b1-afdc-2fbcb73acd4b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743537469966/6905aeb1-cebe-4d78-b1a9-eb694ea37fca.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743537483737/260cb19d-8f25-4bf0-b45a-cd1a2bb493af.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743537496075/22494193-bded-49d5-8a3c-8244ffebaa07.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>To test SSPR Use one of the users in your test group and in login screen of http://portal.azure.com click on forgot my password :</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538133946/180d2fca-4481-417e-a825-77f6e6e8de75.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538141835/ef871f39-02aa-408e-bd81-cf284f4f931b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538271112/29478737-0a63-4660-9faa-bc7d1035d451.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li>Use a user account that you previously configured with Multi-Factor Authentication (MFA) during Step 3 when signing in and click on forgot my password.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538651108/9f4734f3-9460-435a-8b0c-5a2f0426cf09.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538693308/1c592811-04a3-4255-8ca5-65ea51e4b25b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538748170/ccd7e5c1-2640-40ef-ba7e-e856f6587552.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538792892/9dae51b2-4fc7-4b3d-b750-ea6b89ea05fe.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li>If you attempt to log in with a user who is not part of the SSPRTesters group and click ‘Forgot my password,’ you’ll see the following prompt:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743538934235/3115e775-5810-4bf2-9ba1-8d8a293dcbb7.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-lab-10-microsoft-entra-authentication-for-windows-and-linux-virtual-machines">Lab 10 - Microsoft Entra Authentication for Windows and Linux Virtual Machines</h1>
<h3 id="heading-login-type-azure-resource-login">Login type = Azure Resource login</h3>
<ol>
<li><p>Create a vm and on the management tab select login with Microsoft Entra ID (On the <strong>Management</strong> tab, check the box to <strong>Login with Microsoft Entra ID</strong> under the Microsoft Entra ID section.)</p>
<blockquote>
<p>You will notice that the System-assigned managed identity in the Identity section is automatically selected and grayed out. This behavior occurs by default when ‘Login with Microsoft Entra ID’ is enabled.</p>
</blockquote>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743618568832/0fd45fc4-68e0-44ca-8d48-ac0846880ae5.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Assign a job function role of “<strong>virtual machine administrator login</strong>” to a user</p>
</li>
<li><p>Start an RDP session with the user to the virtual machine. Then, go to the Remote settings and uncheck “<strong>Allow connections only from computers running Remote Desktop with Network Level Authentication</strong>”.</p>
</li>
<li><p>Modify your RDP file to support the Microsoft Entra ID login:  Select the Connect menu item. On the RDP tab select the Download RDP File.</p>
</li>
<li><p><strong>Make a copy</strong> of the RDP file and add <strong>-EntraID</strong> to the end of the filename.</p>
</li>
<li><p>Edit the new version of the RDP file you just copied using <strong>Notepad</strong>. Add the these two lines of text to the bottom of the of the file:</p>
</li>
</ol>
<blockquote>
<p>enablecredsspsupport:i:0</p>
<p>authentication level:i:2</p>
</blockquote>
<ol start="7">
<li><p><strong>Save</strong> the RDP file. You should now have two versions of the file:</p>
<ul>
<li><p>&lt;&gt;.RDP</p>
</li>
<li><p>&lt;&gt;-EntraID.RDP</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743620867108/8b7c79ed-a4f4-4edd-8e37-6adea774f58a.png" alt class="image--center mx-auto" /></p>
<ol start="8">
<li>Run the rdp-entraid and login with entra id user with vm admin login access(try with any other user and you cannot login)</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[AZ-104 Challenge Labs]]></title><description><![CDATA[For more challenge lab please visit Skillable website.
Governance and Compliance
Assign built-in roles and verify permissions
# Define the variables
$userPrincipalName = "dev-test@example.com"
$resourceGroupName = "test-rg"
$roles = @(
    "Storage A...]]></description><link>https://shirincloudlab.com/challenge-labs</link><guid isPermaLink="true">https://shirincloudlab.com/challenge-labs</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Wed, 05 Mar 2025 22:22:42 GMT</pubDate><content:encoded><![CDATA[<p>For more challenge lab please visit <a target="_blank" href="https://challenge-labs.learnondemand.net/Organization/CourseCatalog/2743?run=1#%7B%22pageIndex%22%3A0%2C%22pageSize%22%3A20%2C%22filter%22%3A%22%22%2C%22matchType%22%3A0%2C%22subscriptionProfileIds%22%3A%5B%5D%2C%22tagInputIds%22%3A%5B%5D%2C%22tagsJson%22%3Anull%2C%22bookmarks%22%3Anull%2C%22StatusFilter%22%3A0%2C%22ratingFilter%22%3A0%2C%22view%22%3A%22Grid%22%2C%22groupedTags%22%3Anull%7D">Skillable</a> website.</p>
<h2 id="heading-governance-and-compliance">Governance and Compliance</h2>
<h3 id="heading-assign-built-in-roles-and-verify-permissions">Assign built-in roles and verify permissions</h3>
<pre><code class="lang-powershell"><span class="hljs-comment"># Define the variables</span>
<span class="hljs-variable">$userPrincipalName</span> = <span class="hljs-string">"dev-test@example.com"</span>
<span class="hljs-variable">$resourceGroupName</span> = <span class="hljs-string">"test-rg"</span>
<span class="hljs-variable">$roles</span> = <span class="hljs-selector-tag">@</span>(
    <span class="hljs-string">"Storage Account Contributor"</span>
    <span class="hljs-string">"Virtual Machine Contributor"</span>
    <span class="hljs-string">"Network Contributor"</span>
)

<span class="hljs-comment"># Loop through the roles and assign them to the user</span>
<span class="hljs-keyword">foreach</span> (<span class="hljs-variable">$roleName</span> <span class="hljs-keyword">in</span> <span class="hljs-variable">$roles</span>) {
    <span class="hljs-built_in">New-AzRoleAssignment</span> <span class="hljs-literal">-RoleDefinitionName</span> <span class="hljs-variable">$roleName</span> <span class="hljs-literal">-SignInName</span> <span class="hljs-variable">$userPrincipalName</span> <span class="hljs-literal">-ResourceGroupName</span> <span class="hljs-variable">$resourceGroupName</span>
}
</code></pre>
<ul>
<li>Use role-based access control (RBAC) to allow the <a target="_blank" href="mailto:dev-test@example.com"><code>dev-test@example.com</code></a> developer account to manage certain resources in the <code>test-rg</code> resource group by adding the following role assignments: Storage Account Contributor, Virtual Machine Contributor, Network Contributor.</li>
</ul>
<h3 id="heading-create-a-virtual-machine-as-a-developer">Create a virtual machine as a developer</h3>
<ul>
<li>Identify the operations associated with virtual machines by using the Get-AzProviderOperation cmdlet.</li>
</ul>
<blockquote>
<p>Note the operations for <strong>read</strong>, <strong>start</strong>, and <strong>deallocate</strong>.</p>
<p>You can use the operations associated with an Azure resource as actions when you create an Azure role-based access control (RBAC) custom role.</p>
<p>Want to learn more? Review the documentation on the <a target="_blank" href="https://docs.microsoft.com/en-us/powershell/module/az.resources/get-azprovideroperation?view=azps-3.8.0">Get-AzProviderOperation</a> cmdlet.</p>
</blockquote>
<pre><code class="lang-powershell"><span class="hljs-comment"># Get all operations for virtual machines (using a wildcard)</span>
<span class="hljs-variable">$vmOperations</span> = <span class="hljs-built_in">Get-AzProviderOperation</span> <span class="hljs-string">"Microsoft.Compute/virtualMachines/*"</span>

<span class="hljs-comment"># Identify read, start, and deallocate operations</span>
<span class="hljs-variable">$readOperation</span> = <span class="hljs-variable">$vmOperations</span> | <span class="hljs-built_in">Where-Object</span> { <span class="hljs-variable">$_</span>.Operation <span class="hljs-operator">-match</span> <span class="hljs-string">"read"</span> }
<span class="hljs-variable">$startOperation</span> = <span class="hljs-variable">$vmOperations</span> | <span class="hljs-built_in">Where-Object</span> { <span class="hljs-variable">$_</span>.Operation <span class="hljs-operator">-match</span> <span class="hljs-string">"start/action"</span> }
<span class="hljs-variable">$deallocateOperation</span> = <span class="hljs-variable">$vmOperations</span> | <span class="hljs-built_in">Where-Object</span> { <span class="hljs-variable">$_</span>.Operation <span class="hljs-operator">-match</span> <span class="hljs-string">"deallocate/action"</span> }

<span class="hljs-comment"># Output the relevant operations</span>
<span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"Read Operation:"</span>
<span class="hljs-variable">$readOperation</span> | <span class="hljs-built_in">Format-Table</span> Operation, Description <span class="hljs-comment"># Corrected line</span>

<span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"Start Operation:"</span>
<span class="hljs-variable">$startOperation</span> | <span class="hljs-built_in">Format-Table</span> Operation, Description <span class="hljs-comment"># Corrected line</span>

<span class="hljs-built_in">Write-Host</span> <span class="hljs-string">"Deallocate Operation:"</span>
<span class="hljs-variable">$deallocateOperation</span> | <span class="hljs-built_in">Format-Table</span> Operation, Description <span class="hljs-comment"># Corrected line</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741206553213/5e3aafd9-1027-4c25-bc9a-fbdaec294cc1.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Retrieve the role definition for the Virtual Machine Contributor role and then output it to $home\clouddrive\VMOperatorRole.json by using the Get-AzRoleDefinition and the ConvertTo-Json cmdlets.</li>
</ul>
<blockquote>
<p>You can use Azure role-based access control (RBAC) role assignments to grant access to resources at a specific scope—subscription, resource group, resource—by assigning a role to a user, group, service principal, or managed identity. There are two types of roles that you can use: built-in and custom. You can create a custom role by using the Azure portal, Azure PowerShell®, Azure command-line interface (CLI) 2.0, and the REST API.</p>
<p>Want to learn more? Review the following documentation:</p>
<ul>
<li><p><a target="_blank" href="https://docs.microsoft.com/en-us/powershell/module/az.resources/get-azroledefinition?view=azps-3.8.0">Get-AzRoleDefinition</a></p>
</li>
<li><p><a target="_blank" href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-json?view=powershell-7">ConvertTo-Json</a></p>
</li>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles">Custom roles</a></p>
</li>
</ul>
</blockquote>
<pre><code class="lang-powershell"><span class="hljs-comment"># Get the role definition for the Virtual Machine Contributor role</span>
<span class="hljs-variable">$roleDefinition</span> = <span class="hljs-built_in">Get-AzRoleDefinition</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">"Virtual Machine Contributor"</span>

<span class="hljs-comment"># Convert the role definition to JSON format</span>
<span class="hljs-variable">$jsonRoleDefinition</span> = <span class="hljs-variable">$roleDefinition</span> | <span class="hljs-built_in">ConvertTo-Json</span>

<span class="hljs-comment"># Output the JSON to the specified file</span>
<span class="hljs-variable">$jsonRoleDefinition</span> | <span class="hljs-built_in">Out-File</span> <span class="hljs-literal">-FilePath</span> <span class="hljs-variable">$home</span>\clouddrive\VMOperatorRole.json
</code></pre>
<ul>
<li>Open the VMOperatorRole.json file in the Azure Cloud Shell code edi<a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">tor by using the code command in</a> the $home\clouddrive folder.</li>
</ul>
<blockquote>
<p>If prompted, switch to Cloud Shell classic mode, and then run the comm<a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">ands again.</a></p>
<p><a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">You can edit t</a>he definition of a built-in role by using the Azure Clou<a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">d Shell code editor, and then</a> you can save the definition as a new custom role.</p>
<p>Want to learn more? Review the documentation on <a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">Azure Cloud Shell code</a> <a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">editor.</a></p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741207524033/300ca3ad-1d41-47bd-9e47-4c95f7a2010f.png" alt class="image--center mx-auto" /></p>
<p><a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">or</a></p>
<p><a target="_blank" href="https://docs.microsoft.com/en-us/azure/cloud-shell/using-cloud-shell-editor">code ~/cloudd</a>rive/VMOperatorRole.jsoncode ~/clouddrive/VMOperatorRole.json</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741208499031/401232af-4a6d-461a-ae7e-0415b161d17c.png" alt class="image--center mx-auto" /></p>
<p>You can create a new custom role in Azure using the New-AzRoleDefinition cmdlet and your VMOperatorRole.json file. Run the following command in <strong>Azure PowerShell</strong>:</p>
<pre><code class="lang-powershell"><span class="hljs-built_in">New-AzRoleDefinition</span> <span class="hljs-literal">-InputFile</span> <span class="hljs-string">"home\clouddrive\VMOperatorRole.json"</span>
</code></pre>
<hr />
<h2 id="heading-configure-a-network-security-group-in-a-virtual-network">Configure a Network Security Group in a Virtual Network</h2>
<p>In this, you will configure a network security to allow secure (SSH) connections to a virtual machine. First, will create application security group, followed by creation of a network security. Next you will associate the security group with a subnet in the virtual network, and then you associate the application security group with the network interface on the virtual.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741284244466/bf6d7c45-1f9f-4ccd-bd20-bc41b32c86bd.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741284205262/675354dd-09fd-4f4b-abd7-c92931ab92b3.png" alt class="image--center mx-auto" /></p>
<p>Finally, you will add an inbound security rule, and then you will verify that you can connect to the linux virtual machine in the subnet by using SSH.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741285994349/2d5d9f20-f660-401a-bef6-000be943f783.png" alt class="image--center mx-auto" /></p>
<p>Connect to the virtual machine at azureadmin@74.235.217.96 by using an SSH connection</p>
<p>first try before creating the rule was time out and second one after adding the rule to the nsg:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741286200660/3b1fe117-8007-43b5-918a-34d842ea065b.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-configure-route-tables-in-a-virtual-network">Configure Route Tables in a Virtual Network</h2>
<p><strong>Configure Front End:</strong></p>
<ul>
<li><p>Create a Route table named app-frontend-rt by using the <strong>RG1lod49100900(909 here)</strong> resource group and the <strong>East US</strong> region, and then disable gateway route propagation.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741298804009/7e62ac88-a928-45e6-a314-50dd943ce8f4.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Add a route named to-backend to the <strong>app-frontend-rt</strong> route table, and then configure the route by using an address prefix of 10.1.1.0/24 and a <strong>Virtual appliance</strong> next hop address of 10.1.255.4.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741299019914/c2260c83-8ba8-433c-a658-5ef79ad39dc4.png" alt /></p>
</li>
<li><p>Associate the <strong>app-frontend-rt</strong> route table to the <strong>frontend</strong> subnet in the <strong>app-vnet</strong> virtual network.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741301758217/b9f2b4cb-035f-4513-9b1c-33c052510d7e.png" alt class="image--center mx-auto" /></p>
<p>You can associate a route to a subnet by using the Azure portal, the <em>Set-AzVirtualNetworkSubnetConfig</em> and <em>Set-AzVirtualNetwork</em> cmdlets, or the <em>az network route-table route</em> command.</p>
<p><strong>Configure back-end:</strong></p>
<ul>
<li><p>Create a Route table named app-backend-rt that uses the <strong>RG1lod49100900</strong> resource group and the <strong>East US</strong> region, and then disable gateway route propagation. (process same as above)</p>
</li>
<li><p>Add a route named “to-frontend” to the <strong>app-backend-rt</strong> route table, and then configure the route by using an address prefix of 10.1.0.0/24 and a <strong>Virtual appliance</strong> next hop address of 10.1.255.4.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741300155723/74c4b47b-e72e-4300-9fc6-1849ad0a7ee9.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Associate the <strong>app-backend-rt</strong> route table to the <strong>backend</strong> subnet in the <strong>app-vnet</strong> virtual network.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741300306323/19ec02a7-0ce6-449c-9610-3bda826587ad.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Open an Azure Cloud Shell <strong>Bash</strong> session without mounting a storage account.</p>
</li>
<li><p>Create a secure shell (SSH) connection to VM3(Linux Machine) by using azureuser@20.172.210.22, and then when prompted, enter AzurePwd49100909 as the password.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741300848034/d6f202e0-4418-4cd0-9598-a5684a1be722.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Enable IP forwarding by using the sudo user and the sysctl command, and then exit the SSH connection.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741300923758/f016fe4a-2bd0-4ad3-94c7-986ac4cddfdd.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>In Cloud Shell, create an ssh connection to VM2 by using azureuser@4.236.142.95, and then when prompted, enter AzurePwd49100909 as the password.</p>
</li>
<li><p>In the SSH session, update the virtual machine by using sudo and apt-get.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741302499478/d42a35c5-53ef-4982-9a73-2742852c8571.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Ensure that you have updated the Linux virtual machine before moving on to the next task.</p>
</blockquote>
<ul>
<li>Install the traceroute tool by using sudo and apt.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741302568982/384d4177-2594-4654-ba6d-a9fa6c992084.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Verify that traffic sent to VM1 is routed through the virtual appliance <strong>VM3</strong> by using the traceroute tool, and then exit the SSH connection.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741302804227/0d744524-f961-4dea-9dcc-8d74dcea55d6.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-configure-global-virtual-network-peering">Configure Global Virtual Network Peering</h2>
<p>In this challenge, you will configure a virtual network peering between the virtual networks for two applications hosted in different Azure regions.</p>
<p>First, you will review existing Azure resources, and then you will verify that you are unable to add virtual network peerings between the existing virtual networks.</p>
<p>Next, you will remove overlapping address spaces in the virtual network configuration. Finally, you will configure global virtual network peering between the two virtual networks.</p>
<p>VM1 Public IP: 172.206.208.169</p>
<p>vNet1 address space: 10.1.0.0/16</p>
<p>vNet2 address space: 10.1.0.0/16</p>
<blockquote>
<p>The address spaces of virtual networks that you intend to connect should not overlap. You will correct this in an upcoming task.</p>
</blockquote>
<ul>
<li><p>Attempt to add a virtual network peering named VNET1-to-VNET2 to the <strong>VNET2</strong> virtual network.</p>
<ul>
<li><p>A successful virtual network peering would allow traffic to flow in both directions between the VNET1 and VNET2 virtual networks.</p>
</li>
<li><p>You can use a virtual network peering to connect virtual networks together. For connectivity purposes, Azure will view the connected networks as if they are one network, and traffic will be routed between the peered virtual networks across the Microsoft backbone rather than through a gateway. For this reason, traffic between peered virtual networks will never traverse the public internet.</p>
</li>
<li><p>You can choose between two types of peering:</p>
<ul>
<li><p>Virtual network peering connects virtual networks in the same region.</p>
</li>
<li><p>Global virtual network peering connects virtual networks in different regions.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>        You can use user-defined routes to implement service chaining by configuring a virtual machine in the peered virtual network as the next hop IP address.</p>
<p>        You can also configure a gateway in a peered virtual network as a transit point to an on-premises network. This is referred to as <em>gateway transit</em>.</p>
<ul>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741374405488/e8c574a5-9c2f-4bc5-9719-7852503f1fcf.png" alt class="image--center mx-auto" /></p>
<p>  Add an address space of 10.2.0.0/16 to <strong>VNET2</strong>.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741368755091/04d835d2-6188-46d9-8431-872100657c60.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Add a subnet named subnet2 to <strong>VNET2</strong> by using a subnet address range of 10.2.0.0/24 .</li>
</ul>
<blockquote>
<p>When you design the address ranges of your subnets, remember that the first three IP addresses in each subnet are reserved by Azure for internal use.</p>
</blockquote>
<ul>
<li>Associate <strong>VM2-nic</strong> to <strong>subnet2</strong> in <strong>VNET2</strong>.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741369761671/2179e2ca-0e1c-4b95-bc35-dc3d77d7c4c6.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Delete <strong>subnet1</strong> in <strong>VNET2</strong>.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741369936170/bbc5719a-348f-4f03-8499-ffdc0493a43f.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Delete the <strong>10.1.0.0/16</strong> address space in <strong>VNET2</strong>.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741369996093/f6747f76-7b0c-4c79-b8ca-f29a546cf167.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Add a virtual network peering to <strong>VNET2</strong> that uses a remote virtual network connection named VNET1-to-VNET2 and a local virtual network connection named VNET2-to-VNET1, and that is configured to <strong>Allow 'VNET1' to receive forwarded traffic from 'VNET2'</strong> in remote settings and <strong>Allow 'VNET2' to receive forwarded traffic from 'VNET1'</strong> in local settings.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741374609318/c098eccd-080a-4427-8fb3-1184a70edcce.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Verify that the peering status of <strong>VNET1-to-VNET2</strong> is <strong>Connected</strong>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741374922347/506f3973-13f3-4253-b91e-d46f4796ea6e.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Verify that VNET1 and VNET2 are connected by using the ping command to 10.2.0.4.</li>
</ul>
</li>
</ul>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741375013711/1c3906f9-003c-42fc-b93b-527945299ff5.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-enable-high-availability-by-using-availability-sets">Enable High Availability by Using Availability Sets</h2>
<p>In this Challenge Lab, you will configure high availability by using availability sets. First, you will create an availability set and a virtual network. Next, you will deploy two Azure virtual machines to the availability set. Finally, you will configure load balancing.</p>
<ol>
<li><h3 id="heading-creating-an-availability-set"><strong>Creating an Availability Set</strong></h3>
</li>
</ol>
<ul>
<li><p>Availability sets help distribute <strong>virtual machines (VMs)</strong> across multiple <strong>fault domains</strong> (for power and hardware failure protection) and <strong>update domains</strong> (to stagger reboots during maintenance).</p>
</li>
<li><p>You first create an <strong>Availability Set</strong> in Azure.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741376500233/9536f6c1-0778-4073-8b0d-3615e83bb664.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Creting a Virtual Network</strong></li>
</ol>
<ul>
<li><p>A <strong>virtual network (VNet)</strong> named <strong>“AVSet-Vnet”</strong> is created.</p>
</li>
<li><p>This allows communication between the virtual machines deployed within it.</p>
</li>
</ul>
<ol start="3">
<li><strong>Deploying Two Virtual Machines</strong></li>
</ol>
<ul>
<li><p>Two Azure <strong>Virtual Machines (VMs)</strong> are created and assigned to the <strong>Availability Set</strong>.</p>
</li>
<li><p><strong>Each VM is placed in a different fault and update domain</strong> to ensure redundancy:</p>
</li>
<li><p><strong>Fault Domains</strong>: Protect against hardware failures (e.g., racks in different power circuits).</p>
</li>
<li><p><strong>Update Domains</strong>: Ensure that updates and reboots happen in phases without taking down all VMs at once.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741710450806/61a596f7-6b78-4e2e-9f0f-a650d285cab7.png" alt class="image--center mx-auto" /></p>
<p>After you deploy the virtual machines, each one should be in a <strong>separate fault and update domain</strong> for high availability.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741710873663/e9fef6cb-ae1f-4bab-9c8e-890fe23f463f.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><strong>Creating an Azure Load Balancer</strong></li>
</ol>
<ul>
<li><p>An <strong>Azure Load Balancer</strong> is deployed to distribute traffic evenly across the VMs.</p>
</li>
<li><p>This ensures no single VM handles all requests, improving performance and availability.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711316719/c9228351-2431-4bc8-9d0c-2c0014802fd8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711075352/07d18489-5715-4a4a-a021-0b8c49d969ce.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711338617/0f018a71-7a1c-4c7e-a3ba-f28a9312c844.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711403446/d8cdb1c0-1d0a-47dd-ae5c-8766612ef67a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711422289/9f73fd7c-5a44-4d9c-9175-13ed4f202201.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li><strong>Adding a Health Probe</strong></li>
</ol>
<ul>
<li><p>A <strong>Health Probe</strong> is configured to check the health of VMs.</p>
</li>
<li><p>The probe ensures that only healthy VMs receive traffic, rerouting requests away from failed or unhealthy instances.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711575732/e5b39204-3f6e-4ab2-a8f7-49dd2fb93584.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711647577/a07d64dd-5227-48d8-a95f-4561b5d30fbb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711637639/956d5a9b-0186-442b-91fa-d9936d3e0362.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li><strong>Adding a Load Balancing Rule</strong></li>
</ol>
<ul>
<li><p>A <strong>Load Balancing Rule</strong> is created to define how traffic is distributed across the VMs.</p>
</li>
<li><p>It typically specifies:</p>
<ul>
<li><p><strong>Frontend IP</strong></p>
</li>
<li><p><strong>Backend pool (VMs in the availability set)</strong></p>
</li>
<li><p><strong>Port rules (e.g., HTTP on port 80)</strong></p>
</li>
<li><p><strong>Health probe association</strong></p>
</li>
</ul>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711689192/748d90cb-910a-4dc6-a1a8-4bf4f0a0ae77.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741711756044/685bc242-75c1-42cf-9395-e25a8ad402ae.png" alt class="image--center mx-auto" /></p>
<p>You have successfully completed the following tasks:</p>
<ul>
<li><p>Created an <strong>availability set</strong> to ensure high availability.</p>
</li>
<li><p>Deployed <strong>two Azure virtual machines</strong> within the availability set.</p>
</li>
<li><p>Integrated an <strong>Azure load balancer</strong> with the availability set.</p>
</li>
<li><p>Configured a <strong>health probe</strong> for the load balancer.</p>
</li>
<li><p>Defined a <strong>load balancing rule</strong> to manage traffic distribution.</p>
</li>
</ul>
<p><strong>Outcome</strong></p>
<p>By following these steps, you achieve:</p>
<ul>
<li><p><strong>Improved high availability</strong>: No single failure (hardware, update, or maintenance) brings down the service.</p>
</li>
<li><p><strong>Load distribution</strong>: Requests are balanced across multiple VMs.</p>
</li>
<li><p><strong>Automated failover</strong>: If one VM fails, traffic is rerouted automatically.</p>
</li>
</ul>
<hr />
<h1 id="heading-configure-blob-storage-with-public-access">Configure Blob Storage with Public Access</h1>
<p>In this challenge, you will create an Azure storage account with a public container, upload files to the account, and test public access to the account.</p>
<ol>
<li><p>Create a storage account by using standard performance, locally redundent storage and on advanced page allow enabling anounymous access on individual containers.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741799353398/7e70403e-5156-4bc4-873c-1b0b969f7e96.png" alt class="image--center mx-auto" /></p>
<p> Add a blob container named public on the storage account and set the public access level to Blob (in data storage select containers and add it there)</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741799714804/3e7f7e99-c869-4926-9511-238ee021c223.png" alt class="image--center mx-auto" /></p>
<p> you can find the access key in security and networking</p>
</li>
<li><p>Upload any image file (for example, .JPG, .PNG, or .GIF) on your computer to the <strong>public</strong> container, in the <strong>sa49292475</strong> storage account, as a <strong>64 KiB</strong> block blob by using the <strong>Hot</strong> access tier.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741800245891/f447291b-64e1-4ec4-95ae-61ef77e5c06f.png" alt class="image--center mx-auto" /></p>
<p> Add a Blob index tag on the uploaded blob file by using the Key/Value pair of source / Portal. Click on the file and on the blob page , scroll down to Blob index tag</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741800998182/eb0a47ca-9e0a-4b0d-94b3-7dc25ec5c76d.png" alt class="image--center mx-auto" /></p>
<p> In the same page you can see the URL property of the blob file here:</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741801170357/662c4993-e99a-4d17-8d85-a2f520505af6.png" alt class="image--center mx-auto" /></p>
<ol start="7">
<li>Upload another jpg with 64KiB block blob using Cool access tier and add a Blob index tag on the uploaded blob file by using the Key/Value pair of source / Archive</li>
</ol>
<blockquote>
<p>Note that the list of blob files is sorted by file name alphabetically not by creation time.</p>
</blockquote>
<ol start="8">
<li><p>Open the Web App home page from the <strong>wa49292475</strong> app service blade in the portal, and then select the <strong>Test Blob Containers</strong> link to open the File Test page.</p>
<ul>
<li><p>On the Azure portal home page, select <strong>All resources</strong>, and then select the <strong>wa49292475</strong> App Service.</p>
</li>
<li><p>On the wa49292475 Overview page, in default domain, select the <a target="_blank" href="http://wa49292475.azurewebsites.net"><strong>wa49292475.azurewebsites.net</strong></a> link to open the home page.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741802090756/3952580f-2124-485a-92da-ba1270654608.png" alt class="image--center mx-auto" /></p>
<ol start="9">
<li><p>On the home page, select the <strong>Test Blob Containers</strong> link to open the File Test page.</p>
<p> <img src="https://labondemand.blob.core.windows.net/content/lab180905/instructions232778/8buut21c.jpg" alt="Web app home page" /></p>
</li>
<li><p>The File Test page should be displayed.</p>
</li>
</ol>
<p><img src="https://labondemand.blob.core.windows.net/content/lab180905/instructions232778/zpr624bz.jpg" alt="The File Test page" /></p>
<ol start="11">
<li><p>put the storage account name and key and click on test then the File Test page should be displayed after the test.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741802651839/f40c9deb-1668-447c-be38-d6d91b1db03d.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p>The Test Status should be set to 1 to show success.</p>
<p>You have provided the storage account name and the access key to the web app so it has <em>full access</em> to the storage account and is able to list the blob files in the container.</p>
<ul>
<li>On the File Test page, open the blob files by using the links provided. You should see your image files open in the browser.</li>
</ul>
<blockquote>
<p>When you open the blob files by using the links provided, you are then accessing the files by using <em>anonymous read</em> operations outside of the application. This shows the <em>blob public access level</em> in action.</p>
</blockquote>
<hr />
<h1 id="heading-configure-blob-storage-with-private-access">Configure Blob Storage with Private Access</h1>
<p>In this Challenge Lab, you will configure storage for various binary large object (blob) files used by a web app. First, you will create a storage account that has a private blob container, and then you will upload blob files to the container. Next, you will generate a shared access signature (SAS), and then you will configure application settings in a web app. Finally, you will test the configuration using a test page provided with the web app.</p>
<ol>
<li><p>Create a storage account with standard performance and LRS redundency setting</p>
</li>
<li><p>add a blob container with private access level</p>
</li>
</ol>
<ul>
<li><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741807282011/4d58ec7c-d4f5-4c43-9277-85267171a893.png" alt class="image--center mx-auto" /></li>
</ul>
<blockquote>
<p><em>Public access level</em> set to <em>Private</em> (the default) means that blobs within the container cannot be read by anonymous request. Permissions must be granted either through a Shared Access Signature (SAS) key or through Role-Based Access Control (RBAC).</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741807486816/0b5d7f2d-144c-4350-b16e-c61e57ba65d5.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Upload an image with 64 KiB block and Hot access tier with blob index of source/private files</li>
</ol>
<blockquote>
<p>Bob index tags can be set when a file is uploaded or afterward. A tag consists of a simple key value pair, and it can be retrieved by applications, by using Azure Cloud Shell, or by using command line (CLI) tools.</p>
</blockquote>
<ol start="4">
<li><p>Upload a second image with 256 KiB block and Cool access tier with blob index of source/private files</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741808072579/332d99a4-c672-4726-b075-766454856eda.png" alt class="image--center mx-auto" /></p>
<p> go to web app and add these settings on environment variable, storage name and key:</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741808419488/59468a59-cab6-4323-80ed-282c90dc1fdf.png" alt class="image--center mx-auto" /></p>
<p> Add the key:</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741808646187/8be39efc-2b8b-4341-8e4d-61d58a700549.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p>7. Open the Web App home page from the <strong>wa49297340</strong> blade in the portal, ensure that the Status is <strong>Running</strong>, and then select the <strong>Test Blob Containers</strong> link to open the File Test page.</p>
<p><img src="https://labondemand.blob.core.windows.net/content/lab180906/instructions232779/ue603mx3.jpg" alt="Web app home page" /></p>
<ol start="8">
<li><p>Since its not public wee should get an error message:</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741808880113/084eaede-b8cd-4601-ad09-65194393f7e7.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>On the File Test page, locate the message: <em>These are the files in the private container with a SAS. These links should return files.</em></p>
</li>
<li><p>Open the blob files by using the links provided—you should see your image files open in the browser.</p>
</li>
</ol>
<hr />
<h1 id="heading-can-you-provision-public-and-private-blob-storage-for-a-web-app">Can You Provision Public and Private Blob Storage for a Web App?</h1>
<p>In this Challenge Lab, you will configure storage for various files used by a web app. First, you will create a storage account that has public and private blob containers, and then you will upload files to both containers. Next, you will generate a shared access signature for the private container, and then you will configure application settings in a web app. Finally, you will test the configuration using a test page provided by the web app.</p>
<ol>
<li><p>Create a storage account with standard performance and LRS setting and enable the anonymous access on advanced tab.</p>
</li>
<li><p>Add a blob container with public access set to blob</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741819119166/e3a12d77-6f40-408e-aabe-0c490227fcd5.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><p>Add another one with public access set to private:</p>
</li>
<li><p>Keep record of key1 of storage account access key</p>
</li>
<li><p>Upload an image to public container as a 256 KiB block blob using Hot access tier (Key index source /Portal)</p>
</li>
<li><p>Upload the second image to private container as a 256 KiB block blob using Cool access tier</p>
</li>
<li><p>Generate a SAS token for the <strong>private</strong> container that allows <strong>read</strong> access for 8 hours and keep the token value</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741823226244/78ae5dcd-2f4c-4c62-87ab-a835f36c3d71.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Add these three applicaion settings to the web app</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741823623076/7bcb293b-2777-4e51-ba4d-11822980db5a.png" alt class="image--center mx-auto" /></p>
<ol start="9">
<li>on the web app file test page select test: (test status should be set to 3 to show success)The first and third links should return files. The second link should fail.</li>
</ol>
<p><img src="https://labondemand.blob.core.windows.net/content/lab180907/instructions232780/rsivn5do.jpg" alt="The File Test page after test" /></p>
<hr />
<h1 id="heading-create-linux-vm-in-an-availability-set">Create Linux VM in an Availability Set</h1>
<p>In this challenge, you will enhance the redundancy of a front-end server tier to ensure continuous application availability during update reboots and potential failures of power sources or network switches. You will begin by creating an availability set, followed by generating an SSH key pair. Finally, you will deploy two Linux virtual machines within the availability set to maintain resilience and uptime.Create a managed availability set named app-frontend-avset in the <strong>rg1lod49333628</strong> resource group by using 2 fault domains and 5 update domains.</p>
<ol>
<li>Create a managed availability set named app-frontend-avset in the <strong>rg1lod49347139</strong> resource group by using 2 fault domains and 5 update domains (Use managed disk)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741883867720/1d087f27-a219-43d8-b07e-893458ec408e.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>Create an SSH key pair that uses the rsa algorithm, a key size of 4096 bits, the default file path, and no passphrase by using the ssh-keygen command</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741916375178/0b269e49-646b-4959-952f-1a2b74e63555.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>You can create an SSH key pair by using the <em>ssh-keygen</em> command, and then you can use the key pair when you create a Linux virtual machine in Azure.</p>
</blockquote>
<ol start="3">
<li>Run the following command to display the generated RSA public key:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741916501804/ce166635-9bda-411d-addf-3d86edf258c4.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Create an Azure virtual machine by using the values in the following table.</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Property</strong></td><td><strong>Value</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Resource group</td><td><strong>rg1lod49347139</strong></td></tr>
<tr>
<td>Name</td><td>app-frontend-vm1</td></tr>
<tr>
<td>Availability options</td><td><strong>Availability set</strong></td></tr>
<tr>
<td>Availability set</td><td><strong>app-frontend-avset</strong></td></tr>
<tr>
<td>Image</td><td><strong>Ubuntu Server <em>latest version</em> LTS - Gen2</strong></td></tr>
<tr>
<td>Size</td><td>DS1_v2</td></tr>
<tr>
<td>SSH public key source</td><td><strong>Use existing public key</strong></td></tr>
<tr>
<td>SSH public key</td><td>(Copy the key from your text editor.)</td></tr>
<tr>
<td>Boot diagnostics</td><td><strong>Disable</strong></td></tr>
</tbody>
</table>
</div><ol start="5">
<li>Create a second Azure virtual machine by using the values in the following table. For any property that is not specified, use the default value.</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Property</strong></td><td><strong>Value</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Resource group</td><td><strong>rg1lod49347139</strong></td></tr>
<tr>
<td>Name</td><td>app-frontend-vm2</td></tr>
<tr>
<td>Availability options</td><td><strong>Availability set</strong></td></tr>
<tr>
<td>Availability set</td><td><strong>app-frontend-avset</strong></td></tr>
<tr>
<td>Image</td><td><strong>Ubuntu Server <em>latest version</em> LTS - Gen2</strong></td></tr>
<tr>
<td>Size</td><td>DS1_v2</td></tr>
<tr>
<td>SSH public key source</td><td><strong>Use existing public key</strong></td></tr>
<tr>
<td>SSH public key</td><td>for e.g. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC3pZqVtok84a/Riu83jP4OQwc+1gZMHHvyYf/SeA/JlJeF4RhpKhCgFlN+EGCf99dgvNzcLrn+0Gmga28l354Q124hykCOTZjBbD2J/M0YeS+nciNHkcWjviw419t55ruSF5gpCILiUaRtwYBYsz1y3ee3DRxO4ekA6dhbKLOJ9DuZUyORlqq2quSR4uB0MDr8M1rdF2tpt2oDQnHtabcqy3M4FN6z8B+7GIJba99Vheztc/QEIqW7k9U/JOF6fC80NFvhuihHBxvVRkOJq8ZX+HlvXG45akYrKCyecZfgKySuVZ4FAtdDf0o5QeS/HuLo/tJSSgJTiAVvhJqwwNckGqAR74c0tmjcXFZksTpQoyvzVPEvsS07hPKr2SAXHPXQUGdU1M/vuskJv2pJ2tJ0q2yxL/gaqABW49o7ncxugSK49GRd2ZDEFutdXwCTgh5Y2Rqbk5TN9pGtL7WRznywmKKn9MpdmkFNZV6a9n7/2sQJf7Xk5nCla+W2Hm/3MhInkPKRMq1h9jDn0rMzU1yQUzqDb5+y3+0dzVBgzoCC5HKHsIt1+EcxaXkwgkM20yY4/FCInc+W/0foReakalpe/gRkZAmNasymSyIdbV1kzHlK+NofBe8fbD86jch2RCZEJdVRZIbtlrIAQLFExK4q79a4qkwQH8sjTX81vxAMsw== user1-49347139@SandboxHost-638775051176503819</td></tr>
<tr>
<td>Boot diagnostics</td><td><strong>Disable</strong></td></tr>
</tbody>
</table>
</div><ol start="6">
<li>Verify that <strong>app-frontend-vm1</strong> and <strong>app-frontend-vm2</strong> are in the <strong>app-frontend-avset</strong> availability set.</li>
</ol>
<p><img src="https://labondemand.blob.core.windows.net/content/lab170099/g3mt1t82.jpg" alt="Virtual machines displayed in an availability set" /></p>
<hr />
<h1 id="heading-configure-a-virtual-machine-scale-set">Configure a Virtual Machine Scale Set</h1>
<p>In this challenge, you will configure an Azure virtual machine scale set. First, you will create a scale set that uses load balancing and a common Linux operating system disk image. Next, you will increase the number of virtual machines in the scale set. Finally, you will stop and deallocate a virtual machine instance.</p>
<ol>
<li><p>Create a <strong>Virtual Machine Scale Set (VMSS)</strong> with the following specifications. Use default values for any unspecified properties.</p>
<h4 id="heading-configuration-details"><strong>Configuration Details</strong></h4>
<ul>
<li><p><strong>Resource Group:</strong> <code>rg1lod49347709</code></p>
</li>
<li><p><strong>VMSS Name:</strong> <code>webappscaleset</code></p>
</li>
<li><p><strong>Orchestration Mode:</strong> <code>Uniform</code></p>
</li>
<li><p><strong>Image:</strong> <code>Ubuntu Server (latest version, x64 Gen2)</code></p>
</li>
<li><p><strong>VM Size:</strong> <code>DS1_v2</code></p>
</li>
<li><p><strong>Authentication Type:</strong> <code>Password</code></p>
</li>
<li><p><strong>Username:</strong> <code>azureuser</code></p>
</li>
<li><p><strong>Password:</strong> <code>******</code></p>
</li>
<li><p><strong>Public IP Address:</strong> <code>Enabled</code> (NIC Properties)</p>
</li>
<li><p><strong>Load Balancing Options:</strong> <code>Azure Load Balancer</code></p>
</li>
<li><p><strong>Load Balancer Selection:</strong> <code>Create a new load balancer</code></p>
</li>
<li><p><strong>Load Balancer Name:</strong> <code>webappscaleset-lb</code></p>
</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741918679963/1c930931-177e-44a5-b9aa-f7ec9c3fd5b4.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>Verify that there are two virtual machine instances running in the <strong>webappscaleset</strong> scale set.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741918944342/4b77046c-8c89-4735-84fc-e71af529ae6b.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Increase the number of virtual machine instances to 3 in the webappscaleset scale set that is in the rg1lod49347709 resource group by using the az vmss scale command.</li>
</ol>
<pre><code class="lang-plaintext">az vmss scale --resource-group rg1lod49347709 --name webappscaleset --new-capacity 3
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741919115244/5eeaaa0b-9365-40d5-8e5a-1042d1ac40ad.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Deallocate the <strong>webappscaleset_0</strong> virtual machine instance in the <strong>webappscaleset</strong> scale set(select the <strong>webappscaleset_0</strong> check box, and then on the command bar, select <strong>Stop</strong>).</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741919188993/37816bc2-83e6-454d-b40b-d7ffcc1d7bde.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-work-with-managed-disk-snapshots">Work with Managed Disk Snapshots</h1>
<p>In this challenge, you will create a new test virtual machine that is based on an existing managed disk. First, you will prepare to create a snapshot, and then you will create a snapshot of an existing managed disk. Next, you will create a managed disk from the snapshot. Finally, you will create a virtual machine from the new managed disk.</p>
<ol>
<li><p>Use the ip of the vm and open the auto-scale web app:</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741925166810/d17778aa-81c3-4add-b366-3f7eb2ad5906.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Stop and deallocate the vm</p>
</li>
<li><p>Create a snapshop from the vm disk that you can find in the resource group</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741925364099/be470d2d-7141-40fa-9dc7-03e291f52cf0.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><p>Start the vm again</p>
</li>
<li><p>Create a managed disk in the resource group by using snapshot</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741925510411/8ff48dfb-b7af-4686-88e1-e88cee327ebc.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li>Create a vm that uses new disk created from snapshot (allow inbound http, and ssh and disable boot diagnostics)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741925604153/10c1681f-0b0d-4992-aa6e-1096c117f116.png" alt class="image--center mx-auto" /></p>
<ol start="7">
<li><p>Restart vm2 to reload the web app</p>
</li>
<li><p>Open the web app on vm2, verify that you get the same web</p>
</li>
</ol>
<hr />
<h1 id="heading-can-you-design-and-implement-a-storage-solution-on-an-azure-virtual-machine">Can You Design and Implement a Storage Solution on an Azure Virtual Machine?</h1>
<p>In this Challenge Lab, you will deploy an Azure virtual machine and configure storage. First, you will create a virtual machine. Next, you will add a data disk to the virtual machine. Finally, you will resize the data disk, and then you will create a snapshot.</p>
<ol>
<li>Create a vm with boot diagnostics enabled(with custom storage account)</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741926632570/429fda00-1ba9-41a8-a3fb-dd9412c9c90c.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>create a new disk and attach it to the vm</p>
</li>
<li><p>remote to the vm and initialize the disk and create a folder in the disk</p>
</li>
<li><p>minimize the remote desktop and create the snapshot of the disk</p>
</li>
<li><p>Enable guest-level monitoring for <strong>VM1</strong> by using the storage account.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741927470779/1082f06a-7958-42d1-9782-d119cf8562c5.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li>Display the tables created for guest-level monitoring in the <strong>corpdatalod49350227diag</strong> storage account.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741927821214/b503b2a5-d203-4253-918a-ff8c68424158.png" alt class="image--center mx-auto" /></p>
<ol start="7">
<li>Create a chart that displays the \LogicalDisk(_Total)\Disk Bytes/sec <strong>Guest (classic)</strong> metric for <strong>VM1</strong> and a time range of the <strong>last 30 minutes</strong>.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741928071575/04de9d2c-b1b1-43d5-aaef-94537f8ed850.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741928121941/c2efa589-f3b7-475e-bb26-891bea049e01.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741928189612/63057453-58e5-4ef7-ae5b-22e7ab353d62.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741928292652/63e2ad35-8dcd-45a7-a15b-d35977a814c8.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-can-you-provision-a-serverless-container-based-environment">Can You Provision a Serverless Container-Based Environment?</h1>
<p>In this challenge, you will provision a container-based environment. The environment will include a container registry, a container instance, and a container-based web app.</p>
<ol>
<li>Provision an Azure Container Registry named acr49377787 in the <strong>Archlod49377787</strong> resource group by using the <strong>Basic</strong> Pricing plan.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741995894526/0c0e3105-aa88-44ae-92a2-7faaa02b6577.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Enable admin user for the registry and record the password.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742011173634/cc9a7bae-66dd-4c90-a632-0c4bff41ae29.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Configure an Azure Cloud Shell <strong>Bash</strong> session by using the existing <strong>Archlod49377787</strong> resource group, the existing <strong>sa49377787</strong> storage account, and a new file share named bash.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742011612797/02bbb410-fe15-4146-8d38-7256db7712c5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742011573826/589b0127-764e-4815-9ce5-8e12ee8d9b51.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li>Establish an ssh connection to the Docker host VM by using ssh, <a target="_blank" href="mailto:student@dhpip49380771.eastus.cloudapp.azure.com">student@dhpip49380771.eastus.cloudapp.azure.com</a>++ as the username, and ******* as the password.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742012029602/84e7ea5e-ad2c-425c-831e-3e0d33fbb623.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li>Authenticate by using the Container Registry from the Docker host: docker login <a target="_blank" href="http://acr49380771.azurecr.io">acr49380771.azurecr.io</a> using acr49380771 as the username and **** as the password.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742012274460/f5402ddd-9276-4038-9eae-e494710b47e1.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li>Migrate the notlods/exampleservice:1.0 image from Docker Hub to your Container Registry by using the docker pull, docker tag, and docker push commands.</li>
</ol>
<p>Pull the image from docker hub:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742012508274/d703fba9-eb59-462b-ac04-c94acd0d6ded.png" alt class="image--center mx-auto" /></p>
<p>Tag the image for your azure container registry (ACR):</p>
<p>based on previous info our ACR is: <strong>acr49380771.azurecr.io</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742012946517/5f738b2a-180e-48db-a559-e228fc729adb.png" alt class="image--center mx-auto" /></p>
<p>login to the azure container:(authenticate with ACR before pushing the image)</p>
<p>push the image to ACR:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742013259020/9f22933c-6d1a-49ae-b79b-3120dd6f9811.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-configure-a-near-real-time-metric-alert">Configure a Near Real-Time Metric Alert</h1>
<p>In this challenge, you will configure a near real-time metric alert. First, you will create a Linux virtual machine. Next, you will create an action group, and then you will create a near real-time metric alert that uses the action group. Finally, you will test the alert.</p>
<ol>
<li><p>Open an Azure Cloud Shell <strong>Bash</strong> session without mounting a storage account.</p>
</li>
<li><p>Create a new Linux virtual machine that generates an SSH key pair by using the az vm create command and the values in the following table:</p>
<p> | <strong>Property</strong> | <strong>Value</strong> |
 | --- | --- |
 | Resource group | rg1lod49443856 |
 | Name | VM1 |
 | Image | Ubuntu2204 |
 | Size | Standard_DS1_v2 |
 | Admin Username | azureuser |</p>
</li>
</ol>
<pre><code class="lang-bash">az vm create -g rg1lod49443856 --generate-ssh-keys --name VM1 --image Ubuntu2204 --size Standard_DS1_v2 --admin-username azureuser
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742231160971/6aa9c6d3-0c16-4f29-806a-0f3f6e874fd5.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><p>Kep record the <strong>public IP address</strong> of <strong>VM1</strong></p>
</li>
<li><p>Create an SSH connection to the virtual machine by using azureuser@20.39.47.37</p>
<pre><code class="lang-bash"> ssh azureuser@20.39.47.37
</code></pre>
</li>
<li><p>Update the Linux virtual machine by using the sudo command and the apt-get tool with the update option.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742231414894/ffb72887-a160-459e-b272-2e91039ef735.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li>Create an action group by using the values in the following table. For any property that is not specified, use the default value.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742231565494/3acea7fb-87d1-4e46-a337-dddf427decb5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742231644166/c7f8d37a-ecf5-4b8e-aa2e-6cf675f31a09.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742231839002/a5f7c7b1-bbb9-420d-b8b2-28dc1f418131.png" alt class="image--center mx-auto" /></p>
<p>You can create an action group before or during the creation of an alert rule by using the Azure portal, the <em>Set-AzActionGroup</em> cmdlet , or the <em>az monitor action-group create</em> Azure CLI 2.0 command.</p>
<p>You can use action groups to configure preferences for actions that you want Azure to take when a specific monitored event occurs.</p>
<ol start="4">
<li><p>Verify that your personal email has been added to the Cloud Operations action group(Check your email)</p>
</li>
<li><p>Create an alert rule named Percentage CPU greater than 85 for <strong>VM1</strong> that will send a notification that has a description of Alert when the average Percentage CPU is greater than 85 to the <strong>Cloud Operations</strong> alert group.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742233558039/a97b80fd-7c92-4106-a734-cc74840f1d17.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234557489/a27dc95a-52a7-4ef2-a199-b1dc6d36b760.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234646085/9e095c05-c3e0-4a63-8762-a9b653064444.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234686191/5d28fcc5-c759-4ff9-8db7-4ecbca1fdf78.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234745326/7fd33a26-49ad-45f7-afe5-8374bc27ea1f.png" alt class="image--center mx-auto" /></p>
<p>You can create a metric alert rule by using the Azure portal, the <em>Add-AzMetricAlertRuleV2</em> cmdlet, or the <em>az monitor alert create</em> CLI 2.0 command.</p>
<ol start="6">
<li>Establish an SSH connection to VM1 by using Cloud Shell and the apt-get command to install the stress tool.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234849991/9ae04e3b-aebc-4ab2-be32-fab78d82a486.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234873148/01673403-4ea5-403b-b649-2fdbeab8bd61.png" alt class="image--center mx-auto" /></p>
<ol start="7">
<li>Use the stress tool to generate a CPU load of 8 hogs on the virtual machine for a period of 480 seconds:</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742234946152/73e5f87f-bb39-4286-810c-235d72ae8d5b.png" alt class="image--center mx-auto" /></p>
<ol start="8">
<li>Leave the Cloud Shell window open to ensure that the generated CPU load triggers a notification alert. It may take up to 10 minutes for the alert to become active.</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742240042896/b03d4056-58d3-4f1f-89c6-14588f1c2804.png" alt class="image--center mx-auto" /></p>
<p>You have accomplished the following:</p>
<ul>
<li><p>Created a Linux virtual machine.</p>
</li>
<li><p>Created an action group.</p>
</li>
<li><p>Created a near real-time metric alert on a virtual machine.</p>
</li>
<li><p>Tested the near real-time metric alert.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Privileged administrator roles vs Job function roles:]]></title><description><![CDATA[Privileged Administrator Roles:

Broad Scope: These roles grant extensive permissions across a wide range of Azure resources and services. They often have the ability to manage core aspects of your Azure environment, including users, subscriptions, a...]]></description><link>https://shirincloudlab.com/privileged-administrator-roles-vs-job-function-roles</link><guid isPermaLink="true">https://shirincloudlab.com/privileged-administrator-roles-vs-job-function-roles</guid><dc:creator><![CDATA[Shirin Soodmand]]></dc:creator><pubDate>Wed, 05 Mar 2025 18:56:31 GMT</pubDate><content:encoded><![CDATA[<p><strong>Privileged Administrator Roles:</strong></p>
<ul>
<li><p><strong>Broad Scope:</strong> These roles grant extensive permissions across a wide range of Azure resources and services. They often have the ability to manage core aspects of your Azure environment, including users, subscriptions, and resource groups.   </p>
</li>
<li><p><strong>High Impact:</strong> Actions taken by privileged administrators can have significant consequences for your organization's security and operations.  They can potentially impact the availability, integrity, and confidentiality of your data and systems.   </p>
</li>
<li><p><strong>Examples:</strong> Global Administrator, Security Administrator, User Access Administrator, Privileged Role Administrator</p>
</li>
<li><p><strong>Key Characteristics:</strong></p>
<ul>
<li><p>Elevated permissions   </p>
</li>
<li><p>Wider access to resources</p>
</li>
<li><p>Greater potential for impact (positive or negative)</p>
</li>
</ul>
</li>
</ul>
<p><strong>Job Function Roles:</strong></p>
<ul>
<li><p><strong>Specific Scope:</strong> These roles are designed to provide permissions necessary for performing specific tasks or functions within Azure. They have a narrower scope of access, limited to the resources and services relevant to the job role.   </p>
</li>
<li><p><strong>Controlled Impact:</strong> The impact of actions taken by users with job function roles is typically limited to the specific area they are responsible for.</p>
</li>
<li><p><strong>Examples:</strong> Virtual Machine Contributor, Storage Account Contributor, Network Contributor, Website Contributor   </p>
</li>
<li><p><strong>Key Characteristics:</strong></p>
<ul>
<li><p>Granular permissions</p>
</li>
<li><p>Focused access to specific resources</p>
</li>
<li><p>Limited potential for broader impact</p>
</li>
</ul>
</li>
</ul>
<p><strong>Why the Distinction Matters:</strong></p>
<ul>
<li><p><strong>Security:</strong> Separating privileged administrator roles from job function roles helps to enforce the principle of least privilege. This means granting users only the permissions they need to perform their jobs, reducing the risk of accidental or malicious misuse of privileges.   </p>
</li>
<li><p><strong>Operational Efficiency:</strong> Assigning job function roles allows users to efficiently manage the resources they are responsible for without needing excessive permissions that could potentially affect other parts of the environment.</p>
</li>
<li><p><strong>Compliance:</strong> Many regulatory frameworks and compliance standards require organizations to implement strong access controls and segregation of duties. Using a combination of privileged administrator roles and job function roles helps to meet these requirements.   </p>
</li>
</ul>
<p><strong>In Summary:</strong></p>
<p>Privileged administrator roles are like the "superusers" of your Azure environment, while job function roles are tailored to specific responsibilities. By carefully assigning these roles, you can maintain a secure, efficient, and compliant Azure environment.</p>
]]></content:encoded></item><item><title><![CDATA[Lab 11: Implement Monitoring with Azure Monitor]]></title><description><![CDATA[Introduction
This lab provides hands-on experience with Azure Monitor, a powerful platform for collecting, analyzing, and acting on telemetry from your Azure and on-premises environments. You'll learn to create alerts, configure notifications, and ex...]]></description><link>https://shirincloudlab.com/lab-11-implement-monitoring-with-azure-monitor</link><guid isPermaLink="true">https://shirincloudlab.com/lab-11-implement-monitoring-with-azure-monitor</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Tue, 04 Mar 2025 22:44:22 GMT</pubDate><content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>This lab provides hands-on experience with Azure Monitor, a powerful platform for collecting, analyzing, and acting on telemetry from your Azure and on-premises environments. You'll learn to create alerts, configure notifications, and explore Log Analytics to gain insights into your resources.</p>
<p><strong>Definitions</strong></p>
<ul>
<li><p><strong>Azure Monitor:</strong> A comprehensive service in Azure that provides a single platform for collecting, analyzing, and acting on telemetry from your cloud and on-premises environments. It helps you understand how your applications are performing and proactively identify   <sup> 1 </sup>   issues affecting them and the resources they depend   <sup> 2 </sup>   on.   <a target="_blank" href="https://learn.microsoft.com/en-us/azure/networking/fundamentals/networking-overview">1. learn.microsoft.com learn.microsoft.com</a><a target="_blank" href="https://github.com/Azure/Hadoop-Migrations">2. github.com github.com</a></p>
</li>
<li><p><strong>Alert Rules:</strong> Defined conditions that monitor your Azure resources and trigger notifications when those conditions are met. For example, you might create an alert rule to notify you if a virtual machine's CPU usage exceeds a certain threshold.</p>
</li>
<li><p><strong>Action Groups:</strong> A collection of notification preferences that define how you want to be notified when an alert is triggered. This can include email, SMS, push notifications, or even automated actions like running an Azure Function.</p>
</li>
<li><p><strong>Log Analytics:</strong> A tool within Azure Monitor that allows you to collect and analyze log data from various sources, including your Azure resources, applications, and on-premises systems. You can use Log Analytics to perform queries, create visualizations, and gain insights into your environment.</p>
</li>
<li><p><strong>Alert Processing Rules:</strong> Rules that allow you to further customize the behavior of your alerts. This includes suppressing notifications during specific time periods, changing the severity of alerts, or adding additional actions to be taken when an alert is triggered.</p>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-104-MicrosoftAzureAdministrator/master/Instructions/media/az104-lab11-architecture.png" alt="Diagram of the architecture tasks" /></p>
<p><strong>Scenario</strong></p>
<p>Your organization relies on Azure infrastructure. To ensure operational stability, you need to implement monitoring to detect and respond to critical events, such as virtual machine deletions. You'll use Azure Monitor to create alerts, define notification actions, and analyze logs.</p>
<p><strong>Learning Objectives</strong></p>
<p>By the end of this lab, you will be able to:</p>
<ul>
<li><p>Deploy a virtual machine for testing monitoring scenarios.</p>
</li>
<li><p>Create alert rules in Azure Monitor.</p>
</li>
<li><p>Configure action groups to receive alert notifications.</p>
</li>
<li><p>Trigger an alert and verify its functionality.</p>
</li>
<li><p>Configure alert processing rules to manage alert behavior.</p>
</li>
<li><p>Use Azure Monitor Log Analytics to query resource data.</p>
</li>
</ul>
<h2 id="heading-job-skills">Job skills</h2>
<ul>
<li><p>Task 1: Use a template to provision an infrastructure.</p>
</li>
<li><p>Task 2: Create an alert.</p>
</li>
<li><p>Task 3: Configure action group notifications.</p>
</li>
<li><p>Task 4: Trigger an alert and confirm it is working.</p>
</li>
<li><p>Task 5: Configure an alert processing rule.</p>
</li>
<li><p>Task 6: Use Azure Monitor log queries.</p>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-104-MicrosoftAzureAdministrator/master/Instructions/media/az104-lab11-architecture.png" alt="Diagram of the architecture tasks" /></p>
<p><strong>Task 1: Provision a Virtual Machine</strong></p>
<ol>
<li><p><strong>Sign in to the Azure portal:</strong> <code>https://portal.azure.com</code></p>
</li>
<li><p><strong>Deploy from a custom template:</strong> Search for and select "Deploy a custom template" and select "Build your own template in the editor".</p>
<ul>
<li>Select "Load file" and choose the <code>az104-11-vm-template.json</code> file. and select "Save".</li>
</ul>
</li>
<li><p><strong>Configure deployment:</strong></p>
<ul>
<li><p><strong>Subscription:</strong> Your Azure subscription</p>
</li>
<li><p><strong>Resource group:</strong> <code>az104-rg11</code> (create new if needed)</p>
</li>
<li><p><strong>Region:</strong> East US</p>
</li>
<li><p><strong>Username:</strong> <code>localadmin</code> and strong password.</p>
</li>
</ul>
</li>
<li><p><strong>Deploy:</strong></p>
<ul>
<li><p>Select "Review + Create" and then "Create".</p>
</li>
<li><p>Wait for deployment to complete.</p>
</li>
<li><p>Go to the resource group to verify the virtual machine and network are deployed.</p>
</li>
</ul>
</li>
</ol>
<p><strong>Task 2: Enable Azure Monitor for VMs</strong></p>
<ol>
<li><p><strong>Navigate to Monitor:</strong> Search for and select "Monitor" in the Azure portal.</p>
</li>
<li><p><strong>Enable VM Insights:</strong></p>
<ul>
<li><p>Select "Insights" in the left-hand menu.</p>
</li>
<li><p>Select "Virtual Machines" (under "Compute" if necessary).</p>
</li>
<li><p>Select your virtual machine and click "Enable".</p>
</li>
<li><p>Accept the defaults and select "Enable" again and then configure.</p>
</li>
<li><p>Allow a few minutes for the agent to install.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741194786490/ff0c872e-113e-4d4e-9de5-d4ab547e7e55.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741194853224/c93fbea5-cdee-4091-a4c4-abfdcb02882f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741194913090/0963cf09-4b97-4092-be66-e830e79caa82.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-3-create-an-alert-rule"><strong>Task 3: Create an Alert Rule</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741195573241/60a37d9f-c20b-4231-aeaa-fd0a7dcaa329.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Go to Alerts:</strong> In the Monitor page, select "Alerts" in the left-hand menu.</p>
</li>
<li><p><strong>Create an alert rule:</strong></p>
<ul>
<li><p>Select "Create +" and then "Alert rule".</p>
</li>
<li><p>Select the resource group (<code>az104-rg11</code>) and click "Apply".</p>
</li>
</ul>
</li>
<li><p><strong>Define the alert condition:</strong></p>
<ul>
<li><p>Select "Condition" and then "See all signals".</p>
</li>
<li><p>Search for and select "Delete Virtual Machine (Virtual Machines)".</p>
</li>
<li><p>Click "Apply".</p>
</li>
<li><p>In the "Alert logic" area, keep the default "Event level" and "Status" settings.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741195689481/1bf7023a-3790-4b0c-adb1-c90a20d13b66.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-4-configure-an-action-group"><strong>Task 4: Configure an Action Group</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741195847868/3ab9a438-62ff-43ea-97d2-b26b70946461.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741195914486/28d161ba-688d-4e38-abf0-061887d86aee.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741195929451/ec1c4774-275f-4a65-aa0e-3419181bda5b.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Create an action group:</strong> In the alert rule creation pane, select "Next: Actions" and select "Create action group".</p>
</li>
<li><p><strong>Provide action group details:</strong></p>
<ul>
<li><p><strong>Subscription:</strong> Your Azure subscription</p>
</li>
<li><p><strong>Resource group:</strong> <code>az104-rg11</code></p>
</li>
<li><p><strong>Region:</strong> Global (default)</p>
</li>
<li><p><strong>Action group name:</strong> <code>AlertOpsTeam</code> (or a unique name)</p>
</li>
<li><p><strong>Display name:</strong> <code>Alert the operations team</code></p>
</li>
</ul>
</li>
<li><p><strong>Configure email notification:</strong></p>
<ul>
<li><p>Select "Next: Notifications".</p>
</li>
<li><p><strong>Notification type:</strong> Email/SMS message/Push/Voice</p>
</li>
<li><p><strong>Name:</strong> <code>VM was deleted</code></p>
</li>
<li><p>Select "Email" and enter your email address.</p>
</li>
<li><p>Click "OK".</p>
</li>
</ul>
</li>
<li><p><strong>Finalize alert rule:</strong></p>
<ul>
<li><p>Select "Next: Details".</p>
</li>
<li><p><strong>Alert rule name:</strong> <code>VM was deleted</code></p>
</li>
<li><p><strong>Alert rule description:</strong> <code>A VM in your resource group was deleted</code></p>
</li>
<li><p>Select "Review + create" and then "Create".</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196146843/93f4fb68-20fa-43db-b61f-6e46afa2de38.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196132068/d0215954-2636-4819-b476-a1c2d747b829.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-5-trigger-and-test-the-alert"><strong>Task 5: Trigger and Test the Alert</strong></h2>
<ol>
<li><p><strong>Delete the VM:</strong> Go to "Virtual machines" in the portal and select the <code>az104-vm0</code> virtual machine.</p>
<p> and click "Delete", check "Apply force delete", and confirm the deletion.</p>
</li>
<li><p><strong>Check for notification:</strong> Monitor the notifications in the portal and your email for the alert.</p>
</li>
<li><p><strong>View alert details:</strong> In the Monitor blade, go to "Alerts" select the "VM was deleted" alert to see details.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196512348/61e82b6b-c6b6-4399-bff7-07017581fbfb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196559696/84b43571-021c-4556-a331-543e3a98e84e.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-6-configure-an-alert-processing-rule"><strong>Task 6: Configure an Alert Processing Rule</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196638352/a5337f72-bf47-4a86-b3ec-ddad0129f151.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196667484/d6a28233-26f9-4abe-b6cf-3946431d9109.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Create a processing rule:</strong></p>
<ul>
<li><p>In the "Alerts" blade, select "Manage alert processing rules" at the top.</p>
</li>
<li><p>Click "Create" and then "Suppression rule".</p>
</li>
<li><p>Select your resource group and click "Apply".</p>
</li>
</ul>
</li>
<li><p><strong>Schedule suppression:</strong></p>
<ul>
<li><p><strong>Suppression schedule:</strong> Recurring schedule</p>
</li>
<li><p><strong>Start time:</strong> Today's date at 10 PM</p>
</li>
<li><p><strong>End time:</strong> Tomorrow's date at 7 AM</p>
</li>
<li><p><strong>Time zone:</strong> Your local time zone</p>
</li>
</ul>
</li>
<li><p><strong>Provide rule details:</strong></p>
<ul>
<li><p><strong>Rule name:</strong> <code>Planned Maintenance</code></p>
</li>
<li><p><strong>Description:</strong> <code>Suppress notifications during planned maintenance.</code></p>
</li>
<li><p>Select "Review + create" and then "Create".</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196737107/7f21931d-1b26-4ac6-b275-fc675a5ab060.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741196775784/cd238866-8cd2-4460-bd9f-ec76de2b8db3.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-7-explore-azure-monitor-log-queries"><strong>Task 7: Explore Azure Monitor Log Queries</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741197105612/c207a716-bc0a-4cbb-914d-44a7ec41dab9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741197213072/899289d1-6c02-4e56-bec4-5c64730fc51b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741197253043/b6289fe4-9bc5-4cbf-9270-726b908cbe32.png" alt class="image--center mx-auto" /></p>
<p>no result!</p>
<ol>
<li><p><strong>Open Logs:</strong> In the Azure portal, search for and select "Monitor", then click "Logs" in the left-hand menu. (close the splash screen)</p>
</li>
<li><p><strong>Set scope:</strong> Select your resource group (<code>az104-rg11</code>) and click "Apply".</p>
</li>
<li><p><strong>Run pre-built queries:</strong></p>
<ul>
<li><p>In the "Queries" tab, select "Virtual Machines".</p>
</li>
<li><p>Run the "Count heartbeats" query.</p>
</li>
<li><p>Analyze the results.</p>
</li>
</ul>
</li>
<li><p><strong>Try a custom query:</strong></p>
<ul>
<li><p>Replace the existing query with the following and run it:Code snippet</p>
<pre><code class="lang-plaintext">  InsightsMetrics
  | where TimeGenerated &gt; ago(1h)
  | where Name == "UtilizationPercentage"
  | summarize avg(Val) by bin(TimeGenerated, 5m), Computer 
  | render timechart
</code></pre>
</li>
</ul>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741197487131/e9c0ee11-fcfd-4652-841b-efe7ad0017bf.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p><strong>Cleanup Resources</strong></p>
<p>To avoid unnecessary costs, delete the resource group <code>az104-rg11</code> after you've completed the lab.</p>
<p><strong>Extend your Learning</strong></p>
<ul>
<li><p><strong>Log Analytics Demo Environment:</strong> Practice with more log queries in a dedicated demo environment (provide a link if available).</p>
</li>
<li><p><strong>Microsoft Copilot:</strong> Use Copilot to explore Azure Monitor further:</p>
<ul>
<li><p>Ask questions like:</p>
<ul>
<li><p>"What are the basic configuration steps to be alerted in Azure when a virtual machine is down?"</p>
</li>
<li><p>"How can I be notified when an Azure alert is triggered?"</p>
</li>
<li><p>"Construct an Azure Monitor query to provide virtual machine CPU performance information."</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Self-paced training:</strong></p>
<ul>
<li><p><strong>Improve incident response with alerting on Azure:</strong> [Link to relevant Microsoft Learn module]</p>
</li>
<li><p><strong>Monitor your Azure virtual machines with Azure Monitor:</strong> [Link to relevant Microsoft Learn module]</p>
</li>
</ul>
</li>
</ul>
<p><strong>Key Takeaways</strong></p>
<ul>
<li><p>Azure Monitor provides essential tools for monitoring your Azure resources.</p>
</li>
<li><p>Alert rules help you proactively identify and address issues.</p>
</li>
<li><p>Action groups enable you to define notification methods for alerts.</p>
</li>
<li><p>Alert processing rules offer fine-grained control over alert behavior.</p>
</li>
<li><p>Log Analytics allows you to query and analyze log data for deeper insights.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Lab 10: Implement Data Protection]]></title><description><![CDATA[Objective: This lab introduces Azure Backup and Azure Site Recovery for protecting Azure virtual machines. You'll create a Recovery Services vault, configure VM backups, monitor backup jobs, and enable VM replication for disaster recovery.
Scenario: ...]]></description><link>https://shirincloudlab.com/lab-10-implement-data-protection</link><guid isPermaLink="true">https://shirincloudlab.com/lab-10-implement-data-protection</guid><dc:creator><![CDATA[Amir Rouhanipoor]]></dc:creator><pubDate>Tue, 04 Mar 2025 21:16:34 GMT</pubDate><content:encoded><![CDATA[<p><strong>Objective:</strong> This lab introduces Azure Backup and Azure Site Recovery for protecting Azure virtual machines. You'll create a Recovery Services vault, configure VM backups, monitor backup jobs, and enable VM replication for disaster recovery.</p>
<p><strong>Scenario:</strong> Your organization is evaluating Azure's data protection capabilities. You need to implement a backup solution for Azure VMs and explore Azure Site Recovery for disaster recovery preparedness.</p>
<p><strong>Key Concepts:</strong></p>
<ul>
<li><p><strong>Recovery Services Vault:</strong> A storage entity in Azure that houses backup data and recovery points for protected resources (VMs, databases, etc.). It's the central management point for Azure Backup and Azure Site Recovery.</p>
</li>
<li><p><strong>Backup Policy:</strong> Defines the schedule for backups (frequency) and how long recovery points are retained (retention period).</p>
</li>
<li><p><strong>Azure Backup:</strong> A service for backing up data to a Recovery Services vault. It supports various workloads,including Azure VMs, on-premises servers, and Azure Files.</p>
</li>
<li><p><strong>Azure Site Recovery (ASR):</strong> A disaster recovery service that replicates workloads from a primary site to a secondary location. In case of an outage at the primary site, you can failover to the secondary site.</p>
</li>
<li><p><strong>Replication:</strong> The process of continuously copying data from a source (e.g., a VM) to a target (e.g., a Recovery Services vault in a different region).</p>
</li>
<li><p><strong>Failover:</strong> The process of switching from the primary site to the secondary site (replica) in the event of an outage.</p>
</li>
<li><p><strong>Failback:</strong> The process of switching back to the primary site after the outage is resolved.</p>
</li>
<li><p><strong>Soft Delete</strong>: Helps protect backup data from accidental deletion.</p>
</li>
</ul>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-104-MicrosoftAzureAdministrator/master/Instructions/media/az104-lab10-architecture.png" alt="Diagram of the architecture tasks." /></p>
<ul>
<li><p>Task 1: Use a template to provision an infrastructure.</p>
</li>
<li><p>Task 2: Create and configure a Recovery Services vault.</p>
</li>
<li><p>Task 3: Configure Azure virtual machine-level backup.</p>
</li>
<li><p>Task 4: Monitor Azure Backup.</p>
</li>
<li><p>Task 5: Enable virtual machine replication.</p>
</li>
</ul>
<h2 id="heading-task-1-provision-infrastructure-template"><strong>Task 1: Provision Infrastructure (Template)</strong></h2>
<ol>
<li><p><strong>Download Lab Files:</strong> Download the <code>\Allfiles\Labs\Lab10</code> files (template and parameters: <code>az104-10-vms-edge-template.json</code> and <code>az104-10-vms-edge-parameters.json</code>).</p>
</li>
<li><p><strong>Sign In:</strong> Log in to the Azure portal (<a target="_blank" href="https://portal.azure.com/">https://portal.azure.com</a>).</p>
</li>
<li><p><strong>Deploy Custom Template:</strong></p>
<ul>
<li><p>Search for and select "Deploy a custom template."</p>
</li>
<li><p>Choose "Build your own template in the editor."</p>
</li>
<li><p>Click "Load file" and select <code>az104-10-vms-edge-template.json</code>.</p>
</li>
<li><p>Click "Save."</p>
</li>
<li><p>Click "Edit parameters" and load the <code>az104-10-vms-edge-parameters.json</code> file.</p>
</li>
<li><p>Click Save.</p>
</li>
<li><p><strong>Basics:</strong></p>
<ul>
<li><p>Username: <code>localadmin</code></p>
</li>
<li><p>Password: (Provide a strong password)</p>
</li>
</ul>
</li>
<li><p>Click "Review + create," then "Create."</p>
</li>
</ul>
</li>
<li><p><strong>Go to Resource:</strong> Once deployed, click "Go to resource." (This will take you to the deployed VM, <code>az104-10-vm0</code>).  <em>You should have one VM in one VNet.</em></p>
</li>
</ol>
<h2 id="heading-task-2-create-and-configure-a-recovery-services-vault"><strong>Task 2: Create and Configure a Recovery Services Vault</strong></h2>
<ol>
<li><p><strong>Create Vault:</strong> Search for and select "Recovery Services vaults" and click "+ Create."</p>
<ul>
<li><p><strong>Basics:</strong></p>
<ul>
<li><p>Vault Name: <code>az104-rsv-region1</code></p>
</li>
<li><p>Region: <code>East US</code> (<em>Must be the same region as the VM</em>)</p>
</li>
</ul>
</li>
<li><p>Click "Review + create," then "Create."</p>
</li>
</ul>
</li>
<li><p><strong>Go to Resource:</strong> Once deployed, click "Go to resource."</p>
</li>
<li><p><strong>Configure Storage Redundancy (Before Backups):</strong></p>
<ul>
<li><p>In the vault, under "Settings," select "Properties."</p>
</li>
<li><p>Under "Backup Configuration," click "Update."</p>
</li>
<li><p>Storage replication type: Leave as <code>Geo-redundant</code> (default). <em>Note: This can only be configured before any backups are created.</em> Close the blade.</p>
</li>
<li><p>The <a target="_blank" href="https://learn.microsoft.com/azure/backup/backup-create-recovery-services-vault#set-cross-region-restore">Cross Region Restore</a> option allows you to restore data in a secondary, Azure paired region.</p>
</li>
</ul>
</li>
<li><p><strong>Review Security Settings (Soft Delete):</strong></p>
<ul>
<li><p>Under "Security Settings," click "Update".</p>
</li>
<li><p>Note that "Soft Delete (For workload running in Azure)" is <code>Enabled</code> by default with a 14-day retention.This helps protect against accidental or malicious deletion of backups.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741112159818/0c9f33b8-964f-42c8-b050-73f71672463e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741112350594/51c48890-52cc-4ea7-bbf7-874b432dccaf.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-3-configure-azure-vm-backup"><strong>Task 3: Configure Azure VM Backup</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741112736599/f3693538-60e2-4af3-a459-6b58383dc112.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Initiate Backup:</strong></p>
<ul>
<li><p>In your Recovery Services vault (<code>az104-rsv-region1</code>), click "Overview," then "+ Backup."</p>
</li>
<li><p><strong>Backup Goal:</strong></p>
<ul>
<li><p>Where is your workload running?: <code>Azure</code></p>
</li>
<li><p>What do you want to backup?: <code>Virtual machine</code></p>
</li>
</ul>
</li>
<li><p>Click "Backup."</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741112910794/505af389-321c-4aee-80c6-79c4fab7f2ca.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p><strong>Create Backup Policy:</strong></p>
<ul>
<li><p>Policy sub type: <code>Standard</code></p>
</li>
<li><p>In "Backup policy", select "Create a new policy."</p>
<ul>
<li><p>Policy name: <code>az104-backup</code></p>
</li>
<li><p>Frequency: <code>Daily</code></p>
</li>
<li><p>Time: <code>12:00 AM</code></p>
</li>
<li><p>Timezone: (Select your local time zone)</p>
</li>
<li><p>Retain instant recovery snapshot(s) for: <code>2 Days(s)</code></p>
</li>
<li><p>Click "OK."</p>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741113053507/45daea44-2b3c-45df-8af4-c2f14e1d76f3.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><p><strong>Add VM to Backup:</strong></p>
<ul>
<li><p>In the "Virtual Machines" section, click "Add."</p>
</li>
<li><p>Select <code>az104-10-vm0</code>.</p>
</li>
<li><p>Click "OK."</p>
</li>
<li><p>Click "Enable backup." (<em>Wait for backup to be enabled - about 2 minutes.</em>)</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741113109363/a07209d0-e544-49f1-9e02-58420c2d9409.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741113477518/e210d2c4-5305-4f90-9f46-dbbca46fbfdb.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><p><strong>Trigger an Initial Backup (On-Demand):</strong></p>
<ul>
<li><p>In the Recovery Services vault, under "Protected items", click "Backup items."</p>
</li>
<li><p>Click the "Azure Virtual Machine" entry.</p>
</li>
<li><p>Select "View details" for <code>az104-10-vm0</code>.  <em>Note the "Backup Pre-Check" and "Last Backup Status."</em></p>
</li>
<li><p>Click "Backup now."</p>
</li>
<li><p>Accept the default "Retain Backup Till" date.</p>
</li>
<li><p>Click "OK." (<em>Do NOT wait for the backup to complete; proceed to the next task.</em>)</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741113680714/511d362d-f659-44c2-a6ce-34e0ff33900a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741113706313/9684f159-a1aa-48ed-adfe-3674825b68be.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-4-monitor-azure-backup"><strong>Task 4: Monitor Azure Backup</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741119710916/74b709db-9b8c-4963-b371-d41033f8c708.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Create a Storage Account:</strong> Search for and select "Storage accounts" and click "Create."</p>
<ul>
<li><p><strong>Basics:</strong></p>
<ul>
<li>Storage account name: (Provide a globally unique name)</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Configure Diagnostic Settings:</strong></p>
<ul>
<li><p>Go back to your Recovery Services vault (<code>az104-rsv-region1</code>).</p>
</li>
<li><p>Under "Monitoring," select "Diagnostic settings."</p>
</li>
<li><p>Click "Add diagnostic setting."</p>
<ul>
<li><p>Diagnostic setting name: <code>LogsAndMetricsToStorage</code></p>
</li>
<li><p><strong>Logs Categories:</strong> Check:</p>
<ul>
<li><p><code>AzureBackupReportData</code></p>
</li>
<li><p><code>AddonAzureBackupJobData</code></p>
</li>
<li><p><code>AddonAzureBackupAlertData</code></p>
</li>
<li><p><code>AzureSiteRecoveryJobs</code></p>
</li>
<li><p><code>AzureSiteRecoveryEvents</code></p>
</li>
<li><p><code>Health</code></p>
</li>
</ul>
</li>
<li><p><strong>Destination details:</strong> Check "Archive to a storage account."</p>
</li>
<li><p>Storage account: Select the storage account you just created.</p>
</li>
</ul>
</li>
<li><p>Click "Save."</p>
</li>
</ul>
</li>
<li><p><strong>View Backup Jobs:</strong></p>
<ul>
<li><p>In your Recovery Services vault, under "Monitoring," select "Backup jobs."</p>
</li>
<li><p>Locate the backup job for <code>az104-10-vm0</code>.</p>
</li>
<li><p>Review the job details (status, start time, etc.).</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741119967495/957eb99b-016f-4992-9872-873baf858656.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120098703/398ec627-ef33-4c48-9a21-a47d62e02a69.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120115839/b254e608-b59a-43bb-8f1c-86537a79ae69.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-task-5-enable-virtual-machine-replication-for-disaster-recovery"><strong>Task 5: Enable Virtual Machine Replication (for Disaster Recovery)</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120189306/86679d28-b931-4a50-af65-81f019120113.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Create a Second Recovery Services Vault (in a Different Region):</strong> Search for and select "Recovery Services vaults" and click "+ Create."</p>
<ul>
<li><p><strong>Basics:</strong></p>
<ul>
<li><p>Resource Group: <code>az104-rg-region2</code> (create if it doesn't exist)</p>
</li>
<li><p>Vault Name: <code>az104-rsv-region2</code></p>
</li>
<li><p>Region: <code>Central US</code> (<em>Must be a different region than your VM</em>)</p>
</li>
</ul>
</li>
<li><p>Click "Review + create," then "Create."</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120327237/9384a023-3f97-46ee-a0b1-079b99c569ab.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120432945/bfdb6cc1-6961-4aa4-b988-ae89009d02dc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120511361/8a23c1e9-60bb-4f02-b57e-098d4123a315.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741120550786/246862d6-ff48-4f40-9172-381437d80307.png" alt class="image--center mx-auto" /></p>
<p>** I had to click on create automation account here to be able to activate the “Review + Start replication”</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741121336549/66eb02a7-3370-4b60-a85a-ade39cfa1f5b.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p><strong>Enable Replication on the VM:</strong></p>
<ul>
<li><p>Search for and select the <code>az104-10-vm0</code> virtual machine.</p>
</li>
<li><p>Under <em>Backup + Disaster recovery</em>, select <em>Disaster recovery</em>.</p>
</li>
<li><p>Select <strong>Review + Start replication</strong>.</p>
</li>
<li><p><strong>Basics</strong> tab: Note the Target region.</p>
</li>
<li><p><strong>Advanced Settings</strong> Tab: Review the automatically-selected resources.  <em>Crucially, ensure the “churn for the vmand ” and "Cache storage account" have values. If not, refresh the page, or create a storage account manually and return.</em></p>
</li>
<li><p>Click "Review + Start replication," then "Start replication."</p>
</li>
<li><p><strong>Wait for Replication:</strong> This will take 10-15 minutes. Monitor the notification messages in the portal.</p>
</li>
</ul>
</li>
<li><p><strong>Check Replicated Items:</strong></p>
<ul>
<li><p>Once replication is complete (you'll see a notification), go to your <em>second</em> Recovery Services vault (<code>az104-rsv-region2</code>).</p>
</li>
<li><p>Under "Protected items," select "Replicated items."</p>
</li>
<li><p>You should see <code>az104-10-vm0</code> listed with a "Healthy" replication status. The initial synchronization might still be in progress (showing a percentage). Eventually, it will show "Protected."</p>
</li>
<li><p>Click on the VM to view more details.</p>
</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741122876888/7c59d9d8-03ac-4b16-8389-812e1f450439.png" alt class="image--center mx-auto" /></p>
<p>…</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1741122925957/bdc0d141-6bed-4946-aad9-1488868a0335.png" alt class="image--center mx-auto" /></p>
<p>…</p>
<p><img src="https://raw.githubusercontent.com/MicrosoftLearning/AZ-104-MicrosoftAzureAdministrator/master/Instructions/media/az104-lab10-replicated-items.png" alt="Screenshot of the replicated items page." /></p>
]]></content:encoded></item></channel></rss>