<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>rss.livelink.threads-in-node</title>
    <link>https://techcommunity.microsoft.com/t5/azure/ct-p/Azure</link>
    <description>rss.livelink.threads-in-node</description>
    <pubDate>Wed, 22 Apr 2026 21:39:29 GMT</pubDate>
    <dc:creator>Azure</dc:creator>
    <dc:date>2026-04-22T21:39:29Z</dc:date>
    <item>
      <title>Private subnets by default in Azure Virtual Networks: What changed and how to use NAT Gateway</title>
      <link>https://techcommunity.microsoft.com/t5/azure-networking-blog/private-subnets-by-default-in-azure-virtual-networks-what/ba-p/4513778</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure is evolving to better support&amp;nbsp;secure&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;by&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;default&amp;nbsp;cloud architectures.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Starting with&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;API version 2025&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;07&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;01 (released after March 31, 2026)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;, newly created virtual networks now default to using&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;private subnets&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. This change removes the&amp;nbsp;long&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;standing platform behavior of automatically enabling outbound internet access through implicit public IPs, also known as &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access?tabs=portal" target="_blank"&gt;default outbound access (DOA)&lt;/A&gt;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access?tabs=portal#when-is-default-outbound-access-provided" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;As a result:&amp;nbsp;newly&amp;nbsp;deployed virtual machines will not have&amp;nbsp;public&amp;nbsp;outbound&amp;nbsp;connectivity unless explicitly configured.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;What changed?&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Previously, Azure automatically assigned a&amp;nbsp;hidden&amp;nbsp;Microsoft&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;owned&amp;nbsp;public IP to virtual machines deployed without an explicit outbound method (such as NAT Gateway, Load Balancer outbound rules, or&amp;nbsp;instance&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;level&amp;nbsp;public IPs). This allowed&amp;nbsp;public&amp;nbsp;outbound connectivity without requiring customer configuration.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;While convenient, this model introduced challenges:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Security&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;– Implicit internet access conflicts with Zero Trust principles.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Reliability&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;–&amp;nbsp;Platform&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed outbound IPs can change unexpectedly.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Operational consistency&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;– VMSS instances or&amp;nbsp;multi&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;NIC VMs may egress using different default outbound IPs.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With API version&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;2025&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;07&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;01 and later&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Subnets in newly created&amp;nbsp;VNets&amp;nbsp;are&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;private by default&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;The subnet property `defaultOutboundAccess` &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;is set to&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;false&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Azure no longer assigns implicit outbound public IPs.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This applies across deployment methods including Portal, ARM/Bicep, CLI, and PowerShell. Portal has started using the new model as of April 1, 2026.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Note:&amp;nbsp;This change has not yet&amp;nbsp;applied&amp;nbsp;to&amp;nbsp;Terraform.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;Am I impacted by this change?&lt;/SPAN&gt;&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 89.1667%; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Deployment scenario&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Behavior&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Existing VNets or VMs using DOA&lt;/td&gt;&lt;td&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Unchanged&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New VMs in existing VNets&lt;/td&gt;&lt;td&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Unchanged&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subnets already using explicit outbound&lt;/td&gt;&lt;td&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; Continue using configured outbound method&lt;/SPAN&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New VMs in new VNets (with subnets created using API 07-01-2025 or later)&lt;/td&gt;&lt;td&gt;&lt;SPAN data-contrast="auto"&gt;🔒&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Subnets private by default&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New VMs in private subnets without explicit outbound configured&lt;/td&gt;&lt;td&gt;&lt;SPAN data-contrast="auto"&gt;❌&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;No&amp;nbsp;public&amp;nbsp;outbound&amp;nbsp;connectivity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Existing workloads are not&amp;nbsp;impacted.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If required, you can still create new subnets without the private setting by choosing the appropriate configuration option during creation. See the FAQ section of this blog for more information. However, we strongly recommend transitioning to an explicit outbound method so that:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Your workloads&amp;nbsp;won’t&amp;nbsp;be affected by public IP address changes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;You have greater control over how your VMs connect to public endpoints.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Your VMs use traceable IP resources that you own.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;When is outbound connectivity required?&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If your virtual network&amp;nbsp;contains&amp;nbsp;virtual machines, you must&amp;nbsp;configure&amp;nbsp;explicit outbound connectivity. Here are common scenarios that require it:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Virtual machine operating system&amp;nbsp;activation and updates, such as&amp;nbsp;Windows or Linux.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Pulling&amp;nbsp;container images&amp;nbsp;from public registries&amp;nbsp;(Docker Hub or Microsoft Container Registry).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Accessing&amp;nbsp;3&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-fontsize="10.5"&gt;rd&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;party SaaS or&amp;nbsp;public APIs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Virtual machine scale sets using flexible orchestration mode are always secure by default and therefore require an explicit outbound method.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Private subnets&amp;nbsp;don’t&amp;nbsp;apply to delegated or managed subnets that host PaaS services. In these cases, the service handles outbound connectivity—see the service-specific&amp;nbsp;documentation for details.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;Recommended outbound connectivity method: StandardV2 NAT Gateway&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure now recommends using an&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;explicit outbound connectivity method&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;such as:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;NAT Gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Load Balancer outbound rules&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Public IP assigned to the VM&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Network Virtual Appliance (NVA)&amp;nbsp;/ Firewall&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Among these,&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;A href="https://aka.ms/standardv2natgw" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Azure StandardV2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;NAT Gateway&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is the recommended method for outbound connectivity&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for&amp;nbsp;scalable and resilient outbound connectivity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;StandardV2 NAT Gateway:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Provides&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;zone&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;redundancy&amp;nbsp;by default&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;in supported regions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Supports up to 100 Gbps throughput&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Provides dual-stack support with IPv4 and IPv6 public IPs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Uses&amp;nbsp;customer&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;owned&amp;nbsp;static public IPs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enables outbound connectivity without allowing inbound internet access&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Requires no route table configuration when associated to a subnet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;When configured, NAT Gateway automatically becomes the subnet’s default outbound path and&amp;nbsp;takes&amp;nbsp;precedence over:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Load Balancer outbound rules&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;VM instance&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;level&amp;nbsp;public IPs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Note: UDRs for 0.0.0.0/0 traffic directed to virtual appliances/Firewall takes precedence over NAT gateway.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img&gt;Flow chart showing priority order for different outbound methods&lt;/img&gt;
&lt;H3&gt;Migrate from Default Outbound Access to NAT Gateway&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To&amp;nbsp;transition&amp;nbsp;from DOA to&amp;nbsp;Azure’s recommended method of outbound,&amp;nbsp;StandardV2&amp;nbsp;NAT Gateway:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to your virtual network in the portal, and select the subnet you want to modify.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;In the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Edit subnet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;menu,&amp;nbsp;select the ‘&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Enable private subnet&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;’ checkbox under the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Private subnet&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; section&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Enabling private subnet can also be done through other supported clients, below is an example for CLI, in which the default-outbound parameter&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is set to false:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;az network vnet subnet update \ --resource-group rgname \ --name subnetname \ --vnet-name vnetname \ --default-outbound false&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3. Deploy a StandardV2 NAT gateway resource.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4. Associate one or more StandardV2 public IP addresses or prefixes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;5. Attach the NAT gateway to the target subnet.&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Once associated:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;All&amp;nbsp;new&amp;nbsp;outbound traffic from that subnet uses NAT Gateway&amp;nbsp;automatically&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;VM&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;level&amp;nbsp;public IPs are no longer&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Existing outbound connections are not interrupted&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Note: Enabling private subnet on an existing subnet will not affect any VMs already using default outbound IPs.&amp;nbsp;Private subnet ensures&amp;nbsp;that&amp;nbsp;only&amp;nbsp;new VMs&amp;nbsp;don’t&amp;nbsp;receive a default outbound public IP.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For step-by-step guidance, see&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/nat-gateway/tutorial-migrate-outbound-nat#migrate-default-outbound-access" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;migrate default outbound access to NAT Gateway&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;FAQ&lt;/SPAN&gt;&lt;/H3&gt;
&lt;H5&gt;&lt;SPAN data-contrast="auto"&gt;1. Will my existing workloads lose outbound connectivity?&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;No. Workloads currently using default outbound IPs are not impacted by this change. The private subnet by default update only affects:&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Newly created&amp;nbsp;VNets&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;New subnets created using the updated API, 2025-07-01&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;New virtual machines deployed into those subnets&amp;nbsp;using the updated API&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;VMs and subnets using an explicit outbound connectivity method like a NAT gateway, NVA&amp;nbsp;/ Firewall, a VM instance level public IP or Load balancer outbound rules&amp;nbsp;is&amp;nbsp;not&amp;nbsp;impacted&amp;nbsp;by this change.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;2. Why can’t my new VM reach the internet or other public endpoints within Microsoft (e.g. VM activation, updates)?&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:220,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;New subnets are private by default. If your deployment does not include an explicit&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;outbound method — such as a NAT Gateway, Public IP, Load&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Balancer outbound rule, or NVA/Firewall— outbound connectivity is not automatically enabled.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="auto"&gt;3. My workload has a dependency on default outbound IPs and isn’t ready to move to private subnets, what should I do?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You can opt-out of the default private subnet setting by disabling the private subnet feature. You can do this in the portal by unselecting the &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;private subnet checkbox:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Disabling private subnet can also be done through other supported clients, below is an example for CLI, in which the default-outbound parameter&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is set to true:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;az network vnet subnet update \ --resource-group rgname \ --name subnetname \ --vnet-name vnetname \ --default-outbound true&lt;/LI-CODE&gt;
&lt;H5&gt;&lt;SPAN data-contrast="auto"&gt;4. Why do I see an alert showing that I have a default outbound IP on my VM?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;There's a NIC-level parameter `defaultOutboundConnectivityEnabled` that tracks whether a default outbound IP is allocated to a VM/Virtual&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Machine Scale Set instance. If detected, the Azure portal displays a notification banner and will generate Azure Advisor recommendations about&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; disabling default outbound connectivity for your VMs / VMSS.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="auto"&gt;5. How do I clear this alert?&lt;/SPAN&gt; &lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To remove the default outbound IP and clear the alert:&lt;/SPAN&gt; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Configure a StandardV2 NAT gateway (or other explicit outbound method).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Set your subnet to be private or by setting the subnet property defaultOutboundAccess = false using one of the supported clients.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Stop and deallocate any applicable virtual machines (this will remove the default outbound IP currently associated with the VM).&amp;nbsp;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;6. I have a NAT gateway (or UDR pointing to an NVA) configured for my private subnet, why do I still see this alert?&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In some cases, a default outbound IP is still assigned to virtual machines in a non-private subnet, even when an explicit outbound method—such as a NAT&amp;nbsp;gateway&amp;nbsp;or a UDR directing traffic to an NVA/firewall—is configured.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This does&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;not&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;mean that the default outbound IP is used for egress traffic.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To fully remove the assignment (and clear the alert):&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Set the subnet to private&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Stop and deallocate the affected virtual machines&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;Summary&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The move to private subnets by default improves the security posture of Azure networking deployments by removing implicit outbound internet access.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Customers deploying new workloads must now explicitly configure outbound connectivity.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;StandardV2 NAT Gateway&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;provides a scalable, resilient method for enabling outbound internet access without exposing workloads to inbound connections or relying on&amp;nbsp;platform&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;IPs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Learn more&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access?tabs=portal" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Default Outbound Access&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/azure/nat-gateway/nat-overview#standardv2-nat-gateway" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;StandardV2 NAT Gateway&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/azure/nat-gateway/tutorial-migrate-outbound-nat#migrate-default-outbound-access" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Migrate Default Outbound Access to&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;StandardV2&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;NAT Gateway&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 22 Apr 2026 19:09:37 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-networking-blog/private-subnets-by-default-in-azure-virtual-networks-what/ba-p/4513778</guid>
      <dc:creator>aimeelittleton</dc:creator>
      <dc:date>2026-04-22T19:09:37Z</dc:date>
    </item>
    <item>
      <title>AI-Powered Downtime Investigation for Azure VMs: Automating Root Cause Analysis</title>
      <link>https://techcommunity.microsoft.com/t5/azure-compute-blog/ai-powered-downtime-investigation-for-azure-vms-automating-root/ba-p/4513473</link>
      <description>&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Co-authors: &lt;/STRONG&gt;Jie Su, Abhinav Dua, Mukthar Ahmed, Dhruv Joshi&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;In a previous post, we shared how &lt;A href="https://techcommunity.microsoft.com/blog/azurecompute/azure-automated-virtual-machine-recovery-minimizing-downtime/4483166" target="_blank" rel="noopener"&gt;Azure Automated VM Recovery works to minimize virtual machine downtime&lt;/A&gt; through a three-stage approach: Detection, Diagnosis, and Mitigation. This post goes one layer deeper into how our team is using AI to transform incident investigation, one of the most time-consuming parts of that process.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;When an alert fires for a recovery event taking longer than expected, a DRI is notified and a ticket is opened. From there, the DRI must manually dig through logs across multiple sources, build Kusto queries from scratch, and correlate timestamps across systems to identify where time was lost. This has historically taken a long time. On top of that, an engineering manager or TPM had to review the incident, understand the failure, and route it to the right engineer, often resulting in multiple handoffs before the right owner was found. Across a platform the size of Microsoft Azure, that time adds up. That is the problem we set out to solve.&lt;/P&gt;
&lt;DIV class="lia-align-justify"&gt;
&lt;H2&gt;How do we use AI for long duration downtime investigation?&lt;/H2&gt;
&lt;/DIV&gt;
&lt;P class="lia-align-justify"&gt;Model Context Protocol (MCP) is a standardized protocol that connects AI models to external tools; in our case, Kusto databases, log analyzers, and incident metadata extractors. Rather than generating text about what might be wrong, the AI actually runs real queries against live telemetry. Critically, this is not a chatbot. There is no interface for a DRI to interact with. When an incident fires, the system triggers automatically, runs the full investigation pipeline, and attaches a structured analysis report directly to the ticket. By the time a DRI opens the alert, the work is already done.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;The real intelligence in this system goes beyond incident analysis. It comes from encoded domain knowledge about what "normal" looks like: expected recovery timelines for different error categories, log patterns that indicate specific failure modes, and the precise meaning of each phase in the healing workflow. The system knows, for example, how to distinguish a diagnostics bottleneck from a node isolation bottleneck, and what it signals when a particular isolation step runs longer than expected. This is knowledge that took our team years to accumulate, now automatically applied to every incident. Ultimately, the goal is not to replace the DRI but to eliminate the manual investigation work so they can focus on what matters most: making the right call. The system surfaces the analysis; a human always makes the final decision.&lt;/P&gt;
&lt;DIV class="lia-align-justify"&gt;
&lt;H2&gt;How the System Works&lt;/H2&gt;
&lt;/DIV&gt;
&lt;P class="lia-align-justify"&gt;The investigation pipeline follows a six-step reasoning chain that mirrors how our best engineers approach manual triage.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;&lt;U&gt;Step 1 (Parse and Identify):&lt;/U&gt;&amp;nbsp;&lt;/STRONG&gt;The system extracts the key metadata from the ticket incident: the affected node identifier, container identifier, the timestamp when the VM went down, and the total duration of the outage. These parameters become the inputs for everything that follows.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;&lt;U&gt;Step 2 (Query VM Health Events):&lt;/U&gt;&amp;nbsp;&lt;/STRONG&gt;Using the extracted metadata, the AI invokes the AI assisted triage against VM availability tables, retrieving the sequence of state transitions the virtual machine experienced during the incident window.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;&lt;U&gt;Step 3 (Check Host Health):&lt;/U&gt;&amp;nbsp;&lt;/STRONG&gt;The AI then queries host-level health event tables, examining node state changes to understand what the underlying host was doing during the same period. This establishes whether the issue originated at the VM level or at the node level.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;&lt;U&gt;Step 4 (Correlate Repair Service Logs):&lt;/U&gt;&amp;nbsp;&lt;/STRONG&gt;With both the VM and host picture in hand, the AI cross-references repair service logs to trace when our repair orchestration service was triggered, what actions it took, and how long each step took.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;&lt;U&gt;Step 5 (Build the Timeline)&lt;/U&gt;:&amp;nbsp;&lt;/STRONG&gt;The AI assembles all of the retrieved data into a chronological, end-to-end timeline of the recovery event. This timeline maps directly to the three phases we track: Time to Detect (TTD), Time to Diagnose (TTDiag), and Time to Mitigate (TTM), as well as Time to Isolate (TTI) when service healing is involved.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;&lt;U&gt;Step 6 (Root Cause and Report):&lt;/U&gt;&amp;nbsp;&lt;/STRONG&gt;Finally, the AI analyzes the timeline, identifies which phase contained the largest gap, determines what operation caused the bottleneck, and generates a structured investigation report that is automatically attached to the ticket incident.&lt;/P&gt;
&lt;img /&gt;
&lt;DIV class="lia-align-justify"&gt;
&lt;H2&gt;Results and conclusion&lt;/H2&gt;
&lt;/DIV&gt;
&lt;P class="lia-align-justify"&gt;The results are measurable across three dimensions. On speed, the investigation pipeline now completes in under 5 minutes, down from 30 to 60 minutes manually, a roughly 90% reduction that shaves 50% off total triage time. On consistency, 100% of qualifying incidents receive the same thorough analysis regardless of who is on call, with the full phase breakdown (TTD, TTDiag, TTMitigate, and TTIsolate) applied every time. On ownership, the generated report gives managers and TPMs immediate context to assign the incident to the right engineer from the start, eliminating the back-and-forth handoffs that previously delayed remediation. This solution has saved Engineering Manager and TPM 10-20 minutes of manual work per incident.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;By encoding our team's best practices into an automated pipeline, we turned a slow, inconsistent manual process into something fast, thorough, and always available. MCP offers a practical path for any engineering team to make the knowledge of their most experienced engineers universally accessible, not as documentation, but as an automated system that applies it to every incident, every time. We will continue to share updates as this evolves and would love to hear from teams working on similar problems.&lt;/P&gt;
&lt;img /&gt;</description>
      <pubDate>Wed, 22 Apr 2026 18:34:50 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-compute-blog/ai-powered-downtime-investigation-for-azure-vms-automating-root/ba-p/4513473</guid>
      <dc:creator>Jon_Andoni_Baranda</dc:creator>
      <dc:date>2026-04-22T18:34:50Z</dc:date>
    </item>
    <item>
      <title>Azure VNet Data Gateway for Secure Power BI &amp; Power Platform Access in Enterprises</title>
      <link>https://techcommunity.microsoft.com/t5/azure-networking-blog/azure-vnet-data-gateway-for-secure-power-bi-power-platform/ba-p/4511410</link>
      <description>&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What Is a&amp;nbsp;VNet&amp;nbsp;data gateway?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The&amp;nbsp;VNet&amp;nbsp;data gateway is a&amp;nbsp;Microsoft&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;gateway service that runs inside a delegated subnet of an Azure Virtual Network. It allows supported Microsoft cloud services—such as Power BI, Power Platform dataflows, and Microsoft Fabric workloads—to securely connect to data sources that are protected using private networking.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Key characteristics:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No&amp;nbsp;customer&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;VM or container&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No OS, patching, or gateway software upgrades&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Gateway lifecycle fully managed by Microsoft&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Traffic stays on the Azure backbone network&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Works seamlessly with Private Endpoints&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This makes it ideal for enterprise and regulated environments where security and operational efficiency are equally important.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why Enterprises need&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Eliminates gateway infrastructure management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Traditional gateways require:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Virtual machines&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;High availability setup&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;OS patching and scaling&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Monitoring and troubleshooting&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With the&amp;nbsp;VNet&amp;nbsp;data gateway:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft manages&amp;nbsp;compute&amp;nbsp;lifecycle&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No VM or gateway software to maintain&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No HA or load balancer design needed&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Result:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; Significant reduction in operational and maintenance overhead for platform and infrastructure teams.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Secure access to private Azure resources&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Most enterprise Azure environments use:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Private Endpoints&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;NSGs and route tables&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Firewalls blocking public access&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The&amp;nbsp;VNet&amp;nbsp;data gateway:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Is injected into a delegated subnet in your&amp;nbsp;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Uses private IP addressing&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enforces NSG and UDR rules&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Communicates with Microsoft services over a&amp;nbsp;Microsoft&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;internal tunnel&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Result:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; Data sources&amp;nbsp;remain&amp;nbsp;fully private—no public endpoints or inbound ports&amp;nbsp;required.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Designed for Power Platform &amp;amp; Power BI at Scale&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The gateway supports secure access for:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Power BI semantic models&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Power BI paginated reports&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric Dataflow Gen2&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Fabric pipelines and copy jobs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Because&amp;nbsp;it’s&amp;nbsp;cloud&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;native&amp;nbsp;and centrally managed, the&amp;nbsp;VNet&amp;nbsp;data gateway scales well in large enterprises standardizing on Power Platform and Fabric.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;High&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;level&amp;nbsp;architecture overview&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;At runtime, the&amp;nbsp;VNet&amp;nbsp;data gateway works as follows:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;A query is&amp;nbsp;initiated&amp;nbsp;from &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power BI / Power Platform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Query details and credentials are sent to the &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Power Platform&amp;nbsp;VNet&amp;nbsp;service&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;A &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;containerized gateway instance&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; is injected into the delegated subnet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;The gateway connects to the&amp;nbsp;private data&amp;nbsp;source using private networking&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Results are sent back to Power BI or Power Platform via a &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;internal tunnel&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key security highlights:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No inbound connectivity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No public IP exposure&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Traffic&amp;nbsp;remains&amp;nbsp;on Azure backbone&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Full enforcement of NSGs and routing rules&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Enterprise benefits&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Least management overhead – no gateway servers&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Zero Trust aligned – private-only connectivity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Fully managed by Microsoft&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enterprise-grade security &amp;amp; governance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Works with Azure Private Endpoint architectures&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;When to Use&amp;nbsp;VNet&amp;nbsp;Data Gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Scenario&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Recommendation&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure private PaaS services&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Private Endpoint–only access&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Zero Trust network model&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Minimal ops &amp;amp; maintenance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;On&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;prem&amp;nbsp;only, no Azure&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;❌&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Traditional gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt; &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;by&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;step&amp;nbsp;configuration:&amp;nbsp;VNet&amp;nbsp;data gateway (Enterprise setup)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;High&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;level&amp;nbsp;flow (What&amp;nbsp;you&amp;nbsp;will&amp;nbsp;configure)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Register required Azure resource provider&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Prepare Azure Virtual Network and subnet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Configure private connectivity to data source&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create the&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create and bind data source connections&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Validate with Power BI / Power Platform workloads&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 1: Register&amp;nbsp;Microsoft.PowerPlatform&amp;nbsp;resource provider&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why this step is&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The&amp;nbsp;VNet&amp;nbsp;data gateway is a &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;service&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; that is injected into your Azure&amp;nbsp;VNet. Azure must explicitly allow Power Platform to deploy managed infrastructure into your subscription.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Configuration steps&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Sign in to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Azure portal&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Subscriptions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select the subscription that hosts the target&amp;nbsp;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Resource providers&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Search for&amp;nbsp;Microsoft.PowerPlatform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Register&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Status must show &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Registered&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This step enables subnet delegation to Power Platform services.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 2: Prepare the Azure Virtual Network&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why this step is&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The gateway runs &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;inside your&amp;nbsp;VNet&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. It must be placed in a &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;dedicated, delegated subnet&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; to&amp;nbsp;maintain&amp;nbsp;isolation and security boundaries.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Requirements&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;VNet&amp;nbsp;can be in &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;any Azure region&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Subnet must be &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;exclusive to&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Subnet must have outbound connectivity to the data source&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Configuration steps&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Azure portal → virtual networks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select your existing&amp;nbsp;VNet&amp;nbsp;(or create one)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Subnets → + Subnet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Configure:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Subnet name&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;snet-vnet-datagateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Address range&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: /27 or larger (recommended)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Subnet delegation&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft.PowerPlatform/vnetaccesslinks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Save the subnet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;⚠️&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Do &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;not&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; place any VMs, app gateway, or other workloads in this subnet.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 3: Configure private connectivity to the data source&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why this step is&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Enterprises typically block public access to PaaS services. The&amp;nbsp;VNet&amp;nbsp;data gateway is designed to work &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;natively with private endpoints&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Example: Azure SQL / SQL Managed Instance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Private Endpoint&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; for the data service&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Attach it to the same&amp;nbsp;VNet&amp;nbsp;(can be different subnet)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create or link a &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Private DNS Zone&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, for example:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;privatelink.database.windows.net&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Link the Private DNS Zone to the&amp;nbsp;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Ensure DNS resolution from the delegated subnet resolves to private IP&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;This ensures all traffic&amp;nbsp;remains&amp;nbsp;private and internal.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 4: Create the&amp;nbsp;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why this step is&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This is where the actual &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;managed&amp;nbsp;gateway&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; is logically created and associated with your&amp;nbsp;VNet.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Configuration steps&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You can do this from either &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Service&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; or &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power Platform Admin Center&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Using Power Platform Admin Center&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to &lt;/SPAN&gt;&lt;A href="https://admin.powerplatform.microsoft.com/" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://admin.powerplatform.microsoft.com&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Data → Gateways&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;+ New → Virtual network data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Provide:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Gateway name&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Azure subscription&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Resource group&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Virtual network&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Delegated subnet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Create&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;📌&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Notes:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Gateway&amp;nbsp;metadata&amp;nbsp;is stored in Power BI&amp;nbsp;tenant&amp;nbsp;home region&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Gateway runtime executes in the&amp;nbsp;VNet&amp;nbsp;region&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No VM or scale settings are&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 5: Create and configure data source connections&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why this step is&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The gateway exists, but Power BI / Power Platform must know &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;which data sources&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; can be accessed via it.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Configuration steps (Power BI example)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Service&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Settings → Manage connections and gateways&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select the newly created &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;+ New connection&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Provide:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Data source type (Azure SQL, Storage, Databricks, etc.)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Server / endpoint name (private DNS name)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Authentication (SQL / Entra ID)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Save the connection&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Assign users or security groups&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;This step enables governance and access control.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 6: Use the gateway in Power BI / Power Platform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Open dataset or semantic model settings&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Under &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Gateway connection&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, select:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Use a data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Choose the &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;VNet&amp;nbsp;data gateway&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Apply changes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Refresh or run queries&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Power Platform / Fabric&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="19" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select the same connection when configuring:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="19" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Dataflows Gen2&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="19" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Fabric pipelines&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="19" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Copy jobs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 7:&amp;nbsp;Validate&amp;nbsp;and test&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Validation Checklist&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;DNS resolves to private IP&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;No public endpoint access enabled&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;NSGs allow outbound traffic to data source&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Dataset refresh succeeds&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;✅&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;No gateway VM exists in subscription&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Optional:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enable logging and auditing from Power BI / Fabric&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Monitor gateway health in Admin Center&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Key Enterprise design guidance (Best practices)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;one gateway per environment tier&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; (Prod /&amp;nbsp;Non&lt;/SPAN&gt;‑&lt;SPAN data-contrast="auto"&gt;Prod)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;dedicated&amp;nbsp;VNets&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; for data access where possible&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Private Endpoint only&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; (avoid service endpoints)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Control access via &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;AAD groups&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, not individuals&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Avoid mixing gateway subnet with other workloads&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Conclusion:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;For enterprises looking to consume Power Platform, Power BI, and Microsoft Fabric securely while keeping operational overhead close to zero, the&amp;nbsp;VNet&amp;nbsp;data gateway is the recommended approach.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;It removes gateway infrastructure complexity, strengthens security posture, and aligns perfectly with modern Azure landing zone and Zero Trust architectures.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Apr 2026 16:30:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-networking-blog/azure-vnet-data-gateway-for-secure-power-bi-power-platform/ba-p/4511410</guid>
      <dc:creator>kirankumar_manchiwar04</dc:creator>
      <dc:date>2026-04-22T16:30:19Z</dc:date>
    </item>
    <item>
      <title>NFS Permission Denied in Azure App Service on Linux: What It Means and What to Do</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/nfs-permission-denied-in-azure-app-service-on-linux-what-it/ba-p/4513627</link>
      <description>&lt;P&gt;If your Azure App Service on Linux uses an Azure Files NFS share, you may sometimes see errors like &lt;STRONG data-start="650" data-end="673"&gt;Permission denied&lt;/STRONG&gt; or &lt;STRONG data-start="677" data-end="691"&gt;Errno 13&lt;/STRONG&gt; when your app tries to write to the mounted path. Azure Files supports NFS for Linux and Unix workloads, and NFS uses Unix-style numeric ownership and permissions (UID/GID), which can behave differently from SMB-based file sharing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="rzkdgm" data-start="963" data-end="974"&gt;Overview&lt;/H2&gt;
