<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Apostolidis Cloud Corner</title>
	<atom:link href="https://www.cloudcorner.gr/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cloudcorner.gr/</link>
	<description>Remarks from a Cloud Architect encounters</description>
	<lastBuildDate>Wed, 31 Jul 2024 10:23:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://www.cloudcorner.gr/wp-content/uploads/2021/04/cropped-cloudcorner2-32x32.png</url>
	<title>Apostolidis Cloud Corner</title>
	<link>https://www.cloudcorner.gr/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Monitor &#038; Dependencies agents at once!</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/monitor-dependencies-agents-at-once/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/monitor-dependencies-agents-at-once/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Fri, 26 Apr 2024 07:30:11 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[dependency agent]]></category>
		<category><![CDATA[dependency analysis]]></category>
		<category><![CDATA[log analytics]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[service map]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=4192</guid>

					<description><![CDATA[<p>Download the two agents from the links below: The Monitor agent needs extravtion. To extract use the command: MMASetup-&#60;platform>.exe /c</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/monitor-dependencies-agents-at-once/">Monitor &amp; Dependencies agents at once!</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Download the two agents from the links below:</p>



<ul class="wp-block-list">
<li><a href="https://go.microsoft.com/fwlink/?LinkId=828603">https://go.microsoft.com/fwlink/?LinkId=828603</a></li>



<li><a href="https://aka.ms/dependencyagentwindows">https://aka.ms/dependencyagentwindows</a></li>
</ul>



<p>The Monitor agent needs extravtion. To extract use the command: MMASetup-&lt;platform>.exe /c /t:&lt;Full Path></p>



<p>e.g.: MMASetup-AMD64.exe /c /t:C:\Temp</p>



<p>Add all files to a network share like: <a href="file://server/share/">\\server\share\</a></p>



<p>φτιάξε ένα bat or cmd file, π.χ. setupagents.bat με το παρακάτω περιεχόμενο αλλά βάλε τα δικά σου shares, workspace ID &amp; Key:</p>



<p>create a bat or cmd file, e.g. setupagents.bat and add the below content. Change the share link, the Workspace ID and Key:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bat" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">net use y: \\server\share\

y:\Setup.exe /qn NOAPM=1 ADD_OPINSIGHTS_WORKSPACE=1 OPINSIGHTS_WORKSPACE_AZURE_CLOUD_TYPE=0 OPINSIGHTS_WORKSPACE_ID="&lt;your workspace ID>" OPINSIGHTS_WORKSPACE_KEY="&lt;your workspace key>" AcceptEndUserLicenseAgreement=1

y:\InstallDependencyAgent-Windows.exe /S /RebootMode=manual

net use y: /delete</pre>



<p>For example, I created the setupagents.bat, and added the files to the network share  <a href="file://dcvm/Temp">\\dcvm\Temp</a> . The content of my setupagents.bat is:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">net use y: \\dcvm\Temp

y:\Setup.exe /qn NOAPM=1 ADD_OPINSIGHTS_WORKSPACE=1 OPINSIGHTS_WORKSPACE_AZURE_CLOUD_TYPE=0 OPINSIGHTS_WORKSPACE_ID="b987ae35-b7e3-44ba-bd27-000000000000" OPINSIGHTS_WORKSPACE_KEY="OZz8YN5A12biINsMbja9PHkZLDdYNNZEw+QDIsAmi0ys/2+000000000000==" AcceptEndUserLicenseAgreement=1

y:\Temp\InstallDependencyAgent-Windows.exe /S /RebootMode=manual

net use y: /delete</pre>



<p>After running the setupagents.bat, both agents are installed. You can check at the programs and features:</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-46.png"><img fetchpriority="high" decoding="async" width="813" height="246" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-46.png" alt="" class="wp-image-4194" style="width:446px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-46.png 813w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-46-300x91.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-46-768x232.png 768w" sizes="(max-width: 813px) 100vw, 813px" /></a></figure>



<p>At the control panel the Microsoft Monitoring Agent will appear and open it to check that it is connected to y our Log Analytics Workspace.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-47.png"><img decoding="async" width="351" height="119" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-47.png" alt="" class="wp-image-4195" style="width:224px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-47.png 351w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-47-300x102.png 300w" sizes="(max-width: 351px) 100vw, 351px" /></a></figure>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-48.png"><img decoding="async" width="786" height="301" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-48.png" alt="" class="wp-image-4196" style="width:520px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-48.png 786w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-48-300x115.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-48-768x294.png 768w" sizes="(max-width: 786px) 100vw, 786px" /></a></figure>



<p>Here is a list of sample Log Search commands for the dependency analysis:</p>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/en-us/previous-versions/azure/azure-monitor/vm/service-map#sample-log-searches">https://learn.microsoft.com/en-us/previous-versions/azure/azure-monitor/vm/service-map#sample-log-searches</a></li>



<li><a href="https://learn.microsoft.com/en-us/azure/migrate/how-to-create-group-machine-dependencies#sample-review-inbound-connections">https://learn.microsoft.com/en-us/azure/migrate/how-to-create-group-machine-dependencies#sample-review-inbound-connections</a></li>
</ul>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fmonitor-dependencies-agents-at-once%2F&amp;linkname=Monitor%20%26%20Dependencies%20agents%20at%20once%21" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fmonitor-dependencies-agents-at-once%2F&amp;linkname=Monitor%20%26%20Dependencies%20agents%20at%20once%21" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fmonitor-dependencies-agents-at-once%2F&#038;title=Monitor%20%26%20Dependencies%20agents%20at%20once%21" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/monitor-dependencies-agents-at-once/" data-a2a-title="Monitor &amp; Dependencies agents at once!"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/monitor-dependencies-agents-at-once/">Monitor &amp; Dependencies agents at once!</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/monitor-dependencies-agents-at-once/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Virtual Desktop (AVD) LAB</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/azure-virtual-desktop-avd-lab/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/azure-virtual-desktop-avd-lab/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Fri, 19 Apr 2024 11:57:35 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[IaC]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[avd]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azure cli]]></category>
		<category><![CDATA[azure virtual desktop]]></category>
		<category><![CDATA[azure vm]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[powershell]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=4091</guid>

					<description><![CDATA[<p>Think of Azure Virtual Desktop, or AVD for short, as your own personal workspace in the cloud. It’s like having</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-virtual-desktop-avd-lab/">Azure Virtual Desktop (AVD) LAB</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Think of Azure Virtual Desktop, or AVD for short, as your own personal workspace in the cloud. It’s like having your Windows 11 or Windows 10 desktop, but you can access it from anywhere. You can even choose to use just specific apps with something called RemoteApp. The cool part? You don’t need any gateway servers. It’s flexible enough to handle all sorts of workloads, and you can use your own image or pick one from the Azure Gallery. Just keep in mind, it’s more for businesses rather than individual users. With AVD, you’re setting up an environment that can grow and change with your needs.</p>



<p>If you’re curious and want to dive deeper into how all this works, I highly recommend checking out the&nbsp;<a is="cib-link" href="https://learn.microsoft.com/en-us/azure/architecture/guide/virtual-desktop/start-here" target="_blank" rel="noreferrer noopener">Azure Virtual Desktop architecture page</a>&nbsp;on the Microsoft Architecture Center. It’s a treasure trove of information!&nbsp;Here you can find the <a href="https://learn.microsoft.com/en-us/azure/architecture/example-scenario/azure-virtual-desktop/azure-virtual-desktop">Azure Virtual Desktop for enterprise</a> page including a Visio diagram that you can download and edit.</p>



<h2 class="wp-block-heading">Table of Contents</h2>



<ol>
<li><a rel="noopener" href="#avdlabsetup">AVD Lab Setup</a></li>
<li><a rel="noopener" href="#diagram">High level diagram of the Lab Setup</a></li>
<li><a rel="noopener" href="#labguidedsteps">LAB Guided Steps</a></li>
<li><a rel="noopener" href="#dc">Domain Controller</a></li>
<li><a rel="noopener" href="#upd">User Profile Disks</a></li>
<li><a rel="noopener" href="#dirsync">Create the DirSync server</a></li>
<li><a rel="noopener" href="#adjoinstorage">Join the Storage Account to the Active Directory Domain Services</a></li>
<li><a rel="noopener" href="#updfileshare">Create the File Share for the User Profile Disks</a></li>
<li><a rel="noopener" href="#fslogixgpo">Configure the FSLogix through Group Policy</a></li>
<li><a rel="noopener" href="#createimage">Create the Image</a></li>
<li><a rel="noopener" href="#hostpool">Create the Host Pool</a></li>
<li><a rel="noopener" href="#assignusers">Assign user to the host pool application group</a></li>
<li><a rel="noopener" href="#useraccess">User access</a></li>
<li><a rel="noopener" href="#updateimage">Update Image</a></li>
<li><a rel="noopener" href="#autoscale">Auto scale &#038; Start VM on connect</a></li>
<li><a rel="noopener" href="#scalingplan">Scaling plan</a></li>
<li><a rel="noopener" href="#automation">Session Limits &#038; Stop the VMs automation</a></li>
<li><a rel="noopener" href="#mfa">Authentication &amp; Security</a></li>
<li><a rel="noopener" href="#ux">User experience &amp; Security</a></li>
<li><a rel="noopener" href="#monitor">Monitoring</a></li>
</ol>



<h2 class="wp-block-heading" id="avdlabsetup">AVD Lab Setup</h2>



<p>We will create an Azure Virtual Desktop environment for 50 remote users that will work in a Pooled session host architecture. What that means? Pooled session hosts means that we will deploy a pool of 7 session hosts (Virtual Machines) where users will be load balanced to any session host in the <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/terminology#host-pools">host pool</a>.</p>



<p>The operating system will be <a href="https://learn.microsoft.com/en-us/mem/intune/fundamentals/azure-virtual-desktop-multi-session">Windows 11 multi-session </a>with Office 365 preinstalled. We will select an Azure marketplace image; we will edit it to do any customizations we need and then we will create a custom image and use it for our AVD deployment. </p>



<p>To store the user profiles we need a persistent storage outside the hosts (virtual machines). We will store the images to an Azure File Share of a Storage Account and we will use the <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-profile-container-azure-ad">FXLogix tool to manage the profile containers</a>.</p>



<h3 class="wp-block-heading" id="diagram">High level diagram of the Lab Setup</h3>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-1.png"><img loading="lazy" decoding="async" width="664" height="742" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-1.png" alt="" class="wp-image-4093" style="width:880px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-1.png 664w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-1-268x300.png 268w" sizes="auto, (max-width: 664px) 100vw, 664px" /></a></figure>



<h2 class="wp-block-heading" id="labguidedsteps">LAB Guided Steps</h2>



<p>Create three Resource Groups, one for Identity, one for Networking and one for the AVD, that will include the AVD Resource, the hosts and the private endpoints, and create the corresponding Virtual Networks. The AVD-Resources Virtual Network will have two subnets, one for the Hosts and one for the Private Endpoint. Finaly peer the identity &amp; resources networks with the networking virtual network.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#create resource groups
az group create -n AVD-Identity-RG -l germanywestcentral
az group create -n AVD-Networking-RG -l germanywestcentral
az group create -n AVD-Resources-RG -l germanywestcentral

#create virtual networks
az network vnet create -n AVD-Identity-VNET -g AVD-Identity-RG --address-prefix 10.56.0.0/24 --subnet-name domain --subnet-prefixes 10.56.0.0/24
az network vnet create -n AVD-Networking-VNET -g AVD-Networking-RG --address-prefix 10.56.1.0/24 --subnet-name AzureFirewallSubnet --subnet-prefixes 10.56.1.0/26
az network vnet subnet create -g AVD-Networking-RG --vnet-name AVD-Networking-VNET -n AzureFirewallManagementSubnet --address-prefixes 10.56.1.64/26
az network vnet create -n AVD-Resources-VNET -g AVD-Resources-RG --address-prefix 10.56.2.0/24 --subnet-name hosts --subnet-prefixes 10.56.2.0/26
az network vnet subnet create -g AVD-Resources-RG --vnet-name AVD-Resources-VNET -n privatelink --address-prefixes 10.56.2.64/26

#create vnet peerings
# Get the id for vnet-1.
vNet1Id=$(az network vnet show -g AVD-Networking-RG --name AVD-Networking-VNET --query id --out tsv)
# Get the id for vnet-2.
vNet2Id=$(az network vnet show -g AVD-Identity-RG --name AVD-Identity-VNET --query id --out tsv)
# Get the id for vnet-3.
vNet3Id=$(az network vnet show -g AVD-Resources-RG --name AVD-Resources-VNET --query id --out tsv)
# peer vnet-1 to vnet-2
az network vnet peering create --name networking-to-identity -g AVD-Networking-RG --vnet-name AVD-Networking-VNET --remote-vnet $vNet2Id --allow-vnet-access
# peer vnet-1 to vnet-3
az network vnet peering create --name networking-to-resources -g AVD-Networking-RG --vnet-name AVD-Networking-VNET --remote-vnet $vNet3Id --allow-vnet-access
# peer vnet-2 to vnet-1
az network vnet peering create --name identity-to-networking -g AVD-Identity-RG --vnet-name AVD-Identity-VNET --remote-vnet $vNet1Id --allow-vnet-access --allow-forwarded-traffic
# peer vnet-3 to vnet-1
az network vnet peering create --name resources-to-networking -g AVD-Resources-RG --vnet-name AVD-Resources-VNET --remote-vnet $vNet1Id --allow-vnet-access --allow-forwarded-traffic

# Create an Azure Firewall Basic and add an allow network rule for the LAN
az network public-ip create --name "azfwpip" --resource-group "AVD-Networking-RG" --location "germanywestcentral" --sku "Standard"
az network public-ip create --name "azfwmpip" --resource-group "AVD-Networking-RG" --location "germanywestcentral" --sku "Standard"
az network firewall create -g AVD-Networking-RG -n AVDFirewall --sku AZFW_VNet --tier Basic --vnet-name AVD-Networking-VNET --conf-name avdIpConfig --m-conf-name avdmIpConfig --m-public-ip azfwmpip --public-ip azfwpip
az network firewall network-rule create --collection-name Net-Coll01 --destination-addresses 10.0.0.0/8 --destination-ports '*' --firewall-name AVDFirewall --name Allow-LAN --protocols Any --resource-group AVD-Networking-RG --priority 200 --source-addresses 10.0.0.0/8 --action Allow
az network firewall network-rule create --collection-name Net-Coll01 --destination-addresses '*' --destination-ports '*' --firewall-name AVDFirewall --name Allow-Internet --protocols Tcp --resource-group AVD-Networking-RG --source-addresses 10.0.0.0/8
az network firewall nat-rule create --collection-name Nat-Coll01 --priority 300 --dest-addr '4.185.80.0' --source-addresses '*' --destination-ports '3389' --firewall-name AVDFirewall --name rdptodc --protocols Any --resource-group AVD-Networking-RG --translated-address 10.56.0.4 --translated-port '3389' --action Dnat

# Create a Route Table (for the lab I created one route table to route all traffic to the Azure Firewall.) and associate it to the identity and resources subnets.
az network route-table create --name Firewall-rt-table --resource-group AVD-Networking-RG --location germanywestcentral --disable-bgp-route-propagation true
az network route-table route create --resource-group AVD-Networking-RG --name route-to-firewall --route-table-name Firewall-rt-table --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address 10.56.1.4
RTiD=$(az network route-table show -g AVD-Networking-RG -n Firewall-rt-table --query id --out tsv)
az network vnet subnet update -n hosts -g AVD-Resources-RG --vnet-name AVD-Resources-VNET --route-table $RTiD
az network vnet subnet update -n privatelink -g AVD-Resources-RG --vnet-name AVD-Resources-VNET --route-table $RTiD
az network vnet subnet update -n domain -g AVD-Identity-RG --vnet-name AVD-Identity-VNET --route-table $RTiD

# create NSG (for the lab I will create just and allow lan rule)
az network nsg create -g AVD-Networking-RG -n AVD-NSG
az network nsg rule create -g AVD-Networking-RG --nsg-name AVD-NSG -n AllowLan --priority 100 --source-address-prefixes 10.0.0.0/8 --source-port-ranges '*' --destination-address-prefixes 10.0.0.0/8 --destination-port-ranges '*' --access Allow --protocol '*' --description "allowlan"
az network nsg rule create -g AVD-Networking-RG --nsg-name AVD-NSG -n AllowLanOut --priority 101 --source-address-prefixes 10.0.0.0/8 --source-port-ranges '*' --destination-address-prefixes 10.0.0.0/8 --destination-port-ranges '*' --access Allow --protocol '*' --description "allowlan" --direction Outbound
NSGId=$(az network nsg show -g AVD-Networking-RG --name AVD-NSG --query id --out tsv)
az network vnet subnet update -g AVD-Identity-RG -n domain --vnet-name AVD-Identity-VNET --network-security-group $NSGId
az network vnet subnet update -g AVD-Resources-RG -n hosts --vnet-name AVD-Resources-VNET --network-security-group $NSGId
az network vnet subnet update -g AVD-Resources-RG -n privatelink --vnet-name AVD-Resources-VNET --network-security-group $NSGId</pre>



<h2 class="wp-block-heading" id="dc">Domain Controller </h2>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Create a network interface with private ip address due to DNS requirements
az network nic create --resource-group AVD-Identity-RG --name "DCNic" --vnet-name "AVD-Identity-VNET" --subnet "domain" --private-ip-address "10.56.0.4"
# Create a virtual machine
az vm create --resource-group AVD-Identity-RG --name "DCVM" --image "win2022datacenter" --size "Standard_D2s_v3" --admin-username "azureuser" --admin-password "your-password" --nics "DCNic"</pre>



<p>Login to the VM and promote to Domain Controller &amp; DNS server. In case you have an on-premises Active Directory environment that you want to use, then you will need a hybrid connectivity (ExpressRoute or VPN) and instead of creating a new Domain, you will need to add this server as an additional domain controller. There are plenty of guides to create an Active Directory domain, like this <a href="https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/deploy/install-active-directory-domain-services--level-100-">Install Active Directory Domain Services (Level 100) | Microsoft Learn</a> . </p>



<p>After the promotion, and once the DNS role is ready, change the DNS settings of all Virtual Networks to the private IP address of the ADDS/DNS server.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Set DNS servers on VNets
az network vnet update --resource-group AVD-Identity-RG --name AVD-Identity-VNET --dns-servers "10.56.0.4"
az network vnet update --resource-group AVD-Networking-RG --name AVD-Networking-VNET --dns-servers "10.56.0.4"
az network vnet update --resource-group AVD-Resources-RG --name AVD-Resources-VNET --dns-servers "10.56.0.4"</pre>



<h2 class="wp-block-heading" id="upd">User Profile Disks</h2>



<p>Create one Storage Account with a Private Endpoint and a Private DNS Zone that is needed to access the Storage Account endpoint. In case of an Enterprise Scale deployment, the Private DNS Zones will be located in a centralized location. The Storage Account name needs to be globally unique.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Create storage account
az storage account create --name avdupd916 -g AVD-Resources-RG -l germanywestcentral --sku 'Standard_LRS' --allow-blob-public-access false --public-network-access Disabled --https-only true

# Get the Storage Account ID
storageAccountId=$(az storage account show -n avdupd916 -g AVD-Resources-RG --query id --output tsv)

# Get the Subnet ID
subnetId=$(az network vnet subnet show -g AVD-Resources-RG -n privatelink --vnet-name AVD-Resources-VNET --query id --out tsv)

# Create the private endpoint
az network private-endpoint create --name avdupd916files --resource-group AVD-Resources-RG --vnet-name AVD-Resources-VNET --subnet $subnetId --private-connection-resource-id $storageAccountId --group-ids file --connection-name avdupd916filesconnection

# Create the private DNS zone
az network private-dns zone create --name 'privatelink.file.core.windows.net' -g AVD-Resources-RG

# Create the private DNS zone group
az network private-endpoint dns-zone-group create --name avddnszonegroup --endpoint-name avdupd916files --private-dns-zone 'privatelink.file.core.windows.net' -g AVD-Resources-RG --zone-name 'privatelink.file.core.windows.net'

#Create a VNET link to the identity VNET
IDVnetId=$(az network vnet show -g AVD-Identity-RG --name AVD-Identity-VNET --query id --out tsv)
az network private-dns link vnet create -g AVD-Resources-RG -n fileslinktoid -z privatelink.file.core.windows.net -v $IDVnetId -e False</pre>



<h4 class="wp-block-heading" id="dirsync">Create the DirSync server</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Create a network interface
az network nic create --resource-group AVD-Identity-RG --name "DSNic" --vnet-name "AVD-Identity-VNET" --subnet "domain"
# Create a virtual machine
az vm create --resource-group AVD-Identity-RG --name "DSVM" --image "win2022datacenter" --size "Standard_D2s_v3" --admin-username "azureuser" --admin-password "your-password" --nics "DSNic"</pre>



<h5 class="wp-block-heading">Sync the AD DS users using DirSync</h5>



<p>Go to the Microsoft Entra Connect / Connect Sync / and download the Microsoft Entra Connect. Install it to the DirSync server and complete the express installation. After this process the AD DS users will be synced to the Entra ID.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-5.png"><img loading="lazy" decoding="async" width="781" height="374" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-5.png" alt="" class="wp-image-4105" style="width:543px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-5.png 781w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-5-300x144.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-5-768x368.png 768w" sizes="auto, (max-width: 781px) 100vw, 781px" /></a></figure>



<h4 class="wp-block-heading" id="adjoinstorage">Join the Storage Account to the Active Directory Domain Services</h4>



<p>The Storage Account needs to be joined to the Active Directory Domain Servers in order to support domain user permissions and SSO. The process is described in this article: <a href="https://learn.microsoft.com/en-us/azure/storage/files/storage-files-identity-ad-ds-enable">Enable AD DS authentication for Azure file shares | Microsoft Learn</a></p>



<ul class="wp-block-list">
<li style="line-height:1.5">Login to the DirSync server</li>



<li style="line-height:1.5"> install the latest .Net Framework <a href="https://dotnet.microsoft.com/en-us/download/dotnet-framework">Download .NET Framework | Free official downloads (microsoft.com)</a> </li>



<li style="line-height:1.5">download the <a href="https://github.com/Azure-Samples/azure-files-samples/releases">AzFilesHybrid </a>module. </li>



<li style="line-height:1.5">Run J<a href="https://learn.microsoft.com/en-us/azure/storage/files/storage-files-identity-ad-ds-enable#run-join-azstorageaccount">oin-AzStorageAccount script</a>, changing the required parameters.</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
# Navigate to where AzFilesHybrid is unzipped and stored and run to copy the files into your path
C:\temp&amp;gt;.\CopyToPSPath.ps1 
# Import AzFilesHybrid module
Import-Module -Name AzFilesHybrid
# Install the Az module and Connect to Azure
Install-Module Az
Connect-AzAccount
# Define parameters
$SubscriptionId = "********-****-****-****-********"
$ResourceGroupName = "AVD-Resources-RG"
$StorageAccountName = "avdupd916"
$SamAccountName = "avdupd916"
$DomainAccountType = "ComputerAccount"
$OuDistinguishedName = "OU=UPD,OU=AVDResources,DC=myavdd,DC=com"
# Select the target subscription for the current session
Select-AzSubscription -SubscriptionId $SubscriptionId 
# Register the target storage account with your active directory environment under the target OU 
Join-AzStorageAccount -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName -SamAccountName $SamAccountName -DomainAccountType $DomainAccountType -OrganizationalUnitDistinguishedName $OuDistinguishedName</pre>



<p>After this process, a computer object will appear at the specified OU and the Storage Account, at the File Share settings will have the identity-based access as Configured.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-2.png"><img loading="lazy" decoding="async" width="540" height="83" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-2.png" alt="" class="wp-image-4100" style="width:384px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-2.png 540w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-2-300x46.png 300w" sizes="auto, (max-width: 540px) 100vw, 540px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-3.png"><img loading="lazy" decoding="async" width="236" height="65" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-3.png" alt="" class="wp-image-4102"/></a></figure>



<p>Create two Groups. One for the AVD Admins and one for the AVD Users. In my case is AVDAdmins and AVDUsers. Wait until the users and groups are synced to the Microsoft Entra ID.</p>



<h4 class="wp-block-heading" id="updfileshare">Create the File Share for the User Profile Disks</h4>



<p>Create the File Share and Add the Admins Group to the &#8220;Storage File Data SMB Share Elevated Contributor&#8221; Role of the Storage Account and the Users Group to the &#8220;Storage File Data SMB Share Contributor&#8221; Role.</p>



<ul class="wp-block-list">
<li>&#8220;avdadmins&#8221; the &#8220;Storage File Data SMB Share Elevated Contributor&#8221; role</li>



<li>&#8220;avdusers: the &#8220;Storage File Data SMB Share Contributor&#8221; role</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># changing to PowerShell cause the Azure Cli caused me some problems. | Create the File Share
New-AzRmStorageShare -ResourceGroupName AVD-Resources-RG -StorageAccountName avdupd916 -Name updhare</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Back to Azure Cli | Provide access to the synced groups to the file share. To add a group you will need the object id of the group.
# avdadmins = ********************-0d5db5b092f8
az role assignment create --role "Storage File Data SMB Share Elevated Contributor" --assignee-object-id ********************-0d5db5b092f8 --assignee-principal-type Group --scope "/subscriptions/********************/resourceGroups/AVD-Resources-RG/providers/Microsoft.Storage/storageAccounts/avdupd916/fileServices/default/fileshares/updshare"
# avdusers = ********************-5e934d6f5c7d
az role assignment create --role "Storage File Data SMB Share Contributor" --assignee-object-id ********************-5e934d6f5c7d --assignee-principal-type Group --scope "/subscriptions/********************/resourceGroups/AVD-Resources-RG/providers/Microsoft.Storage/storageAccounts/avdupd916/fileServices/default/fileshares/updshare"</pre>



<p>Assign NTFS permissions to the share</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bat" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># mount the share to a member server to take a drive letter
net use Z: \\avdupd916.file.core.windows.net\updshare
icacls Z: /remove "Authenticated Users"
icacls Z: /remove "Builtin\Users"    
icacls Z: /remove "Creator Owner"
icacls Z: /grant "avdusers:(M)"
icacls Z: /grant "Creator Owner:(OI)(CI)(IO)(M)"</pre>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-7.png"><img loading="lazy" decoding="async" width="935" height="217" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-7.png" alt="" class="wp-image-4112" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-7.png 935w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-7-300x70.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-7-768x178.png 768w" sizes="auto, (max-width: 935px) 100vw, 935px" /></a></figure>



<h2 class="wp-block-heading" id="fslogixgpo">Configure the FSLogix through Group Policy</h2>



<p>Download the <a href="https://aka.ms/fslogix_download">FSLogix</a> zip and copy the admx and adml files to the correct location based to your setup. <a href="https://learn.microsoft.com/en-us/fslogix/how-to-use-group-policy-templates#local-group-policy-editor">Here for more info</a>. Open the Group Policy Management. Create a new GPO and link it to the AVD Hosts OU. If the admx/adml files are copied correctly you should see the FSLogix settings under Computer Configuration / Policies / Administrative Templates</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-18.png"><img loading="lazy" decoding="async" width="498" height="249" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-18.png" alt="" class="wp-image-4126" style="width:314px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-18.png 498w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-18-300x150.png 300w" sizes="auto, (max-width: 498px) 100vw, 498px" /></a></figure>



<p>Settings to configure:</p>



<p><strong>FSLogix / Profile Containers:</strong> </p>



<ol class="wp-block-list">
<li style="line-height:1.5">Enabled = Enabled</li>



<li style="line-height:1.5">VHD Locations: \avdupd916.file.core.windows.net\updshare</li>



<li style="line-height:1.5">DeleteLocalProfileWhenVHDShouldApply = Enabled</li>



<li style="line-height:1.5">LockedRetryCount = 3</li>



<li style="line-height:1.5">LockedRetryInterval = 5</li>



<li style="line-height:1.5">ProfileType = Normal</li>
</ol>



<p><strong>FSLogix / Profile Containers</strong> / Container and Directory Naming</p>



<ol class="wp-block-list">
<li style="line-height:1.5">VolumeType = VHDX</li>



<li style="line-height:1.5">SIDDirNameMatch = %username%.%userdomain%</li>



<li style="line-height:1.5">SIDDirNamePattern = %username%.%userdomain%</li>



<li style="line-height:1.5">VHDNameMatch = %username%</li>



<li style="line-height:1.5">VHDNamePattern = %username%</li>
</ol>



<h2 class="wp-block-heading" id="createimage">Create the Image</h2>



<p>Create a VM from the marketplace. I chose a Windows 11 multi-sesison image with MS apps.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Create a network interface
az network nic create --resource-group AVD-Resources-RG --name "ImageNic" --vnet-name "AVD-Resources-VNET" --subnet "hosts"
#find the image name
az vm image list --location germanywestcentral --publisher microsoftwindowsdesktop --offer office-365 --all --output table
# Create a virtual machine
az vm create --resource-group AVD-Resources-RG --name "ImageVM" --image "MicrosoftWindowsDesktop:office-365:win11-23h2-avd-m365:22631.3447.240409" --size "Standard_D2s_v3" --admin-username "vmadmin" --admin-password "*********" --nics "ImageNic"</pre>



<p>This image already has Microsoft 365, Teams, Edge, OneDrive in a multi-session installation and the FSLogix app to control the user profile disks.  Install whatever application is needed and do any configuration, like language etc. I will install 7-zip &amp; VLC Player just for the customization.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-8.png"><img loading="lazy" decoding="async" width="443" height="149" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-8.png" alt="" class="wp-image-4115" style="width:360px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-8.png 443w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-8-300x101.png 300w" sizes="auto, (max-width: 443px) 100vw, 443px" /></a></figure>



<p>Take a snapshot of the VM disk before performing sysprep. You will need this snapshot when you need to do any updates and customizations to this image. After the sysprep you will no longer be able to spin an Azure VM. It is recommended to stop/deallocate the VM to take the snapshot. Open the Disk resource and press + Create Snapshot</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-26.png"><img loading="lazy" decoding="async" width="726" height="126" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-26.png" alt="" class="wp-image-4137" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-26.png 726w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-26-300x52.png 300w" sizes="auto, (max-width: 726px) 100vw, 726px" /></a></figure>



<p>Generalize the image with sysprep</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bat" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown</pre>



<p>Capture the VM to create the Image. This is done by the Azure Portal, at the VM Overview blade, press Capture. Since the sysprep makes the OS unusable, select to delete the VM after creating the image. I like using the Azure compute gallery to store the images and versions, so I will select to add the image to a gallery.</p>



<ul class="wp-block-list">
<li>Share image to Azure compute gallery: Yes</li>



<li>Automatically delete this virtual machine after creating the image: Yes</li>



<li>Azure compute gallery: AVDACG</li>



<li>Operating system state: Generalized</li>



<li>Target VM image definition: win11-23H2</li>



<li>Version number: 0.0.1</li>



<li>Source virtual machine: imagevm</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-9.png"><img loading="lazy" decoding="async" width="842" height="155" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-9.png" alt="" class="wp-image-4117" style="width:636px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-9.png 842w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-9-300x55.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-9-768x141.png 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></a></figure>



<h2 class="wp-block-heading" id="hostpool">Create the Host Pool</h2>



<p>At the Azure Portal, go to the Azure Virtual Desktop and Create a host pool</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-10.png"><img loading="lazy" decoding="async" width="848" height="224" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-10.png" alt="" class="wp-image-4118" style="width:666px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-10.png 848w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-10-300x79.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-10-768x203.png 768w" sizes="auto, (max-width: 848px) 100vw, 848px" /></a></figure>



<p>Basics: Select the subscription, the Resource Group, the Host Pool Name, location for the metadata, I will create an environment for Desktops, in a Pooled host pool type, so there will be no dedicated VMs per users. </p>



<p>Virtual Machines: Select to add Virtual Machines. Give a prefix up to 12 characters, since AVD will add -## numbering. Select the image from the shared image gallery and how many VMs will be spined in total. At he networking select the network that is prepared for the hosts. For domain join add the UPN of the user (not domain\user, you need user@domain.com), enter the domain name and the OU distinguished name. Finaly add details for the local admin user. </p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-11.png"><img loading="lazy" decoding="async" width="730" height="864" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-11.png" alt="" class="wp-image-4119" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-11.png 730w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-11-253x300.png 253w" sizes="auto, (max-width: 730px) 100vw, 730px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-12.png"><img loading="lazy" decoding="async" width="731" height="762" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-12.png" alt="" class="wp-image-4120" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-12.png 731w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-12-288x300.png 288w" sizes="auto, (max-width: 731px) 100vw, 731px" /></a></figure>



<p>Workspace: Register the host pool to a workspace.</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-13.png"><img loading="lazy" decoding="async" width="723" height="146" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-13.png" alt="" class="wp-image-4121" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-13.png 723w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-13-300x61.png 300w" sizes="auto, (max-width: 723px) 100vw, 723px" /></a></figure>



<p>Advanced: Enable the diagnostic settings. You will need to have prepared a log analytics workspace.</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-14.png"><img loading="lazy" decoding="async" width="716" height="405" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-14.png" alt="" class="wp-image-4122" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-14.png 716w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-14-300x170.png 300w" sizes="auto, (max-width: 716px) 100vw, 716px" /></a></figure>



<p>When the process is complete you will see two computer accounts at you active directory</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-15.png"><img loading="lazy" decoding="async" width="602" height="144" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-15.png" alt="" class="wp-image-4123" style="width:472px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-15.png 602w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-15-300x72.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-15-600x144.png 600w" sizes="auto, (max-width: 602px) 100vw, 602px" /></a></figure>



<p>and at the Azure Portal / Azure virtual Desktop / host pool will see the two hosts ready to connect</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-16.png"><img loading="lazy" decoding="async" width="330" height="147" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-16.png" alt="" class="wp-image-4124" style="width:251px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-16.png 330w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-16-300x134.png 300w" sizes="auto, (max-width: 330px) 100vw, 330px" /></a></figure>



<p>Go to Azure Monitor and enable the monitor for the host virtual machines.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-24.png"><img loading="lazy" decoding="async" width="790" height="492" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-24.png" alt="" class="wp-image-4134" style="width:435px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-24.png 790w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-24-300x187.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-24-768x478.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></a></figure>



<h2 class="wp-block-heading" id="assignusers">Assign users access to the Azure Virtual Desktop hosts</h2>



<p>For the users to be able to see the session and connect, they need to be assigned access to the application group of the specific host pool. Go to the Azure Virtual Desktop / Host Pools / YourHostPool / Application Groups / YourApplicationPool Assignments and add the AVD Users group.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-17.png"><img loading="lazy" decoding="async" width="672" height="501" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-17.png" alt="" class="wp-image-4125" style="width:880px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-17.png 672w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-17-300x224.png 300w" sizes="auto, (max-width: 672px) 100vw, 672px" /></a></figure>



<h2 class="wp-block-heading" id="useraccess">User access</h2>



<p>AVD Web Access: <a href="https://aka.ms/avdweb">https://aka.ms/avdweb</a></p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-19.png"><img loading="lazy" decoding="async" width="542" height="372" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-19.png" alt="" class="wp-image-4128" style="width:374px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-19.png 542w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-19-300x206.png 300w" sizes="auto, (max-width: 542px) 100vw, 542px" /></a></figure>



<p>AVS Client for Windows, MacOS, iOS, Android, ChromeOS &amp; Thin Clients: <a href="https://aka.ms/avdclient">https://aka.ms/avdclient</a></p>



<p>after the first login, the folder that stores the User Profile Disk will appear at the Azure File Share</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-22.png"><img loading="lazy" decoding="async" width="677" height="210" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-22.png" alt="" class="wp-image-4131" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-22.png 677w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-22-300x93.png 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></a></figure>



<p>Disk Management run as administrator, see the attached VHDX User Profile Disk.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-21.png"><img loading="lazy" decoding="async" width="489" height="381" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-21.png" alt="" class="wp-image-4130" style="width:361px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-21.png 489w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-21-300x234.png 300w" sizes="auto, (max-width: 489px) 100vw, 489px" /></a></figure>



<h2 class="wp-block-heading" id="updateimage">Update Image</h2>



<p>There are some options here. If we need to change the OS version, either from Windows 10 to 11, or from a version of 11 to another like 22H2 to 23H3, then create a new VM the marketplace with the target version, customize, capture and add it to the gallery as a new version. If you need to make changes to the existing image, create a VM from the image snapshot, customize and add it to the gallery as a new version. </p>



<p>In my lab I will create a VM from the snapshot just to see the process. Find the disk snapshot at the Azure Portal and press +Create Disk. </p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-27.png"><img loading="lazy" decoding="async" width="455" height="169" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-27.png" alt="" class="wp-image-4138" style="width:347px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-27.png 455w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-27-300x111.png 300w" sizes="auto, (max-width: 455px) 100vw, 455px" /></a></figure>



<p>Open the disk and Create VM</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-28.png"><img loading="lazy" decoding="async" width="387" height="143" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-28.png" alt="" class="wp-image-4139" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-28.png 387w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-28-300x111.png 300w" sizes="auto, (max-width: 387px) 100vw, 387px" /></a></figure>



<p>Once the VM is ready do any customizations and run Sysprep, the same way we run it for the initial image, then Capture the VM and select to add it to the gallery as a new version. I selected the same gallery, the same VM image definition, since it is still win11, and I changed the version number. </p>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex">
<ul class="wp-block-list">
<li style="line-height:1.5">Share image to Azure compute gallery: Yes</li>



<li style="line-height:1.5">Automatically delete this virtual machine after creating the image: Yes</li>



<li style="line-height:1.5">Azure compute gallery: AVDACG</li>



<li style="line-height:1.5">Operating system state: Generalized</li>



<li style="line-height:1.5">Target VM image definition: win11-23H2</li>



<li style="line-height:1.5">Version number:<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-primary-color"> <strong>0.0.2</strong></mark></li>



<li style="line-height:1.5">Source virtual machine: imagevm</li>
</ul>



<p>The process of updating the host pool</p>



<ul class="wp-block-list">
<li>Add new hosts to the host pool, selecting the latest image</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-32.png"><img loading="lazy" decoding="async" width="637" height="244" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-32.png" alt="" class="wp-image-4147" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-32.png 637w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-32-300x115.png 300w" sizes="auto, (max-width: 637px) 100vw, 637px" /></a></figure>
</div>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-31.png"><img loading="lazy" decoding="async" width="726" height="74" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-31.png" alt="" class="wp-image-4146" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-31.png 726w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-31-300x31.png 300w" sizes="auto, (max-width: 726px) 100vw, 726px" /></a></figure>



<p>Once the new hosts are ready &amp; Available at the host pool, select the old hosts and turn n drain mode, in order to stop accepting new sessions. After that point all new sessions will go to the new hosts. Once the old hosts are empty, remove them from the pool and delete the VMs.</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-33.png"><img loading="lazy" decoding="async" width="865" height="166" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-33.png" alt="" class="wp-image-4149" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-33.png 865w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-33-300x58.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-33-768x147.png 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></a></figure>



<p>After log off / log on:</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-34.png"><img loading="lazy" decoding="async" width="883" height="161" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-34.png" alt="" class="wp-image-4150" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-34.png 883w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-34-300x55.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-34-768x140.png 768w" sizes="auto, (max-width: 883px) 100vw, 883px" /></a></figure>



<h2 class="wp-block-heading" id="autoscale">Auto scale &amp; Start VM on connect</h2>



<p>There are two options to save a lot of money by using auto scale and start VM on connect. With auto scale, you can have one host running 24/7 and the rest stopped. Once the host reach the max session limit, the AVD will start the next host, until it reaches the maximum hosts created for this host pool. Combining the auto scale with the start VM on connect, even the first host can be stopped, and it will start when the first user will try to logon. With a Scaling Plan, you can have the hosts start and stop based to a schedule, like weekdays and working hours. </p>



<h3 class="wp-block-heading">Some requirements</h3>



<p>You must have a configured Max Session Limit parameter for that host pool &amp; enable the Start VM On connect (if you need this feature too). Those options are at the Host Pool Properties.</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-35.png"><img loading="lazy" decoding="async" width="769" height="523" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-35.png" alt="" class="wp-image-4151" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-35.png 769w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-35-300x204.png 300w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></figure>



<p>you must assign the Desktop Virtualization Power On Off Contributor RBAC role to the Azure Virtual Desktop service principal l with your Azure subscription as the assignable scope. Go to the Subscription / Access Control (AIM, Add role assignment, select Role: &#8220;Desktop Virtualization Power On Off Contributor&#8221;, select member the service principal &#8220;Azure Virtual Desktop&#8221; and assign.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-36.png"><img loading="lazy" decoding="async" width="748" height="204" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-36.png" alt="" class="wp-image-4152" style="width:528px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-36.png 748w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-36-300x82.png 300w" sizes="auto, (max-width: 748px) 100vw, 748px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-39.png"><img loading="lazy" decoding="async" width="885" height="340" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-39.png" alt="" class="wp-image-4155" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-39.png 885w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-39-300x115.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-39-768x295.png 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></a></figure>



<p>At this point, you can stop/deallocate the VMs from the Azure portal and then try to access the SessionDesktop with one user. The user will see a message stating that the VM is starting, and it may take up to 5 minutes and at the host pool you will see the first VM starting. For the LAB, I configured the max sessions to 1, so once I try to login with the second user, I will see the same message and it will start the second VM. If you need at least one VM to stay running, you can add a resource lock and make is read-only so the automation will not be able to deallocate it.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-40.png"><img loading="lazy" decoding="async" width="423" height="126" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-40.png" alt="" class="wp-image-4157" style="width:359px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-40.png 423w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-40-300x89.png 300w" sizes="auto, (max-width: 423px) 100vw, 423px" /></a></figure>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-41.png"><img loading="lazy" decoding="async" width="550" height="114" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-41.png" alt="" class="wp-image-4158" style="width:454px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-41.png 550w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-41-300x62.png 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></a></figure>



<h4 class="wp-block-heading" id="scalingplan">Scaling plan</h4>



<p>Create a Scaling plan. Go to the Azure Virtual Desktop, under Manage select Scaling plans and Create a scaling plan. At the scaling plan you select a General configuration, like weekdays, select a presentence of the host to ramp-up a specific hour, to spin the VMs to be ready for your users in order to don&#8217;t wait 5 minutes for the VM to start on connect, select the peak hours, where most of your users are working, then select the Ramp-down, where a percentage of the hosts will stop. Here you can select if you will force log off the users or it will wait for the last user to log off. <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/autoscale-create-assign-scaling-plan">You can learn more here</a>.</p>



<p>Once the scaling plan is created, select Next: Host pool assignments and assign the Schedule to one or more host pools. </p>



<h4 class="wp-block-heading" id="automation">Session Limits &amp; Stop the VMs automation</h4>



<p>One thing that is recommended is to configure the Session limits for the Remote Desktop Session Hosts. You can use the same GPO as the FSLogix settings, as it is computer configuration too. Open the GPO and go to Computer Configuration &gt; Administrative Templates &gt; Windows Components &gt; Remote Desktop Services &gt; Remote Desktop Session Host &gt; Session Time Limits. </p>



<p>Set time limit for disconnected sessions: End a disconnected session = 30 minutes. Keep in mind that setting this after 30 minutes the disconnected session will be logged off.</p>



<p>If you want to trigger the Hosts to Stop/Deallocate once there are no active sessions, you can leverage Azure Automation account. There are plenty of guides like this: <a href="https://learn.microsoft.com/en-us/answers/questions/1180844/how-to-automate-avd-vm-shutdown-based-on-usage-and">How to automate AVD VM shutdown based on usage and disconnected state? &#8211; Microsoft Q&amp;A</a></p>



<p>The specific guide creates a runbook that runs a PowerShell script that queries the hosts for active sessions. If a host has no active sessions, then it stops the VM. First create a managed identity and assign the &#8220;Desktop Virtualization On Off Contributor&#8221; Azure role at the Hosts Resource Group. I altered it to check all the Session Hosts in a Host Pool:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#Please enable appropriate RBAC permissions to the system identity of this automation account. Otherwise, the runbook may fail

# Authenticate to Azure with user assigned managed identity
try
{
    "Logging in to Azure..."
    Connect-AzAccount -Identity
}
catch {
    Write-Error -Message $_.Exception
    throw $_.Exception
}

# Set the Azure subscription ID, resource group name, and VM name
$subscriptionId = "*************-360a051fbe3d"
$hostPoolName = "AVDPooledHP"
$resourceGroupName = "avd-resources-rg"
$myADDSDomain = ".myavdd.com"

$sessionhosts = Get-AzWvdSessionHost -ResourceGroupName $resourceGroupName -HostPoolName $hostPoolName
foreach ($sessionhost in $sessionhosts) {
$splitText = $sessionhost.name.Split("/")
$hostName = $splitText[1]
$vmName = $hostName.Replace($myADDSDomain, "")
# Get the connected user count
$connectedUserCount = Get-AzWvdSessionHost -ResourceGroupName $resourceGroupName -HostPoolName $hostPoolName -Name $hostName | Select-Object -ExpandProperty Session
# Check if the conditions are met and deallocate the VM
if ($connectedUserCount -eq 0 ) {Stop-AzVM -ResourceGroupName $resourceGroupName -Name $vmName -Force}
}</pre>



<h2 class="wp-block-heading" id="mfa">Authentication &amp; security</h2>



<p>Microsoft Entra ID provides some security features that can help secure the access to the Azure Virtual Desktop. One of those features is the Conditional Access Policies. Conditional Access Policies are essentially if-then statements used to enforce organizational security policies. They bring together various signals (like user or group membership, IP location, device information, etc.) to make access decisions. For example, if a user wants to access a resource, they might be required to complete an action like multifactor authentication. </p>



<p>Add a Policy to require MFA to access Azure Virtual Desktop</p>



<ol class="wp-block-list">
<li>From the Azure Portal go to Microsoft Entra ID / Security / Conditional Access / Create new policy</li>



<li>Users: Select the group that includes the avd users. Mine is &#8220;avdusers&#8221; group.</li>



<li>Target resources: Include / Select apps / Select / Azure Virtual Desktop</li>
</ol>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-43.png"><img loading="lazy" decoding="async" width="632" height="391" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-43.png" alt="" class="wp-image-4181" style="width:509px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-43.png 632w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-43-300x186.png 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></a></figure>



<ul class="wp-block-list">
<li>4. Conditions: Client Apps / select Browser and Mobile apps and desktop clients</li>
</ul>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-44.png"><img loading="lazy" decoding="async" width="880" height="373" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-44.png" alt="" class="wp-image-4182" style="width:742px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-44.png 880w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-44-300x127.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-44-768x326.png 768w" sizes="auto, (max-width: 880px) 100vw, 880px" /></a></figure>



<p>5. Access Controls: Grand / Grand access / Require multi factor authentication</p>



<p>6. Session: It is not required but you can select the frequency that the user will be required to re-authenticate. You can select a periodic authentication and select some hours or some days or you can select every time.</p>



<figure class="wp-block-image size-full is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-45.png"><img loading="lazy" decoding="async" width="922" height="297" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-45.png" alt="" class="wp-image-4183" style="width:752px;height:auto" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-45.png 922w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-45-300x97.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-45-768x247.png 768w" sizes="auto, (max-width: 922px) 100vw, 922px" /></a></figure>



<p>Find out more here: <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/set-up-mfa?tabs=avd">Enforce Microsoft Entra multifactor authentication for Azure Virtual Desktop using Conditional Access &#8211; Azure | Microsoft Learn</a></p>



<h2 class="wp-block-heading" id="ux">User experience &amp; Security</h2>



<p style="line-height:1.5">Many settings can be set directly from the Host Pool RDP Properties, like Device Redirection, Display Settings and Session behavior. Some other security settings, like Screen capture protection and Watermarking must be set by the GPO or Intune, by using the <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/administrative-template?tabs=group-policy-domain">AVD Administrative Template</a>. Once you install the templates the policy settings will be available under Azure Virtual Desktop administrative template is available, browse to Computer Configuration &gt; Policies &gt; Administrative Templates &gt; Windows Components &gt; Remote Desktop Services &gt; Remote Desktop Session Host &gt; Azure Virtual Desktop.</p>



<ul style="line-height:1.5" class="wp-block-list">
<li style="line-height:1.5"><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/screen-capture-protection">Screen capture protection in Azure Virtual Desktop &#8211; Azure | Microsoft Learn</a></li>



<li style="line-height:1.5"><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/watermarking">Watermarking in Azure Virtual Desktop | Microsoft Learn</a></li>
</ul>



<p>In addition, the Hosts can be hardened by using GPO or/and <a href="https://learn.microsoft.com/en-us/mem/intune/fundamentals/azure-virtual-desktop">Intune</a>. </p>



<h2 class="wp-block-heading" id="monitor">Monitoring</h2>



<p>Azure Virtual Desktop Insights have plenty of information about Connection Reliability, Diagnostics, Performance, Users, Utilization, Clients and alerts out-of-the-box. You can customize the Insights dashboards and you can create a Workbook that fit your needs.</p>



<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42.png"><img loading="lazy" decoding="async" width="1024" height="475" src="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42-1024x475.png" alt="" class="wp-image-4161" srcset="https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42-1024x475.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42-300x139.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42-768x356.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42-1320x612.png 1320w, https://www.cloudcorner.gr/wp-content/uploads/2024/04/image-42.png 1358w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-virtual-desktop-avd-lab%2F&amp;linkname=Azure%20Virtual%20Desktop%20%28AVD%29%20LAB" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-virtual-desktop-avd-lab%2F&amp;linkname=Azure%20Virtual%20Desktop%20%28AVD%29%20LAB" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-virtual-desktop-avd-lab%2F&#038;title=Azure%20Virtual%20Desktop%20%28AVD%29%20LAB" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/azure-virtual-desktop-avd-lab/" data-a2a-title="Azure Virtual Desktop (AVD) LAB"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-virtual-desktop-avd-lab/">Azure Virtual Desktop (AVD) LAB</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/azure-virtual-desktop-avd-lab/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bicep: Azure Virtual WAN Playground</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/bicep-azure-virtual-wan-playground/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/bicep-azure-virtual-wan-playground/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Fri, 13 Oct 2023 09:24:26 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[IaC]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azure firewall]]></category>
		<category><![CDATA[azure vm]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[bicep]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[iac]]></category>
		<category><![CDATA[virtual wan]]></category>
		<category><![CDATA[vwan]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=4064</guid>

					<description><![CDATA[<p>Azure Virtual WAN is a networking service that brings many networking, security, and routing functionalities together to provide a single</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/bicep-azure-virtual-wan-playground/">Bicep: Azure Virtual WAN Playground</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://learn.microsoft.com/en-us/azure/virtual-wan/virtual-wan-about">Azure Virtual WAN</a> is a networking service that brings many networking, security, and routing functionalities together to provide a single operational interface. A virtual hub is a Microsoft-managed virtual network that enables connectivity from other resources. When a virtual hub is created from a Virtual WAN in the Azure portal, a virtual hub VNet and gateways (optional) are created as its components.</p>



<p>Recently I created a Bicep code to create an <strong>Azure Virtual WAN with 2 Hubs, Azure Firewalls, and spoke VNETs &amp; VMs</strong>, to use it for PoCs, Labs, and Tests. You can find it at my repo: <a href="https://github.com/proximagr/VWAN"><strong>https://github.com/proximagr/VWAN</strong></a></p>



<p><strong>The script deploys</strong>:</p>



<ul class="wp-block-list">
<li>One Log Analytics workspace</li>



<li>Four VETS, two on each Azure Region.</li>



<li>one VWAN with two VWAN HUBs, each on a different Azure Region.</li>



<li>Two Azure Firewalls inside the VWAN Hubs, each on a different Azure Region. The Azure Firewalls have diagnostic settings sending all logs to a log analytics workspace.</li>



<li>Two Azure Firewalls outside the VWAN Hubs, each on a different Azure Region. The Azure Firewalls have diagnostic settings sending all logs to a log analytics workspace.</li>



<li>Four VMs, Ubuntu, one in each VNET</li>
</ul>



<p><strong>You can choose to</strong>:</p>



<ul class="wp-block-list">
<li>deploy VWAN or not</li>



<li>deploy Azure Firewall inside the VWAN Hubs</li>



<li>deploy VMs or not</li>



<li>deploy Azure Firewall outside the VWAN Hubs or not</li>



<li>how many Public IPs will be created and attached to the Azure Firewalls</li>



<li>The Azure Firewall SKU between Basic and Standard</li>
</ul>



<p><strong>The script does NOT deploy the connections</strong>&nbsp;between the VWAN Hubs &amp; the VNETS. Once the VWAN Hubs are ready, with Hub Status &#8220;Succeeded&#8221;&nbsp;<strong>and</strong>&nbsp;Router Status &#8220;Provisioned&#8221;, create the connections manually. This is because to create a connection the VWAN Hub Router Status must be &#8220;Provisioned&#8221; and currently, the is no way of getting this Status.</p>



<p>The VMs are for testing &amp; troubleshooting. Ubuntu Linux, without Public IP. I usually use the Serial console.</p>



<h2 class="wp-block-heading" id="user-content-deployment-commands-for-azure-cli">Deployment Commands for Azure Cli:</h2>



<p><strong>create the Resource Group</strong>&nbsp;az group create &#8211;name ResourceGroupName &#8211;location PreferedLocation</p>



<p><strong>deploy the bicep script and answer the questions interactively</strong>&nbsp;az deployment group create &#8211;resource-group ResourceGroupName &#8211;template-file main.bicep</p>



<p><strong>deploy the bicep script with the required parameters and choose true false</strong>&nbsp;az deployment group create &#8211;resource-group ResourceGroupName &#8211;template-file main.bicep &#8211;parameters numberOfFirewallPublicIPAddresses=1 adminPassword=&#8217;#########&#8217; adminUserName=&#8217;######&#8217; deployVWAN=true addFirewallToVWAN=true deployFirewall=true deployFirewallBasic=true deployVMs=true</p>



<h2 class="wp-block-heading">Deployment Diagram</h2>



<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white.png"><img loading="lazy" decoding="async" width="702" height="1024" src="https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white-702x1024.png" alt="" class="wp-image-4065" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white-702x1024.png 702w, https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white-206x300.png 206w, https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white-768x1120.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white-1053x1536.png 1053w, https://www.cloudcorner.gr/wp-content/uploads/2023/10/vwan-white.png 1254w" sizes="auto, (max-width: 702px) 100vw, 702px" /></a></figure>



<h2 class="wp-block-heading">VWAN Lab: <a href="https://github.com/proximagr/VWAN">https://github.com/proximagr/VWAN</a></h2>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fbicep-azure-virtual-wan-playground%2F&amp;linkname=Bicep%3A%20Azure%20Virtual%20WAN%20Playground" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fbicep-azure-virtual-wan-playground%2F&amp;linkname=Bicep%3A%20Azure%20Virtual%20WAN%20Playground" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fbicep-azure-virtual-wan-playground%2F&#038;title=Bicep%3A%20Azure%20Virtual%20WAN%20Playground" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/bicep-azure-virtual-wan-playground/" data-a2a-title="Bicep: Azure Virtual WAN Playground"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/bicep-azure-virtual-wan-playground/">Bicep: Azure Virtual WAN Playground</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/bicep-azure-virtual-wan-playground/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NSG Flow Logs review in Log Analytics</title>
		<link>https://www.cloudcorner.gr/microsoft/nsg-flow-logs-review-in-log-analytics/</link>
					<comments>https://www.cloudcorner.gr/microsoft/nsg-flow-logs-review-in-log-analytics/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Mon, 03 Jul 2023 11:03:41 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[flow logs]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[network logs]]></category>
		<category><![CDATA[network security group]]></category>
		<category><![CDATA[nsg]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=4041</guid>

					<description><![CDATA[<p>Azure Network Security Groups (NSGs) actively function as access control devices, effectively filtering network traffic within an Azure virtual network.</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/nsg-flow-logs-review-in-log-analytics/">NSG Flow Logs review in Log Analytics</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Azure Network Security Groups (NSGs) actively function as access control devices, effectively filtering network traffic within an Azure virtual network. By specifying the source and destination, port, and protocol, NSGs ensure secure communication between Azure resources. Moreover, NSGs offer a valuable feature: they can generate NSG flow logs, providing essential information about the IP traffic flowing through the network security group. These logs are instantly injected into a designated Storage Account, enabling administrators to conveniently review them as text files.</p>



<p>While text-based logs offer vital insights, Microsoft Azure takes it a step further by providing Log Analytics, a powerful tool that allows administrators to visualize NSG flow logs. By leveraging Log Analytics, administrators can gain a comprehensive understanding of network traffic patterns and potential security risks. However, it&#8217;s worth noting that Log Analytics has a slight drawback—the polling of logs from the Storage Account occurs every 10 minutes. Therefore, for instant log review, direct access to the storage account is necessary to obtain the most up-to-date information.</p>



<p>Enabling NSG Flow Logs in Log Analytics involves a two-step process. Firstly, you need to create a flow log and traffic analytics workspace. Detailed instructions for setting up flow logs for a single NSG can be found in this Microsoft documentation: <a href="https://learn.microsoft.com/en-us/azure/network-watcher/nsg-flow-logging#create-a-flow-log-and-traffic-analytics-workspace" target="_blank" rel="noreferrer noopener">https://learn.microsoft.com/en-us/azure/network-watcher/nsg-flow-logging#create-a-flow-log-and-traffic-analytics-workspace</a>. Additionally, if you want to deploy NSG flow logs across multiple NSGs using Azure Policy, refer to this guide: <a href="https://learn.microsoft.com/en-us/azure/network-watcher/nsg-flow-logs-policy-portal">Manage NSG flow logs using Azure Policy &#8211; Azure Network Watcher | Microsoft Learn</a>. These resources offer step-by-step instructions to configure NSG Flow Logs according to your specific requirements.</p>



<p>Once NSG Flow Logs are enabled and actively collecting data, accessing and analyzing the logs becomes crucial. To view the logs, navigate to the Log Analytics Workspace, where you&#8217;ll find a built-in query named &#8220;IPv4 NSF Flow Log Search.&#8221; This pre-configured query streamlines the log analysis process, allowing you to efficiently retrieve and examine relevant log data. By utilizing this query, you can filter and manipulate the logs to extract valuable insights on network traffic patterns, potential security incidents, or any other specific information of interest.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1.png"><img loading="lazy" decoding="async" src="https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1-1024x678.png" alt="" class="wp-image-4043" width="578" height="382" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1-1024x678.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1-300x199.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1-768x509.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1-120x80.png 120w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-1.png 1176w" sizes="auto, (max-width: 578px) 100vw, 578px" /></a></figure>



<h2 class="wp-block-heading">Examples</h2>



<p>Let&#8217;s see some custom queries to narrow down the results based on the needs. </p>



<p>Search all traffic from a Public IP against a Network Security Group:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AzureNetworkAnalytics_CL
| extend NSGRuleAction=split(NSGRules_s,'|',3)[0]
| extend NSGRuleName=tostring(split(NSGRules_s,'|',1)[0])
| extend NSGName=tostring(split(NSGList_s,'/',2)[0])
| where NSGName  == "labdc-nsg"
| where SrcPublicIPs_s contains "167.2XX.XX.XX"
| summarize count() by SourcePubIPs=SrcPublicIPs_s, SourceIP=SrcIP_s, DestinationIP=DestIP_s, DestinationPort=DestPort_d, TimeGenerated, NSGName, NSGRuleName, SourceSubnet=Subnet1_s, DestinationSubnet=Subnet2_s</pre>



<p>Results:</p>



<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3.png"><img loading="lazy" decoding="async" width="1024" height="181" src="https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3-1024x181.png" alt="" class="wp-image-4045" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3-1024x181.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3-300x53.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3-768x136.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3-1536x271.png 1536w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3-1320x233.png 1320w, https://www.cloudcorner.gr/wp-content/uploads/2023/06/image-3.png 1569w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Search for internal traffic between two VMs:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AzureNetworkAnalytics_CL
| extend NSGRuleAction=split(NSGRules_s,'|',3)[0]
| extend NSGRuleName=tostring(split(NSGRules_s,'|',1)[0])
| extend NSGName=tostring(split(NSGList_s,'/',2)[0])
| where NSGName  == "labdc-nsg"
| where DestIP_s == "192.168.200.4" and SrcIP_s == "192.168.200.5"
| summarize count() by SourcePubIPs=SrcPublicIPs_s, SourceIP=SrcIP_s, DestinationIP=DestIP_s, DestinationPort=DestPort_d, TimeGenerated, NSGName, NSGRuleName, SourceSubnet=Subnet1_s, DestinationSubnet=Subnet2_s</pre>



<p>Results:</p>



<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/07/image.png"><img loading="lazy" decoding="async" width="1024" height="68" src="https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1024x68.png" alt="" class="wp-image-4048" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1024x68.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-300x20.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-768x51.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1536x101.png 1536w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1320x87.png 1320w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image.png 1880w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Search for traffic from internal IP to a public destination:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AzureNetworkAnalytics_CL
| extend NSGRuleAction=split(NSGRules_s,'|',3)[0]
| extend NSGRuleName=tostring(split(NSGRules_s,'|',1)[0])
| extend NSGName=tostring(split(NSGList_s,'/',2)[0])
| where NSGName  == "labdc-nsg"
| where SrcIP_s == "192.168.200.5"
| summarize count() by SourcePubIPs=SrcPublicIPs_s, SourceIP=SrcIP_s, DestPublicIPs=DestPublicIPs_s, DestinationPort=DestPort_d, TimeGenerated, NSGName, NSGRuleName, SourceSubnet=Subnet1_s, DestinationSubnet=Subnet2_s</pre>



<p>Results:</p>



<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1.png"><img loading="lazy" decoding="async" width="1024" height="106" src="https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1-1024x106.png" alt="" class="wp-image-4050" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1-1024x106.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1-300x31.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1-768x80.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1-1536x159.png 1536w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1-1320x137.png 1320w, https://www.cloudcorner.gr/wp-content/uploads/2023/07/image-1.png 1774w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>In summary, Azure Network Security Groups serve as powerful access control devices for regulating network traffic within an Azure virtual network. The inclusion of NSG flow logs and Log Analytics enhances administrators&#8217; visibility and understanding of network activity. By following the necessary steps to enable NSG Flow Logs and leveraging the Log Analytics Workspace, you can effectively monitor and analyze network traffic data, thereby improving the security and performance of your Azure resources.</p>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fnsg-flow-logs-review-in-log-analytics%2F&amp;linkname=NSG%20Flow%20Logs%20review%20in%20Log%20Analytics" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fnsg-flow-logs-review-in-log-analytics%2F&amp;linkname=NSG%20Flow%20Logs%20review%20in%20Log%20Analytics" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fnsg-flow-logs-review-in-log-analytics%2F&#038;title=NSG%20Flow%20Logs%20review%20in%20Log%20Analytics" data-a2a-url="https://www.cloudcorner.gr/microsoft/nsg-flow-logs-review-in-log-analytics/" data-a2a-title="NSG Flow Logs review in Log Analytics"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/nsg-flow-logs-review-in-log-analytics/">NSG Flow Logs review in Log Analytics</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/nsg-flow-logs-review-in-log-analytics/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Global Distribution Solutions</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/azure-global-distribution-solutions/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/azure-global-distribution-solutions/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Tue, 30 May 2023 17:12:14 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[afd]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azure front door]]></category>
		<category><![CDATA[azure load balancer]]></category>
		<category><![CDATA[azure traffic manager]]></category>
		<category><![CDATA[load balancer]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=4022</guid>

					<description><![CDATA[<p>In order to guarantee high availability for your global customer base, it is essential to deploy critical applications across multiple</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-global-distribution-solutions/">Azure Global Distribution Solutions</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In order to guarantee high availability for your global customer base, it is essential to deploy critical applications across multiple Azure regions. Our objective is to assess Azure&#8217;s different global traffic distribution solutions and identify the most suitable option for your application.</p>



<p>Microsoft Azure Front Door is a content delivery network (CDN) service that offers application layer load balancing features. On the other hand, Azure cross-region Load Balancer serves as a global network layer load balancer. Lastly, Azure Traffic Manager operates as a domain name service (DNS)-based solution for distributing traffic.</p>



<h2 class="wp-block-heading"><strong>Cross-region load balancer</strong></h2>



<p><a href="https://learn.microsoft.com/en-us/azure/load-balancer/cross-region-overview" target="_blank" rel="noreferrer noopener nofollow"><strong>Azure cross-region Load Balancer</strong> </a>is designed to efficiently handle layer-4 traffic with minimal latency. It offers <strong>geo-proximity routing</strong>, ensuring that traffic from various locations is directed to the closest regional deployment. Moreover, the load balancer automatically handles failover, redirecting traffic to healthy regional deployments if any of them become unhealthy. Users benefit from a <strong>static globally anycast IP address</strong>, eliminating concerns about IP address changes. </p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image.png"><img loading="lazy" decoding="async" width="566" height="238" src="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image.png" alt="" class="wp-image-4028" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image.png 566w, https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-300x126.png 300w" sizes="auto, (max-width: 566px) 100vw, 566px" /></a></figure>



<h2 class="wp-block-heading"><strong>Azure Front Door</strong></h2>



<p><a href="https://learn.microsoft.com/en-us/azure/frontdoor/front-door-overview" target="_blank" rel="noreferrer noopener nofollow"><strong>Azure Front Door</strong></a> is a highly effective solution for achieving accelerated and resilient web application performance on a global scale, ensuring optimal delivery of both static and dynamic content. Here are the key features and benefits:</p>



<ul class="wp-block-list">
<li><strong>Static Content</strong>: Leveraging Azure Front Door&#8217;s extensive network of <strong>185 global edge points of presence</strong> (PoP) locations, static content can be efficiently served to clients. By utilizing the Anycast protocol, client requests are directed to the nearest edge location, ensuring high performance and resilience.</li>



<li><strong>Dynamic Content</strong>: Azure Front Door offers various traffic acceleration features. Traffic from clients to Azure Front Door PoPs is optimized through Anycast routing. For dynamic workloads, connections between edge PoPs and the customer&#8217;s origin are optimized using split TCP. This approach terminates the TCP connection at the nearest edge PoP and utilizes long-lived connections over Microsoft&#8217;s global private wide area network (WAN), reducing round-trip-time (RTT). In case of multiregional origin deployments, Azure Front Door employs health probes to fetch content from the least latent origin.</li>



<li><strong>SSL Offload and Layer 7 Routing</strong>: Azure Front Door supports SSL offload, enhancing performance. It is highly optimized for HTTP and web-based applications, providing <strong>layer 7 routing</strong> capabilities. Customers can utilize business routing and advanced routing within Azure Front Door, allowing for features such as routing requests based on client device type (e.g., mobile or desktop versions). Other features include path-based routing, fast failover, caching, and more.</li>



<li><strong>Integration and Security</strong>: Azure Front Door seamlessly integrates with other Azure services, such as DNS, Web App, and Storage, providing end-to-end solutions for application management. Additionally, it offers built-in support for various security products, enabling customers to protect their web applications with layer 3, 4, and 7 <strong>DDoS</strong> mitigation and Azure <strong>Web Application Firewall.</strong></li>
</ul>



<p>Use Azure Front Door to create powerful web applications by leveraging the integration of multiple Azure services while ensuring performance, scalability, and security.</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-4.png"><img loading="lazy" decoding="async" width="500" height="428" src="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-4.png" alt="" class="wp-image-4037" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-4.png 500w, https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-4-300x257.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></a></figure>



<h2 class="wp-block-heading"><strong>Azure </strong>Traffic Manager</h2>



<p><strong><a href="https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview" target="_blank" rel="noreferrer noopener nofollow">Azure Traffic Manager</a></strong> is a DNS-based traffic load balancer. It offers the flexibility to incorporate on-premises servers into the backend, enabling support for scenarios such as burst-to-cloud, failover-to-cloud, and migrate-to-cloud. It provides <strong>automatic failover</strong> and <strong>multi-region support</strong>, ensuring that traffic is served with minimal latency. DNS name resolution is fast, and results are cached to enhance performance. The speed of the initial DNS lookup depends on the client&#8217;s DNS servers for name resolution, typically completing within approximately 50 ms. The lookup results are cached according to the DNS time-to-live (TTL), with the default TTL for Traffic Manager set at 300 seconds (around five minutes). Additionally, Azure Traffic Manager offers <strong>geographic routing</strong> capabilities, allowing users to direct traffic to the appropriate backend instance based on the geographical location, thus assisting with geofencing requirements.</p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-3.png"><img loading="lazy" decoding="async" width="546" height="451" src="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-3.png" alt="" class="wp-image-4032" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-3.png 546w, https://www.cloudcorner.gr/wp-content/uploads/2023/05/image-3-300x248.png 300w" sizes="auto, (max-width: 546px) 100vw, 546px" /></a></figure>



<h2 class="wp-block-heading">Synopsis table</h2>



<figure class="wp-block-table"><table><tbody><tr><td>&nbsp;</td><td><strong>Azure Front Door</strong></td><td><strong>Azure cross-region Load Balancer</strong></td><td><strong>Azure Traffic Manager</strong></td></tr><tr><td><strong>Traffic type</strong></td><td>HTTP/HTTPS</td><td>TCP/UDP</td><td>DNS</td></tr><tr><td><strong>Routing policies</strong></td><td>Latency, priority, round robin, weighted round robin, path-based, advanced http rules engine</td><td>Geo-proximity and Hash Based</td><td>Geographical, latency, weighted, priority, subnet, multi-value</td></tr><tr><td><strong>Supported environments.</strong></td><td>Azure, non-Azure cloud, on-premises</td><td>Azure</td><td>Azure, non-Azure cloud, on-premises</td></tr><tr><td><strong>Backend Types</strong></td><td>Azure Application Gateway, Azure Load balancer, Azure Traffic Manger</td><td>Azure Load Balancer</td><td>Azure Application Gateway, Azure Load balancer, Azure Traffic Manager, Azure Front Door, Azure Cross Region Load Balancer</td></tr><tr><td><strong>Session affinity</strong></td><td>Yes</td><td>Yes</td><td>No</td></tr><tr><td><strong>Site acceleration</strong></td><td>Yes</td><td>No</td><td>No</td></tr><tr><td><strong>Caching</strong></td><td>Yes</td><td>No</td><td>No</td></tr><tr><td><strong>Global Static IP</strong></td><td>No</td><td>Yes</td><td>No</td></tr><tr><td><strong>Security</strong></td><td>DDOS, Web Application Firewall, Private Link</td><td>Network Security Group</td><td>Azure Resource Logs, Azure Policies</td></tr><tr><td><strong>SLA</strong></td><td>99.99%</td><td>99.99%</td><td>99.99%</td></tr><tr><td><strong>Pricing</strong></td><td><a href="https://azure.microsoft.com/en-in/pricing/details/frontdoor/" target="_blank" rel="noreferrer noopener nofollow">Pricing</a></td><td><a href="https://azure.microsoft.com/en-us/pricing/details/load-balancer/" target="_blank" rel="noreferrer noopener nofollow">Pricing</a></td><td><a href="https://azure.microsoft.com/en-us/pricing/details/traffic-manager/" target="_blank" rel="noreferrer noopener nofollow">Pricing</a></td></tr></tbody></table></figure>



<p><strong>References</strong>:</p>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/en-us/azure/load-balancer/cross-region-overview">Cross-region load balancer (preview) &#8211; Azure Load Balancer | Microsoft Learn</a></li>



<li><a href="https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview">Azure Traffic Manager | Microsoft Learn</a></li>



<li><a href="https://learn.microsoft.com/en-us/azure/frontdoor/front-door-overview">Azure Front Door | Microsoft Learn</a></li>
</ul>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-global-distribution-solutions%2F&amp;linkname=Azure%20Global%20Distribution%20Solutions" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-global-distribution-solutions%2F&amp;linkname=Azure%20Global%20Distribution%20Solutions" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-global-distribution-solutions%2F&#038;title=Azure%20Global%20Distribution%20Solutions" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/azure-global-distribution-solutions/" data-a2a-title="Azure Global Distribution Solutions"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-global-distribution-solutions/">Azure Global Distribution Solutions</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/azure-global-distribution-solutions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Policy to enable network policies for private endpoints</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/azure-policy-to-enable-network-policies-for-private-endpoints/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/azure-policy-to-enable-network-policies-for-private-endpoints/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Thu, 23 Feb 2023 07:57:49 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[IaC]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azure policy]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[compliance]]></category>
		<category><![CDATA[policy]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=4003</guid>

					<description><![CDATA[<p>Network security policies are a very handy feature when you use Private Endpoints on Azure. If you enable network security</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-policy-to-enable-network-policies-for-private-endpoints/">Azure Policy to enable network policies for private endpoints</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Network security policies are a very handy feature when you use Private Endpoints on Azure. If you enable network security policies for User-Defined Routes, the /32 routes that are generated by the private endpoint and propagated to all the subnets in its own VNet and directly peered VNets will be invalidated if you have User-Defined Routing, which is useful if you want all traffic (including traffic addressed to the private endpoint) to go through a firewall, since otherwise, the /32 route would bypass any other route.</p>



<p>By default, network policies are disabled for a subnet in a virtual network and you need to enable it manually, from the Azure Portal after the VNET creation, or you need to specify it in your script if you are deploying with PowerShell, Cli, Bicep or any other IaC. </p>



<p>To ensure that Network security policies are enabled, and force enable it, we can use an Azure Policy. The below Azure Policy checks if the Network security policies are enabled, and if not it automatically enables it. The result of this policy is:</p>



<ul class="wp-block-list">
<li>for new Virtual Networks, it automatically enables Network security policies to all subnets, even if you forgot to select it upon the creation</li>



<li>for existing virtual Network subnets, it uses a remediation plan to evaluate and enable the Network security policies.</li>
</ul>



<p>The Policy:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
  "mode": "All",
  "policyRule": {
    "if": {
      "field": "Microsoft.Network/virtualNetworks/subnets[*].privateEndpointNetworkPolicies",
      "notEquals": "Enabled"
    },
    "then": {
      "effect": "modify",
      "details": {
        "roleDefinitionIds": [
          "/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
        ],
        "operations": [
          {
            "operation": "addOrReplace",
            "field": "Microsoft.Network/virtualNetworks/subnets[*].privateEndpointNetworkPolicies",
            "value": "Enabled"
          }
        ]
      }
    }
  },
  "parameters": {}
}</pre>



<p>To add the Policy to your Azure environment:</p>



<ul class="wp-block-list">
<li>Go to the Azure Policy Definitions blade (shortcut: <a href="https://portal.azure.com/#view/Microsoft_Azure_Policy/PolicyMenuBlade/~/Definitions">Policy &#8211; Microsoft Azure</a> )</li>



<li>Add Policy Definition </li>
</ul>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image.png"><img loading="lazy" decoding="async" width="138" height="37" src="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image.png" alt="" class="wp-image-4004"/></a></figure>



<ul class="wp-block-list">
<li>Provide a location (subscription) to save the policy object, and give a name and a category. Use the existing Network category.</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-1.png"><img loading="lazy" decoding="async" width="787" height="513" src="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-1.png" alt="" class="wp-image-4005" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-1.png 787w, https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-1-300x196.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-1-768x501.png 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></a></figure>



<ul class="wp-block-list">
<li>Paste the policy Json</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-2.png"><img loading="lazy" decoding="async" width="790" height="590" src="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-2.png" alt="" class="wp-image-4006" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-2.png 790w, https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-2-300x224.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-2-768x574.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></a></figure>



<ul class="wp-block-list">
<li>Select a Role Assignment. You need a role that will have editor access to the subnet. For my demo, I used the Network Contributor build-in role (4d97b98b-1d4f-4787-a291-c67834d212e7) for the action.</li>



<li>Once the Policy is created, open it and you need to assign it to a scope (MG, Subscription, Resource Group)</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-3.png"><img loading="lazy" decoding="async" width="84" height="30" src="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-3.png" alt="" class="wp-image-4007"/></a></figure>



<ul class="wp-block-list">
<li>Assign the policy to the scope you want, like Management Group, Subscription, or Resource Group and one thing that needs attention is to create a remediation task and a Managed Identity.</li>



<li>The remediation task is needed to remediate the existing resources and the Managed Identity for the modification action.</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-5.png"><img loading="lazy" decoding="async" width="767" height="554" src="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-5.png" alt="" class="wp-image-4009" srcset="https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-5.png 767w, https://www.cloudcorner.gr/wp-content/uploads/2023/02/image-5-300x217.png 300w" sizes="auto, (max-width: 767px) 100vw, 767px" /></a></figure>



<p>The Policy is in Audit only mode, in case you just need to audit if there are any subnets that don&#8217;t have privateEndpointNetworkPolicies enabled.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Network/virtualNetworks/subnets"
        },
        {
          "field": "Microsoft.Network/virtualNetworks/subnets[*].privateEndpointNetworkPolicies",
          "notEquals": "Enabled"
        }
      ]
    },
    "then": {
      "effect": "audit"
    }
  },
  "parameters": {}
}</pre>



<p>You can get the Policy Json files at my Github repo: <a href="https://github.com/proximagr/automation#policy-audit---enable-network-policy-for-private-endpoints-blog-post">https://github.com/proximagr/automation#policy-audit&#8212;enable-network-policy-for-private-endpoints-blog-post</a></p>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-policy-to-enable-network-policies-for-private-endpoints%2F&amp;linkname=Azure%20Policy%20to%20enable%20network%20policies%20for%20private%20endpoints" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-policy-to-enable-network-policies-for-private-endpoints%2F&amp;linkname=Azure%20Policy%20to%20enable%20network%20policies%20for%20private%20endpoints" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-policy-to-enable-network-policies-for-private-endpoints%2F&#038;title=Azure%20Policy%20to%20enable%20network%20policies%20for%20private%20endpoints" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/azure-policy-to-enable-network-policies-for-private-endpoints/" data-a2a-title="Azure Policy to enable network policies for private endpoints"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-policy-to-enable-network-policies-for-private-endpoints/">Azure Policy to enable network policies for private endpoints</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/azure-policy-to-enable-network-policies-for-private-endpoints/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Databricks With existing DNS, Azure Networks &#038; on-premises network</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/azure-databricks-with-existing-dns-azure-networks-on-premises-network/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/azure-databricks-with-existing-dns-azure-networks-on-premises-network/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Thu, 15 Sep 2022 09:43:12 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=3980</guid>

					<description><![CDATA[<p>You can find a PowerShell script at my Automation repository to automatically create all required routes and a template csv</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-databricks-with-existing-dns-azure-networks-on-premises-network/">Azure Databricks With existing DNS, Azure Networks &#038; on-premises network</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics.png"><img loading="lazy" decoding="async" width="1024" height="895" src="https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics-1024x895.png" alt="" class="wp-image-3981" srcset="https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics-1024x895.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics-300x262.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics-768x671.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics-1320x1154.png 1320w, https://www.cloudcorner.gr/wp-content/uploads/2022/09/Databrics.png 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p></p>



<p>You can find a PowerShell script at my Automation repository to automatically create all required routes and a template csv with all IPs for West &amp; East Europe Regions.</p>



<p>Link to GitHub: <a href="https://github.com/proximagr/automation/tree/master/DatabricksRoutes">automation/DatabricksRoutes at master · proximagr/automation (github.com)</a></p>



<p>Script:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$location = ''
$routeTableRGName = ''
$routeTable = ''
$vnetRGName = ''
$vnetName = ''
$subnetName = ''
$subnetAddressPfx = ''
$routeTableName = ''
$dataBricksRouteName = ''
$routesPath = 'C:\...\routes.csv'
$i = 1


# Create or Get Azure Route Table
if ($routeTable = $null) {
    $routeTable = New-AzRouteTable -ResourceGroupName $routeTableRGName -Location $location -Name $routeTableName
    } else {
        $routeTable = Get-AzRouteTable -ResourceGroupName $routeTableRGName -Name $routeTableName
    }

# Create Routes
$routes = import-csv $routesPath
foreach ($route in $routes)
    {
        Add-AzRouteConfig -Name "$($dataBricksRouteName)-$($i)" -AddressPrefix $route.route -RouteTable $routeTable -NextHopType internet
        $i = $i+1
    }

# Commit the changes
Set-AzRouteTable -RouteTable $routeTable

# Associate the Route Table with Subnets
$vnet = Get-AzVirtualNetwork -ResourceGroupName $vnetRGName -Name $vnetName
Set-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $subnetName -AddressPrefix $subnetAddressPfx -RouteTable $routeTable

# Commit the changes
Set-AzVirtualNetwork -VirtualNetwork $vnet</pre>



<p>Template CSV with West &amp; North Europe Regions IPs:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">route
52.232.19.246/32
20.38.84.81/32
23.97.201.41/32
40.127.147.196/32
20.73.215.48/28
51.138.96.158/32
52.138.224.7/32
52.138.224.6/32
52.239.137.164/32
20.60.246.65/32
20.150.26.228/32
20.150.104.100/32
52.239.138.100/32
52.236.40.36/32
20.150.104.4/32
20.150.76.228/32
52.239.141.36/32
13.69.64.0/32
52.169.18.8/32
104.40.169.187/32
13.69.105.208/32
20.60.223.36/32
20.60.222.107/32
20.150.122.36/32
52.239.242.196/32
20.60.26.196/32
20.60.223.68/32
20.60.222.129/32
20.150.74.100/32
20.150.122.68/32
52.239.141.68/32
20.60.196.33/32
20.60.250.196/32
20.38.108.228/32</pre>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-databricks-with-existing-dns-azure-networks-on-premises-network%2F&amp;linkname=Azure%20Databricks%20With%20existing%20DNS%2C%20Azure%20Networks%20%26%20on-premises%20network" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-databricks-with-existing-dns-azure-networks-on-premises-network%2F&amp;linkname=Azure%20Databricks%20With%20existing%20DNS%2C%20Azure%20Networks%20%26%20on-premises%20network" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-databricks-with-existing-dns-azure-networks-on-premises-network%2F&#038;title=Azure%20Databricks%20With%20existing%20DNS%2C%20Azure%20Networks%20%26%20on-premises%20network" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/azure-databricks-with-existing-dns-azure-networks-on-premises-network/" data-a2a-title="Azure Databricks With existing DNS, Azure Networks &amp; on-premises network"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-databricks-with-existing-dns-azure-networks-on-premises-network/">Azure Databricks With existing DNS, Azure Networks &#038; on-premises network</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/azure-databricks-with-existing-dns-azure-networks-on-premises-network/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Global Azure Greece 2022</title>
		<link>https://www.cloudcorner.gr/speaking/global-azure-greece-2022/</link>
					<comments>https://www.cloudcorner.gr/speaking/global-azure-greece-2022/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Wed, 18 May 2022 10:31:02 +0000</pubDate>
				<category><![CDATA[Speaking]]></category>
		<category><![CDATA[globalazure]]></category>
		<category><![CDATA[globalazuregreece]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=3934</guid>

					<description><![CDATA[<p>After two years of Virtual Events, we managed to land a strong physical Global Azure Greece 2022 event. More than</p>
<p>The post <a href="https://www.cloudcorner.gr/speaking/global-azure-greece-2022/">Global Azure Greece 2022</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>After two years of Virtual Events, we managed to land a strong physical Global Azure Greece 2022 event. More than 200 people gathered at Gazarte, on Saturday, May 7, 2022, to attend this whole day about cloud technology and Microsoft Azure.</p>



<p>As an Organizer, Volunteer, and Speaker, I felt the best of all. The people that gathered to see the presentations, to network in person with peers and friends, the rush for the check-in, the management of the lunch area, and the excitement to speak in front of so many people. Everything was perfect for a community-driven event.</p>



<div class="soliloquy-feed-output"><img decoding="async" class="soliloquy-feed-image" src="https://www.cloudcorner.gr/wp-content/uploads/2022/05/DSC07482-scaled-960x600_c.jpg" title="DSC07482" alt="DSC07482" /></div>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fspeaking%2Fglobal-azure-greece-2022%2F&amp;linkname=Global%20Azure%20Greece%202022" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fspeaking%2Fglobal-azure-greece-2022%2F&amp;linkname=Global%20Azure%20Greece%202022" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fspeaking%2Fglobal-azure-greece-2022%2F&#038;title=Global%20Azure%20Greece%202022" data-a2a-url="https://www.cloudcorner.gr/speaking/global-azure-greece-2022/" data-a2a-title="Global Azure Greece 2022"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/speaking/global-azure-greece-2022/">Global Azure Greece 2022</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/speaking/global-azure-greece-2022/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Network Policy for Private Endpoints</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/network-policy-for-private-endpoints/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/network-policy-for-private-endpoints/#respond</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Tue, 17 May 2022 14:15:39 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[custom routes]]></category>
		<category><![CDATA[private endpoint]]></category>
		<category><![CDATA[route]]></category>
		<category><![CDATA[route table]]></category>
		<category><![CDATA[virtual network]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=3917</guid>

					<description><![CDATA[<p>By setting the &#8220;Private endpoint network policy&#8221; to &#8220;Enabled&#8221; at the subnet where the Private Endpoint NIC resides, the /32</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/network-policy-for-private-endpoints/">Network Policy for Private Endpoints</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>By setting the &#8220;Private endpoint network policy&#8221; to &#8220;Enabled&#8221; at the subnet where the Private Endpoint NIC resides, the /32 route of the Private Endpoint is getting invalid, even with a higher address range, like /24. </p>



<p>When using the portal to create a private endpoint, the PrivateEndpointNetworkPolicies setting is automatically disabled as part of the create process</p>



<p>Currently, this feature is in Public Preview, limited to some Azure Regions. </p>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2022/05/image.png"><img loading="lazy" decoding="async" width="569" height="219" src="https://www.cloudcorner.gr/wp-content/uploads/2022/05/image.png" alt="" class="wp-image-3918" srcset="https://www.cloudcorner.gr/wp-content/uploads/2022/05/image.png 569w, https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-300x115.png 300w" sizes="auto, (max-width: 569px) 100vw, 569px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-1.png"><img loading="lazy" decoding="async" width="786" height="167" src="https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-1.png" alt="" class="wp-image-3919" srcset="https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-1.png 786w, https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-1-300x64.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-1-768x163.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2022/05/image-1-780x167.png 780w" sizes="auto, (max-width: 786px) 100vw, 786px" /></a></figure>



<p>REF: <a href="https://docs.microsoft.com/en-us/azure/private-link/disable-private-endpoint-network-policy">Manage network policies for private endpoints &#8211; Azure Private Link | Microsoft Docs</a></p>
<p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fnetwork-policy-for-private-endpoints%2F&amp;linkname=Network%20Policy%20for%20Private%20Endpoints" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fnetwork-policy-for-private-endpoints%2F&amp;linkname=Network%20Policy%20for%20Private%20Endpoints" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fnetwork-policy-for-private-endpoints%2F&#038;title=Network%20Policy%20for%20Private%20Endpoints" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/network-policy-for-private-endpoints/" data-a2a-title="Network Policy for Private Endpoints"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/network-policy-for-private-endpoints/">Network Policy for Private Endpoints</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/network-policy-for-private-endpoints/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Firewall Policy Rules to CSV</title>
		<link>https://www.cloudcorner.gr/microsoft/azure/azure-firewall-policy-rules-to-csv/</link>
					<comments>https://www.cloudcorner.gr/microsoft/azure/azure-firewall-policy-rules-to-csv/#comments</comments>
		
		<dc:creator><![CDATA[Pantelis Apostolidis]]></dc:creator>
		<pubDate>Sat, 12 Feb 2022 08:21:53 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[azure firewall]]></category>
		<category><![CDATA[azure firewall policies]]></category>
		<category><![CDATA[azurerm]]></category>
		<category><![CDATA[powershell]]></category>
		<guid isPermaLink="false">https://www.cloudcorner.gr/?p=3903</guid>

					<description><![CDATA[<p>Azure Firewall is a virtual network firewall service that provides your resources in an Azure Virtual Network. It&#8217;s a firewall</p>
<p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-firewall-policy-rules-to-csv/">Azure Firewall Policy Rules to CSV</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Azure Firewall is a virtual network firewall service that provides your resources in an Azure Virtual Network. It&#8217;s a firewall as a service, build on the cloud for the cloud. It provides both east-west and north-south traffic inspection. Some features are Threat Intelligence, DNAT, SNAT, Application &amp; Network filtering rules, DNS Proxy, TLS Inspection, IDPS, URL Filtering, Web Categories. And as an Azure native service has built-in high availability and cloud scalability.</p>



<p>There is plenty of information and guides for Azure Firewall at the Microsoft Docs <a href="https://docs.microsoft.com/en-us/azure/firewall/">Azure Firewall documentation | Microsoft Docs</a>. In this post, I want to share some PowerShell scripts that we created with my colleague Panagiotis Tsoukias. One script to Export all Firewall Policy rules, of all Policy Groups in a CSV file. Then edit the rules in Excel.  And a second script to import the rules to the same or to a different Firewall Policy.</p>



<h2 class="wp-block-heading" id="export-the-azure-firewall-policy-rules">Export the Azure Firewall Policy Rules</h2>



<p>The first script is to Export the Firewall Policy Rules of a Rule Collection, in a manageable CSV format. Edit the script, change the first three variables, and the path to export, and run it. Open the exported CSV with Microsoft Excel and you will have this result:</p>



<figure class="wp-block-image size-large"><a href="https://www.cloudcorner.gr/wp-content/uploads/2022/02/image-5.png"><img loading="lazy" decoding="async" width="1024" height="87" src="https://www.cloudcorner.gr/wp-content/uploads/2022/02/image-5-1024x87.png" alt="csv export" class="wp-image-3905" srcset="https://www.cloudcorner.gr/wp-content/uploads/2022/02/image-5-1024x87.png 1024w, https://www.cloudcorner.gr/wp-content/uploads/2022/02/image-5-300x26.png 300w, https://www.cloudcorner.gr/wp-content/uploads/2022/02/image-5-768x66.png 768w, https://www.cloudcorner.gr/wp-content/uploads/2022/02/image-5.png 1090w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>The first three columns are the Rule Collection&#8217;s Name, Priority &amp; Action Type. We will need this info to create the Rule Collections and import the rules to the corresponding Rule Collection.</p>



<p>You can copy the script from the below box or download it from my GitHub link: <strong><a href="https://github.com/proximagr/automation/blob/master/Export%20Azure%20Firewall%20Policy%20Rules.ps1">Export Azure Firewall Policy Rules.ps1</a></strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#Provide Input. Firewall Policy Name, Firewall Policy Resource Group &amp; Firewall Policy Rule Collection Group Name
$fpname = azfwpolicy
$fprg = azurehub
$fprcgname = DefaultNetworkRuleCollectionGroup

$fp = Get-AzFirewallPolicy -Name $fpname -ResourceGroupName $fprg
$rcg = Get-AzFirewallPolicyRuleCollectionGroup -Name $fprcgname -AzureFirewallPolicy $fp

$returnObj = @()
foreach ($rulecol in $rcg.Properties.RuleCollection) {

foreach ($rule in $rulecol.rules)
{
$properties = [ordered]@{
    RuleCollectionName = $rulecol.Name;
    RulePriority = $rulecol.Priority;
    ActionType = $rulecol.Action.Type;
    RUleConnectionType = $rulecol.RuleCollectionType;
    Name = $rule.Name;
    protocols = $rule.protocols -join ", ";
    SourceAddresses = $rule.SourceAddresses -join ", ";
    DestinationAddresses = $rule.DestinationAddresses -join ", ";
    SourceIPGroups = $rule.SourceIPGroups -join ", ";
    DestinationIPGroups = $rule.DestinationIPGroups -join ", ";
    DestinationPorts = $rule.DestinationPorts -join ", ";
    DestinationFQDNs = $rule.DestinationFQDNs -join ", ";
}
$obj = New-Object psobject -Property $properties
$returnObj += $obj
}

#change c:\temp to the path to export the CSV
$returnObj | Export-Csv c:\temp\rules.csv -NoTypeInformation
}</pre>



<h2 class="wp-block-heading" id="import-the-azure-firewall-policy-rules">Import the Azure Firewall Policy Rules</h2>



<p>After done editing the rules in Excel, we are ready to import them back to the Azure Policy or to a new Azure Policy.  We need to export one CSV per Rule Collection. It will help us that the first column has the Rule Collection Name. Then run the import script. The script creates a Rule Collection, if it does not already exist, and adds the Rules in this specific Rule Collection.</p>



<p>You can copy the script from the below box or download it from my GitHub link: <strong><a href="https://github.com/proximagr/automation/blob/master/Import%20Azure%20Firewall%20Policy%20Rules.ps1">Import Azure Firewall Policy Rules.ps1</a></strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#Provide Input. Firewall Policy Name, Firewall Policy Resource Group &amp; Firewall Policy Rule Collection Group Name
$fpname = azfwpolicy
$fprg = azurehub
$fprcgname = DefaultNetworkRuleCollectionGroup

$targetfp = Get-AzFirewallPolicy -Name $fpname -ResourceGroupName $fprg
$targetrcg = New-AzFirewallPolicyRuleCollectionGroup -Name $fprcgname -Priority 200 -FirewallPolicyObject $targetfp

$RulesfromCSV = @()
# Change the folder where the CSV is located
$readObj = import-csv C:\temp\rules.csv
foreach ($entry in $readObj)
{
    $properties = [ordered]@{
        RuleCollectionName = $entry.RuleCollectionName;
        RulePriority = $entry.RulePriority;
        ActionType = $entry.ActionType;
        Name = $entry.Name;
        protocols = $entry.protocols -split ", ";
        SourceAddresses = $entry.SourceAddresses -split ", ";
        DestinationAddresses = $entry.DestinationAddresses -split ", ";
        SourceIPGroups = $entry.SourceIPGroups -split ", ";
        DestinationIPGroups = $entry.DestinationIPGroups -split ", ";
        DestinationPorts = $entry.DestinationPorts -split ", ";
        DestinationFQDNs = $entry.DestinationFQDNs -split ", ";
    }
    $obj = New-Object psobject -Property $properties
    $RulesfromCSV += $obj
}

$RulesfromCSV
Clear-Variable rules
$rules = @()
foreach ($entry in $RulesfromCSV)
{
    $RuleParameter = @{
        Name = $entry.Name;
        Protocol = $entry.protocols
        sourceAddress = $entry.SourceAddresses
        DestinationAddress = $entry.DestinationAddresses
        DestinationPort = $entry.DestinationPorts
    }
    $rule = New-AzFirewallPolicyNetworkRule @RuleParameter
    $NetworkRuleCollection = @{
        Name = $entry.RuleCollectionName
        Priority = $entry.RulePriority
        ActionType = $entry.ActionType
        Rule       = $rules += $rule
    }
}

# Create a network rule collection
$NetworkRuleCategoryCollection = New-AzFirewallPolicyFilterRuleCollection @NetworkRuleCollection
# Deploy to created rule collection group
Set-AzFirewallPolicyRuleCollectionGroup -Name $targetrcg.Name -Priority 200 -RuleCollection $NetworkRuleCategoryCollection -FirewallPolicyObject $targetfp</pre>



<p>Feel free to take, edit, use &amp; comment on the scripts, you can find them at my repo:</p>


<div class="ebg-br-wrapper ebg-br-wrapper-dark-mode-on">
	<div class="ebg-br-background-image"></div>
	<div class="ebg-br-editmode egb-br-darkmode-status">
		<span class="egb-br-darkmode-status-img">Dark Mode</span>
	</div>
	<div class="ebg-br-avatar">
		<img loading="lazy" decoding="async" class="ebg-br-header-avatar" src="https://avatars.githubusercontent.com/u/4180413?v=4" alt="" width="150" height="150" />
	</div>
	<div class="ebg-br-main">
		<p class="ebg-br-title">
			<strong>
				<a target="_blank" rel="noopener noreferrer" href="https://github.com/proximagr/automation">
					automation
					<span class="screen-reader-text">(this link opens in a new window)</span>
				</a>
			</strong>
			<em>
				by<a target="_blank" rel="noopener noreferrer" href="https://github.com/proximagr">
					proximagr
					<span class="screen-reader-text">(this link opens in a new window)</span>
				</a>
			</em>
		</p>
		<p class="ebg-br-description"></p>
		<p class="ebg-br-footer">
			<span class="ebg-br-subscribers">
				<span class="ebg-br-background-image"></span>
				1 Subscriber			</span>
			<span class="ebg-br-watchers">
				<span class="ebg-br-background-image"></span>
				0 Watchers			</span>
			<span class="ebg-br-forks">
				<span class="ebg-br-background-image"></span>
				0 Forks			</span>
			<a target="_blank" rel="noopener noreferrer" class="ebg-br-link" href="https://github.com/proximagr/automation">
				Check out this repository on GitHub.com				<span class="screen-reader-text">(this link opens in a new window)</span>
			</a>
		</p>
	</div>
</div><p><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-firewall-policy-rules-to-csv%2F&amp;linkname=Azure%20Firewall%20Policy%20Rules%20to%20CSV" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_print" href="https://www.addtoany.com/add_to/print?linkurl=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-firewall-policy-rules-to-csv%2F&amp;linkname=Azure%20Firewall%20Policy%20Rules%20to%20CSV" title="Print" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.cloudcorner.gr%2Fmicrosoft%2Fazure%2Fazure-firewall-policy-rules-to-csv%2F&#038;title=Azure%20Firewall%20Policy%20Rules%20to%20CSV" data-a2a-url="https://www.cloudcorner.gr/microsoft/azure/azure-firewall-policy-rules-to-csv/" data-a2a-title="Azure Firewall Policy Rules to CSV"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://www.cloudcorner.gr/microsoft/azure/azure-firewall-policy-rules-to-csv/">Azure Firewall Policy Rules to CSV</a> appeared first on <a href="https://www.cloudcorner.gr">Apostolidis Cloud Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.cloudcorner.gr/microsoft/azure/azure-firewall-policy-rules-to-csv/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
	</channel>
</rss>