&lt;P data-start="976" data-end="1292"&gt;This post is for customers using &lt;STRONG data-start="1009" data-end="1039"&gt;Azure App Service on Linux&lt;/STRONG&gt; together with an &lt;STRONG data-start="1057" data-end="1082"&gt;Azure Files NFS share&lt;/STRONG&gt; for persistent storage. Azure Files NFS is designed for Linux and Unix-style workloads, supports POSIX-style permissions, and does not support Windows clients or NFS ACLs.&lt;/P&gt;
&lt;P data-start="1294" data-end="1741"&gt;In this setup, a write failure does &lt;STRONG data-start="1330" data-end="1371"&gt;not always mean the file is corrupted&lt;/STRONG&gt;. Sometimes it means the file ownership seen by the running app no longer matches the identity context currently used to access the NFS share. In containerized Linux environments, user IDs inside a container can be mapped differently outside the container, and Docker documents that this can affect access to host-mounted resources.&lt;/P&gt;
&lt;P data-start="1294" data-end="1741"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="ql6d3c" data-start="1743" data-end="1758"&gt;Common signs&lt;/H2&gt;
&lt;P data-start="1760" data-end="1775"&gt;You may notice:&lt;/P&gt;
&lt;UL data-start="1776" data-end="1953"&gt;
&lt;LI data-section-id="10auio4" data-start="1776" data-end="1797"&gt;Permission denied&lt;/LI&gt;
&lt;LI data-section-id="z3j6pa" data-start="1798" data-end="1810"&gt;Errno 13&lt;/LI&gt;
&lt;LI data-section-id="1y1gg4i" data-start="1811" data-end="1872"&gt;your app can read files but cannot update or overwrite them&lt;/LI&gt;
&lt;LI data-section-id="1tb3hyg" data-start="1873" data-end="1953"&gt;file ownership looks different than expected when you inspect the mounted path&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1955" data-end="2217"&gt;These symptoms are consistent with how NFS handles Unix-style ownership and permissions. Azure documents that NFS permissions are enforced through the operating system and NFS model rather than SMB-style user authentication.&lt;/P&gt;
&lt;P data-start="1955" data-end="2217"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="1obf5yj" data-start="2219" data-end="2241"&gt;Why this can happen&lt;/H2&gt;
&lt;P data-start="2243" data-end="2717"&gt;At a high level, NFS uses numeric ownership such as UID and GID. In container-based Linux environments, the identity that appears inside the container is not always the same as the identity seen outside the container. Docker’s user namespace documentation explains that a container user such as root can be mapped to a less-privileged user on the host, and that mounted-resource access can become more complex because of that mapping.&lt;/P&gt;
&lt;P data-start="2719" data-end="2999"&gt;That means a file created earlier under one effective identity context may later be accessed under a different one. When that happens, the app may no longer be able to write to the file even though the file itself is still present and intact.&lt;/P&gt;
&lt;P data-start="2719" data-end="2999"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="1w6b6i0" data-start="3001" data-end="3023"&gt;What to check first&lt;/H2&gt;
&lt;P data-start="3025" data-end="3092"&gt;Start by checking the mounted share from the app’s runtime context.&lt;/P&gt;
&lt;P&gt;ls -l /mount/path/file&lt;BR /&gt;ls -ln /mount/path/file&lt;BR /&gt;id -u&lt;BR /&gt;id -g&lt;/P&gt;
&lt;P data-start="3166" data-end="3470"&gt;The ls -ln output is especially useful because it shows the numeric UID and GID directly. If you need shell access for investigation, App Service supports SSH into Linux containers, and Microsoft notes that Linux custom containers may need extra SSH configuration.&lt;/P&gt;
&lt;P data-start="3472" data-end="3709"&gt;You should also review the NFS share’s squash setting. Azure Files NFS supports &lt;STRONG data-start="3552" data-end="3570"&gt;No Root Squash&lt;/STRONG&gt;, &lt;STRONG data-start="3572" data-end="3587"&gt;Root Squash&lt;/STRONG&gt;, and &lt;STRONG data-start="3593" data-end="3607"&gt;All Squash&lt;/STRONG&gt;. Microsoft documents these options in the root squash guidance.&lt;/P&gt;
&lt;H2 data-section-id="10wx0es" data-start="3711" data-end="3736"&gt;A practical mitigation&lt;/H2&gt;
&lt;P data-start="3738" data-end="4075"&gt;If the main issue is inconsistent ownership behavior, a practical mitigation is often to use &lt;STRONG data-start="3831" data-end="3845"&gt;All Squash&lt;/STRONG&gt; on the NFS share. Azure documents All Squash as a supported NFS setting, and squash settings are specifically intended to control how client identities are handled when they access the share.&lt;/P&gt;
&lt;P data-start="4077" data-end="4358"&gt;One important note: changing the squash setting does &lt;STRONG data-start="4130" data-end="4169"&gt;not automatically rewrite old files&lt;/STRONG&gt;. If existing data was created under a different ownership context, you may still need to migrate that data to a new share configured the way you want.&lt;/P&gt;
&lt;H2 data-section-id="1gb713a" data-start="4360" data-end="4383"&gt;Recommended approach&lt;/H2&gt;
&lt;P data-start="4385" data-end="4419"&gt;A simple and cautious approach is:&lt;/P&gt;
&lt;OL data-start="4421" data-end="4737"&gt;
&lt;LI data-section-id="1uanbav" data-start="4421" data-end="4459"&gt;Create a new Azure Files NFS share.&lt;/LI&gt;
&lt;LI data-section-id="39b7cw" data-start="4460" data-end="4532"&gt;Configure it with &lt;STRONG data-start="4481" data-end="4495"&gt;All Squash&lt;/STRONG&gt; if that matches your workload needs.&lt;/LI&gt;
&lt;LI data-section-id="3rh1u1" data-start="4533" data-end="4602"&gt;Mount both the old share and the new share on a Linux environment.&lt;/LI&gt;
&lt;LI data-section-id="1uhk7hn" data-start="4603" data-end="4636"&gt;Copy the data from old to new.&lt;/LI&gt;
&lt;LI data-section-id="3s8nes" data-start="4637" data-end="4691"&gt;Validate that the app can read and write correctly.&lt;/LI&gt;
&lt;LI data-section-id="rraojq" data-start="4692" data-end="4737"&gt;Repoint production to the validated share.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-start="4739" data-end="4958"&gt;Azure Files supports NFS shares and squash configuration, and Azure also documents how to mount NFS shares on Linux if you need a separate environment for validation or migration.&lt;/P&gt;
&lt;H2 data-section-id="i25d30" data-start="4960" data-end="4977"&gt;Final takeaway&lt;/H2&gt;
&lt;P data-start="4979" data-end="5394"&gt;If your App Service on Linux starts hitting &lt;STRONG data-start="5023" data-end="5048"&gt;NFS permission denied&lt;/STRONG&gt; errors, focus first on &lt;STRONG data-start="5072" data-end="5124"&gt;ownership, UID/GID behavior, and squash settings&lt;/STRONG&gt; before assuming the files are damaged. For many users, the most effective path is to validate the current ownership model, review the NFS squash setting, and, if needed, migrate data to a share configured with&amp;nbsp;&lt;STRONG data-start="5339" data-end="5353"&gt;All Squash&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P data-start="4979" data-end="5394"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="1g5aw3h" data-start="5396" data-end="5409"&gt;References&lt;/H2&gt;
&lt;UL data-start="5411" data-end="5796"&gt;
&lt;LI data-section-id="j8s92z" data-start="5411" data-end="5494"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol?utm_source=chatgpt.com" target="_blank"&gt;NFS file shares in Azure Files | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-section-id="1gz963x" data-start="5495" data-end="5594"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/storage/files/nfs-root-squash?utm_source=chatgpt.com&amp;amp;tabs=azure-portal" target="_blank"&gt;Configure Root Squash Settings for NFS Azure File Shares | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-section-id="5s2ye5" data-start="5595" data-end="5709"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/app-service/configure-linux-open-ssh-session?utm_source=chatgpt.com&amp;amp;pivots=container-linux" target="_blank"&gt;SSH Access for Linux and Windows Containers - Azure App Service | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-section-id="8tsxr1" data-start="5710" data-end="5796"&gt;&lt;A href="https://docs.docker.com/engine/security/userns-remap/?utm_source=chatgpt.com" target="_blank"&gt;Isolate containers with a user namespace | Docker Docs&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 22 Apr 2026 07:31:52 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/nfs-permission-denied-in-azure-app-service-on-linux-what-it/ba-p/4513627</guid>
      <dc:creator>michelleyau</dc:creator>
      <dc:date>2026-04-22T07:31:52Z</dc:date>
    </item>
    <item>
      <title>If You're Building AI on Azure, ECS 2026 is Where You Need to Be</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-developer-community/if-you-re-building-ai-on-azure-ecs-2026-is-where-you-need-to-be/ba-p/4513622</link>
      <description>&lt;P&gt;Let me be direct: there's a lot of noise in the conference calendar. Generic cloud events. Vendor showcases dressed up as technical content. Sessions that look great on paper but leave you with nothing you can actually ship on Monday.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://ecs.events/" target="_blank" rel="noopener" data-href="https://ecs.events/"&gt;ECS 2026&lt;/A&gt;&amp;nbsp;isn't that.&lt;/P&gt;
&lt;P&gt;As someone who will be on stage at Cologne this May, I can tell you the &lt;A class="lia-external-url" href="https://collabsummit.eu/" target="_blank" rel="noopener"&gt;European Collaboration Summit&lt;/A&gt; combined with the&amp;nbsp;&lt;A class="lia-external-url" href="https://cloudsummit.eu/en/agenda" target="_blank" rel="noopener"&gt;European AI &amp;amp; Cloud Summit &lt;/A&gt;&amp;nbsp;and &lt;A class="lia-external-url" href="https://bizappssummit.eu/" target="_blank" rel="noopener"&gt;European Biz Apps Summit&lt;/A&gt; is one of the few events I've seen where engineers leave with real, production-applicable knowledge.&lt;BR /&gt;&lt;BR /&gt;Three days. Three summits. 3,000+ attendees. One of the largest Microsoft-focused events in Europe, and it keeps getting better.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If you're building AI systems on Azure, designing cloud-native architectures, or trying to figure out how to take your AI experiments to production — this is where the conversation is happening.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;What ECS 2026 Actually Is&lt;/H2&gt;
&lt;P&gt;ECS 2026 runs May 5–7 at Confex in Cologne, Germany. It brings together three co-located summits under one roof:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;European Collaboration Summit&lt;/STRONG&gt;&amp;nbsp;— Microsoft 365, Teams, Copilot, and governance&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;European AI &amp;amp; Cloud Summit&lt;/STRONG&gt;&amp;nbsp;— Azure architecture, AI agents, cloud security, responsible AI&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;European BizApps Summit&lt;/STRONG&gt;&amp;nbsp;— Power Platform, Microsoft Fabric, Dynamics&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;For Azure engineers and AI developers, the&amp;nbsp;&lt;STRONG&gt;European AI &amp;amp; Cloud Summit&lt;/STRONG&gt; is your primary destination. But don't ignore the overlap, some of the most interesting AI conversations happen at the intersection of collaboration tooling and cloud infrastructure.&lt;/P&gt;
&lt;P&gt;The scale matters here:&amp;nbsp;&lt;STRONG&gt;3,000+ attendees, 100+ sessions, multiple deep-dive tracks&lt;/STRONG&gt;, and a speaker lineup that includes Microsoft executives, Regional Directors, and MVPs who have built, broken, and rebuilt production systems.&lt;/P&gt;
&lt;H2&gt;The Azure + AI Track - What's Actually On the Agenda&lt;/H2&gt;
&lt;P&gt;The&amp;nbsp;&lt;A class="lia-external-url" href="https://cloudsummit.eu/en/agenda" target="_blank" rel="noopener" data-href="https://cloudsummit.eu/en/agenda"&gt;AI &amp;amp; Cloud Summit agenda&lt;/A&gt; is built around real technical depth. Not "intro to AI" content, actual architecture decisions, patterns that work, and lessons from things that didn't.&lt;/P&gt;
&lt;P&gt;Here's what you can expect:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;AI Agents and Agentic Systems&lt;/STRONG&gt;&lt;BR /&gt;This is where the energy is right now, and ECS is leaning in. Expect sessions covering how to design agent workflows, chain reasoning steps, handle memory and state, and integrate with Azure AI services. Marco Casalaina, VP of Products for Azure AI at Microsoft, is speaking if you want to understand the direction of the Azure AI platform from the people building it, this is a direct line.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Architecture at Scale&lt;/STRONG&gt;&lt;BR /&gt;Cloud-native patterns, microservices, containers, and the architectural decisions that determine whether your system holds up under real load. These sessions go beyond theory you'll hear from engineers who've shipped these designs at enterprise scale.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Observability, DevOps, and Production AI&lt;/STRONG&gt;&lt;BR /&gt;Getting AI to production is harder than the demos suggest. Sessions here cover monitoring AI systems, integrating LLMs into CI/CD pipelines, and building the operational practices that keep AI in production reliable and governable.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Cloud Security and Compliance&lt;/STRONG&gt;&lt;BR /&gt;Security isn't optional when you're putting AI in front of users or connecting it to enterprise data. Tracks cover identity, access patterns, responsible AI governance, and how to design systems that satisfy compliance requirements without becoming unmaintainable.&lt;/P&gt;
&lt;H2&gt;Pre-Conference Deep Dives&lt;/H2&gt;
&lt;P&gt;One underrated part of ECS: the pre-conference workshops. These are extended, hands-on sessions typically 3–6 hours that let you go deep on a single topic with an expert. Think of them as intensive short courses where you can actually work through the material, not just watch slides.&lt;/P&gt;
&lt;P&gt;If you're newer to a particular area of Azure AI, or you want to build fluency in a specific pattern before the main conference sessions, these are worth the early travel.&lt;/P&gt;
&lt;H2&gt;The Speaker Quality Is Different Here&lt;/H2&gt;
&lt;P&gt;The &lt;A class="lia-external-url" href="https://ecs.events/en/speakers" target="_blank" rel="noopener"&gt;ECS speaker roster &lt;/A&gt;includes Microsoft executives, Microsoft MVPs, and Regional Directors, people who have real accountability for the products and patterns they're presenting. You'll hear from over 20 Microsoft speakers:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Marco Casalaina&lt;/STRONG&gt;&amp;nbsp;— VP of Products, Azure AI at Microsoft&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adam Harmetz&lt;/STRONG&gt; — VP of Product at Microsoft, Enterprise Agent&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;And dozens of MVPs and Regional Directors who are in the field every day, solving the same problems you are. These aren't keynote-only speakers — they're in the session rooms, at the hallway track, available for real conversations.&lt;/P&gt;
&lt;H2&gt;The Hallway Track Is Not a Cliché&lt;/H2&gt;
&lt;P&gt;I know "networking" sounds like a corporate afterthought. At ECS it genuinely isn't.&lt;/P&gt;
&lt;P&gt;When you put 3,000 practitioners, engineers, architects, DevOps leads, security specialists in one venue for three days, the conversations between sessions are often more valuable than the sessions themselves. You get candid answers to "how are you actually handling X in production?" that you won't find in documentation.&lt;/P&gt;
&lt;P&gt;The European Microsoft community is tight-knit and collaborative. ECS is where that community concentrates.&lt;/P&gt;
&lt;H2&gt;Why This Matters Right Now&lt;/H2&gt;
&lt;P&gt;We're in a period where AI development is moving fast but the engineering discipline around it is still maturing. Most teams are figuring out:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;How to move from AI prototype to production system&lt;/LI&gt;
&lt;LI&gt;How to instrument and observe AI behaviour reliably&lt;/LI&gt;
&lt;LI&gt;How to design agent systems that don't become unmaintainable&lt;/LI&gt;
&lt;LI&gt;How to satisfy security and compliance requirements in AI-integrated architectures&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;ECS 2026 is one of the few places where you can get direct answers to these questions from people who've solved them — not theoretically, but in production, on Azure, in the last 12 months.&lt;/P&gt;
&lt;P&gt;If you go, you'll come back with practical patterns you can apply immediately. That's the bar I hold events to. ECS consistently clears it.&lt;/P&gt;
&lt;H2&gt;Register and Explore the Agenda&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Register for ECS 2026:&lt;/STRONG&gt;&amp;nbsp;&lt;A class="lia-external-url" href="https://ecs.events/" target="_blank" rel="noopener" data-href="https://ecs.events/"&gt;ecs.events&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Explore the AI &amp;amp; Cloud Summit agenda:&lt;/STRONG&gt;&amp;nbsp;&lt;A class="lia-external-url" href="https://cloudsummit.eu/en/agenda" target="_blank" rel="noopener" data-href="https://cloudsummit.eu/en/agenda"&gt;cloudsummit.eu/en/agenda&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Dates:&lt;/STRONG&gt;&amp;nbsp;May 5–7, 2026 |&amp;nbsp;&lt;STRONG&gt;Location:&lt;/STRONG&gt;&amp;nbsp;Confex, Cologne, Germany&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Early registration is worth it the pre-conference workshops fill up.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;And if you're coming, find me, I'll be the one talking too much about AI agents and Azure deployments.&lt;/P&gt;
&lt;P&gt;See you in Cologne.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Apr 2026 09:17:46 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-developer-community/if-you-re-building-ai-on-azure-ecs-2026-is-where-you-need-to-be/ba-p/4513622</guid>
      <dc:creator>Lee_Stott</dc:creator>
      <dc:date>2026-04-22T09:17:46Z</dc:date>
    </item>
    <item>
      <title>Getting Started with the SUSE Multi-Linux Manager MCP Server and GitHub Copilot</title>
      <link>https://techcommunity.microsoft.com/t5/linux-and-open-source-blog/getting-started-with-the-suse-multi-linux-manager-mcp-server-and/ba-p/4513494</link>
      <description>&lt;P&gt;Enterprise Linux environments are heterogeneous. That's not a problem statement - it's just the truth. SUSE, Ubuntu, RHEL, and their downstream variants coexist in every data center I've seen, and increasingly across Azure subscriptions too.&amp;nbsp; AI assistants like GitHub Copilot can already&amp;nbsp; connect to these machines, run commands, troubleshoot issues, apply patches&amp;nbsp; one box at a time. But if you're managing a fleet of hundreds or thousands&amp;nbsp; of&amp;nbsp; systems across distributions, the gap isn't whether AI can touch your&amp;nbsp; infrastructure. It's whether it can work through the centralized management&amp;nbsp; tooling where your inventory, patch orchestration, RBAC, and audit trails&amp;nbsp; actually live.&lt;/P&gt;
&lt;P&gt;SUSE just took a meaningful step to close that gap. Their Multi-Linux Manager MCP Server, built on the open source Uyuni project gives AI agents like GitHub Copilot a structured, authenticated interface to your existing&amp;nbsp; management platform. Not the individual boxes. The management plane where your centralized inventory, CVE auditing, cross-distribution patch scheduling, and RBAC already live. Not a rip-and-replace. Not a new console to learn. A way to talk to the infrastructure management you've already built.&lt;/P&gt;
&lt;P&gt;This post walks through what the MCP server does, why it matters in an Azure context, and how to get it wired up with GitHub Copilot so you can start working with it today.&lt;/P&gt;
&lt;P&gt;The Model Context Protocol (MCP) is an open standard that defines how AI models connect to external tools and data sources. Think of it as the USB-C of AI integrations - a common interface so that different clients (GitHub Copilot, Claude Desktop, Gemini CLI) can talk to different servers (Azure, SUSE, databases, APIs) without bespoke glue code for every combination.&lt;/P&gt;
&lt;H3&gt;Why This Matters for Azure Customers&lt;/H3&gt;
&lt;P&gt;If you are running Linux workloads on Azure - whether for SAP, HPC, or traditional enterprise applications - the Multi-Linux Manager MCP server provides a conversational interface for your infrastructure without requiring you to change tools.&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-level="1"&gt;Management-plane depth, not just infrastructure inventory. Azure and Copilot already give you fleet-wide visibility into your VMs. The SUSE MCP server adds the layer underneath: patch scheduling state, erratum tracking, cross-distribution CVE audits, and system group management that lives in your Multi-Linux Manager instance.&lt;/LI&gt;
&lt;LI aria-level="1"&gt;A single pane of glass. Pair this with the Azure MCP Server and your AI assistant can move between Azure resource operations and OS-level fleet management in one conversation, across the distributions Multi-Linux Manager supports, without switching tools or contexts.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;What You Can Actually Do With It&lt;/H3&gt;
&lt;P&gt;The MCP server exposes over 20 practical tools for day-to-day infrastructure operations. Instead of relying on a generic knowledge base, Copilot queries your actual infrastructure.&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-level="1"&gt;Inventory and Inspection: You can list active systems across your fleet or pull detailed event histories for specific machines.&lt;/LI&gt;
&lt;LI aria-level="1"&gt;Patch Management and CVE Response: Copilot can rapidly audit all systems for pending updates or identify specific machines vulnerable to a new CVE.&lt;/LI&gt;
&lt;LI aria-level="1"&gt;Operational Actions: You can list system groups, register new systems, or schedule server reboots.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;The Security Model: Human-in-the-Loop&lt;/H3&gt;
&lt;P&gt;Letting an AI agent touch production infrastructure raises the obvious question: what keeps it from doing something destructive? SUSE has been deliberate about this by designing the MCP server with a default "human-in-the-loop" security model.&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-level="1"&gt;Read-Only by Default: The server ships with all write actions disabled (UYUNI_MCP_WRITE_TOOLS_ENABLED=false).&lt;/LI&gt;
&lt;LI aria-level="1"&gt;Explicit Confirmation: If you enable write tools, Copilot is required to ask for your explicit confirmation before executing state-changing actions like applying patches or scheduling reboots.&lt;/LI&gt;
&lt;LI aria-level="1"&gt;Enterprise Authentication: The server supports OAuth 2.0, ensuring the AI agent authenticates through your identity provider.&amp;nbsp;&lt;/LI&gt;
&lt;LI aria-level="1"&gt;Layered Governance: Combined with Multi-Linux Manager’s role-based access control (RBAC) and the principle of least privilege for the service account, you get layered governance without bolting on a separate approval system.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;AI-assisted operations that bypass human judgment won't get adopted in enterprises. AI-assisted operations that make the human faster while keeping them in control, that's the model that actually ships.&lt;/P&gt;
&lt;H3&gt;Architecture on Azure&lt;/H3&gt;
&lt;P&gt;Here's the topology we're working with:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;SUSE Multi-Linux Manager - Running on an Azure VM, managing your Linux fleet across distributions. This is the control plane for your systems - inventory, patching, configuration. Available on Azure Marketplace.&lt;/LI&gt;
&lt;LI&gt;MCP Server - Runs as a container (Docker/Podman), either locally alongside your dev environment or as a standalone HTTP service. The MCP Server container is available in &lt;A href="https://registry.suse.com/repositories/suse-agentic-mcp-multi-linux-manager" target="_blank"&gt;SUSE Registry&lt;/A&gt; and is backed by a secure, trusted software supply chain.&lt;/LI&gt;
&lt;LI&gt;GitHub Copilot - In VS Code or the CLI. Configured to use the MCP server as a tool source. Sends natural language requests, receives structured responses from your infrastructure.&lt;/LI&gt;
&lt;LI&gt;Your Linux fleet on Azure - Whatever Multi-Linux Manager manages for you. The MCP server doesn't care about the distribution mix; that's the whole point of Multi-Linux Manager.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;Getting Started: Step by Step&lt;/H2&gt;
&lt;H3&gt;Prerequisites&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; A running SUSE Multi-Linux Manager instance managing your Linux estate&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Docker or Podman installed on your workstation (for local deployment) or network access to a remote MCP server instance&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; GitHub Copilot with agent mode enabled (VS Code or CLI)&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Step 1: Stand up the MCP Server&lt;/H3&gt;
&lt;P&gt;For local deployment, pull the container and point it at your Multi-Linux Manager instance following the project documentation. For remote/team deployments, your administrator can run the server as a standalone HTTP service with OAuth 2.0.&lt;/P&gt;
&lt;H3&gt;Step 2: Configure GitHub Copilot&lt;/H3&gt;
&lt;P&gt;In VS Code, open the Command Palette and type GitHub Copilot: Configure MCP Servers. Add your server to the config:&lt;/P&gt;
&lt;P&gt;{&lt;BR /&gt;&amp;nbsp; "mcpServers": {&lt;BR /&gt;"suse-multi-linux-manager": {&lt;BR /&gt;&amp;nbsp; "type": "http",&lt;BR /&gt;&amp;nbsp; "url": "https://your-mcp-server.example.com/mcp"&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;
&lt;H3&gt;Step 3: Verify the Connection&lt;/H3&gt;
&lt;P&gt;Open GitHub Copilot and try a read-only query:&lt;/P&gt;
&lt;P&gt;"List all active systems managed by my SUSE Multi-Linux Manager."&lt;/P&gt;
&lt;P&gt;If your fleet inventory appears, you're connected.&lt;/P&gt;
&lt;H3&gt;Step 4: Start Operating&lt;/H3&gt;
&lt;P&gt;"Are any of my systems affected by CVE-2026-XXXX?"&lt;/P&gt;
&lt;P&gt;"Show me all systems that have pending but unscheduled security patches."&lt;/P&gt;
&lt;P&gt;"Which systems need a reboot?"&lt;/P&gt;
&lt;H2&gt;Getting Involved&lt;/H2&gt;
&lt;P&gt;The SUSE Multi-Linux Manager MCP server is open source under the Apache 2.0 license, built on the Uyuni project. The current v0.5 is a tech preview. Feedback goes to uyuni-project/uyuni#10562, bugs to GitHub Issues.&lt;/P&gt;
&lt;P&gt;The gap in AI-assisted Linux operations was never whether AI could reach your infrastructure. It was whether it could work through the management tooling where your fleet-scale decisions actually get made. SUSE built the bridge to that layer. GitHub Copilot is the conversational interface. Your fleet is already there. Go connect them.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Apr 2026 07:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/linux-and-open-source-blog/getting-started-with-the-suse-multi-linux-manager-mcp-server-and/ba-p/4513494</guid>
      <dc:creator>abbottkarl</dc:creator>
      <dc:date>2026-04-22T07:00:00Z</dc:date>
    </item>
    <item>
      <title>Dynamic hostpool sessions not updating</title>
      <link>https://techcommunity.microsoft.com/t5/azure-virtual-desktop/dynamic-hostpool-sessions-not-updating/m-p/4513607#M14052</link>
      <description>&lt;P&gt;We have created a dynamic host pool in a test environment. We see that new hosts are being created based on the scaling plan.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, these are no longer being deleted. When we look at the status, we see that there are no active sessions, but when we zoom in on the session hosts, it shows that there is a session on two of the three hosts. The latter is incorrect, but it is likely the reason why scaling down is not taking place.&lt;/P&gt;&lt;P&gt;Does anyone recognize this? Is there possibly a solution for this?&lt;/P&gt;&lt;P&gt;Small addition: If I log in with a user and then log out properly, the current sessions in the host pool overview are updated quickly. However, if I then go to Manage, Session Hosts, the total sessions on that host remain at 1.&lt;/P&gt;&lt;P&gt;When I now put the host in drinamode, only then are the actual sessions updated.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Apr 2026 07:28:04 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-virtual-desktop/dynamic-hostpool-sessions-not-updating/m-p/4513607#M14052</guid>
      <dc:creator>OnzenHans</dc:creator>
      <dc:date>2026-04-22T07:28:04Z</dc:date>
    </item>
    <item>
      <title>Ingest at Scale, Securely — Azure Monitor pipeline Is Now Generally Available</title>
      <link>https://techcommunity.microsoft.com/t5/azure-observability-blog/ingest-at-scale-securely-azure-monitor-pipeline-is-now-generally/ba-p/4510379</link>
      <description>&lt;P&gt;Today, we're thrilled to announce the &lt;STRONG&gt;general availability of Azure Monitor pipeline&lt;/STRONG&gt; — a telemetry pipeline built for secure, high-scale ingestion across any environment. But the best way to understand what makes it powerful isn't to start with features. It's to start with the problems that kept showing up, over and over, in our conversations with customers. So, let's dig in...&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Chances are, this sounds a lot like your environment&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Imagine a large enterprise rolling out Microsoft Sentinel as their SIEM.&lt;/P&gt;
&lt;P&gt;They have sites across regions, a mix of on‑premises and cloud environments, and security telemetry streaming in from firewalls, network devices, and Linux servers—&lt;STRONG&gt;100,000 to 1 million events per second&lt;/STRONG&gt; in some locations. Traditional forwarders buckle under the load, drop events during network blips, and ship everything – signal and noise – straight into Sentinel. The result: skyrocketing ingestion costs, degraded detections, and a brittle forwarding infrastructure that demands constant babysitting.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you're managing environments like these, these questions are probably top of mind:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;How do I &lt;STRONG&gt;securely ingest telemetry&lt;/STRONG&gt;—without opening hundreds of risky endpoints?&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;How do I &lt;STRONG&gt;reduce ingestion costs&lt;/STRONG&gt; when telemetry spikes across thousands of sources simultaneously?&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;How do I &lt;STRONG&gt;centrally standardize logs&lt;/STRONG&gt; across sites and device types before they ever reach Azure&lt;/EM&gt;?&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;What happens to telemetry from an entire location when &lt;STRONG&gt;connectivity drops&lt;/STRONG&gt;?&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;And how do I do all of this &lt;STRONG&gt;consistently, at massive scale, and centrally&lt;/STRONG&gt; across environments instead of configuring each host individually?&lt;/EM&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These aren't edge cases. For many teams,&amp;nbsp;&lt;STRONG&gt;getting data into the system itself is the hardest part&lt;/STRONG&gt; of observability —and by the time telemetry reaches Azure Monitor or Sentinel, it's already too late to fix these problems.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Customers need control &lt;EM&gt;before&lt;/EM&gt; the data hits the cloud.&lt;/STRONG&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;What is Azure Monitor pipeline (and why it’s different)?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/aep-edge-pipeline" target="_blank" rel="noopener"&gt;Azure Monitor pipeline&lt;/A&gt; provides a &lt;STRONG&gt;centralized control point for telemetry ingestion and transformation&lt;/STRONG&gt;, designed specifically for &lt;STRONG&gt;secure, high&lt;/STRONG&gt;‑&lt;STRONG&gt;throughput, enterprise&lt;/STRONG&gt;‑&lt;STRONG&gt;scale scenarios&lt;/STRONG&gt;. It's built on open-source technologies from the &lt;STRONG&gt;OpenTelemetry ecosystem&lt;/STRONG&gt; and includes the components needed to receive telemetry from local clients, process that telemetry, and forward it to Azure Monitor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;It’s not another agent. And NO, you do not need to install it on all the resources…&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agents such as Azure Monitor agent are great for collecting telemetry from individual machines and services. &lt;STRONG&gt;Azure Monitor pipeline solves a different problem&lt;/STRONG&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;“How do I ingest telemetry from across my environment through a centralized pipeline – instead of configuring each host – while maintaining control over reliability, security, and ingestion cost?”&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;With Azure Monitor pipeline control, you can:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Ensure logs land directly in Azure‑native schemas&lt;/STRONG&gt; – automatic schematization into tables such as &lt;EM&gt;Syslog&lt;/EM&gt; and &lt;EM&gt;CommonSecurityLog&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Prevent data loss during intermittent connectivity across sites – &lt;/STRONG&gt;local buffering in persistent storage with automated backfill&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reduce ingestion costs before data reaches the cloud&lt;/STRONG&gt; – centralized filtering, aggregation, and transformation&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Ingest telemetry at sustained high volumes in the range of hundreds and thousands of events per second&lt;/STRONG&gt; – horizontally scalable pipeline architecture&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Secure telemetry ingestion without managing certificates on each host individually&lt;/STRONG&gt; – centralized TLS/mTLS with automated certificate provisioning and zero‑downtime rotation&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Maintain visibility into ingestion infrastructure health&lt;/STRONG&gt; – pipeline performance and health monitoring&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Plan deployments confidently at large scale&lt;/STRONG&gt; – infrastructure sizing guidance for expected telemetry volume&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And all of this is &lt;STRONG&gt;fully supported and production&lt;/STRONG&gt;‑&lt;STRONG&gt;ready in GA&lt;/STRONG&gt;. &lt;A class="lia-external-url" href="https://aka.ms/aep-edge-pipeline" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So, let's talk a little bit about these in detail!&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Tired of broken detections because logs don't match your table schema? - Automatic schematization (a customer favorite!)&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;A consistent theme from preview customers was how painful it is to deal with log formats.&lt;/P&gt;
&lt;P&gt;Azure Monitor pipeline is &lt;STRONG&gt;the only solution that automatically shapes and schematizes data, &lt;/STRONG&gt;so it lands directly in standard Azure tables such as &lt;EM&gt;Syslog&lt;/EM&gt; and &lt;EM&gt;CommonSecurityLog&lt;/EM&gt;. &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-monitor/data-collection/pipeline-configure-portal?branch=pr-en-us-4037#choose-a-destination-table" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;That means:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;No custom parsing pipelines downstream&lt;/LI&gt;
&lt;LI&gt;No broken detections due to schema drift&lt;/LI&gt;
&lt;LI&gt;Faster time to value for security teams&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This happens &lt;STRONG&gt;before&lt;/STRONG&gt; data reaches the cloud – right where it matters most.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;What happens to my telemetry when the network goes down? - Local buffering in persistent storage and automated backfill&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Networks fail. Maintenance happens. Sites go offline.&lt;/P&gt;
&lt;P&gt;Azure Monitor pipeline is built for this reality. It buffers telemetry locally in your configured persistent storage during network interruptions and automatically backfills data when connectivity is restored. &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-monitor/data-collection/pipeline-configure-cli?branch=pr-en-us-4037&amp;amp;tabs=cli#enable-buffering-to-persistent-storage" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The result:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;No gaps in security visibility&lt;/LI&gt;
&lt;LI&gt;No manual replays&lt;/LI&gt;
&lt;LI&gt;Confidence that critical telemetry isn’t lost&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;How do I reduce ingestion costs without sacrificing signal quality? - Filter and aggregate at the edge&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Nobody likes to pay for the data that they do not need...&lt;/P&gt;
&lt;P&gt;With Azure Monitor pipeline, customers can &lt;STRONG&gt;filter, aggregate, and shape the telemetry at the edge&lt;/STRONG&gt;, sending only high‑value data to Azure. &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-monitor/data-collection/pipeline-transformations?tabs=portal" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;This helps teams:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Reduce ingestion costs&lt;/LI&gt;
&lt;LI&gt;Improve detection quality&lt;/LI&gt;
&lt;LI&gt;Keep cloud analytics focused on signal, not volume&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cost optimization and signal quality are no longer trade‑offs – you get both.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;How do I keep up when telemetry volumes spike to hundreds of thousands of events per second? - Scaling&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;One of the biggest pain points we hear is scale.&lt;/P&gt;
&lt;P&gt;Azure Monitor pipeline is designed for &lt;STRONG&gt;sustained high throughput ingestion&lt;/STRONG&gt;, scaling horizontally and vertically to handle&amp;nbsp;&lt;STRONG&gt;hundreds of thousands to millions of events per second&lt;/STRONG&gt;. &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-monitor/data-collection/pipeline-sizing?branch=pr-en-us-4037#scale-vertically-horizontally-or-both" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;This isn’t about theoretical limits; it’s about handling the real-world extremes that break traditional forwarders.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;How do I send telemetry in a secure manner? - Secure ingestion with TLS and mTLS&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Security teams consistently tell us that plain TCP ingestion just isn’t acceptable – especially in regulated environments.&lt;/P&gt;
&lt;P&gt;Azure Monitor pipeline addresses this head‑on by providing &lt;STRONG&gt;TLS&lt;/STRONG&gt;‑&lt;STRONG&gt;secured ingestion endpoints&lt;/STRONG&gt; with mutual authentication, ensuring telemetry is encrypted in transit and accepted only from trusted sources. &lt;A class="lia-external-url" href="https://aka.ms/aep-tls-config" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The result:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Secure ingestion at the boundary by encrypting data in transit using TLS with &lt;STRONG&gt;&lt;EM&gt;automated certificate provisioning and zero downtime rotation. &lt;/EM&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Clients and Azure Monitor pipeline endpoints both validate each other before ingestion by enabling &lt;STRONG&gt;mutual authentication&lt;/STRONG&gt; with mTLS, and it’s easy to set it up with our default experience.&lt;/LI&gt;
&lt;LI&gt;Do you have your own PKI and certificate management systems? - Feel free to &lt;STRONG&gt;&lt;EM&gt;bring your own certificates &lt;/EM&gt;&lt;/STRONG&gt;to enable secure ingestion.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;If the pipeline is this critical — how do I know it's healthy?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;One thing we heard loud and clear during preview:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;“If this pipeline is critical, I need to see how it’s doing.”&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Azure Monitor pipeline now exposes &lt;STRONG&gt;health and performance signals&lt;/STRONG&gt;, so it’s no longer a black box. &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-monitor/logs/data-collection-troubleshoot" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Customers can answer questions like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Is my pipeline receiving, processing, and sending telemetry?&lt;/LI&gt;
&lt;LI&gt;What’s the CPU and memory usage of each pipeline instance?&lt;/LI&gt;
&lt;LI&gt;Why is a pipeline unhealthy—or down?&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Observability for observability&lt;/STRONG&gt; felt like the right bar to meet.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;How do I plan infrastructure without over- or under-provisioning?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Planning pipeline infrastructure shouldn't be a guessing game – and we heard this loud and clear during preview.&lt;/P&gt;
&lt;P&gt;GA includes &lt;STRONG&gt;clear sizing guidance&lt;/STRONG&gt; to help you plan the right infrastructure based on your expected telemetry volume and workload characteristics. Not rigid formulas, but &lt;STRONG&gt;practical starting points&lt;/STRONG&gt; that give you a confident baseline so you can design intentionally, deploy faster, and avoid costly over- or under-provisioning. &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-monitor/data-collection/pipeline-sizing?" target="_blank" rel="noopener"&gt;Learn more&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Alright, these are a bunch of exciting features. How much do I need to pay for them?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Azure Monitor pipeline is &lt;STRONG&gt;included at no additional cost&lt;/STRONG&gt; for ingesting telemetry into Azure Monitor and Microsoft Sentinel.&lt;/P&gt;
&lt;P&gt;With general availability, Azure Monitor pipeline is production-ready so you can run the most demanding ingestion scenarios with confidence. If you’re already using it in preview, welcome to GA. If you’re just getting started, there’s never been a better time to dive in.&lt;/P&gt;
&lt;P&gt;As always, your feedback is what drives this forward. Drop a comment below, reach out directly, or share what you're building. &lt;A class="lia-external-url" href="https://feedback.azure.com/d365community/forum/3887dc70-2025-ec11-b6e6-000d3a4f09d0" target="_blank" rel="noopener"&gt;We'd love to hear from you.&amp;nbsp;&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 20:51:13 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-observability-blog/ingest-at-scale-securely-azure-monitor-pipeline-is-now-generally/ba-p/4510379</guid>
      <dc:creator>XemaPathak</dc:creator>
      <dc:date>2026-04-21T20:51:13Z</dc:date>
    </item>
    <item>
      <title>Announcing public preview of redundant TCP support for RDP Multipath for Azure Virtual Desktop</title>
      <link>https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/announcing-public-preview-of-redundant-tcp-support-for-rdp/ba-p/4511241</link>
      <description>&lt;P&gt;Reliable connectivity is essential for ensuring consistent productivity in Azure Virtual Desktop (AVD) environments. Network variability—whether due to packet loss, NAT misconfiguration, UDP‑restricted networks, or restrictive enterprise network policies—continues to be one of the most common causes of session interruptions across enterprise virtual desktop deployments.&lt;/P&gt;
&lt;P&gt;To improve connection resiliency across a broader set of network conditions, we’re excited to introduce &lt;STRONG&gt;redundant TCP transport paths for RDP Multipath&lt;/STRONG&gt;, now available in public preview for Azure Virtual Desktop.&lt;/P&gt;
&lt;P&gt;This builds upon the existing RDP Multipath capability that continuously evaluates multiple network paths and dynamically switches to the most reliable path at runtime—without requiring changes from IT administrators or users.&lt;/P&gt;
&lt;H5&gt;How does this feature work&lt;/H5&gt;
&lt;P&gt;RDP Multipath establishes multiple network paths between the client and session host based on available network routes and real-time network conditions. This allows Azure Virtual Desktop to continuously evaluate path health and dynamically select the most reliable transport during a session.&lt;/P&gt;
&lt;P&gt;In its initial phase, RDP Multipath focused on UDP-based RDP Shortpath connections using STUN (Simple Traversal Underneath NAT) and TURN (Traversal Using Relays around NAT). This enabled sessions to transition between redundant UDP paths if degradation or failure was detected, improving reliability and performance.&lt;/P&gt;
&lt;P&gt;When UDP-based connectivity is available, it remains the preferred transport due to its performance and reliability advantages. Multipath continues to maintain multiple UDP paths as the primary active transport, enabling efficient failover across available routes.&lt;/P&gt;
&lt;H5&gt;Enhanced resiliency with redundant UDP and TCP paths&lt;/H5&gt;
&lt;P&gt;With this update, Azure Virtual Desktop expands Multipath capabilities by introducing support for redundant TCP standby transport paths alongside existing UDP paths.&lt;/P&gt;
&lt;P&gt;For customers already using Multipath over UDP, this adds an additional layer of resiliency through alternate TCP paths. For environments that previously relied on a single TCP connection, this update enables multiple TCP paths—helping reduce the impact of transient network issues and path instability.&lt;/P&gt;
&lt;P&gt;If the active transport path becomes unavailable or degraded, Azure Virtual Desktop automatically switches to the next best available UDP or TCP path. This helps maintain session continuity without requiring user reconnection.&lt;/P&gt;
&lt;P&gt;If all transport paths are temporarily disrupted — such as during a local network failure or ISP outage—the session automatically reconnects once connectivity is restored.&lt;/P&gt;
&lt;H5&gt;Improved reliability for TCP-only (UDP-restricted) environments&lt;/H5&gt;
&lt;P&gt;In environments where UDP connectivity is unavailable or restricted, sessions rely entirely on TCP-based Reverse Connect transport. Previously, these environments typically operated with a single active TCP connection between the client and session host, making them more susceptible to transient network degradation.&lt;/P&gt;
&lt;P&gt;With this update, Azure Virtual Desktop can now establish multiple standby TCP transport paths—even in TCP-only scenarios. This allows sessions to dynamically transition between available TCP routes if the active path becomes degraded or fails.&lt;/P&gt;
&lt;P&gt;As a result, customers benefit from improved session continuity and more consistent connectivity, even in environments with restrictive network configurations or where UDP traffic is blocked.&lt;/P&gt;
&lt;img /&gt;
&lt;H5&gt;How to enable this feature&amp;nbsp;&lt;/H5&gt;
&lt;P&gt;For public preview, you can test the feature by tagging your host pool to the validation ring. By default, this feature is enabled for everyone in the validation pool, providing seamless integration and enhanced connectivity without requiring any changes from IT departments or end users. &lt;STRONG&gt;Redundant TCP transport paths are currently supported only on Windows devices using Windows App on Windows client, version 2.0.1069.0 or later. &lt;/STRONG&gt;&lt;/P&gt;
&lt;H5&gt;How to opt-out from this feature&lt;/H5&gt;
&lt;P&gt;If you wish to disable the feature, you can opt out the host pool from the validation ring. This self-help option allows you to revert to the previous configuration if necessary.&lt;/P&gt;
&lt;H5&gt;Learn more&lt;/H5&gt;
&lt;P&gt;To learn more about the feature please check &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/virtual-desktop/rdp-multipath" target="_blank" rel="noopener"&gt;here&lt;/A&gt; &lt;/P&gt;
&lt;HR /&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;Stay up to date! Bookmark the&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/t5/azure-virtual-desktop/bd-p/AzureVirtualDesktopForum" target="_blank" rel="noopener"&gt;Azure Virtual Desktop Tech Community&lt;/A&gt;.&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 16:00:28 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-virtual-desktop-blog/announcing-public-preview-of-redundant-tcp-support-for-rdp/ba-p/4511241</guid>
      <dc:creator>Rinku_Dalwani</dc:creator>
      <dc:date>2026-04-21T16:00:28Z</dc:date>
    </item>
    <item>
      <title>Claim your IQ Series: Foundry IQ badge</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-developer-community/claim-your-iq-series-foundry-iq-badge/ba-p/4513036</link>
      <description>&lt;P&gt;The IQ Series kicked off with three Foundry IQ episodes, each paired with a hands-on cookbook. If you've worked through all three or you're planning to, there's now a digital badge waiting for you to claim!&lt;/P&gt;
&lt;H2&gt;What the badge represents&lt;/H2&gt;
&lt;P&gt;The &lt;STRONG&gt;IQ Series: Foundry IQ&lt;/STRONG&gt; badge recognizes developers who've completed the full Foundry IQ curriculum end-to-end: not just watched the episodes, but deployed the Azure resources, run every notebook, and built working knowledge bases against live data.&lt;/P&gt;
&lt;P&gt;Earners have:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Deployed AI Search, Azure OpenAI, a Foundry project, and Azure Blob Storage with seeded sample data&lt;/LI&gt;
&lt;LI&gt;Connected structured and unstructured sources into Foundry IQ&lt;/LI&gt;
&lt;LI&gt;Built and queried multi-source AI knowledge bases&lt;/LI&gt;
&lt;LI&gt;Grounded agent responses in permission-aware enterprise knowledge&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Badges are issued by the &lt;A href="https://globalai.community/" target="_blank"&gt;Global AI Community&lt;/A&gt;, so you'll want an account there before you submit.&lt;/P&gt;
&lt;H2&gt;What the three episodes cover&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Episode 1 — Unlocking Knowledge for Your Agents.&lt;/STRONG&gt; Introduces Foundry IQ and the core ideas behind it. The episode explains how AI agents work with knowledge and walks through the main components of Foundry IQ that support knowledge-driven applications.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Episode 2 — Building the Data Pipeline with Knowledge Sources.&lt;/STRONG&gt; Focuses on Knowledge Sources and how different types of content flow into Foundry IQ across SharePoint, Fabric, OneLake, Azure Blob Storage, Azure AI Search, and the web.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Episode 3 — Querying the Multi-Source AI Knowledge Bases.&lt;/STRONG&gt; Dives into Knowledge Bases and how multiple knowledge sources can be organized behind a single endpoint. The episode demonstrates how AI systems query across these sources and synthesize information to answer complex questions.&lt;/P&gt;
&lt;P&gt;Each episode is paired with a cookbook for you to learn hands-on and each of them reuses the same Azure deployment, so you set up once and build across all three.&lt;/P&gt;
&lt;H2&gt;How to claim the badge&lt;/H2&gt;
&lt;P&gt;Four steps, in order:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Fork the &lt;A href="https://github.com/microsoft/iq-series" target="_blank"&gt;IQ Series repo&lt;/A&gt;&lt;/STRONG&gt; and work through all three episode cookbooks in your fork. Commit your notebooks with cell outputs saved! That's the proof of completion.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Capture a final output screenshot for each episode.&lt;/STRONG&gt; Your GitHub username or Azure resource name needs to be visible in the screenshot.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Submit a &lt;A href="https://github.com/microsoft/iq-series/issues/new?template=foundry-iq-badge-request.yml" target="_blank"&gt;badge request issue&lt;/A&gt;.&lt;/STRONG&gt; The template walks you through fork URLs, screenshots, and one brief technical takeaway per episode.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Complete the &lt;A href="https://aka.ms/iq-series/badge-form" target="_blank"&gt;badge form&lt;/A&gt;.&lt;/STRONG&gt; This step is required. Without the form, we can't issue the badge.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;Why this badge is worth your time&lt;/H2&gt;
&lt;P&gt;The IQ Series recognizes your hands-on learning with real infrastructure, real indexed data, real agents and queries. If you're working on enterprise AI (grounding, retrieval, knowledge-aware agents), this is a concrete artifact that says: &lt;EM&gt;I've built this, end to end, on the actual platform.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Work IQ and Fabric IQ are coming next, and each phase will have its own badge. Foundry IQ is your head start on the full IQ Series.&lt;/P&gt;
&lt;P&gt;👉 &lt;STRONG&gt;Start with &lt;A class="lia-external-url" href="https://aka.ms/iq-series/episodes" target="_blank"&gt;Episodes&lt;/A&gt;&lt;/STRONG&gt; or jump straight to the &lt;A href="https://github.com/microsoft/iq-series" target="_blank"&gt;cookbooks&lt;/A&gt; if you prefer to learn by doing.&lt;/P&gt;
&lt;P&gt;Questions along the way? Create and issue in the repo or drop into our &lt;A href="https://aka.ms/iq-series/discord" target="_blank"&gt;Discord.&lt;/A&gt; The Foundry IQ team and community are there to help.&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 12:51:52 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-developer-community/claim-your-iq-series-foundry-iq-badge/ba-p/4513036</guid>
      <dc:creator>aycabas</dc:creator>
      <dc:date>2026-04-21T12:51:52Z</dc:date>
    </item>
    <item>
      <title>Leveraging Azure Resource Graph Queries for Azure Redis Configuration</title>
      <link>https://techcommunity.microsoft.com/t5/azure-paas-blog/leveraging-azure-resource-graph-queries-for-azure-redis/ba-p/4509826</link>
      <description>&lt;P aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Scenario&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-teams="true"&gt;Many times, we receive requests for&lt;/SPAN&gt;&amp;nbsp;a quick and reliable way to review Azure Redis configurations such as SKU tiers, Redis versions, TLS settings, Microsoft Entra authentication status, and public network exposure. Traditionally, these checks are performed using PowerShell, Azure CLI, or REST APIs. While effective, these methods can be time-consuming due to script development and module installation. Azure Resource Graph Explorer offers a faster and more scalable alternative by enabling customers to query Redis configurations directly using Kusto Query Language (KQL). This approach eliminates the need to create and maintain scripts while providing centralized visibility across multiple subscriptions.&lt;/P&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Azure Resource Graph Explorer&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:299,&amp;quot;335559739&amp;quot;:299}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure Resource Graph Explorer allows you to run KQL queries directly from the Azure portal to inspect Redis configurations across subscriptions at scale. All queries in this document use the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Resources&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;table,&amp;nbsp;filter on&amp;nbsp;Redis resource types, and retrieve configuration properties from the Redis resource schema.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The queries target the following resource types:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="31" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;microsoft.cache/redis&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="31" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;microsoft.cache/redisenterprise&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How to Open Azure Resource Graph Explorer (Quick Steps)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:299,&amp;quot;335559739&amp;quot;:299}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Sign in to the Azure Portal&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;In the global search bar, search for &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Resource Graph Explorer&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Open&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Resource Graph Explorer&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Paste the KQL query into the query window&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Click&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Run query&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to view results&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&lt;SPAN data-teams="true"&gt;Following queries can be used to quickly analyse and validate Azure Cache configurations across subscriptions:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;1. Redis SKU Information&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Find all Redis instances and identify their SKU tier.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 50.3704%; height: 156px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 100%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 156px;"&gt;&lt;td style="height: 156px;"&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type in~ ("microsoft.cache/redis", "microsoft.cache/redisenterprise")&lt;/P&gt;
&lt;P&gt;| extend SKU = coalesce(tostring(sku.name), tostring(properties.sku.name))&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location, SKU&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Explanation&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This query retrieves all Azure Cache for Redis instances and identifies their SKU tier (Basic, Standard, Premium, Enterprise and AMR).&lt;BR data-start="697" data-end="700" /&gt;The SKU information helps understand performance capabilities, high availability features, and scaling options configured for each Redis instance.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;2. Redis Version&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt; &lt;STRONG&gt;Information&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;STRONG&gt;(OSS Cache Only)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="179" data-end="266"&gt;Identify Redis version being used for Azure Cache for Redis (Basic, Standard, Premium).&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 71.3889%; height: 93px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 100%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 93px;"&gt;&lt;td style="height: 93px;"&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.cache/redis"&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location, SKU=sku.name, RedisVersion=properties.redisVersion&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&lt;STRONG data-start="1148" data-end="1164"&gt;Explanation:&lt;/STRONG&gt;&lt;BR data-start="1164" data-end="1167" /&gt;This query lists Redis instances along with their deployed Redis version.&lt;BR data-start="1240" data-end="1243" /&gt;Identifying older Redis versions helps prioritize upgrades, maintain supportability, and ensure compatibility with newer features and security enhancements.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&lt;STRONG data-start="440" data-end="449"&gt;Note:&lt;/STRONG&gt; This query applies only to OSS Azure Cache for Redis (Basic, Standard, and Premium tiers). Azure Managed Redis (AMR) is not included because these properties are not exposed in Azure Resource Graph for AMR.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;3. &lt;/SPAN&gt;Minimum TLS Version for Redis&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="1442" data-end="1498"&gt;List Redis instances and configured minimum TLS version.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 59.0741%; height: 106px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 100%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 90px;"&gt;&lt;td style="height: 90px;"&gt;Resources&lt;BR /&gt;| where type in~ ("microsoft.cache/redis", "microsoft.cache/redisenterprise")&lt;BR /&gt;| project name, resourceGroup, location, MinimumTLS = properties.minimumTlsVersion&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-start="1680" data-end="1880"&gt;&lt;STRONG data-start="1680" data-end="1696"&gt;Explanation:&lt;/STRONG&gt;&lt;BR data-start="1696" data-end="1699" /&gt;This query identifies the minimum TLS version configured for Redis cache.&lt;BR data-start="1778" data-end="1781" /&gt;Using TLS 1.2 or higher is recommended to meet modern security compliance and encryption standards.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Redis Instances with Public Network Access Enabled&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="1944" data-end="2002"&gt;Identify Redis instances that allow public network access.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 64.4444%; height: 90px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 100%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 90px;"&gt;&lt;td style="height: 90px;"&gt;Resources&lt;BR /&gt;| where type in~ ("microsoft.cache/redis", "microsoft.cache/redisenterprise")&lt;BR /&gt;| project name, resourceGroup, location, PublicNetworkAccess = properties.publicNetworkAccess&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-start="2195" data-end="2292"&gt;&lt;STRONG data-start="2195" data-end="2211"&gt;Explanation:&lt;/STRONG&gt;&lt;BR data-start="2211" data-end="2214" /&gt;This query checks whether Redis instances are accessible over public internet.&lt;/P&gt;
&lt;P data-start="2294" data-end="2318"&gt;Possible values include:&lt;/P&gt;
&lt;UL data-start="2320" data-end="2454"&gt;
&lt;LI data-section-id="k6p3gq" data-start="2320" data-end="2374"&gt;&lt;STRONG data-start="2322" data-end="2333"&gt;Enabled&lt;/STRONG&gt; — Redis accessible via public endpoint&lt;/LI&gt;
&lt;LI data-section-id="2j0a0n" data-start="2375" data-end="2454"&gt;&lt;STRONG data-start="2377" data-end="2389"&gt;Disabled&lt;/STRONG&gt; — Redis accessible only via private endpoint / virtual network&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;5. Microsoft Entra Authentication Enabled (OSS Cache Only)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="2456" data-end="2528"&gt;Check Microsoft Entra ID authentication and key-based authentication for Azure Cache for Redis (Basic, Standard, Premium).&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 58.5185%; height: 166px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 100%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 166px;"&gt;&lt;td style="height: 166px;"&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.cache/redis"&lt;/P&gt;
&lt;P&gt;| extend EntraAuthEnabled = tostring(properties.redisConfiguration["aad-enabled"])&lt;/P&gt;
&lt;P&gt;| extend KeyBasedAuthDisabled = tostring(properties.disableAccessKeyAuthentication)&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location, EntraAuthEnabled, KeyBasedAuthDisabled&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt;&lt;BR /&gt;This query reviews authentication and access security settings for Azure Cache for Redis (OSS tiers).&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft Entra Authentication&lt;/STRONG&gt; – Shows whether Microsoft Entra ID authentication is enabled
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;true&lt;/STRONG&gt; — Enabled&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;false&lt;/STRONG&gt; — Disabled&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Key-Based Authentication&lt;/STRONG&gt; – Shows whether access keys are disabled
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;true&lt;/STRONG&gt; — Access keys disabled (Recommended)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;false&lt;/STRONG&gt; — Access keys enabled&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG data-start="440" data-end="449"&gt;Note:&lt;/STRONG&gt; This query applies only to OSS Azure Cache for Redis (Basic, Standard, and Premium tiers). Azure Managed Redis (AMR) is not included because these properties are not exposed in Azure Resource Graph for AMR.&lt;/P&gt;
&lt;P data-start="1149" data-end="1252"&gt;&lt;STRONG&gt;Reference&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/overview" target="_blank" rel="noopener" aria-label="Link Overview of Azure Resource Graph - Azure Resource Graph | Microsoft Learn"&gt;Overview of Azure Resource Graph - Azure Resource Graph | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/first-query-portal" target="_blank" rel="noopener" aria-label="Link Quickstart: Run Resource Graph query using Azure portal - Azure Resource Graph | Microsoft Learn"&gt;Quickstart: Run Resource Graph query using Azure portal - Azure Resource Graph | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/templates/microsoft.cache/redis?pivots=deployment-language-terraform" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Cache Redis Resource Schema&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/templates/microsoft.cache/redisenterprise?pivots=deployment-language-terraform" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Cache Redis Enterprise Schema&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Kindly note this blog is focused on Azure Cache configurations, the same approach can be leveraged for other Azure resource types in a similar way by querying their respective resource schemas using Azure Resource Graph.&lt;/P&gt;
&lt;P&gt;Hope this helps!&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 07:57:08 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-paas-blog/leveraging-azure-resource-graph-queries-for-azure-redis/ba-p/4509826</guid>
      <dc:creator>Soma_Sekhara_Raju</dc:creator>
      <dc:date>2026-04-21T07:57:08Z</dc:date>
    </item>
    <item>
      <title>Leveraging Azure Resource Graph Queries for Azure Storage Configuration</title>
      <link>https://techcommunity.microsoft.com/t5/azure-paas-blog/leveraging-azure-resource-graph-queries-for-azure-storage/ba-p/4509184</link>
      <description>&lt;H4&gt;Scenario&lt;/H4&gt;
&lt;P&gt;Many times, we receive requests for a quick and reliable way to check which Azure Storage features are enabled across subscriptions—such as SFTP, Hierarchical Namespace (HNS), or default access tiers. For such scenarios, customers can use PowerShell, Azure CLI, or REST APIs; however, these approaches can be time‑consuming due to module setup, frequent updates, and script maintenance. Azure Resource Graph Explorer provides a faster and simpler alternative by allowing customers to directly query storage account configurations at scale using Kusto Query Language (KQL), without the need to write or maintain scripts.&lt;/P&gt;
&lt;H4&gt;Azure Resource Graph Explorer&lt;/H4&gt;
&lt;P&gt;Azure Resource Graph Explorer enables you to run KQL queries directly from the &lt;STRONG&gt;Azure Portal&lt;/STRONG&gt; to inspect resource configurations across subscriptions at scale. All queries in this blog use the &lt;STRONG&gt;Resources&lt;/STRONG&gt; table, filter on the resource type&lt;BR /&gt;microsoft.storage/storageaccounts, and retrieve specific configuration properties defined in the &lt;STRONG&gt;Microsoft.Storage/storageAccounts&lt;/STRONG&gt; resource schema.&lt;/P&gt;
&lt;H4&gt;How to Open Azure Resource Graph Explorer (Quick Steps)&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;Sign in to the&amp;nbsp;&lt;STRONG&gt;Azure Portal&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;In the global search bar, search for &lt;STRONG&gt;Resource Graph Explorer&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Open &lt;STRONG&gt;Resource Graph Explorer&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Paste the KQL query and click &lt;STRONG&gt;Run query&lt;/STRONG&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 99.9038%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;Following queries can be used to quickly analyse and validate Azure Storage account configurations across subscriptions:&lt;/H5&gt;
&lt;H4&gt;1. Storage Accounts with SFTP Enabled&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;Find all storage accounts that have Secure File Transfer Protocol (SFTP) turned on&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| where properties.isSftpEnabled == true&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;EM&gt;Find all storage accounts that have Secure File Transfer Protocol (SFTP) turned on in a specific subscription&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts" and subscriptionId =~ "XXXXXXXXXXXXXXXXXXXX"&lt;/P&gt;
&lt;P&gt;| where properties.isSftpEnabled == true&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt; The isSftpEnabled property is a boolean under properties that, when set to true, enables Secure File Transfer Protocol on the storage account. This query filters for accounts where SFTP is active and returns the account name, resource group, and location.&lt;/P&gt;
&lt;H4&gt;2. Minimum TLS Version per Storage Account&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;List each storage account alongside its configured minimum TLS version.&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 39.3519%; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| project StorageAccount = name, resourceGroup, location,&lt;/P&gt;
&lt;P&gt;MinimumTLS = properties.minimumTlsVersion&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt; Every storage account exposes a minimumTlsVersion string property that specifies the minimal TLS protocol version permitted for incoming requests.&lt;/P&gt;
&lt;H4&gt;3. Storage Accounts with Hierarchical Namespace (HNS) Enabled&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;Find all storage accounts that have Hierarchical Namespace enabled (Azure Data Lake Storage Gen2).&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| where properties.isHnsEnabled == true&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt; The isHnsEnabled boolean indicates whether the account has the Hierarchical Namespace feature turned on.&lt;/P&gt;
&lt;H4&gt;4. Storage Accounts That Do NOT Allow Public Blob Access&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;Identify storage accounts where anonymous public read access to blobs is disallowed.&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| where properties.allowBlobPublicAccess == false&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt; The allowBlobPublicAccess boolean controls whether anonymous public read access to blob data is permitted at the account level.&lt;/P&gt;
&lt;H4&gt;5. Storage Accounts with NFS 3.0 Support Enabled&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;Find all storage accounts that have NFS 3.0 protocol support turned on.&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| where properties.isNfsV3Enabled == true&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt; The isNfsV3Enabled property is a boolean described in the resource schema as: "NFS 3.0 protocol support enabled if set to true". NFS 3.0 support allows Linux clients to mount Azure Blob Storage using the NFS protocol, which is useful for high-performance computing and large-scale analytics workloads.&lt;/P&gt;
&lt;H4&gt;6. Storage Accounts with Default Access Tier&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;Find all storage accounts and check their default access tier (Hot / Cool).&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| extend defaultAccessTier = tostring(properties.accessTier)&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location, kind, sku.name, defaultAccessTier&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt;&lt;BR /&gt;The properties.accessTier property indicates the default access tier configured for the storage account (for supported account kinds).&lt;/P&gt;
&lt;H4&gt;7. Storage Accounts Open to All Network Traffic (No Firewall Restrictions)&lt;/H4&gt;
&lt;P&gt;&lt;EM&gt;Find storage accounts that are accessible from any network without virtual network or IP-based firewall rules.&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Resources&lt;/P&gt;
&lt;P&gt;| where type =~ "microsoft.storage/storageaccounts"&lt;/P&gt;
&lt;P&gt;| where (properties.publicNetworkAccess == "Enabled"&lt;/P&gt;
&lt;P&gt;or isnull(properties.publicNetworkAccess))&lt;/P&gt;
&lt;P&gt;and properties.networkAcls.defaultAction == "Allow"&lt;/P&gt;
&lt;P&gt;| project name, resourceGroup, location&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 100.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;STRONG&gt;Explanation:&lt;/STRONG&gt;&lt;BR /&gt;This query helps identify storage accounts that are fully open to public network access, with no firewall or network restrictions in place, which may pose security risks during audits or compliance reviews.&lt;/DIV&gt;
&lt;H4&gt;Reference&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/overview" target="_blank" rel="noopener"&gt;Overview of Azure Resource Graph - Azure Resource Graph | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/governance/resource-graph/first-query-portal" target="_blank" rel="noopener"&gt;Quickstart: Run Resource Graph query using Azure portal - Azure Resource Graph | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/templates/microsoft.storage/storageaccounts?pivots=deployment-language-terraform" target="_blank" rel="noopener"&gt;Microsoft.Storage/storageAccounts - Bicep, ARM template &amp;amp; Terraform AzAPI reference | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kindly note this blog is focused on Azure Storage, the same approach can be leveraged for other Azure resource types in a similar way by querying their respective resource schemas using Azure Resource Graph.&lt;/P&gt;
&lt;P&gt;Hope this helps!&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 07:46:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-paas-blog/leveraging-azure-resource-graph-queries-for-azure-storage/ba-p/4509184</guid>
      <dc:creator>jainsourabh</dc:creator>
      <dc:date>2026-04-21T07:46:00Z</dc:date>
    </item>
    <item>
      <title>How to Troubleshoot Azure Functions Host Startup Issue</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/how-to-troubleshoot-azure-functions-host-startup-issue/ba-p/4512966</link>
      <description>&lt;H2 id="anchor1" data-line="6"&gt;Overview&lt;/H2&gt;
&lt;P data-line="8"&gt;Azure Functions is a powerful serverless compute service that enables you to run event-driven code without managing infrastructure. When you deploy a Function App, the Azure Functions&amp;nbsp;&lt;STRONG&gt;host&lt;/STRONG&gt;&amp;nbsp;is the runtime process responsible for discovering your functions, loading extensions and bindings, connecting to storage, and starting trigger listeners.&lt;/P&gt;
&lt;P data-line="10"&gt;A&amp;nbsp;&lt;STRONG&gt;host startup issue&lt;/STRONG&gt; occurs when the Functions runtime fails to initialize and cannot reach a healthy &lt;SPAN class="lia-text-color-6"&gt;&lt;STRONG&gt;&lt;U&gt;Running&lt;/U&gt; &lt;/STRONG&gt;&lt;/SPAN&gt;state. When this happens, you may see one or more of these symptoms:&lt;/P&gt;
&lt;UL data-line="12"&gt;
&lt;LI data-line="12"&gt;&lt;STRONG&gt;"Function host is not running"&lt;/STRONG&gt;&amp;nbsp;error in the Azure Portal&lt;/LI&gt;
&lt;LI data-line="13"&gt;Functions are not visible in the Functions blade&lt;/LI&gt;
&lt;LI data-line="14"&gt;Triggers stop firing — HTTP functions return&amp;nbsp;&lt;STRONG&gt;503&lt;/STRONG&gt;, timer/queue functions are silent&lt;/LI&gt;
&lt;LI data-line="15"&gt;The portal shows&amp;nbsp;Error&amp;nbsp;state or no response on the host status endpoint&lt;/LI&gt;
&lt;LI data-line="16"&gt;Application Insights logs show repeated startup exceptions followed by restarts&lt;/LI&gt;
&lt;LI data-line="17"&gt;Log Stream shows a restart loop or no output at all&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="19"&gt;This issue can be frustrating, especially when a deployment appeared to succeed and your code works correctly on your local machine. In this blog, we will explore how the host starts up, what can go wrong, and — most importantly — how to systematically diagnose and resolve startup failures.&lt;/P&gt;
&lt;H2 data-line="23"&gt;Understanding How the Host Starts Up&lt;/H2&gt;
&lt;P data-line="25"&gt;Before diving into troubleshooting, it is important to understand the startup sequence. The Functions host executes the following steps each time the runtime initializes:&lt;/P&gt;
&lt;H3 data-line="27"&gt;Host Startup Sequence&lt;/H3&gt;
&lt;LI-CODE lang="json"&gt;ASP.NET Core Startup
  → Register WebHost services (DI, secrets, diagnostics, middleware)
    → WebJobsScriptHostService.StartAsync()
      → Check file system (run-from-package validation)
        → Build inner ScriptHost
          → ScriptHost.InitializeAsync()
            → PreInitialize (validate settings, file system)
            → Load function metadata (function.json / decorators)
            → Load extensions and bindings (extension bundles / NuGet)
            → Create function descriptors and register triggers
              → Start trigger listeners
                → State = Running ✓&lt;/LI-CODE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P data-line="44"&gt;&lt;STRONG&gt;Complete Source Code: &lt;A href="https://github.com/Azure/azure-functions-host" target="_blank" rel="noopener"&gt;Azure/azure-functions-host&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P data-line="44"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-line="44"&gt;If&amp;nbsp;&lt;STRONG&gt;any step&lt;/STRONG&gt; in this sequence fails, the host enters an&amp;nbsp;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-8"&gt;Error&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;state and attempts to restart with exponential backoff (starting at 1 second, up to 2 minutes between attempts). After repeated failures, the platform may report an application-level failure.&lt;/P&gt;
&lt;H3 data-line="46"&gt;Host States&lt;/H3&gt;
&lt;P data-line="48"&gt;The Functions host can be in any of the following states:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 71.7593%; height: 315px; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr style="height: 35px;"&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;State&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Default&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host has not yet been created&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Starting&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host is in the process of starting&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Initialized&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Functions indexed, listeners not yet running&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;SPAN class="lia-text-color-6"&gt;&lt;STRONG&gt;Running&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Fully running — triggers active, functions discoverable&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Error&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host encountered an error — will attempt restart&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Stopping&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host is shutting down&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Stopped&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host is stopped&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Offline&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host is offline (app_offline.htm&amp;nbsp;is present)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 22.6721%" /&gt;&lt;col style="width: 77.3279%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="61"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-line="61"&gt;Only when the host reaches the &lt;SPAN class="lia-text-color-6"&gt;&lt;STRONG&gt;Running&lt;/STRONG&gt;&amp;nbsp;&lt;/SPAN&gt;state are functions visible in the portal and triggers active. The&amp;nbsp;&lt;STRONG&gt;Error&lt;/STRONG&gt; state triggers an automatic restart loop.&lt;/P&gt;
&lt;H3 data-line="63"&gt;Key Settings That Affect Startup&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Setting&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Purpose&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Impact If Wrong&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;FUNCTIONS_EXTENSION_VERSION&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Specifies the runtime version (e.g.,&amp;nbsp;~4)&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host throws startup error if missing or invalid&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;FUNCTIONS_WORKER_RUNTIME&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Specifies the language runtime (e.g.,&amp;nbsp;dotnet-isolated,&amp;nbsp;node,&amp;nbsp;python)&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host cannot load the correct worker process&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AzureWebJobsStorage&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Connection string for the required storage account&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host cannot store keys, coordinate triggers, or maintain state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;WEBSITE_RUN_FROM_PACKAGE&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Controls how deployment packages are loaded&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host shuts down if package is inaccessible or corrupted&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;WEBSITE_CONTENTAZUREFILECONNECTIONSTRING&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Storage connection for content share (Consumption/Premium)&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host cannot access function code&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;WEBSITE_CONTENTSHARE&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;File share name for function content&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host cannot locate function files&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2 data-line="76"&gt;Startup Failure Categories&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 98.5185%; height: 411px; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr style="height: 35px;"&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;Category&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;Examples&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;Typical Symptom&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Configuration&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Missing/invalid app settings, bad host.json&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host enters Error state immediately&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Storage&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;AzureWebJobsStorage unreachable, expired SAS token, firewall&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host fails repeatedly, storage-related exceptions&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Extensions/Bindings&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Missing extension bundle, version mismatch, load failure&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host errors during extension loading phase&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 59px;"&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;&lt;STRONG&gt;Deployment/Packaging&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;Corrupted zip, wrong package structure, missing files&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;Host starts but finds no functions, or fails to load assemblies&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 59px;"&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;&lt;STRONG&gt;Code/Startup&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;DI exception, external startup error, assembly conflict&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;Host errors during initialization with code-specific exception&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&lt;STRONG&gt;Runtime/Worker&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Wrong worker runtime, language mismatch, gRPC failure&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Host cannot establish worker channel&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 59px;"&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;&lt;STRONG&gt;Networking&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;VNet blocks outbound, DNS failure, private endpoint misconfigured&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;Host cannot reach storage/dependencies at startup&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 59px;"&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;&lt;STRONG&gt;Platform&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;Resource exhaustion, app_offline.htm, platform issue&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 59px;"&gt;Host enters Offline state or is killed before startup completes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 19.2627%" /&gt;&lt;col style="width: 42.4885%" /&gt;&lt;col style="width: 38.2488%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2 data-line="91"&gt;Common Causes and Solutions&lt;/H2&gt;
&lt;H3 data-line="93"&gt;1. Missing or Invalid FUNCTIONS_EXTENSION_VERSION&lt;/H3&gt;
&lt;P data-line="95"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="97"&gt;
&lt;LI data-line="97"&gt;Host immediately fails to start&lt;/LI&gt;
&lt;LI data-line="98"&gt;Error message:&amp;nbsp;&lt;EM&gt;"Invalid site extension configuration. Please update the App Setting 'FUNCTIONS_EXTENSION_VERSION' to a valid value (e.g. ~4)."&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="99"&gt;Repeated restart loops in Application Insights&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="101"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="103"&gt;The&amp;nbsp;FUNCTIONS_EXTENSION_VERSION&amp;nbsp;app setting tells the platform which version of the Functions runtime to load. When your app runs as a hosted site extension (the normal case in Azure), this setting is validated as one of the first steps in&amp;nbsp;ScriptHost.PreInitialize(). If it is missing, empty, or set to an unrecognized value, the host throws a&amp;nbsp;HostInitializationException&amp;nbsp;and cannot proceed.&lt;/P&gt;
&lt;P data-line="105"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="107"&gt;
&lt;LI data-line="107"&gt;Navigate to your Function App in the Azure Portal&lt;/LI&gt;
&lt;LI data-line="108"&gt;Go to&amp;nbsp;&lt;STRONG&gt;Settings → Configuration → Application settings&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-line="109"&gt;Look for&amp;nbsp;FUNCTIONS_EXTENSION_VERSION&lt;/LI&gt;
&lt;LI data-line="110"&gt;Confirm it is set to a valid value:&amp;nbsp;~4&amp;nbsp;(recommended),&amp;nbsp;~3&amp;nbsp;(legacy), or a specific version&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="112"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="114"&gt;
&lt;LI data-line="114"&gt;Set&amp;nbsp;FUNCTIONS_EXTENSION_VERSION&amp;nbsp;to&amp;nbsp;~4&amp;nbsp;(or the appropriate version for your app)&lt;/LI&gt;
&lt;LI data-line="115"&gt;If the setting was recently changed or removed, restore it&lt;/LI&gt;
&lt;LI data-line="116"&gt;Save and restart the Function App&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Ref: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#functions_extension_version" target="_blank" rel="noopener"&gt;FUNCTIONS_EXTENSION_VERSION&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3 data-line="128"&gt;2. Missing or Mismatched FUNCTIONS_WORKER_RUNTIME&lt;/H3&gt;
&lt;P data-line="130"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="132"&gt;
&lt;LI data-line="132"&gt;Error:&amp;nbsp;&lt;EM&gt;"The 'FUNCTIONS_WORKER_RUNTIME' setting is required..."&lt;/EM&gt;&amp;nbsp;(diagnostic code&amp;nbsp;AZFD0011)&lt;/LI&gt;
&lt;LI data-line="133"&gt;Error:&amp;nbsp;&lt;EM&gt;"The 'FUNCTIONS_WORKER_RUNTIME' is set to 'X', which does not match the worker runtime metadata..."&lt;/EM&gt;&amp;nbsp;(diagnostic code&amp;nbsp;AZFD0013)&lt;/LI&gt;
&lt;LI data-line="134"&gt;Host enters Error state after loading function metadata&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="136"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="138"&gt;The&amp;nbsp;FUNCTIONS_WORKER_RUNTIME&amp;nbsp;setting controls which language worker process the host launches (e.g.,&amp;nbsp;dotnet-isolated,&amp;nbsp;node,&amp;nbsp;python,&amp;nbsp;java,&amp;nbsp;powershell). During initialization, the host validates that this setting matches the actual function metadata discovered in your deployment. A mismatch — for example, deploying a Python app but having&amp;nbsp;FUNCTIONS_WORKER_RUNTIME=node&amp;nbsp;— results in a&amp;nbsp;HostInitializationException.&lt;/P&gt;
&lt;P data-line="140"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="142"&gt;
&lt;LI data-line="142"&gt;Check the app setting value in Portal → Configuration&lt;/LI&gt;
&lt;LI data-line="143"&gt;Compare against your actual project type:
&lt;UL data-line="144"&gt;
&lt;LI data-line="144"&gt;C# in-process:&amp;nbsp;dotnet&lt;/LI&gt;
&lt;LI data-line="145"&gt;C# isolated:&amp;nbsp;dotnet-isolated&lt;/LI&gt;
&lt;LI data-line="146"&gt;Node.js:&amp;nbsp;node&lt;/LI&gt;
&lt;LI data-line="147"&gt;Python:&amp;nbsp;python&lt;/LI&gt;
&lt;LI data-line="148"&gt;Java:&amp;nbsp;java&lt;/LI&gt;
&lt;LI data-line="149"&gt;PowerShell:&amp;nbsp;powershell&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="151"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="153"&gt;
&lt;LI data-line="153"&gt;Set&amp;nbsp;FUNCTIONS_WORKER_RUNTIME&amp;nbsp;to the correct value matching your function code&lt;/LI&gt;
&lt;LI data-line="154"&gt;If you recently migrated language models (e.g., in-process to isolated), update the setting accordingly&lt;/LI&gt;
&lt;LI data-line="155"&gt;Save and restart&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Ref: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#functions_worker_runtime" target="_blank" rel="noopener"&gt;FUNCTIONS_WORKER_RUNTIME&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3 data-line="166"&gt;3. Storage Account Connectivity Issues (AzureWebJobsStorage)&lt;/H3&gt;
&lt;P data-line="168"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="170"&gt;
&lt;LI data-line="170"&gt;Host fails to start and cannot recover&lt;/LI&gt;
&lt;LI data-line="171"&gt;Errors related to Blob storage connectivity&lt;/LI&gt;
&lt;LI data-line="172"&gt;"Unable to get function keys" or secret management errors&lt;/LI&gt;
&lt;LI data-line="173"&gt;Health check returns&amp;nbsp;Unhealthy&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="175"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="177"&gt;The Functions host&amp;nbsp;&lt;STRONG&gt;requires&lt;/STRONG&gt;&amp;nbsp;a valid and reachable storage account for:&lt;/P&gt;
&lt;UL data-line="179"&gt;
&lt;LI data-line="179"&gt;Storing function keys and secrets&lt;/LI&gt;
&lt;LI data-line="180"&gt;Coordinating distributed triggers (e.g., timer triggers, queue listeners)&lt;/LI&gt;
&lt;LI data-line="181"&gt;Maintaining internal state and lock management&lt;/LI&gt;
&lt;LI data-line="182"&gt;Hosting the content share for Consumption and Premium plans&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="184"&gt;The host runs a background health check (WebJobsStorageHealthCheck) every 30 seconds that verifies Blob storage connectivity. If the storage account is unreachable — due to a wrong connection string, rotated keys, firewall restrictions, deleted account, or expired SAS token — the host will fail to initialize properly.&lt;/P&gt;
&lt;P data-line="186"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="188"&gt;Check your Application Settings for these storage-related values:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Setting&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Required For&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AzureWebJobsStorage&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;All plans — primary storage connection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;WEBSITE_CONTENTAZUREFILECONNECTIONSTRING&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Consumption and Premium plans — content share&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;WEBSITE_CONTENTSHARE&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Consumption and Premium plans — file share name&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="196"&gt;You can also verify storage connectivity using the&amp;nbsp;&lt;A href="https://file+.vscode-resource.vscode-cdn.net/c%3A/dobby/repos/azure-functions-host/docs/blog-how-to-troubleshoot-azure-functions-host-startup-issue.md#verifying-host-status-via-rest-api" target="_blank" rel="noopener" data-href="#verifying-host-status-via-rest-api"&gt;host status endpoint&lt;/A&gt;.&lt;/P&gt;
&lt;P data-line="198"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="200"&gt;
&lt;LI data-line="200"&gt;&lt;STRONG&gt;Verify the storage account exists&lt;/STRONG&gt;&amp;nbsp;— check the Azure Portal to confirm it has not been deleted or disabled&lt;/LI&gt;
&lt;LI data-line="201"&gt;&lt;STRONG&gt;Check for rotated keys&lt;/STRONG&gt;&amp;nbsp;— if storage keys were recently regenerated, update the connection string:
&lt;UL data-line="202"&gt;
&lt;LI data-line="202"&gt;Get the new connection string from the Storage Account → Access keys blade&lt;/LI&gt;
&lt;LI data-line="203"&gt;Update&amp;nbsp;AzureWebJobsStorage&amp;nbsp;in your Function App settings&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="204"&gt;&lt;STRONG&gt;Check storage firewall rules:&lt;/STRONG&gt;
&lt;UL data-line="205"&gt;
&lt;LI data-line="205"&gt;Go to Storage Account → Networking&lt;/LI&gt;
&lt;LI data-line="206"&gt;Ensure the Function App has access (public endpoint, service endpoint, or private endpoint depending on your architecture)&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="207"&gt;&lt;STRONG&gt;For SAS-token-based connections&lt;/STRONG&gt;&amp;nbsp;— verify the token has not expired (diagnostic code&amp;nbsp;AZFD0006)&lt;/LI&gt;
&lt;LI data-line="208"&gt;&lt;STRONG&gt;For VNet-integrated apps:&lt;/STRONG&gt;
&lt;UL data-line="209"&gt;
&lt;LI data-line="209"&gt;Ensure service endpoints or private endpoints are configured for the storage account&lt;/LI&gt;
&lt;LI data-line="210"&gt;Verify DNS resolution works for&amp;nbsp;*.blob.core.windows.net,&amp;nbsp;*.queue.core.windows.net,&amp;nbsp;*.table.core.windows.net, and&amp;nbsp;*.file.core.windows.net&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="212"&gt;For detailed guidance, see&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/azure-functions/storage-considerations" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/storage-considerations"&gt;Storage considerations for Azure Functions&lt;/A&gt;.&lt;/P&gt;
&lt;H3 data-line="216"&gt;4. Invalid host.json Configuration&lt;/H3&gt;
&lt;P data-line="218"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="220"&gt;
&lt;LI data-line="220"&gt;Error:&amp;nbsp;&lt;EM&gt;"The host.json file is missing the required 'version' property."&lt;/EM&gt;&amp;nbsp;(diagnostic code&amp;nbsp;AZFD0009)&lt;/LI&gt;
&lt;LI data-line="221"&gt;Error:&amp;nbsp;&lt;EM&gt;"'X' is an invalid value for host.json 'version' property."&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="222"&gt;JSON deserialization failures in logs&lt;/LI&gt;
&lt;LI data-line="223"&gt;Host enters a special&amp;nbsp;HandlingConfigurationParsingError&amp;nbsp;mode&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="225"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="227"&gt;The&amp;nbsp;host.json&amp;nbsp;file is parsed early in the startup sequence. If it is missing the required&amp;nbsp;"version": "2.0"&amp;nbsp;property, contains invalid JSON syntax, or has unrecognized configuration values, the host throws a&amp;nbsp;HostConfigurationException. The host then restarts in a degraded mode that skips host.json parsing — the admin APIs remain functional for diagnostics, but functions will not load.&lt;/P&gt;
&lt;P data-line="229"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="231"&gt;Check your&amp;nbsp;host.json&amp;nbsp;in the deployment:&lt;/P&gt;
&lt;UL data-line="233"&gt;
&lt;LI data-line="233"&gt;&lt;STRONG&gt;Windows plans&lt;/STRONG&gt;: Use Kudu → Debug Console → Navigate to&amp;nbsp;site/wwwroot/host.json&lt;/LI&gt;
&lt;LI data-line="234"&gt;&lt;STRONG&gt;Linux/Flex Consumption&lt;/STRONG&gt;: Use SSH or Azure CLI&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="236"&gt;Validate that the file:&lt;/P&gt;
&lt;OL data-line="237"&gt;
&lt;LI data-line="237"&gt;Is valid JSON (use a JSON validator)&lt;/LI&gt;
&lt;LI data-line="238"&gt;Contains the required&amp;nbsp;"version": "2.0"&amp;nbsp;property&lt;/LI&gt;
&lt;LI data-line="239"&gt;Does not have unrecognized or misspelled configuration keys&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="241"&gt;&lt;STRONG&gt;Minimal valid host.json:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "version": "2.0"
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Typical host.json with extension bundle:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  }
}&lt;/LI-CODE&gt;
&lt;P data-line="269"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="271"&gt;
&lt;LI data-line="271"&gt;Fix any JSON syntax errors&lt;/LI&gt;
&lt;LI data-line="272"&gt;Ensure&amp;nbsp;"version": "2.0"&amp;nbsp;is present&lt;/LI&gt;
&lt;LI data-line="273"&gt;Remove or correct any unrecognized configuration keys&lt;/LI&gt;
&lt;LI data-line="274"&gt;Redeploy or edit the file directly via Kudu (Windows plans)&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Ref: &amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-host-json" target="_blank" rel="noopener"&gt;host.json&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3 data-line="278"&gt;5. Extension Bundle or Binding Load Failures&lt;/H3&gt;
&lt;P data-line="280"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="282"&gt;
&lt;LI data-line="282"&gt;Host fails to start with extension-related errors in logs&lt;/LI&gt;
&lt;LI data-line="283"&gt;Error:&amp;nbsp;&lt;EM&gt;"Referenced bundle X of version Y does not meet the required minimum version..."&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="284"&gt;Error:&amp;nbsp;&lt;EM&gt;"One or more loaded extensions do not meet the minimum requirements..."&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="285"&gt;Errors referencing&amp;nbsp;ScriptStartUpErrorLoadingExtensionBundle&amp;nbsp;or&amp;nbsp;ScriptStartUpUnableToLoadExtension&lt;/LI&gt;
&lt;LI data-line="286"&gt;Works locally but fails in Azure&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="288"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="290"&gt;Azure Functions uses&amp;nbsp;&lt;STRONG&gt;extension bundles&lt;/STRONG&gt;&amp;nbsp;to provide trigger and binding implementations (Service Bus, Event Hubs, Cosmos DB, etc.). During startup, the&amp;nbsp;ScriptStartupTypeLocator&amp;nbsp;loads extension assemblies from either the bundle path or the&amp;nbsp;bin&amp;nbsp;folder. If the bundle is missing, the version is incompatible, an assembly fails to load, or the type does not implement the expected interfaces, the host throws a&amp;nbsp;HostInitializationException.&lt;/P&gt;
&lt;P data-line="292"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="294"&gt;
&lt;LI data-line="294"&gt;Check&amp;nbsp;host.json&amp;nbsp;for the&amp;nbsp;extensionBundle&amp;nbsp;configuration&lt;/LI&gt;
&lt;LI data-line="295"&gt;Verify the version range is compatible with your runtime version&lt;/LI&gt;
&lt;LI data-line="296"&gt;For compiled C# apps that don't use bundles, verify all required NuGet packages are present and compatible&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="298"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="300"&gt;
&lt;LI data-line="300"&gt;Ensure extensionBundle is configured in host.json:&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="json"&gt;{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL data-line="300"&gt;
&lt;LI data-line="312"&gt;Use the correct version range for your runtime:
&lt;UL data-line="313"&gt;
&lt;LI data-line="313"&gt;Functions v4:&amp;nbsp;[4.*, 5.0.0)&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="314"&gt;For compiled .NET apps using explicit extensions:
&lt;UL data-line="315"&gt;
&lt;LI data-line="315"&gt;Verify all extension NuGet packages are up to date&lt;/LI&gt;
&lt;LI data-line="316"&gt;Ensure&amp;nbsp;extensions.json&amp;nbsp;is present in the&amp;nbsp;bin&amp;nbsp;folder after build&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="317"&gt;Check for assembly version conflicts in the build output&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 data-line="321"&gt;6. Deployment Package Issues (WEBSITE_RUN_FROM_PACKAGE)&lt;/H3&gt;
&lt;P data-line="323"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="325"&gt;
&lt;LI data-line="325"&gt;Host shuts down immediately after startup&lt;/LI&gt;
&lt;LI data-line="326"&gt;Error:&amp;nbsp;&lt;EM&gt;"Shutting down host due to presence of FAILED TO INITIALIZE RUN FROM PACKAGE.txt"&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="327"&gt;Functions were visible before but disappeared after deployment&lt;/LI&gt;
&lt;LI data-line="328"&gt;"No functions found" in the portal&lt;/LI&gt;
&lt;LI data-line="329"&gt;Read-only file system errors in logs&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="331"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="333"&gt;When&amp;nbsp;WEBSITE_RUN_FROM_PACKAGE&amp;nbsp;is configured, the Functions host runs directly from a deployment package (ZIP file). During startup, the host checks the file system for failure markers. If the file&amp;nbsp;FAILED TO INITIALIZE RUN FROM PACKAGE.txt&amp;nbsp;is found, the host immediately&amp;nbsp;&lt;STRONG&gt;shuts down the application&lt;/STRONG&gt;&amp;nbsp;— this is a fatal, non-recoverable error that requires redeployment.&lt;/P&gt;
&lt;P data-line="335"&gt;Other common package issues include an inaccessible URL, an expired SAS token, files nested in a subfolder instead of the ZIP root, or a corrupted package.&lt;/P&gt;
&lt;P data-line="337"&gt;&lt;STRONG&gt;WEBSITE_RUN_FROM_PACKAGE&amp;nbsp;Values:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 88.9815%; height: 140px; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr style="height: 35px;"&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;Value&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 35px;"&gt;Behavior&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;1&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Runs from a local package in&amp;nbsp;d:\home\data\SitePackages&amp;nbsp;(Windows) or&amp;nbsp;/home/data/SitePackages&amp;nbsp;(Linux)&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;&amp;lt;URL&amp;gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Runs from a remote package at the specified URL (required for Linux Consumption)&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Not set&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 35px;"&gt;Traditional deployment — files extracted to&amp;nbsp;wwwroot&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 12.0188%" /&gt;&lt;col style="width: 87.9812%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="345"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="347"&gt;
&lt;LI data-line="347"&gt;Check&amp;nbsp;WEBSITE_RUN_FROM_PACKAGE&amp;nbsp;in Application Settings&lt;/LI&gt;
&lt;LI data-line="348"&gt;If value is&amp;nbsp;1:
&lt;UL data-line="349"&gt;
&lt;LI data-line="349"&gt;Go to Kudu → Debug Console&lt;/LI&gt;
&lt;LI data-line="350"&gt;Navigate to&amp;nbsp;d:\home\data\SitePackages&lt;/LI&gt;
&lt;LI data-line="351"&gt;Verify a&amp;nbsp;.zip&amp;nbsp;file exists and&amp;nbsp;packagename.txt&amp;nbsp;points to it&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="352"&gt;If value is a URL:
&lt;UL data-line="353"&gt;
&lt;LI data-line="353"&gt;Try accessing the URL directly — it should download the ZIP&lt;/LI&gt;
&lt;LI data-line="354"&gt;Check for expired SAS tokens (403 response) or missing blobs (404 response)&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="355"&gt;Verify package contents:
&lt;UL data-line="356"&gt;
&lt;LI data-line="356"&gt;Download and extract the ZIP&lt;/LI&gt;
&lt;LI data-line="357"&gt;Confirm&amp;nbsp;host.json&amp;nbsp;and function files are at the&amp;nbsp;&lt;STRONG&gt;root level&lt;/STRONG&gt;, not in a nested subfolder&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="359"&gt;&lt;STRONG&gt;Common Issues:&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Problem&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Symptom&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Fix&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Expired SAS token&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Package URL returns 403&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Generate new SAS with longer expiry&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Package URL not accessible&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Package URL returns 404&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Verify blob exists and URL is correct&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Wrong package structure&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Files in subfolder&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Ensure files are at ZIP root&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Corrupted package&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host startup errors&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Redeploy with a fresh package&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Storage firewall blocking&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Timeout errors&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Allow Function App access to storage&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="369"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="371"&gt;
&lt;LI data-line="371"&gt;Redeploy your Function App using your preferred deployment method&lt;/LI&gt;
&lt;LI data-line="372"&gt;If using URL-based packages, regenerate the SAS token or use managed identity-based access&lt;/LI&gt;
&lt;LI data-line="373"&gt;If the failure marker file exists, redeployment will overwrite it&lt;/LI&gt;
&lt;LI data-line="374"&gt;Restart the Function App after fixing:&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Ref: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/run-functions-from-deployment-package" target="_blank" rel="noopener"&gt;WEBSITE_RUN_FROM_PACKAGE&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3 data-line="382"&gt;7. Code-Level Startup Exceptions (DI and External Startup)&lt;/H3&gt;
&lt;P data-line="384"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="386"&gt;
&lt;LI data-line="386"&gt;Host Error state with application-specific exception in logs&lt;/LI&gt;
&lt;LI data-line="387"&gt;Error:&amp;nbsp;&lt;EM&gt;"Error configuring services in an external startup class"&lt;/EM&gt;&amp;nbsp;(diagnostic code&amp;nbsp;&lt;STRONG&gt;AZFD0005&lt;/STRONG&gt;)&lt;/LI&gt;
&lt;LI data-line="388"&gt;Dependency injection failures (InvalidOperationException,&amp;nbsp;TypeLoadException)&lt;/LI&gt;
&lt;LI data-line="389"&gt;Errors in&amp;nbsp;Program.cs&amp;nbsp;or&amp;nbsp;Startup.cs&amp;nbsp;of your application&lt;/LI&gt;
&lt;LI data-line="390"&gt;Assembly binding or version conflict exceptions&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="392"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="394"&gt;For&amp;nbsp;&lt;STRONG&gt;isolated worker&lt;/STRONG&gt;&amp;nbsp;(.NET) apps, your&amp;nbsp;Program.cs&amp;nbsp;runs custom startup code before the worker connects to the host. For&amp;nbsp;&lt;STRONG&gt;in-process&lt;/STRONG&gt;&amp;nbsp;(.NET) apps, custom&amp;nbsp;IWebJobsStartup&amp;nbsp;implementations run during host initialization. If this code throws — for example, a missing dependency, a failed external service connection, or a type load error — the host catches the exception and enters an&amp;nbsp;Error&amp;nbsp;state with a&amp;nbsp;HostInitializationException.&lt;/P&gt;
&lt;P data-line="396"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="398"&gt;
&lt;LI data-line="398"&gt;Check Application Insights&amp;nbsp;&lt;STRONG&gt;Exceptions&lt;/STRONG&gt;&amp;nbsp;table for the specific exception type and stack trace&lt;/LI&gt;
&lt;LI data-line="399"&gt;Look for errors containing&amp;nbsp;AZFD0005&amp;nbsp;(external startup error)&lt;/LI&gt;
&lt;LI data-line="400"&gt;Review your&amp;nbsp;Program.cs&amp;nbsp;/&amp;nbsp;Startup.cs&amp;nbsp;for:
&lt;UL data-line="401"&gt;
&lt;LI data-line="401"&gt;Service registrations that depend on external resources (databases, APIs, Key Vault)&lt;/LI&gt;
&lt;LI data-line="402"&gt;Missing NuGet packages or assembly version mismatches&lt;/LI&gt;
&lt;LI data-line="403"&gt;Configuration values that may differ between local and Azure environments&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="405"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="407"&gt;
&lt;LI data-line="407"&gt;Fix the exception identified in logs — the stack trace usually points directly to the failing code&lt;/LI&gt;
&lt;LI data-line="408"&gt;Ensure all required environment variables and connection strings are set in Application Settings&lt;/LI&gt;
&lt;LI data-line="409"&gt;For assembly conflicts, check that all NuGet package versions are compatible and aligned&lt;/LI&gt;
&lt;LI data-line="410"&gt;Consider making external-service connections resilient by deferring initialization or adding retry logic&lt;/LI&gt;
&lt;LI data-line="411"&gt;Test startup locally with the same environment variables as Azure&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3 data-line="418"&gt;8. Language Worker Channel Failure&lt;/H3&gt;
&lt;P data-line="420"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="422"&gt;
&lt;LI data-line="422"&gt;Error:&amp;nbsp;&lt;EM&gt;"Failed to start Language Worker Channel for language: {runtime}"&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="423"&gt;Error:&amp;nbsp;&lt;EM&gt;"Failed to start Rpc Server. Check if your app is hitting connection limits."&lt;/EM&gt;&lt;/LI&gt;
&lt;LI data-line="424"&gt;Host starts but cannot communicate with the language worker process&lt;/LI&gt;
&lt;LI data-line="425"&gt;Timeout errors during worker initialization&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="427"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="429"&gt;For out-of-process languages (Node.js, Python, Java, PowerShell, .NET Isolated), the Functions host communicates with a separate worker process over gRPC. If the host cannot start the gRPC server, or the worker process fails to launch or connect, the host throws a&amp;nbsp;HostInitializationException.&lt;/P&gt;
&lt;P data-line="431"&gt;Common causes include:&lt;/P&gt;
&lt;UL data-line="432"&gt;
&lt;LI data-line="432"&gt;Port conflicts&lt;/LI&gt;
&lt;LI data-line="433"&gt;Missing language runtime or incorrect version&lt;/LI&gt;
&lt;LI data-line="434"&gt;Worker process crashes on startup&lt;/LI&gt;
&lt;LI data-line="435"&gt;Resource exhaustion (memory, file handles)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="437"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="439"&gt;
&lt;LI data-line="439"&gt;Check Application Insights for gRPC or worker-related errors&lt;/LI&gt;
&lt;LI data-line="440"&gt;Verify the correct language runtime version is installed:
&lt;UL data-line="441"&gt;
&lt;LI data-line="441"&gt;For Node.js: Check&amp;nbsp;WEBSITE_NODE_DEFAULT_VERSION&lt;/LI&gt;
&lt;LI data-line="442"&gt;For Python: Check the Python version in Configuration → General settings&lt;/LI&gt;
&lt;LI data-line="443"&gt;For Java: Check&amp;nbsp;FUNCTIONS_WORKER_JAVA_LOAD_APP_LIBS&amp;nbsp;and Java version&lt;/LI&gt;
&lt;LI data-line="444"&gt;For .NET Isolated: Check target framework in the deployed assemblies&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI data-line="445"&gt;Check if the Function App is hitting plan resource limits&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="447"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="449"&gt;
&lt;LI data-line="449"&gt;Ensure the correct language runtime version is configured&lt;/LI&gt;
&lt;LI data-line="450"&gt;For Linux Consumption, verify the correct runtime stack is selected in Configuration → General settings&lt;/LI&gt;
&lt;LI data-line="451"&gt;If resource limits are suspected, consider scaling up to a higher plan tier&lt;/LI&gt;
&lt;LI data-line="452"&gt;Restart the Function App to clear temporary port or resource issues&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3 data-line="456"&gt;9. Networking Blocking Required Dependencies&lt;/H3&gt;
&lt;P data-line="458"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="460"&gt;
&lt;LI data-line="460"&gt;Host fails to start in VNet-integrated apps&lt;/LI&gt;
&lt;LI data-line="461"&gt;Timeout errors connecting to storage or other Azure services&lt;/LI&gt;
&lt;LI data-line="462"&gt;Works without VNet integration, fails with it enabled&lt;/LI&gt;
&lt;LI data-line="463"&gt;DNS resolution failures in logs&lt;/LI&gt;
&lt;LI data-line="464"&gt;NSG or firewall-related errors&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="466"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="468"&gt;During startup, the Functions host must reach several external endpoints:&lt;/P&gt;
&lt;UL data-line="470"&gt;
&lt;LI data-line="470"&gt;&lt;STRONG&gt;Azure Storage&lt;/STRONG&gt;&amp;nbsp;(Blob, Queue, Table, File) — for keys, triggers, and state&lt;/LI&gt;
&lt;LI data-line="471"&gt;&lt;STRONG&gt;Extension bundle CDN&lt;/STRONG&gt;&amp;nbsp;— to download extension bundles (first run or cold start)&lt;/LI&gt;
&lt;LI data-line="472"&gt;&lt;STRONG&gt;Azure Key Vault&lt;/STRONG&gt;&amp;nbsp;— if Key Vault references are used in app settings&lt;/LI&gt;
&lt;LI data-line="473"&gt;&lt;STRONG&gt;Application Insights&lt;/STRONG&gt;&amp;nbsp;— for telemetry (non-blocking, but can delay if timing out)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="475"&gt;If VNet integration, NSG rules, forced tunneling, or a firewall blocks these outbound connections, the host cannot complete startup.&lt;/P&gt;
&lt;P data-line="477"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="479"&gt;
&lt;LI data-line="479"&gt;Check if the Function App has VNet integration enabled (Networking blade)&lt;/LI&gt;
&lt;LI data-line="480"&gt;Review NSG rules on the integrated subnet — ensure outbound to Azure services is allowed&lt;/LI&gt;
&lt;LI data-line="481"&gt;For apps with forced tunneling, verify the firewall/NVA allows required endpoints&lt;/LI&gt;
&lt;LI data-line="482"&gt;Check DNS resolution for storage endpoints from within the VNet context&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="496"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="498"&gt;
&lt;LI data-line="498"&gt;Add NSG rules or firewall rules to allow outbound traffic to the required endpoints&lt;/LI&gt;
&lt;LI data-line="499"&gt;Configure service endpoints or private endpoints for storage on the integrated subnet&lt;/LI&gt;
&lt;LI data-line="500"&gt;Ensure DNS resolution works for all required endpoints&lt;/LI&gt;
&lt;LI data-line="501"&gt;For private DNS zones, ensure proper zone links and records exist for storage&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="503"&gt;See&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-networking-options" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-networking-options"&gt;Azure Functions networking options&lt;/A&gt; for detailed configuration guidance.&lt;/P&gt;
&lt;H3 data-line="507"&gt;10. app_offline.htm Causing Offline State&lt;/H3&gt;
&lt;P data-line="509"&gt;&lt;STRONG&gt;Symptoms:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="511"&gt;
&lt;LI data-line="511"&gt;Host status shows&amp;nbsp;Offline&lt;/LI&gt;
&lt;LI data-line="512"&gt;All requests return an offline page&lt;/LI&gt;
&lt;LI data-line="513"&gt;Portal shows the app is running but functions return errors&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="515"&gt;&lt;STRONG&gt;Why This Happens:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="517"&gt;If a file named&amp;nbsp;app_offline.htm&amp;nbsp;exists in the function app's script root directory, the host detects it during startup and enters the&amp;nbsp;Offline&amp;nbsp;state. Some deployment tools create this file during deployment to gracefully take the app offline, and it should be removed automatically when deployment completes. If it is left behind — for example, due to a failed deployment — the host remains offline.&lt;/P&gt;
&lt;P data-line="519"&gt;&lt;STRONG&gt;How to Verify:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="521"&gt;
&lt;LI data-line="521"&gt;Windows plans: Go to Kudu → Debug Console → Navigate to&amp;nbsp;site/wwwroot&amp;nbsp;and look for&amp;nbsp;app_offline.htm&lt;/LI&gt;
&lt;LI data-line="522"&gt;Linux: Use SSH or Azure CLI to check for the file&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="524"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="526"&gt;
&lt;LI data-line="526"&gt;Delete&amp;nbsp;app_offline.htm&amp;nbsp;from the app's root directory&lt;/LI&gt;
&lt;LI data-line="527"&gt;The host will automatically detect the deletion and restart into a normal state&lt;/LI&gt;
&lt;LI data-line="528"&gt;If the file reappears after deletion, investigate your deployment pipeline — it may be creating the file but failing to remove it&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2 data-line="532"&gt;Using Diagnose and Solve Problems&lt;/H2&gt;
&lt;P data-line="534"&gt;The Azure Portal provides built-in diagnostics specifically designed for Functions host startup issues.&lt;/P&gt;
&lt;P data-line="536"&gt;&lt;STRONG&gt;How to Access:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="538"&gt;
&lt;LI data-line="538"&gt;Navigate to your Function App in the Azure Portal&lt;/LI&gt;
&lt;LI data-line="539"&gt;Select&amp;nbsp;&lt;STRONG&gt;Diagnose and solve problems&lt;/STRONG&gt;&amp;nbsp;from the left menu&lt;/LI&gt;
&lt;LI data-line="540"&gt;Search for relevant detectors:&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Detector&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;What It Checks&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Function App Down or Reporting Errors&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Overall app health, host status, crash history&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Function App Startup Issue&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Specific startup failure analysis, configuration validation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Functions Configurations Check&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;host.json and app settings validation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Functions Deployment&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Recent deployment status and potential issues&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Network Troubleshooter&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;VNet, private endpoint, and access restriction diagnostics&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="551"&gt;These detectors run automated checks against your Function App and provide targeted recommendations.&amp;nbsp;&lt;/P&gt;
&lt;P data-line="551"&gt;The detectors often identify the root cause faster than manual investigation.&lt;/P&gt;
&lt;H2 data-line="555"&gt;Verifying Host Status via REST API&lt;/H2&gt;
&lt;P data-line="557"&gt;You can check the host status programmatically to determine the current state and any reported errors.&lt;/P&gt;
&lt;P data-line="559"&gt;&lt;STRONG&gt;Get Host Status:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;curl "https://&amp;lt;app&amp;gt;.azurewebsites.net/admin/host/status?code=&amp;lt;master-key&amp;gt;"&amp;lt;/master-key&amp;gt;&amp;lt;/app&amp;gt;&lt;/LI-CODE&gt;
&lt;P data-line="565"&gt;See&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/Azure/azure-functions-host/wiki/Admin-API" target="_blank" rel="noopener" data-href="https://github.com/Azure/azure-functions-host/wiki/Admin-API"&gt;Admin API&lt;/A&gt; for details.&lt;/P&gt;
&lt;P data-line="596"&gt;The&amp;nbsp;state&amp;nbsp;field is the single most important indicator:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 91.8519%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;State&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Action&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Running&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host is healthy — investigate function-level issues&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Error&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host startup failed — check the&amp;nbsp;errors&amp;nbsp;array for root cause&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Offline&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;app_offline.htm&amp;nbsp;present — check deployment state&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;No response / timeout&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Host cannot serve requests — check platform health and networking&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 23.8408%" /&gt;&lt;col style="width: 76.2601%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;List Functions (verify discovery):&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="powershell"&gt;curl "https://&amp;lt;app&amp;gt;.azurewebsites.net/admin/functions?code=&amp;lt;master-key&amp;gt;"&amp;lt;/master-key&amp;gt;&amp;lt;/app&amp;gt;&lt;/LI-CODE&gt;
&lt;H2 data-line="615"&gt;Quick Troubleshooting Checklist&lt;/H2&gt;
&lt;P data-line="617"&gt;Use this checklist to systematically diagnose host startup issues:&lt;/P&gt;
&lt;UL data-line="619"&gt;
&lt;LI data-line="619"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Host status&lt;/STRONG&gt;: Check&amp;nbsp;/admin/host/status&amp;nbsp;— is the state&amp;nbsp;Running,&amp;nbsp;Error, or&amp;nbsp;Offline?&lt;/LI&gt;
&lt;LI data-line="620"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;First error&lt;/STRONG&gt;: Check Application Insights Exceptions or Log Stream — what is the&amp;nbsp;&lt;STRONG&gt;first&lt;/STRONG&gt;&amp;nbsp;exception after the latest restart?&lt;/LI&gt;
&lt;LI data-line="621"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;FUNCTIONS_EXTENSION_VERSION&lt;/STRONG&gt;: Is it set to a valid value (e.g.,&amp;nbsp;~4)?&lt;/LI&gt;
&lt;LI data-line="622"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;FUNCTIONS_WORKER_RUNTIME&lt;/STRONG&gt;: Is it set correctly and does it match the deployed code?&lt;/LI&gt;
&lt;LI data-line="623"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;AzureWebJobsStorage&lt;/STRONG&gt;: Is the connection string valid? Is the storage account reachable from the app's network context?&lt;/LI&gt;
&lt;LI data-line="624"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;host.json&lt;/STRONG&gt;: Does it exist, contain valid JSON, and include&amp;nbsp;"version": "2.0"?&lt;/LI&gt;
&lt;LI data-line="625"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Extension bundle&lt;/STRONG&gt;: Is&amp;nbsp;extensionBundle&amp;nbsp;configured with a compatible version range?&lt;/LI&gt;
&lt;LI data-line="626"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Package deployment&lt;/STRONG&gt;: If using&amp;nbsp;WEBSITE_RUN_FROM_PACKAGE, is the package accessible and correctly structured?&lt;/LI&gt;
&lt;LI data-line="627"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Startup code&lt;/STRONG&gt;: For .NET apps, does&amp;nbsp;Program.cs&amp;nbsp;/ startup code throw during DI registration?&lt;/LI&gt;
&lt;LI data-line="628"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Networking&lt;/STRONG&gt;: If VNet-integrated, can the app reach storage, Key Vault, and extension CDN endpoints?&lt;/LI&gt;
&lt;LI data-line="629"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Offline file&lt;/STRONG&gt;: Is&amp;nbsp;app_offline.htm&amp;nbsp;present in the root directory?&lt;/LI&gt;
&lt;LI data-line="630"&gt;[ ]&amp;nbsp;&lt;STRONG&gt;Diagnose and Solve&lt;/STRONG&gt;: Have you run the&amp;nbsp;&lt;STRONG&gt;Function App Startup Issue&lt;/STRONG&gt; detector in the Azure Portal?&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="634"&gt;Diagnostic Event Codes Reference&lt;/H2&gt;
&lt;P data-line="636"&gt;When reviewing logs, look for these Azure Functions diagnostic codes that are related to startup failures:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 100%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Code&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Name&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AZFD0005&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;External Startup Error&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Error in a custom&amp;nbsp;IWebJobsStartup&amp;nbsp;class&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AZFD0006&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;SAS Token Expiring&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;AzureWebJobsStorage&amp;nbsp;SAS token is expiring or expired&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AZFD0009&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Unable to Parse host.json&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;host.json file is missing or has invalid content&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AZFD0011&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Missing FUNCTIONS_WORKER_RUNTIME&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;The required worker runtime setting is not configured&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;AZFD0013&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Worker Runtime Mismatch&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;FUNCTIONS_WORKER_RUNTIME&amp;nbsp;does not match deployed function metadata&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 11.1214%" /&gt;&lt;col style="width: 33.2785%" /&gt;&lt;col style="width: 55.6001%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="646"&gt;These codes appear in Application Insights traces and diagnostic event logs.&lt;/P&gt;
&lt;P data-line="646"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/errors-diagnostics/diagnostic-events/azfd0005" target="_blank" rel="noopener"&gt;Diagnostic Events &lt;/A&gt;&lt;/P&gt;
&lt;H2 data-line="650"&gt;Conclusion&lt;/H2&gt;
&lt;P data-line="652"&gt;Azure Functions host startup failures can be caused by a wide range of issues — from a simple missing app setting to complex networking misconfigurations. The key to efficient troubleshooting is a&amp;nbsp;&lt;STRONG&gt;systematic approach&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P data-line="654"&gt;&lt;STRONG&gt;Key Takeaways:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL data-line="656"&gt;
&lt;LI data-line="656"&gt;&lt;STRONG&gt;Always check host status first&lt;/STRONG&gt;&amp;nbsp;— the&amp;nbsp;/admin/host/status&amp;nbsp;endpoint tells you the current state and any errors&lt;/LI&gt;
&lt;LI data-line="657"&gt;&lt;STRONG&gt;Find the first error, not the cascade&lt;/STRONG&gt;&amp;nbsp;— look for the initial exception after the most recent restart&lt;/LI&gt;
&lt;LI data-line="658"&gt;&lt;STRONG&gt;Validate configuration&lt;/STRONG&gt;&amp;nbsp;—&amp;nbsp;FUNCTIONS_EXTENSION_VERSION,&amp;nbsp;FUNCTIONS_WORKER_RUNTIME, and&amp;nbsp;AzureWebJobsStorage&amp;nbsp;are the three settings that cause the most startup failures&lt;/LI&gt;
&lt;LI data-line="659"&gt;&lt;STRONG&gt;Check host.json&lt;/STRONG&gt;&amp;nbsp;— a missing&amp;nbsp;version&amp;nbsp;property or invalid JSON is a common and easily fixable cause&lt;/LI&gt;
&lt;LI data-line="660"&gt;&lt;STRONG&gt;Verify deployment artifacts&lt;/STRONG&gt;&amp;nbsp;— ensure your package is complete, correctly structured, and accessible&lt;/LI&gt;
&lt;LI data-line="661"&gt;&lt;STRONG&gt;Use built-in diagnostics&lt;/STRONG&gt;&amp;nbsp;— the Diagnose and Solve Problems detectors are purpose-built for these issues&lt;/LI&gt;
&lt;LI data-line="662"&gt;&lt;STRONG&gt;Apply one fix at a time&lt;/STRONG&gt;&amp;nbsp;— change one setting, restart, and recheck. Avoid multiple simultaneous changes that obscure which fix resolved the issue&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="664"&gt;If you continue to experience startup issues after following these steps, consider opening a support ticket with Microsoft Azure Support, providing:&lt;/P&gt;
&lt;UL data-line="666"&gt;
&lt;LI data-line="666"&gt;Function App name and resource group&lt;/LI&gt;
&lt;LI data-line="667"&gt;Timestamp of when the issue started&lt;/LI&gt;
&lt;LI data-line="668"&gt;Host status endpoint response (copy the full JSON)&lt;/LI&gt;
&lt;LI data-line="669"&gt;The first exception from Application Insights or Log Stream&lt;/LI&gt;
&lt;LI data-line="670"&gt;Recent deployment or configuration changes&lt;/LI&gt;
&lt;LI data-line="671"&gt;Networking configuration details (if VNet-integrated)&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="675"&gt;References&lt;/H2&gt;
&lt;UL data-line="677"&gt;
&lt;LI data-line="677"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-host-json" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-host-json"&gt;Azure Functions host.json reference&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="678"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-app-settings" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-app-settings"&gt;Azure Functions app settings reference&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="679"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-deployment-technologies" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-deployment-technologies"&gt;Azure Functions deployment technologies&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="680"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/storage-considerations" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/storage-considerations"&gt;Storage considerations for Azure Functions&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="681"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-networking-options" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-networking-options"&gt;Azure Functions networking options&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="682"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-diagnostics" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-diagnostics"&gt;Azure Functions diagnostics&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="683"&gt;&lt;A href="https://github.com/Azure/azure-functions-host/wiki/Admin-API" target="_blank" rel="noopener" data-href="https://github.com/Azure/azure-functions-host/wiki/Admin-API"&gt;Azure Functions Admin API (host status)&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="684"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/run-functions-from-deployment-package" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/run-functions-from-deployment-package"&gt;Run your functions from a package file&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="685"&gt;&lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-recover-storage-account" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/azure-functions/functions-recover-storage-account"&gt;Troubleshoot Azure Functions&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Have questions or feedback? Leave a comment below.&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 07:04:42 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/how-to-troubleshoot-azure-functions-host-startup-issue/ba-p/4512966</guid>
      <dc:creator>vikasgupta5</dc:creator>
      <dc:date>2026-04-21T07:04:42Z</dc:date>
    </item>
    <item>
      <title>From Playwright Automation to Agent Driven Testing (GHCP in Action)</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-developer-community/from-playwright-automation-to-agent-driven-testing-ghcp-in/ba-p/4507395</link>
      <description>&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;What Is Agent-Driven Testing?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agent-driven testing represents a revolutionary shift from traditional, hardcoded test automation to intelligent, adaptive testing powered by AI agents. Unlike conventional Playwright tests that rely on static selectors and predefined workflows, agent-driven testing leverages&amp;nbsp;&lt;STRONG&gt;GitHub Copilot (GHCP) agents&lt;/STRONG&gt; with &lt;STRONG&gt;Model Context Protocol (MCP)&lt;/STRONG&gt; to dynamically analyze web pages, discover elements intelligently, and create self-healing tests that adapt to UI changes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Traditional vs Agent-Driven Approach Comparison&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Traditional Playwright&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Agent-Driven (MCP-Enhanced)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Hardcoded selectors&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;AI-discovered elements&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Static test scripts&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Dynamic, adaptive tests&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Breaks with UI changes&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Self-healing automation&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Manual element analysis&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Intelligent page exploration&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Rule-based logic&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Context-aware decisions&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Limited fallback options&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Intelligent cascading strategies&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;❌ Traditional Approach - Brittle and static&lt;/P&gt;
&lt;P&gt;const searchInput = page.locator('input[name="q"]');&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;✅ Agent-Driven Approach - Intelligent and adaptive&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Uses AI discovery&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;const searchResult = await this.mcpClient.callTool({&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: 'playwright_find_element',&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arguments: {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; element_type: 'search_input',&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; page_url: await this.page.url(),&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; confidence_threshold: 0.8,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; generate_multiple_selectors: true&lt;/P&gt;
&lt;P&gt;The agent doesn't just execute tests—it &lt;STRONG&gt;&amp;nbsp;thinks&lt;/STRONG&gt; about them, analyzing page structure, scoring element reliability, and making intelligent decisions about the best interaction strategies.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;How Does Agent-Driven Testing Work with MCP?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agent-driven testing operates through a sophisticated &lt;STRONG&gt;Model Context Protocol (MCP) &lt;/STRONG&gt;workflow that mimics human intelligence. Here's how the MCP server analyzes pages and makes intelligent decisions:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;🔬 1. Intelligent Page Analysis&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The agent first &lt;STRONG&gt;explores&lt;/STRONG&gt; the target website like a human tester would:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;MCP-Enhanced exploration from your implementation&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;``&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;🧠 2. Dynamic Element Discovery with Confidence Scoring&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Your implementation shows how MCP uses &amp;nbsp;&lt;STRONG&gt;confidence scoring&lt;/STRONG&gt; to intelligently identify elements:&lt;/P&gt;
&lt;P&gt;Intelligent scoring from your sample workflow.page.ts&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;🎯 3. MCP Server Page Analysis&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The MCP server analyzes page content and provides intelligent insights:&lt;/P&gt;
&lt;P&gt;MCP snapshot and analysis from your implementation&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;⚡ 4. Adaptive Fallback Strategies&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When primary strategies fail, the agent intelligently cascades through alternatives:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Your implementation's intelligent fallback system&lt;/P&gt;
&lt;P&gt;async getSearchInput() {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; console.log('🔎 MCP: Using intelligently discovered search input...');&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&amp;nbsp; Try MCP-discovered element first (highest reliability)&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;Real-time dynamic discovery (adaptive)&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;Traditional selectors (fallback safety)&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How to Implement Agent-Driven Testing: Step-by-Step Guide&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 1: Create GitHub Agent Configuration&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Create the agent configuration that enables MCP capabilities:&lt;/P&gt;
&lt;P&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Under your project directory mkdir -p .github/agents&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create &lt;STRONG&gt;&amp;nbsp;.github/agents/playwright-agent.md &lt;/STRONG&gt;with your exact configuration:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 2: Select Agent in GitHub Copilot Chat&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Open GitHub Copilot Chat in VS Code&lt;/LI&gt;
&lt;LI&gt;Click the &lt;STRONG&gt;agent selector&lt;/STRONG&gt; at the top of the chat&lt;/LI&gt;
&lt;LI&gt;Choose &lt;STRONG&gt;Playwright Tester Mode &lt;/STRONG&gt;from the dropdown&lt;/LI&gt;
&lt;LI&gt;The agent will now use MCP-enhanced capabilities&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Step 3: Create Test Using Natural Language Prompts&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now you can create tests using&amp;nbsp;&lt;STRONG&gt;natural language prompts&lt;/STRONG&gt;&amp;nbsp;to the agent:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Prompt to GHCP Agent:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;gt; Create a test case that navigates to www.google.com, searches for 'playwright tutorial', and navigates to the Playwright homepage. Use MCP analysis to discover elements intelligently."&lt;/P&gt;
&lt;P&gt;The agent will generate a test like your implementation:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Step 4: Execute and Monitor Agent Intelligence&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Run your MCP-enhanced tests:&lt;/P&gt;
&lt;P&gt;npm install @playwright/test&lt;/P&gt;
&lt;P&gt;npx playwright install&lt;/P&gt;
&lt;P&gt;npx playwright test --headed&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Watch the intelligent decision-making in action:&lt;/P&gt;
&lt;P&gt;🚀 Starting MCP-Enhanced Test Journey...&lt;/P&gt;
&lt;P&gt;🔬 Using MCP to explore and navigate to Google...&lt;/P&gt;
&lt;P&gt;🧠 MCP: Analyzing target URL: https://www.google.com &amp;nbsp;&lt;/P&gt;
&lt;P&gt;📸 MCP: Taking page snapshot for element analysis...&lt;/P&gt;
&lt;P&gt;🔍 MCP: Analyzing page elements dynamically...&lt;/P&gt;
&lt;P&gt;🎯 MCP: Discovered search input: input[name="q"]&lt;/P&gt;
&lt;P&gt;🔎 MCP: Using intelligently discovered search input...&lt;/P&gt;
&lt;P&gt;✅ MCP: Using discovered selector: input[name="q"]&lt;/P&gt;
&lt;P&gt;✅ MCP: Search executed using discovered elements&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sample Test Case Results - Google to Playwright Navigation&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Based on your actual implementation, here's what the agent accomplishes:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Test Execution Flow:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;🔬 MCP Page Analysis&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MCP: Analyzing target URL: https://www.google.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MCP: Taking page snapshot for element analysis&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MCP: Analyzing page elements dynamically&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt;🎯 Intelligent Element Discovery&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MCP: Discovered search input: input[name="q"]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MCP: Discovered search button: input[value="Google Search"]&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;STRONG&gt;🔍 Confidence-Based Search Execution&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MCP: Using intelligently discovered search input&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MCP: Search executed using discovered elements&lt;/P&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;&lt;STRONG&gt;🧠 Adaptive Link Detection&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // From your discoverPlaywrightLinks implementation&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (href.includes('playwright.dev')) confidence += 50;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fullText.includes('playwright')) confidence += 20;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Outcome Details&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;🎯 &lt;STRONG&gt;Performance Results&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Based on your test execution summary:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; height: 246.641px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 33.3333%" /&gt;&lt;col style="width: 33.3333%" /&gt;&lt;col style="width: 33.3333%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 35.2344px;"&gt;&lt;td style="height: 35.2344px;"&gt;Metric&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;Traditional Approach&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;MCP-Enhanced Approach&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35.2344px;"&gt;&lt;td style="height: 35.2344px;"&gt;Element Discovery&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;Static, breaks easily&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;95% success with confidence scoring&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35.2344px;"&gt;&lt;td style="height: 35.2344px;"&gt;Maintenance Effort&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;High (manual updates)&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;90% reduction** (self-healing)&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35.2344px;"&gt;&lt;td style="height: 35.2344px;"&gt;Bot Detection Handling&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;Basic fallback&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;Intelligent adaptive strategies&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35.2344px;"&gt;&lt;td style="height: 35.2344px;"&gt;Test Reliability&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;60-70% (UI changes)&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;85-90%** (AI adaptation)&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35.2344px;"&gt;&lt;td style="height: 35.2344px;"&gt;Debugging Time&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;2-4 hours per failure&lt;/td&gt;&lt;td style="height: 35.2344px;"&gt;20-30 minutes** (intelligent insights)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;🚀 &lt;STRONG&gt;Key Benefits Achieved&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Self-Healing Tests&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;- Tests adapt to UI changes automatically&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;- Confidence scoring prevents false positives&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;- Intelligent fallback strategies improve reliability&lt;/P&gt;
&lt;P&gt;Intelligent Element Discovery&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; No more hardcoded selectors that break&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;Instead: AI-powered discovery with scoring:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;if (name === 'q') score += 10;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;if (role === 'combobox') score += 7;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;if (placeholder?.includes('search')) score += 5;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Enhanced Debugging &amp;amp; Insights&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;✅ MCP: Using discovered selector: input[name="q"]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;🧠 MCP: Found 18 potential Playwright links&lt;/P&gt;
&lt;P&gt;Natural Language Test Creation&lt;/P&gt;
&lt;P&gt;- Write tests using prompts instead of code&lt;/P&gt;
&lt;P&gt;- Agent generates optimized, intelligent automation&lt;/P&gt;
&lt;P&gt;-Built-in best practices and error handling&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;🔮&lt;STRONG&gt; The Future of Testing is Intelligent&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agent-driven testing with GitHub Copilot and MCP represents the evolution from brittle, maintenance-heavy automation to intelligent, self-healing test suites. Your implementation demonstrates how AI can:&lt;/P&gt;
&lt;P&gt;- Think&amp;nbsp; about element discovery instead of hardcoding selectors&lt;/P&gt;
&lt;P&gt;- Adapt to UI changes through confidence scoring &amp;nbsp;&lt;/P&gt;
&lt;P&gt;- Learn from page analysis to improve over time&lt;/P&gt;
&lt;P&gt;- Heal&amp;nbsp; automatically when traditional approaches fail&lt;/P&gt;
&lt;P&gt;The result? Tests that improve themselves, dramatically reducing maintenance overhead while increasing reliability and providing intelligent insights into application behavior.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Start your journey from traditional Playwright automation to intelligent agent-driven testing today—your future self (and your QA team) will thank you! 🚀&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Implementation Checklist&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;✅ Quick Start Checklist&lt;/P&gt;
&lt;P&gt;- Create github/agents/playwright-agent.md configuration file&lt;/P&gt;
&lt;P&gt;- Select "Playwright Tester Mode" agent in GitHub Copilot Chat&lt;/P&gt;
&lt;P&gt;- Install Playwright: `npm install @playwright/test`&lt;/P&gt;
&lt;P&gt;- Create MCP-enhanced Page Object Model with confidence scoring&lt;/P&gt;
&lt;P&gt;-&amp;nbsp; Configure `playwright.config.ts` with proper reporting&lt;/P&gt;
&lt;P&gt;- Write tests using natural language prompts to the agent&lt;/P&gt;
&lt;P&gt;- Run tests and observe intelligent decision-making: `npx playwright test --headed`&lt;/P&gt;
&lt;P&gt;- Review MCP insights in console output and test reports&lt;/P&gt;
&lt;P&gt;&amp;nbsp;🎯 Success Metrics&lt;/P&gt;
&lt;P&gt;You'll know agent-driven testing is working when you see:&lt;/P&gt;
&lt;P&gt;- Console logs showing MCP analysis: "MCP: Analyzing page elements dynamically..."&lt;/P&gt;
&lt;P&gt;- Confidence scoring in action: "MCP: Found 18 potential Playwright links"&lt;/P&gt;
&lt;P&gt;- Adaptive behavior: "MCP: Using discovered selector: input[name='q']"&lt;/P&gt;
&lt;P&gt;- Self-healing: Tests passing even when UI changes occur&lt;/P&gt;
&lt;P&gt;- Reduced maintenance: 90% fewer test fix cycles&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 05:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-developer-community/from-playwright-automation-to-agent-driven-testing-ghcp-in/ba-p/4507395</guid>
      <dc:creator>syedarshad</dc:creator>
      <dc:date>2026-04-21T05:00:00Z</dc:date>
    </item>
    <item>
      <title>Service Bus SBMP Retirement: What BizTalk Server 2020 Customers Need to Know</title>
      <link>https://techcommunity.microsoft.com/t5/azure-integration-services-blog/service-bus-sbmp-retirement-what-biztalk-server-2020-customers/ba-p/4513155</link>
      <description>&lt;P&gt;On September 30, 2026, the Azure Service Bus team will retire support for the Service Bus Messaging Protocol (SBMP). This is important BizTalk Server 2020 customers who use the BizTalk Service Bus (SB-Messaging) adapter, as SBMP is the protocol that adapter relies on today.&lt;/P&gt;
&lt;P&gt;To help customers maintain continuity while planning their transition to Azure Logic Apps, we’ve released a BizTalk Server 2020 hotfix that adds support for Advanced Message Queuing Protocol (AMQP) in the adapter.&lt;/P&gt;
&lt;H2&gt;What’s changing&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;SBMP support retires on September 30, 2026&lt;/STRONG&gt; in Azure Service Bus.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;A hotfix enables AMQP&lt;/STRONG&gt; for the BizTalk Service Bus (SB-Messaging) adapter (request &lt;STRONG&gt;KB5091375&lt;/STRONG&gt; opening a support case).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;AMQP becomes the default transport&lt;/STRONG&gt; with the hotfix installed, while &lt;STRONG&gt;SBMP remains available as an opt-in fallback&lt;/STRONG&gt; for backward compatibility.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The hotfix will be available for BizTalk Server 2020 CU6 and CU7.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The current hotfix is based on the current Service Bus SDK&lt;/STRONG&gt; (scheduled for deprecation in September 2026), and we expect an &lt;STRONG&gt;updated version in June&lt;/STRONG&gt; based on the new Service Bus SDK.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;What you need to do&lt;/H2&gt;
&lt;P&gt;If you plan to continue using the BizTalk Server 2020 Service Bus adapter, you should:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Migrate your adapter configuration to AMQP&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Install the hotfix&lt;/STRONG&gt; well before September 2026, and run validation in a non-production environment.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Validate your scenarios&lt;/STRONG&gt;, including large message/file patterns and any operational fallback strategies you depend on.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Decide whether to test now or wait for the June update&lt;/STRONG&gt;: use the current hotfix to validate large file scenarios and fallback approaches, or wait for the June SDK-based refresh if you don’t need to install immediately.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;How to obtain the hotfix&lt;/H2&gt;
&lt;P&gt;You can obtain the hotfix by opening a support case (request &lt;STRONG&gt;KB5091375&lt;/STRONG&gt;) or by contacting your Microsoft account team. The hotfix enables &lt;STRONG&gt;AMQP&lt;/STRONG&gt; support for the BizTalk Service Bus (SB-Messaging) adapter. A new KB article will be issued for the June update.&lt;/P&gt;
&lt;H2&gt;Support and lifecycle context&lt;/H2&gt;
&lt;P&gt;Microsoft remains committed to supporting BizTalk Server 2020 and its features in accordance with the official product lifecycle. Extended paid support will be available after April 2028.&lt;/P&gt;
&lt;H2&gt;Closing thoughts&lt;/H2&gt;
&lt;P&gt;If you’re using the SB-Messaging adapter today, now is the right time to plan your move to AMQP and schedule validation in a non-production environment. This keeps you ahead of the September 2026 retirement date and helps ensure a smooth path as you modernize toward Azure Logic Apps.&lt;/P&gt;</description>
      <pubDate>Tue, 21 Apr 2026 01:02:21 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-integration-services-blog/service-bus-sbmp-retirement-what-biztalk-server-2020-customers/ba-p/4513155</guid>
      <dc:creator>hcamposu</dc:creator>
      <dc:date>2026-04-21T01:02:21Z</dc:date>
    </item>
    <item>
      <title>Azure Incident Retrospective — Please register for one of the 2 sessions below!</title>
      <link>https://techcommunity.microsoft.com/t5/azure-events/azure-incident-retrospective-please-register-for-one-of-the-2/ec-p/4513152#M696</link>
      <description>&lt;H4&gt;Join our upcoming live webcast for a transparent discussion about this recent Azure service incident — led by our engineering teams.&lt;/H4&gt;
&lt;P&gt;Network degradation within East US AZ-02&lt;/P&gt;
&lt;P&gt;Tracking ID: DG_Z-S08 | Impacted: 20 March 2026&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;What to expect&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;📚 Understand&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;What happened, how we responded, and what we learned&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;💬 Ask&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Live Q&amp;amp;A with our engineering experts throughout the session&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;🛠 Learn&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The fixes we've put in place and guidance for workload resiliency&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Choose your session&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Same content presented at both times — pick the one that works best for your timezone:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 99.9826%; height: 371.334px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 50.0087%" /&gt;&lt;col style="width: 50.0087%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 146.667px;"&gt;&lt;td style="height: 146.667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Session 1&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;17:30 UTC&lt;/P&gt;
&lt;P&gt;Thursday, 23 April 2026&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/air/DG_Z-S08/1" target="_blank" rel="noopener" data-auth="NotApplicable"&gt;&lt;STRONG&gt;Register now →&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 146.667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Session 2&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;05:30&amp;nbsp;UTC&lt;/P&gt;
&lt;P&gt;Friday, 24 April 2026&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/air/DG_Z-S08/2" target="_blank" rel="noopener" data-auth="NotApplicable"&gt;&lt;STRONG&gt;Register now →&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 224.667px;"&gt;&lt;td style="height: 224.667px;"&gt;
&lt;P&gt;9:30 AM US Pacific (PDT)&lt;/P&gt;
&lt;P&gt;12:30 PM US Eastern (EDT)&lt;/P&gt;
&lt;P&gt;5:30 PM London (BST)&lt;/P&gt;
&lt;P&gt;1:30 AM +1 Beijing (CST)&lt;/P&gt;
&lt;P&gt;4:30 AM +1 Sydney (AEDT)&lt;/P&gt;
&lt;P&gt;6:30 AM +1 Auckland (NZDT)&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 224.667px;"&gt;
&lt;P&gt;9:30 PM -1 US Pacific (PDT)&lt;/P&gt;
&lt;P&gt;12:30 AM US Eastern (EDT)&lt;/P&gt;
&lt;P&gt;5:30 AM London (BST)&lt;/P&gt;
&lt;P&gt;1:30 PM Beijing (CST)&lt;/P&gt;
&lt;P&gt;4:30 PM Sydney (AEDT)&lt;/P&gt;
&lt;P&gt;6:30 PM Auckland (NZDT)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;&lt;STRONG&gt;Our engineering leaders&lt;/STRONG&gt;&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 99.9826%; height: 180.667px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 50.0087%" /&gt;&lt;col style="width: 50.0087%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 180.667px;"&gt;&lt;td style="height: 180.667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Newton Sanches&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Partner, Engineering Manager&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Azure Networking&lt;/P&gt;
&lt;P&gt;Cloud+AI Engineering&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://www.linkedin.com/in/newton-sanches-351b97132/" target="_blank" rel="noopener"&gt;LinkedIn ↗&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 180.667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Frank Rey&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Partner, General Manager&lt;/P&gt;
&lt;P&gt;Azure Networking&lt;/P&gt;
&lt;P&gt;Cloud+AI Engineering&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.linkedin.com/in/frankrey/" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;LinkedIn ↗&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;
&lt;P&gt;⚠️ Prepare before the livestream&lt;/P&gt;
&lt;P&gt;Read the &lt;A href="https://aka.ms/AzurePIRs" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Post Incident Review (PIR)&lt;/STRONG&gt;&lt;/A&gt; &amp;nbsp;ahead of time so you can ask any follow up questions during the live Q&amp;amp;A&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Helpful resources&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;🔔 &lt;A href="https://aka.ms/ash-alerts" target="_blank" rel="noopener" data-auth="NotApplicable"&gt;Azure Service Health Alerts&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Get alerts for relevant incidents by setting up notifications via email, SMS, or webhook&lt;/P&gt;
&lt;P&gt;🎥 &lt;A href="https://aka.ms/air/videos" target="_blank" rel="noopener" data-auth="NotApplicable"&gt;Past Retrospective Recordings&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Watch recordings of previous retrospective livestreams&lt;/P&gt;
&lt;P&gt;📄 &lt;A href="https://aka.ms/AzurePIRs" target="_blank" rel="noopener" data-auth="NotApplicable"&gt;Azure Post Incident Reviews&lt;/A&gt;&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 21 Apr 2026 20:33:41 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-events/azure-incident-retrospective-please-register-for-one-of-the-2/ec-p/4513152#M696</guid>
      <dc:creator>SaiVai</dc:creator>
      <dc:date>2026-04-21T20:33:41Z</dc:date>
    </item>
    <item>
      <title>Azure RBAC Custom Role Best Practices or Common Build Patterns</title>
      <link>https://techcommunity.microsoft.com/t5/azure/azure-rbac-custom-role-best-practices-or-common-build-patterns/m-p/4513098#M22496</link>
      <description>&lt;P&gt;As a platform admin, I want to grant application admins Contributor access while removing their ability to write or delete most Microsoft.Network resource types, with a few exceptions such as Private Endpoints, Network Interfaces, and Application Gateways.&lt;/P&gt;&lt;P&gt;Based on the effective control plane permissions logic, we designed two custom roles. The first role is a duplicate of the Contributor role, but with Microsoft.Network//Write and Microsoft.Network//Delete added to notActions. The second role adds back specific Microsoft.Network operations using wildcarded resource types, such as Microsoft.Network/networkInterfaces/*.&lt;/P&gt;&lt;P&gt;Application Admin Effective Permissions = Role 1 (Contributor - Microsoft.Network) + Role 2 (for example, Microsoft.Network/networkInterfaces/, Microsoft.Network/networkSecurityGroups/, Microsoft.Network/applicationGateways/write, etc.)&lt;/P&gt;&lt;P&gt;I understand that Microsoft RBAC best practices recommend avoiding wildcard (*) operations. However, my team has found that building roles with individual operations is extremely tedious and time-consuming, especially when trying to understand the impact of each operation.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Does anyone have suggestions for a simpler or more maintainable pattern for implementing this type of custom RBAC design?&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Apr 2026 18:40:54 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure/azure-rbac-custom-role-best-practices-or-common-build-patterns/m-p/4513098#M22496</guid>
      <dc:creator>nicksal</dc:creator>
      <dc:date>2026-04-20T18:40:54Z</dc:date>
    </item>
    <item>
      <title>Troubleshoot with OpenTelemetry in Azure Monitor - Public Preview</title>
      <link>https://techcommunity.microsoft.com/t5/azure-observability-blog/troubleshoot-with-opentelemetry-in-azure-monitor-public-preview/ba-p/4512128</link>
      <description>&lt;P&gt;OpenTelemetry is fast becoming the industry standard for modern telemetry collection and ingestion pipelines. With Azure Monitor’s new OpenTelemetry Protocol (OTLP) support, you can ship logs, metrics, and traces from wherever you run workloads to analyze and act on your observability data in one place.&lt;/P&gt;
&lt;H2&gt;What’s in the preview&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Direct OTLP ingestion&lt;/STRONG&gt; into Azure Monitor for logs, metrics, and traces.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Automated onboarding &lt;/STRONG&gt;for AKS workloads.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Application Insights on OTLP&lt;/STRONG&gt; for distributed tracing, performance and troubleshooting experiences.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pre-built Grafana dashboards&lt;/STRONG&gt; to visualize signals quickly.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Prometheus &lt;/STRONG&gt;for metric storage and query.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;OpenTelemetry semantic conventions&lt;/STRONG&gt; for logs and traces, so your data lands in a familiar standard-based schema.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;How to send OTLP to Azure Monitor: pick your path&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;AKS:&lt;/STRONG&gt; Auto-instrument Java and Node.js workloads using the Azure Monitor OpenTelemetry distro, or auto-configure any OpenTelemetry SDK-instrumented workload to export OTLP to Azure Monitor. &lt;A href="https://aka.ms/AKSAppMonitoringPreview" target="_blank" rel="noopener"&gt;Get started&lt;/A&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Limited preview:&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; Auto-instrumentation for .NET and Python is also available.&lt;/SPAN&gt;&lt;EM style="color: rgb(30, 30, 30);"&gt; &lt;/EM&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://aka.ms/PythonandDotNetAutoPreview" target="_blank" rel="noopener"&gt;Get started&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;VMs/VM Scale Sets (and Azure Arc-enabled compute):&lt;/STRONG&gt; Use the &lt;STRONG&gt;Azure Monitor Agent (AMA)&lt;/STRONG&gt; to receive OTLP from your apps and export it to Azure Monitor. &lt;A href="https://aka.ms/AzureMonitorWithOTelAMA" target="_blank" rel="noopener"&gt;Get started&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Any environment:&lt;/STRONG&gt; Use the &lt;STRONG&gt;OpenTelemetry Collector&lt;/STRONG&gt; to receive OTLP signals and export directly to Azure Monitor cloud ingestion endpoints. &lt;A href="https://aka.ms/AzureMonitorWithOTelCollector" target="_blank" rel="noopener"&gt;Get started&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img&gt;Diagram: Choose your ingestion path&lt;/img&gt;
&lt;H2&gt;Under the hood: where your telemetry lands&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Metrics:&lt;/STRONG&gt; Stored in an &lt;STRONG&gt;Azure Monitor Workspace&lt;/STRONG&gt;, a Prometheus metrics store.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Logs + traces:&lt;/STRONG&gt; Stored in a &lt;STRONG&gt;Log Analytics workspace&lt;/STRONG&gt; using an OpenTelemetry semantic conventions–based schema.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Troubleshooting:&lt;/STRONG&gt; &lt;STRONG&gt;Application Insights&lt;/STRONG&gt; lights up distributed tracing and end-to-end performance investigations, backed by Azure Monitor.&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Application Map on OpenTelemetry signals&lt;/img&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Why it matters&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Standardize once:&lt;/STRONG&gt; Instrument with OpenTelemetry and keep your telemetry portable.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reduce overhead:&lt;/STRONG&gt; Fewer bespoke exporters and pipelines to maintain.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Debug faster:&lt;/STRONG&gt; Correlate metrics, logs, and traces to get from alert to root cause with less guesswork.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Observe with confidence:&lt;/STRONG&gt; Use dashboards and tracing views that are ready&amp;nbsp;on day one.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Next step:&lt;/STRONG&gt; Try the OTLP preview in your environment, then validate end-to-end signal flow with Application Insights and Grafana dashboards. &lt;A href="https://learn.microsoft.com/en-us/azure/azure-monitor/containers/collect-use-observability-data" target="_blank" rel="noopener"&gt;Learn More&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Apr 2026 18:14:20 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-observability-blog/troubleshoot-with-opentelemetry-in-azure-monitor-public-preview/ba-p/4512128</guid>
      <dc:creator>KayodePrince</dc:creator>
      <dc:date>2026-04-20T18:14:20Z</dc:date>
    </item>
    <item>
      <title>Secure, Keyless Application Access with Managed Identities - Now GA in Azure Files SMB</title>
      <link>https://techcommunity.microsoft.com/t5/azure-storage-blog/secure-keyless-application-access-with-managed-identities-now-ga/ba-p/4513053</link>
      <description>&lt;P&gt;As enterprises modernize applications and strengthen their security posture, identity is central to how applications access shared storage. Traditional identity models relying on account keys, stored credentials, or domain‑joined infrastructure add operational overhead and introduce security risks such as credential leakage, lack of identity attribution, and excessive privilege if shared keys are compromised. Today, we are excited to announce the &lt;STRONG&gt;General Availability (GA) of Managed Identity support for Azure Files over SMB&lt;/STRONG&gt;, enabling applications and virtual machines to securely access Azure Files without secrets, passwords, or key distribution.&lt;/P&gt;
&lt;P&gt;Managed Identity support enables customers to &lt;STRONG&gt;meet modern enterprise security standards&lt;/STRONG&gt; without reliance on storage account keys, streamlining how organizations &lt;STRONG&gt;securely enable file&lt;/STRONG&gt;‑&lt;STRONG&gt;based application access&lt;/STRONG&gt; and reducing the operational overhead of filing internal exceptions. New storage accounts can support secure, identity‑based SMB access out of the box, while existing deployments can get secure by enabling Managed Identity authentication.&lt;/P&gt;
&lt;P&gt;From web application workloads such as WordPress, to databases on Azure Kubernetes Service (AKS), to CI/CD pipelines, applications require secure access. In a world where security is foundational, continued reliance on key-based access conflicts with Zero Trust principles and least privilege access.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;What’s New In GA&lt;/H2&gt;
&lt;H3&gt;AKS Workload Identity Support&lt;/H3&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://github.com/kubernetes-sigs/azurefile-csi-driver/blob/master/docs/workload-identity-static-pv-mount.md" target="_blank"&gt;AKS Workload Identity&lt;/A&gt; (preview) extends the traditional managed identity model for Kubernetes by shifting the identity from the node to pods. Instead of inheriting the identity of the underlying cluster, each Kubernetes pod can use its own federated identity, mapped directly to a Microsoft Entra ID principal.&lt;/P&gt;
&lt;P&gt;This feature enables:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Pod-level identity isolation&lt;/STRONG&gt;, rather than cluster-level&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Least-privilege access&lt;/STRONG&gt; with secure RBAC&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Seamless scaling and redeployment&lt;/STRONG&gt;, without identity reconfiguration&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;No secrets, no key rotation, no credential injection&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;When combined with Azure Files over SMB, Workload Identity allows AKS workloads to access shared file storage &lt;STRONG&gt;securely and natively per pod&lt;/STRONG&gt;, using the same identity-driven model as cluster level managed identities. Now available with AKS 1.35, for customers specifically in the financial services industries, AKS Workload Identity enables per‑application, least‑privilege access to Azure Files without credentials, improving isolation and auditability. This allows regulated, stateful workloads to run securely on AKS while meeting strict compliance and regulatory requirements.&lt;/P&gt;
&lt;H3&gt;Co-existence of Application Identities and end-user identity access&lt;/H3&gt;
&lt;P&gt;Azure Files now enables both Managed Identity and end‑user access on the same storage account, with users and applications independently authenticated via Entra ID and authorized through a shared permissions model.&lt;BR /&gt;This unified access model eliminates the need for duplicate storage or credentials, enabling secure collaboration, troubleshooting, and automation on shared data without compromising governance or compliance.&lt;/P&gt;
&lt;P&gt;This supports scenarios such as:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Developers accessing the same file share as an application for debugging&lt;/LI&gt;
&lt;LI&gt;Admins managing content used by automated workflows&lt;/LI&gt;
&lt;LI&gt;Hybrid environments with user-driven and app-driven access&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Simplified Storage Account enablement via the Azure portal&lt;/H3&gt;
&lt;P&gt;We have now added a dedicated Managed Identity property that makes enabling identity‑based SMB access simple and transparent via the Azure portal for new as well as existing storage accounts. With a single configuration at the storage account level, customers can allow applications to authenticate to Azure Files using Managed Identities. This portal experience supports incremental adoption, making it easy to modernize authentication while maintaining compatibility with existing user access and governance models.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Get Started with Managed Identities with SMB Azure Files&lt;/H2&gt;
&lt;P&gt;Start using Managed Identities with Azure Files today at no additional cost. This feature is supported on HDD and SSD SMB shares across all billing models. Refer to our&amp;nbsp;&lt;A href="https://go.microsoft.com/fwlink/?linkid=2338790" target="_blank"&gt;documentation&lt;/A&gt; for complete set-up guidance.&lt;/P&gt;
&lt;P&gt;Whether provisioning new storage or enhancing existing deployments, this capability provides secure, enterprise‑grade access with a streamlined configuration experience.&lt;/P&gt;
&lt;P&gt;For any questions, reach out to the team at&amp;nbsp; &lt;A href="mailto:azurefiles@microsoft.com" target="_blank"&gt;azurefiles@microsoft.com.&amp;nbsp;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Apr 2026 17:57:56 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-storage-blog/secure-keyless-application-access-with-managed-identities-now-ga/ba-p/4513053</guid>
      <dc:creator>Priyanka-Gangal</dc:creator>
      <dc:date>2026-04-20T17:57:56Z</dc:date>
    </item>
    <item>
      <title>AKS on AzureLocal: KMSv1 -&gt; KMSv2</title>
      <link>https://techcommunity.microsoft.com/t5/azure-stack/aks-on-azurelocal-kmsv1-gt-kmsv2/m-p/4512932#M297</link>
      <description>&lt;P&gt;Hey, quick question on AKS Arc — we're running moc-kms-plugin:0.2.172-official on an Arc-enabled AKS cluster on Azure Local and currently have KMSv1=true as a feature gate to keep encryption at rest working.&lt;/P&gt;&lt;P&gt;KMSv1 is deprecated in 1.28+ and we want to migrate to KMSv2 before it gets removed. Since moc-kms-plugin is a Microsoft-managed component we can't just swap it out ourselves.&lt;/P&gt;&lt;P&gt;A few questions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Does version 0.2.172 already support the KMSv2 gRPC API, or is that coming in a later release?&lt;/LI&gt;&lt;LI&gt;Is there a supported migration path for AKS Arc specifically, or does this come automatically through a platform update?&lt;/LI&gt;&lt;LI&gt;Any docs or internal guidance you can point us to?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Mon, 20 Apr 2026 10:05:49 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/azure-stack/aks-on-azurelocal-kmsv1-gt-kmsv2/m-p/4512932#M297</guid>
      <dc:creator>the-capricorn</dc:creator>
      <dc:date>2026-04-20T10:05:49Z</dc:date>
    </item>
  </channel>
</rss>

