<?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/microsoft-mission-critical/ct-p/MicrosoftMissionCriticalCommunityHub</link>
    <description>rss.livelink.threads-in-node</description>
    <pubDate>Sun, 08 Mar 2026 01:26:00 GMT</pubDate>
    <dc:creator>MicrosoftMissionCriticalCommunityHub</dc:creator>
    <dc:date>2026-03-08T01:26:00Z</dc:date>
    <item>
      <title>Legacy SharePoint Authentication (IDCRL) Is Retiring — What to Do Before May 1, 2026</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/legacy-sharepoint-authentication-idcrl-is-retiring-what-to-do/ba-p/4499131</link>
      <description>&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Audience:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;SharePoint admins, M365 admins, and anyone running automations that access SharePoint Online/OneDrive. This post explains&amp;nbsp;what’s&amp;nbsp;changing, how to detect legacy sign-ins, and the practical steps to move to modern authentication (OAuth) before the cutoff dates.&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;Microsoft is turning off a legacy SharePoint sign-in method called&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRL &lt;STRONG&gt;(Identity Client Run Time Library)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. If you only access SharePoint and OneDrive through the browser or Microsoft 365 apps, you’re probably fine—but if you run scripts, Power BI refreshes, Power Automate flows, or third-party tools that store a username/password, you’ll want to update those connections to&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Modern Authentication (OAuth/OpenID Connect)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;now to avoid outages.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;TL:&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;DR&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;(What you need to know)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Who’s&amp;nbsp;most affected:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Any non-interactive connection that stores a SharePoint&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;username/password&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(scripts, scheduled jobs, Power BI refreshes, Power Automate flows, and third-party tools).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What’s&amp;nbsp;changing:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Microsoft is retiring&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;legacy SharePoint authentication (IDCRL)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for SharePoint Online and OneDrive for Business.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What to do:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Move those connections to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;modern authentication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(OAuth/OpenID Connect) using supported connectors, modules, or app registrations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key dates:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Mid-February 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(legacy logins blocked by default),&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;April 30, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(last day an admin extension can keep legacy auth temporarily allowed), and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(IDCRL fully retired and cannot be re-enabled).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Quick checklist&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" 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;Wingdings&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;&lt;STRONG&gt;Inventory:&lt;/STRONG&gt; list SharePoint connections you own (scripts, Power BI, Power Automate, third-party tools).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" 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;Wingdings&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;&lt;STRONG&gt;Spot legacy auth: &lt;/STRONG&gt;saved passwords, “Basic” auth, or PowerShell -Credential/SharePointOnlineCredentials.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" 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;Wingdings&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;&lt;STRONG&gt;Migrate: &lt;/STRONG&gt;switch to Modern Authentication (OAuth) using supported connectors/modules.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" 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;Wingdings&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;&lt;STRONG&gt;Test:&lt;/STRONG&gt;&amp;nbsp;run&amp;nbsp;the script/refresh/flow end-to-end and confirm it still works.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" 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;Wingdings&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;&lt;STRONG&gt;Finish early:&lt;/STRONG&gt; complete updates ahead of&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mid-February 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, and no later than&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;What Is IDCRL and Why Is It Going Away?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;IDCRL (Identity Client Run Time Library)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is an older SharePoint sign-in approach used by some legacy apps and scripts. In plain terms,&amp;nbsp;it’s&amp;nbsp;the “just pass a username and password” style of authentication. While most interactive sign-ins moved to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;modern authentication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;years ago, some behind-the-scenes tools still use IDCRL—often without the person who set them up realizing it.&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;Why is Microsoft&amp;nbsp;retiring&amp;nbsp;it?&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Because password-based legacy flows are harder to protect and&amp;nbsp;don’t&amp;nbsp;align well with today’s security controls.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Modern Authentication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;uses&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OpenID Connect and OAuth 2.0&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with short-lived tokens (not stored passwords) and works cleanly with protections like&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;MFA&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and Conditional Access. This is part of Microsoft’s broader “secure by default” direction—and it reduces risk for both individual accounts and the organization.&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;From Microsoft’s guidance, the main shift&amp;nbsp;is&amp;nbsp;stop&amp;nbsp;sending passwords to&amp;nbsp;SharePoint and&amp;nbsp;start&amp;nbsp;acquiring&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth access tokens&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;via the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft identity platform&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. For custom solutions, that typically means using&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;MSAL&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(Microsoft Authentication Library) and either an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;interactive sign-in&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(delegated permissions) or an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;app-only&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;approach (application permissions) depending on your scenario.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Key Dates and Impact on Users&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Here’s&amp;nbsp;the timeline Microsoft shared for SharePoint Online and OneDrive for Business:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mid-February 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is when&amp;nbsp;remaining&amp;nbsp;legacy (IDCRL) logins will be&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;blocked by default&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. If customers need&amp;nbsp;additional&amp;nbsp;time to complete migration, tenant admins can temporarily allow legacy authentication again &lt;STRONG&gt;(extension)&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;until April 30, 2026&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;Then, on&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, IDCRL is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;fully retired&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;cannot be re-enabled&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;In other words,&amp;nbsp;anything still&amp;nbsp;connected&amp;nbsp;with an embedded username/password is likely to break. The risk is concentrated in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;custom&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;integrations and automations (scripts, refreshes,&amp;nbsp;flows,&amp;nbsp;vendor tools) that still rely on legacy auth.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How Do I Know If&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;I’m&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;Using Legacy Authentication?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If you only access SharePoint/OneDrive through the browser, Microsoft 365 apps, or standard Microsoft connectors,&amp;nbsp;you’re&amp;nbsp;typically already using&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;modern authentication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. A simple rule of thumb:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;if a script, dataset, flow, or tool stores a SharePoint username/password, plan to modernize it&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. For the most common patterns and what to switch to, see&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;How to Transition to Modern Authentication (Action Plan)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;below.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Check Microsoft Purview audit logs (recommended)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If you want a definitive answer (beyond “does this script store a password?”), review your tenant’s activity in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Purview audit&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and search for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;events.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Open the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Purview portal&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and go to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Audit&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Segoe UI,Times New Roman" data-listid="16" 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;Run an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Audit search&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for an appropriate time range (start with the last&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;30–60 days&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Under &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Activities (operation&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;s name)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, select&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Submit the search, review results, then&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;export&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(download) the results for deeper filtering in Excel.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H1 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;What to look for in the export&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" 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;For&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;results, focus on the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;user/account&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;time pattern&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, and any available&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;client/app details&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(for example, user agent, application name, or client IP) to pinpoint&amp;nbsp;what’s&amp;nbsp;generating the legacy sign-ins.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="17" 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;&lt;STRONG&gt;Look for patterns that match automation&lt;/STRONG&gt;: recurring events (hourly/daily), service accounts, or sign-ins that line up with scheduled refreshes/flows. Then map those timestamps back to&amp;nbsp;likely owners:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power BI datasets&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power Automate&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;flows, scripts, or vendor tools.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="17" 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;If your export includes &lt;STRONG&gt;client/app identifiers&lt;/STRONG&gt;, note any&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;unexpected apps&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;accessing SharePoint; those are the best candidates to&amp;nbsp;validate&amp;nbsp;and migrate first.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="17" 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;&lt;STRONG&gt;Cross-check suspicious entries&lt;/STRONG&gt; with your inventory (scripts, Power BI datasets, Power Automate flows, vendor tools) and then update the matching connection to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Not sure whether something you own is using legacy auth? A good starting point is to check how the connection was set up: if it relies on a stored password, plan to update it.&amp;nbsp;If&amp;nbsp;you’re&amp;nbsp;still unsure, reach out to IT support or the vendor/developer of the tool—many providers have already published “modern auth” upgrade steps.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How to Transition to Modern Authentication (Action Plan)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If you own anything that connects to SharePoint behind the scenes, the goal is simple:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;move every connection to Modern Authentication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;test it end-to-end&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;well before the cutoff. Below are the most common “legacy” patterns and what to switch to.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Common legacy scenarios (and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;modern&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;&amp;nbsp;replacement)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;1) PowerShell scripts or custom code that pass a username/password&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;If you’re using older SharePoint Online PowerShell patterns like &lt;STRONG&gt;-Credential, &lt;/STRONG&gt;&lt;STRONG&gt;Get-Credential &lt;/STRONG&gt;or&amp;nbsp;&lt;STRONG&gt;SharePointOnlineCredentials&lt;/STRONG&gt;, plan to update.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use updated modules that default to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;or&amp;nbsp;use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;PnP PowerShell&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with interactive sign-in or an Entra app (certificate/client ID) rather than stored credentials.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Additionally&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;according to&amp;nbsp;Microsoft’s announcement in the M365 admin center (MC1188595), the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft.Online.SharePoint.PowerShell&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;module (&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;version 16.0.26712.12000 or newer&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;) supports&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;app-only authentication with a certificate&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Entra app registration&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(instead of legacy username/password patterns), using Connect-SPOService.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&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;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;For custom apps, adopt token-based auth via&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;MSAL&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;supported&amp;nbsp;SharePoint libraries.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&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;Example:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;$appID = "1e499dc4-1988-48ef-8f4f-9756f4f04548" # This is your Entra App ID 
$tenant = "9cfc52cb-53da-4154-67e9-b20b170b7ba3" # This is your Tenant ID 
$thumbprint = "6EAD7303b5C7E27Dc4245989AD554642940BA093" # This is certificate thumbprint 
$cert = Get-ChildItem Cert:\LocalMachine\My\$thumbprint 
Connect-SPOService -Url 'https://contoso-admin.sharepoint.com' -Certificate $cert -ClientId $appID -TenantId $tenant &lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;2) &lt;STRONG&gt;Power BI reports&lt;/STRONG&gt; that connect to SharePoint using “Basic” credentials&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In Power BI Desktop, open&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Data source settings&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for SharePoint connections and switch the authentication method to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft (Organizational) Account&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;/&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth2&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;After updating,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;re-publish&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and confirm scheduled refresh still works.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&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;3) &lt;STRONG&gt;Power Automate flows &lt;/STRONG&gt;(or workflows) that store a username/password&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Prefer the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;official SharePoint connector&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(modern auth by default) over custom HTTP calls with stored credentials.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;For custom connectors, use an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Azure AD app registration&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and configure&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth&amp;nbsp;2.0&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;so the flow uses tokens, not passwords.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&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;4) &lt;STRONG&gt;Third-party tools&lt;/STRONG&gt; (migration/sync/reporting) that use “other user” or stored credentials&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Update the tool to the latest version and confirm it supports&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;modern authentication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for SharePoint Online.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Run a full test (connect, read/write, scheduled jobs) well before the cutoff dates.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;A few best practices while&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;you’re&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;&amp;nbsp;updating&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Don’t&amp;nbsp;delay:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Modernize your connections&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;before mid-February 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(when legacy logins are blocked by default), and no later than&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Extension (if needed):&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;If you need more time, tenant admins can temporarily allow legacy authentication&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;until April 30, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. Treat this as short-term mitigation while your&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;complete&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;migration and validation—not a long-term solution.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Use official solutions:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Where possible, use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft’s supported clients and connectors&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(like updated SharePoint PowerShell modules,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power BI’s OAuth login&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power&amp;nbsp;Automate&amp;nbsp;SharePoint actions&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;) instead of hard-coding credentials.&amp;nbsp;These default options&amp;nbsp;are already used by&amp;nbsp;modern auth and will help ensure access continues.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Improve security:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Embrace modern authentication to&amp;nbsp;benefit&amp;nbsp;from&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;better security&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(support for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;MFA&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, conditional access, etc.) and to&amp;nbsp;eliminate&amp;nbsp;reliance on outdated passwords or legacy API calls.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Get help if needed:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;If&amp;nbsp;you’re&amp;nbsp;unsure how to update a specific application or script, contact your IT support team or the vendor/developer of the tool.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;PowerShell: temporarily allow legacy authentication (extension)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If an extension is&amp;nbsp;required, tenant admins can use SharePoint Online PowerShell to temporarily allow legacy authentication by setting&amp;nbsp;AllowLegacyAuthProtocolsEnabledSetting&amp;nbsp;and&amp;nbsp;LegacyAuthProtocolsEnabled&amp;nbsp;to $true.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Set-SPOTenant -AllowLegacyAuthProtocolsEnabledSetting $true 
Set-SPOTenant -LegacyAuthProtocolsEnabled $true  &lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Recommendation:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Block time now to inventory and modernize your SharePoint connections, then run a full end-to-end test. Doing this early helps you avoid last-minute troubleshooting when a refresh, script, or workflow suddenly fails.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Next steps (recommended)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="28" 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;Run a Purview audit search for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(last 30–60 days) and&amp;nbsp;identify&amp;nbsp;the owners of each recurring legacy sign-in.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="28" 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;Prioritize and modernize the highest-impact items first (scheduled Power BI refreshes, production automations, service accounts, and vendor tools), then test end-to-end.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="28" 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;If you must use the temporary extension, set a firm internal deadline to turn it back off and complete migration before&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Helpful Resources and Support&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For further reading and technical guidance, please see the following official resource:&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="7" 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://devblogs.microsoft.com/microsoft365dev/migrating-from-idcrl-authentication-to-modern-authentication-in-sharepoint/" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Microsoft 365 Developer Blog –&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Migrating from IDCRL to Modern Authentication in SharePoint&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;– Explains the retirement decision and provides developer-oriented steps for migrating code and scripts to MSAL/OAuth.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Conclusion and call to action&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;IDCRL retirement is one of those changes&amp;nbsp;that is&amp;nbsp;easy to miss until something breaks—because the impact shows up in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;background jobs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, not in day-to-day browser use. The good news is that the fix is straightforward:&amp;nbsp;identify&amp;nbsp;anything still using stored credentials and move it to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;modern authentication (OAuth)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;well before the deadline.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Inventory:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;list&amp;nbsp;every script, dataset, flow, and vendor tool that connects to SharePoint/OneDrive.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="29" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Modernize:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;replace embedded usernames/passwords with OAuth via supported connectors, updated modules, or an Entra app registration.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="29" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Test:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;run each workload end-to-end (including scheduled runs) and confirm it behaves as expected.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Timeline reminder:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;legacy logins are blocked by default in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mid-February 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, extensions (if used) run through&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;April 30, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, and IDCRL is fully retired on&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&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;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Q&amp;amp;A&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Q: Will this impact end users who only use SharePoint in a browser or the Microsoft 365 apps?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: Typically, no. Most interactive sign-ins already use modern authentication. The main risk is with background processes that still send stored usernames/passwords.&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;Q:&amp;nbsp;What’s&amp;nbsp;most likely to break?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: Anything non-interactive that connects to SharePoint/OneDrive using embedded credentials—PowerShell scripts, scheduled jobs, Power BI refreshes configured with “Basic” credentials, Power Automate flows/custom connectors that store passwords, and some third-party tools.&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;Q: How can I confirm whether my tenant is still using IDCRL?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: Use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Purview audit&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and search for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. Export the results and look for recurring patterns (service accounts, scheduled times, consistent client/app details) to&amp;nbsp;identify&amp;nbsp;the source.&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;Q: What happens in mid-February 2026 vs. May 1, 2026?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: In&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mid-February 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, legacy (IDCRL) logins are&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;blocked by default&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;—so legacy-dependent workloads may start failing unless updated (or temporarily re-enabled).&amp;nbsp;On&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;May 1, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, IDCRL is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;fully retired&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and cannot be re-enabled.&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;Q: We need more time—what does the “extension” do?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: It temporarily allows legacy authentication again&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;through April 30,&amp;nbsp;2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;while&amp;nbsp;you&amp;nbsp;complete migration. You can enable it with:&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Set-SPOTenant&amp;nbsp;-AllowLegacyAuthProtocolsEnabledSetting&amp;nbsp;$true&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Set-SPOTenant&amp;nbsp;-LegacyAuthProtocolsEnabled&amp;nbsp;$true&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Use this as a short-term mitigation and set a firm plan to turn it back off after you modernize.&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;Q:&amp;nbsp;What’s&amp;nbsp;the recommended modern auth approach for PowerShell?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: Use modern modules and token-based sign-in (OAuth). For automation, use an&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Entra app registration&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with a certificate (app-only) where&amp;nbsp;appropriate. The updated&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft.Online.SharePoint.PowerShell&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;module (v16.0.26712.12000+) also supports Connect-SPOService&amp;nbsp;with certificate-based app-only authentication.&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;Q: What should I do for Power BI datasets that connect to SharePoint?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: In Power BI Desktop, update the SharePoint data source authentication to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft (Organizational) Account&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;/&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth2&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, then republish and&amp;nbsp;validate&amp;nbsp;that scheduled refresh succeeds.&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;Q: What about Power Automate flows or custom connectors?&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;A: Prefer the built-in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;SharePoint connector&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(modern auth by default). If&amp;nbsp;you’re&amp;nbsp;using custom HTTP actions or custom connectors, update them to use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;OAuth 2.0&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with an Entra app registration rather than stored credentials.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Admin email template (notify owners&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;identified&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;in Purview)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Use the template below to contact the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;user/account&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;you found in your&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;audit export. Copy/paste it into Outlook, then fill in the placeholders (timestamps, site, and any client details) so the recipient can quickly&amp;nbsp;identify&amp;nbsp;the workload.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Subject:&amp;nbsp;Action&amp;nbsp;required: Update a SharePoint/OneDrive connection using legacy authentication (IDCRL)&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Hi &amp;lt;Name&amp;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;We’re&amp;nbsp;reaching out because Microsoft is&amp;nbsp;retiring&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;legacy SharePoint authentication (IDCRL)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. Our audit review&amp;nbsp;indicates&amp;nbsp;a legacy sign-in associated with your account. If the underlying workload&amp;nbsp;isn’t&amp;nbsp;updated, it may fail when legacy authentication is blocked/retired.&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;What we&amp;nbsp;observed&amp;nbsp;(from Microsoft Purview audit)&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="30" 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;User/account: &amp;lt;UPN or service account&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="30" 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;Activity:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;IDCRLSuccessSignIn&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="30" 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;Timestamp(s): &amp;lt;YYYY-MM-DD HH:MM TZ&amp;gt; (add 2–3 examples if recurring)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="30" 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;SharePoint site (if known): &amp;lt;site URL&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="30" 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;Client details (if available): &amp;lt;client/app, user agent, IP&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What we need from you&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="Segoe UI,Times New Roman" data-listid="31" 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;Please confirm&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;what workload&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is generating this sign-in (for example: Power BI dataset refresh, Power Automate flow, PowerShell script, scheduled job, or a third-party tool).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="Segoe UI,Times New Roman" data-listid="31" 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;If&amp;nbsp;you’re&amp;nbsp;not the owner, please reply with the correct owner/contact (a team name or distribution list is fine).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Timeline&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="32" 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;Mid-February 2026:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;legacy logins blocked by default&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="32" 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;May 1, 2026:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;IDCRL fully retired (cannot be re-enabled)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false,&amp;quot;335559739&amp;quot;:0}"&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="32" 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;Note:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;if an extension is used, it is temporary and runs through&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;April 30, 2026&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233279&amp;quot;:false}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;How we&amp;nbsp;can help&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;We can&amp;nbsp;help update the connection to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;modern authentication (OAuth)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. In many cases this is as simple as re-authenticating with “Microsoft (Organizational) Account”/OAuth (Power BI), using the SharePoint connector (Power Automate), or updating scripts to use an Entra app registration with certificate-based authentication.&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;Please reply by: &amp;lt;target response date&amp;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;Thanks,&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Your name&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Team/Role&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&amp;lt;Contact info&amp;gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Tip:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Consider including 2–3 sample timestamps from the export (especially recurring ones) and, if you have it, the dataset/flow name or server/job name that matches the schedule. If you&amp;nbsp;don’t&amp;nbsp;get a response, follow up with the&amp;nbsp;user’s&amp;nbsp;manager or the&amp;nbsp;owning&amp;nbsp;team for the workload, and consider using the temporary extension only as a short-term mitigation while ownership is confirmed.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Mar 2026 20:15:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/legacy-sharepoint-authentication-idcrl-is-retiring-what-to-do/ba-p/4499131</guid>
      <dc:creator>mikeleemsft</dc:creator>
      <dc:date>2026-03-03T20:15:00Z</dc:date>
    </item>
    <item>
      <title>SharePoint and OneDrive Site User ID Mismatch Explored</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/sharepoint-and-onedrive-site-user-id-mismatch-explored/ba-p/4496476</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;SharePoint / OneDrive request access dialog&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this post, we walk through why users who look ‘healthy’ on the surface can still experience issues, and we cover practical ways to prevent and fix them across identity lifecycle management, rehire scenarios, tenant changes, and operational hygiene.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Who this is for&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microsoft 365 / SharePoint admins troubleshooting unexpected &lt;EM&gt;Access denied&lt;/EM&gt; issues in SharePoint or OneDrive.&lt;/LI&gt;
&lt;LI&gt;Identity admins managing offboarding, rehiring, account restores, or account recreation in Microsoft Entra ID.&lt;/LI&gt;
&lt;LI&gt;Migration teams performing tenant-to-tenant migrations, domain changes, or identity consolidation.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;&lt;a id="community--1-BackgroundDesign" class="lia-anchor"&gt;&lt;/a&gt;Background Design Explained&lt;/H1&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;When a user is created in Microsoft Entra ID, there is no guarantee that the User Principal Name (UPN) is unique so there is a unique id (historically known as PUID) that is created and passed to SharePoint. When a user is granted permission to a SharePoint or OneDrive Site or file explicitly the user information is added to a hidden list User Information List (UIL) that&amp;nbsp;stores basic details&amp;nbsp;about the users.&lt;/P&gt;
&lt;PRE class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-text-color-20"&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;For users that are given permission via Office 365 Group, Security group, sharing link, the user profile information is not added until the first time the user interacts with the site or file.&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;The users unique id, UPN, and other user information will be added to the UIL.&lt;/P&gt;
&lt;PRE class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-text-color-20"&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;The User Information List (UIL) is maintained&amp;nbsp;per site collection&amp;nbsp;and is separate from Microsoft Entra ID and SharePoint User Profile Service.&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;As part of authorization, the unique id that is found in the UIL is evaluated to the unique id that is passed via the authentication token and if they do not match then the authorization fails and the user receives “Access Denied”.&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;Scenario:&lt;/STRONG&gt; Taylor Smith (UPN &lt;A href="mailto:taylor.smith@contoso.com" target="_blank" rel="noopener"&gt;&lt;EM&gt;taylor.smith@contoso.com&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;)&amp;nbsp; has &lt;/EM&gt;confidential SharePoint/OneDrive access. Sometime after Taylor leaves the company, a new user joins the company with the same name and is assigned the same UPN. &amp;nbsp;The new Taylor should not inherit the former Taylor’s access or content. SharePoint prevents this by checking a unique identifier via the User Information List (UIL), ensuring only matching IDs can access content.&lt;/P&gt;
&lt;H1&gt;&lt;a id="community--1-Considerations" class="lia-anchor"&gt;&lt;/a&gt;Considerations for users removed from Entra ID&lt;/H1&gt;
&lt;P&gt;It’s common to notice users removed from Entra ID still showing up in SharePoint or OneDrive. SharePoint intentionally retains these accounts in the site’s User Information List to preserve:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Document meta data such as “Created By” or “Modified By” information&lt;/LI&gt;
&lt;LI&gt;Audit and compliance records&lt;/LI&gt;
&lt;LI&gt;Legacy permission references&lt;/LI&gt;
&lt;LI&gt;Sharing and version history integrity&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;As a result, terminated or mail-disabled users may still appear in:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Site People lists (e.g., _layouts/15/people.aspx)&lt;/LI&gt;
&lt;LI&gt;Group‑connected site membership views&lt;/LI&gt;
&lt;LI&gt;SharePoint user pickers&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This visibility is expected and &lt;STRONG&gt;not&lt;/STRONG&gt; a security risk because:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A disabled or deleted Entra ID&amp;nbsp;account&amp;nbsp;cannot authenticate&lt;/LI&gt;
&lt;LI&gt;SharePoint permissions are not re‑granted&lt;/LI&gt;
&lt;LI&gt;The presence of the user record does not re‑enable access&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;&lt;a id="community--1-PreventativeMeasures" class="lia-anchor"&gt;&lt;/a&gt;Preventive Measures to Avoid Site User ID Mismatches&lt;/H1&gt;
&lt;P&gt;Preventing Site ID mismatches is largely about identity management. The goal is to avoid situations where a SharePoint site has one ID for a user and Entra ID has another. Here are strategies to minimize the chances of a mismatch occurring:&lt;/P&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-14"&gt;&lt;STRONG&gt;Identity lifecycle best practices&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Avoid reusing a former employee’s UPN&lt;/STRONG&gt;: If possible, do not create a new account with the same username. If you must reuse, ensure you’ve cleaned up the old account’s SharePoint presence (see next points) before the new user starts using SharePoint.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-14"&gt;&lt;STRONG&gt;Rehire scenarios&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Leverage account restores when rehiring&lt;/STRONG&gt;: If an employee returns within Entra ID’s 30-day soft-delete window, restore the original account in Entra ID instead of creating a new one. This way, the user’s PUID is the same, and no mismatch will occur because as far as SharePoint is concerned it’s the same account. If outside the 30 days, restoration isn’t possible then extra cleanup will be needed.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Educate and coordinate with HR/IT for re-hires&lt;/STRONG&gt;: Often, IT might not realize that creating a returning employee’s account from scratch can cause access issues. Train staff on Site ID mismatches so they know to restore the old account when possible or run diagnostics/cleanup quickly after creating a new account. A standard operating procedure for &lt;EM&gt;rehired employee account setup&lt;/EM&gt; that includes checking for SharePoint conflicts is valuable.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Change UPNs by renaming, not recreating&lt;/STRONG&gt;: If you need to change a user’s UPN (for example, after a name change or domain change), &lt;STRONG&gt;rename the existing account&lt;/STRONG&gt; (&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/howto-troubleshoot-upn-changes" target="_blank" rel="noopener"&gt;Plan and troubleshoot User Principal Name changes in Microsoft Entra ID&lt;/A&gt;) rather than delete and create new. Entra ID allows updating the UPN of a user. SharePoint will typically update the user info entry’s UPN on next sync. This way, the user’s PUID stays consistent. &lt;EM style="color: rgb(30, 30, 30);"&gt;Documentation:&lt;/EM&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/sharepoint/upn-changes" target="_blank" rel="noopener"&gt;How UPN changes affect OneDrive - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://learn.microsoft.com/en-us/sharepoint/change-your-sharepoint-domain-name" target="_blank" rel="noopener"&gt;Change your SharePoint domain name - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-14"&gt;&lt;STRONG&gt;Tenant/domain changes&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Gracefully handle corporate domain transitions&lt;/STRONG&gt;: In tenant-to-tenant migrations or domain swaps (such as consolidating two Entra ID tenants), be aware of PUIDs. Use migration tools that map old IDs to new ones or plan to run the fixes post-migration if users receive new IDs. If user/profile mapping isn’t available, treat it like bulk rehiring.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-14"&gt;&lt;STRONG&gt;Operational hygiene&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Implement a UPN reuse delay or alteration&lt;/STRONG&gt;: Some organizations choose to alter the UPN of departing users for a period to prevent accidental reuse (for example, rename jdoe@company.com to jdoe_deactivated@company.com) before deletion. If your policies allow, avoiding UPN reuse entirely is the simplest way to prevent identity confusion.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Maintain documentation of user’s site access&lt;/STRONG&gt;: Knowing which sites a user previously accessed makes it easier to clean up conflicts and restore access for legitimate rehires. Centralized, group-based permission management can also simplify re-permissioning once the mismatch is fixed. We have seen this accomplished in the following ways:
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/links-about-microsoft-graph-data-connect-for-sharepoint/4069045" target="_blank" rel="noopener" data-lia-auto-title="Microsoft Graph Data Connect for SharePoint" data-lia-auto-title-active="0"&gt;Microsoft Graph Data Connect for SharePoint&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Custom scripts and Tools&lt;/LI&gt;
&lt;LI&gt;Third Party Tools&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Clear SharePoint user info on departure (if feasible)&lt;/STRONG&gt;: For users who are permanently gone, you can remove them from SharePoint site collections, so old UIL entries don’t linger and later conflict with a reused UPN. This cleanup can be part of an offboarding checklist when appropriate. The cleanup will be 2 steps:&amp;nbsp;
&lt;OL&gt;
&lt;LI&gt;Locate which sites a user previously had access to:
&lt;UL&gt;
&lt;LI&gt;If the user has been deleted from Entra then the use of custom scripts will be needed to identify sites that the user previously had access to. &amp;nbsp;Example Script &lt;A class="lia-external-url" href="https://github.com/mikelee1313/SPO-Sharing-Scripts/blob/main/Readme-FindAccess-SPO.md" target="_blank" rel="noopener"&gt;SPO-Sharing-Scripts/Readme-FindAccess-SPO.md at main · mikelee1313/SPO-Sharing-Scripts · GitHub&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;If the user still exists in Entra, use the SharePoint Data Access Governance reports to locate sites accessible for a given user. &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/sharepoint/data-access-governance-site-permissions-users-report" target="_blank" rel="noopener"&gt;Data access governance reports - get site permission report for given users&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Once you have a list of sites that the user has accessed, you will need to remove them from that site.
&lt;UL&gt;
&lt;LI&gt;Create a script utilizing remove-spouser (&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/sharepoint/remove-users#remove-people-from-the-userinfo-list" target="_blank" rel="noopener"&gt;Remove users from SharePoint&lt;/A&gt;) for&amp;nbsp;all sites that the user had access to previously.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Process for guest users&lt;/STRONG&gt;: If you remove guest users, consider also cleaning them from site permissions if they might be re-invited later.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;&lt;a id="community--1-Cleanup" class="lia-anchor"&gt;&lt;/a&gt;Cleanup Site User ID Mismatches&lt;/H1&gt;
&lt;P&gt;Once there is a user encountering a Site User ID Mismatch then you will have to do a cleanup reactively. &amp;nbsp;Review the article and use the tools outlined to address the OneDrive site as well as critical sites.&lt;/P&gt;
&lt;P&gt;If you do not need an inventory of sites, the user had access to previously to facilitate restoring access to those files/sites then you could do a cleanup of the user through script. The following is an example of such a script: &amp;nbsp;&lt;/P&gt;
&lt;P&gt;If a user encounters a Site User ID Mismatch, follow these steps to resolve the issue:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Review the article "&lt;A href="https://learn.microsoft.com/en-us/troubleshoot/sharepoint/sharing-and-permissions/fix-site-user-id-mismatch" target="_blank" rel="noopener"&gt;Fix site user ID mismatch in SharePoint or OneDrive&lt;/A&gt;" for guidance on addressing mismatches. Use the tools outlined in the article to fix issues with the OneDrive site and any other critical sites.&lt;/LI&gt;
&lt;LI&gt;If you do not need an inventory of sites the user previously accessed, proceed with cleaning up the user using a script. Refer to &lt;A href="https://github.com/mikelee1313/SPO-Sharing-Scripts/blob/main/Readme-SPOUserRemover.md" target="_blank" rel="noopener"&gt;SPO-Sharing-Scripts/Readme-SPOUserRemover.md at main · mikelee1313/SPO-Sharing-Scripts · GitHub&lt;/A&gt; for details that could be used. Use this option if restoring access to those files or sites is not required.&lt;/LI&gt;
&lt;LI&gt;If you need an inventory of sites that the user previously had access to provide access later, then you will need a script or report of the permission inventory for the site prior to removing the user from the site.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Users can then move forward with sharing or resharing content/sites to the new user instance, which will write a new entry to the user information list, with the correct unique ID, allowing access.&lt;/P&gt;
&lt;H1&gt;&lt;a id="community--1-Summary" class="lia-anchor"&gt;&lt;/a&gt;Summary&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;User Site ID mismatches occur when a user is recreated with the same UPN but a different underlying identity, leading to SharePoint or OneDrive access issues.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;SharePoint authorizes access using a unique ID (PUID) stored per site in the User Information List (UIL), not just the users' UPN.&lt;/LI&gt;
&lt;LI&gt;Disabled or deleted users may still appear in SharePoint by design to preserve audit history and document ownership—this is not a security issue.&lt;/LI&gt;
&lt;LI&gt;Prevention focuses on avoiding UPN reuse through process changes.&lt;/LI&gt;
&lt;LI&gt;Resolution options depend on the scenario: admins can either remove the old user entry directly if access history is not needed, or inventory and clean up affected sites before resharing content to the new account, so the correct ID is written.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;&lt;a id="community--1-FurtherReading" class="lia-anchor"&gt;&lt;/a&gt;Further Reading&lt;/H1&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/troubleshoot/sharepoint/sharing-and-permissions/fix-site-user-id-mismatch" target="_blank" rel="noopener"&gt;Fix site user ID mismatch in SharePoint or OneDrive - SharePoint&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sharepoint/remove-users" target="_blank" rel="noopener"&gt;Remove users from SharePoint&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://gist.github.com/joerodgers/a0655669d9184b31ee0b027a73997435" target="_blank" rel="noopener"&gt;This script will create a report containing OD4B sites and the value of the AadObjectId stored in SharePoint and Azure Active Directory. This data can be used to help detect Site ID mismatches of OD4B site owners. · GitHub&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/mikelee1313/SPO-Sharing-Scripts/blob/main/Readme-SPOUserRemover.md" target="_blank" rel="noopener"&gt;SPO-Sharing-Scripts/Readme-SPOUserRemover.md at main · mikelee1313/SPO-Sharing-Scripts · GitHub&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Mar 2026 17:00:50 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/sharepoint-and-onedrive-site-user-id-mismatch-explored/ba-p/4496476</guid>
      <dc:creator>Tania Menice</dc:creator>
      <dc:date>2026-03-03T17:00:50Z</dc:date>
    </item>
    <item>
      <title>Finding and Remediating EWS App Usage Before Retirement</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/finding-and-remediating-ews-app-usage-before-retirement/ba-p/4497659</link>
      <description>&lt;P&gt;In this post, we wanted to share a practical walk-through of discovering which Azure AD app registrations are still using Exchange Web Services (EWS), plus what the Kiosk/Frontline license changes mean as you plan your move to Microsoft Graph.&lt;/P&gt;
&lt;P&gt;Microsoft has announced that Exchange Online EWS blocking with start on October 1, 2026. If you have line-of-business apps, third-party tools, or automation that still depends on EWS, you need two things: (1) an inventory of what’s using EWS today, and (2) a migration plan to supported alternatives – typically Microsoft Graph.&lt;/P&gt;
&lt;H1&gt;What’s changing (and why you should care now)&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/exchange/retirement-of-exchange-web-services-in-exchange-online/3924440" target="_blank"&gt;&lt;STRONG&gt;EWS retirement in Exchange Online&lt;/STRONG&gt;&lt;/A&gt;: Microsoft will start blocking EWS requests to Exchange Online on &lt;STRONG&gt;October 1, 2026&lt;/STRONG&gt;. The guidance is to migrate integrations to &lt;STRONG&gt;Microsoft Graph&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/exchange/update-to-ews-access-for-kiosk--frontline-worker-licensed-users/4474299" target="_blank"&gt;&lt;STRONG&gt;EWS access changes for Kiosk / Frontline licenses&lt;/STRONG&gt;&lt;/A&gt;: Starting at the &lt;STRONG&gt;end of June 2026&lt;/STRONG&gt;, Microsoft will start blocking EWS access for users &lt;STRONG&gt;without license rights to EWS&lt;/STRONG&gt; (for example, certain Kiosk and Frontline Worker license types). This can cause EWS-based integrations for such licensed users to fail &lt;EM&gt;before&lt;/EM&gt; the broader October retirement date.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Even if you plan to complete your Graph migration well ahead of October 2026, the end-of-June 2026 licensing-related blocks mean you should validate whether any users with those licenses assigned use EWS. That’s where the &lt;A href="https://github.com/jmartinmsft/Exchange-App-Usage-Reporting" target="_blank"&gt;Exchange-App-Usage-Reporting&lt;/A&gt; script is useful: it helps you find app registrations with EWS permissions and correlate them with recent sign-in activity so you can prioritize remediation.&lt;/P&gt;
&lt;H4&gt;Start here: check your Message Center first&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-ogsc="rgb(36, 36, 36)"&gt;The first thing you can do is to check your tenant&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ogsc="rgb(0, 120, 215)"&gt;&lt;A href="https://go.microsoft.com/fwlink/p/?linkid=2070717" data-outlook-id="2caf9581-3d88-449d-9d8b-b13052e2ad6e" data-ogsc="rgb(0, 120, 215)" target="_blank"&gt;Message Center&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN data-ogsc="rgb(36, 36, 36)"&gt;&amp;nbsp;(you need either Global Admin or Privacy Reader roles) and search for "Update active Exchange Web Services Applications" in Inbox or Archive. If you do not have such messages, you&amp;nbsp;&lt;EM&gt;likely&lt;/EM&gt;&amp;nbsp;do not have EWS usage in your tenant and are not impacted by this deprecation. We started to send EWS usage messages to all tenants in late December 2025.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;What the Exchange-App-Usage-Reporting script does&lt;/H1&gt;
&lt;P&gt;The script is designed to answer a practical question: &lt;EM&gt;Which Azure AD app registrations in my tenant have EWS permissions, and are they still being used?&lt;/EM&gt; At a high level, it:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Discovers application registrations that have permissions associated with Exchange/EWS-related access.&lt;/LI&gt;
&lt;LI&gt;Queries sign-in activity for those applications to determine active applications.&lt;/LI&gt;
&lt;LI&gt;Queries audit logs for EWS activity within the tenant.&lt;/LI&gt;
&lt;LI&gt;Outputs report files that you can sort and share with app owners.&lt;/LI&gt;
&lt;LI&gt;Outputs a user license report to help identify kiosk or frontline workers.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H1&gt;How the script complements the Microsoft 365 admin center EWS usage report&lt;/H1&gt;
&lt;P&gt;For customers in our WW service, the &lt;A href="https://learn.microsoft.com/microsoft-365/admin/activity-reports/ews-usage?view=o365-worldwide" target="_blank"&gt;Microsoft 365 admin center EWS usage report&lt;/A&gt; is a great starting point because it summarizes EWS activity across your tenant and breaks down which EWS SOAP actions are being called and their volumes over time. That helps you quantify overall EWS dependency and spot the heaviest EWS workloads.&lt;/P&gt;
&lt;P&gt;Where teams often get stuck is turning that usage signal into an actionable remediation plan (for example, identifying the exact Entra ID app registration/service principal, determining whether it is still actively used, and finding the people and mailboxes affected). Exchange-App-Usage-Reporting script is intended to bridge that gap by adding identity and operational context around EWS usage by:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;App registration and ownership context: identifies Entra ID app registrations/service principals with EWS-related permissions so you can immediately pivot from “an app is calling EWS” to “this is the app object to remediate,” then route it to the right owner/team.&lt;/LI&gt;
&lt;LI&gt;Recency and “is it still used?” signals: correlates apps to sign-in activity so you can prioritize the apps that are actively authenticating today versus stale registrations that may be safe to validate/decommission.&lt;/LI&gt;
&lt;LI&gt;Authentication + permission model visibility: helps you distinguish whether usage is tied to application permissions versus delegated patterns, which matters for choosing the right Microsoft Graph migration approach and designing least-privilege access.&lt;/LI&gt;
&lt;LI&gt;Mailbox population risk (Kiosk/Frontline): adds a user license report so you can quickly identify whether the EWS-dependent workflow touches mailboxes that may lose EWS access earlier (end of June 2026).&lt;/LI&gt;
&lt;LI&gt;Exportable, app-centric worklists: produces CSVs you can sort/share (for example, by last sign-in) to drive an engineering backlog: confirm owner, confirm scenario, map EWS operations to Graph endpoints, and track progress to zero.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In practice, use the admin center report to understand &lt;EM&gt;what&lt;/EM&gt; EWS operations are happening and at what scale, then use this script to determine &lt;EM&gt;which&lt;/EM&gt; app registrations are responsible, &lt;EM&gt;who&lt;/EM&gt; owns them, &lt;EM&gt;whether&lt;/EM&gt; they’re still active, and &lt;EM&gt;which&lt;/EM&gt; mailbox/license populations are most likely to experience impact first.&lt;/P&gt;
&lt;P&gt;Customers with tenants that are not in our WW cloud should rely heavily on the script as admin center reports are not available.&lt;/P&gt;
&lt;H1&gt;Step-by-step: run the script and generate the report&lt;/H1&gt;
&lt;H2&gt;1) Download the code&lt;/H2&gt;
&lt;P&gt;The repository for this solution can be found &lt;A href="https://github.com/jmartinmsft/Exchange-App-Usage-Reporting/archive/refs/heads/main.zip" target="_blank"&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Note: The following permissions are required for the application:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;AuditLogsQuery.ReadAll&lt;/STRONG&gt; to query the audit logs for EWS activity&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Application.Read.All&lt;/STRONG&gt; to locate app registrations&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;AuditLogs.Read.All&lt;/STRONG&gt; to query sign-in activity&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Directory.Read.All&lt;/STRONG&gt; to query user license information&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Read &lt;A class="lia-external-url" href="https://github.com/jmartinmsft/Exchange-App-Usage-Reporting/blob/main/Create%20an%20App%20registration.md" target="_blank"&gt;this &lt;/A&gt;to create the Entra Admin Center application for the script.&lt;/P&gt;
&lt;H2&gt;2) Get active applications&lt;/H2&gt;
&lt;P&gt;Open a PowerShell session and change to the folder where you downloaded the script. You may need to unblock the files (for example, by using &lt;EM&gt;Unblock-File&lt;/EM&gt;) before execution. Run the script with the following example syntax:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;.\Find-EwsUsage.ps1 -OutputPath C:\Temp\Output -OAuthCertificate 8865BEC624B02FA0DE9586D13186ABC8BE265917 -CertificateStore CurrentUser -OAuthClientId 7a305061-1343-49c3-a469-378de4dbd90d -OAuthTenantId 9101fc97-5be5-4438-a1d7-83e051e52057 -PermissionType Application -Operation GetEwsActivity&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The output provides a list of applications with EWS permissions and the last sign-in for the associated service principal. A CSV file called App-SignInActivity-yyyyMMddhhmm will be created in the specified output path.&lt;/P&gt;
&lt;H2&gt;3) Get sign-in activity report for an application&lt;/H2&gt;
&lt;P&gt;Use the output from the previous step to get the sign-in activity for an application (you need to run this step for each application). Depending on the size of your tenant, you may also need to adjust the StartDate, EndDate, and have the Interval be 1 hour.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;.\Find-EwsUsage.ps1 -OutputPath C:\Temp\Output -OAuthCertificate 8865BEC624B02FA0DE9586D13186ABC8BE265917 -CertificateStore CurrentUser -OAuthClientId 7a305061-1343-49c3-a469-378de4dbd90d&amp;nbsp; -OAuthTenantId 9101fc97-5be5-4438-a1d7-83e051e52057 -PermissionType Application -Operation GetAppUsage -QueryType SignInLogs -Name TJM-EWS-SoftDelete-Script -AppId 86277a5c-d649-46fc-8bf6-48e2a684624b -StartDate (Get-Date).AddDays(-30) -EndDate (Get-Date).AddDays(-14) -Interval 8&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The output provides a list of users that have signed into the application in the specified period requested. A CSV file called &amp;lt;AppId&amp;gt;-SignInEvents-yyyyMMddhhmm will be created in the specified output path.&lt;/P&gt;
&lt;H2&gt;4) Get user license information (Kiosk and Frontline identification)&lt;/H2&gt;
&lt;P&gt;For those organizations that have users with licenses that may be impacted by the upcoming enforcement in June, a report of user licenses can also be generated to help identify potential impact. The output from the previous step can be used to generate this license report. A single CSV file with the results from each application can also be merged into a single user license report.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;.\Find-EwsUsage.ps1 -OutputPath C:\Temp\Output -OAuthCertificate 8865BEC624B02FA0DE9586D13186ABC8BE265917 -CertificateStore CurrentUser -OAuthClientId 7a305061-1343-49c3-a469-378de4dbd90d&amp;nbsp; -OAuthTenantId 9101fc97-5be5-4438-a1d7-83e051e52057 -PermissionType Application &lt;/EM&gt;&lt;EM&gt;-Operation GetUserLicenses -AppUsageSignInCsv C:\Temp\Output\86277a5c-d649-46fc-8bf6-48e2a684624b-SignInEvents-20260203122538.csv&lt;/EM&gt;&lt;/P&gt;
&lt;H1&gt;How to interpret the output (and prioritize fixes)&lt;/H1&gt;
&lt;P&gt;Once you have the output files, sort by “last sign-in”. Apps with recent activity are your highest priority because they’re more likely to break production workloads when EWS is blocked. Apps with no sign-in data may be dormant, misconfigured, or retired—treat these as “needs validation,” not automatically “safe to ignore.”&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Identify the owner&lt;/STRONG&gt; of each app registration (or the business system it belongs to).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Confirm the workload&lt;/STRONG&gt;: mailbox access patterns (read, send, calendar, contacts, etc.) and whether it uses application or delegated access.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Check mailbox populations&lt;/STRONG&gt; the app touches—especially if any are assigned Kiosk / Frontline licenses that may lose EWS access at the end of June 2026.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Choose the migration target&lt;/STRONG&gt;: Microsoft Graph API equivalents, supported Exchange Online features, or a vendor upgrade that removes EWS dependency.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H1&gt;Don’t miss the Kiosk / Frontline Worker EWS blocks (end of June 2026)&lt;/H1&gt;
&lt;P&gt;Recommended validation playbook:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Use the script output to build a shortlist of actively used EWS-enabled apps.&lt;/LI&gt;
&lt;LI&gt;For each app, determine which mailboxes it accesses (application access policies, RBAC, service accounts, shared mailboxes, or user populations).&lt;/LI&gt;
&lt;LI&gt;Cross-check those mailboxes’ license assignments for Kiosk / Frontline SKUs that may not include EWS rights.&lt;/LI&gt;
&lt;LI&gt;Run a controlled test (non-production where possible) to confirm whether the integration depends on EWS for those mailboxes and whether the vendor has a Graph-based update available.&lt;/LI&gt;
&lt;LI&gt;Evaluate if adding a different type of license for specific users is needed (for example, adding an Exchange Online Plan 1 or 2, which can still use EWS until October deprecation.)&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Remediation options (what to do when you find an EWS dependency)&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;Upgrade or reconfigure the product: Many vendors have already moved to Microsoft Graph. Engage the vendor and request their Graph migration guidance and timelines.&lt;/LI&gt;
&lt;LI&gt;Refactor custom code: Map EWS operations (mail, calendar, contacts) to Microsoft Graph endpoints and re-test auth flows, throttling, and permissions. More information on mappings can be found &lt;A href="https://learn.microsoft.com/en-us/graph/migrate-exchange-web-services-api-mapping" target="_blank"&gt;here&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Reduce blast radius: If an app truly must remain temporarily, scope it tightly using least-privilege permissions and (where applicable) scope the mailbox it has access to using RBAC—then treat it as a short-term exception with an expiration date.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Quick checklist&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;Run Exchange-App-Usage-Reporting and identify apps with recent EWS sign-in activity.&lt;/LI&gt;
&lt;LI&gt;Track down app owners and document which mailboxes/workloads each app touches.&lt;/LI&gt;
&lt;LI&gt;Assess exposure to the end-of-June 2026 licensing-related EWS blocks (Kiosk/Frontline).&lt;/LI&gt;
&lt;LI&gt;Prioritize migrations to Microsoft Graph and validate functionality end-to-end.&lt;/LI&gt;
&lt;LI&gt;Re-run the report periodically to confirm EWS usage is trending to zero.&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Thu, 26 Feb 2026 22:18:04 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/finding-and-remediating-ews-app-usage-before-retirement/ba-p/4497659</guid>
      <dc:creator>thejimmartin</dc:creator>
      <dc:date>2026-02-26T22:18:04Z</dc:date>
    </item>
    <item>
      <title>Azure SRE Agent Architecture and Creation: Practical Benefits for SAP on Azure Customers</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/azure-sre-agent-architecture-and-creation-practical-benefits-for/ba-p/4497625</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Introduction&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SRE Agent is an AI-powered service designed to support site reliability engineering practices through automation and intelligent decision-making. It reduces operational toil, improves uptime, and delivers consistent results by seamlessly integrating with Azure services and external systems to perform operational tasks with limited manual intervention.&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;Azure SRE Agent reduces operational toil by automating routine and repetitive tasks, allowing teams to concentrate on&amp;nbsp;high impact&amp;nbsp;initiatives. Operational work&amp;nbsp;frequently&amp;nbsp;involves managing diverse Azure resources in combination with&amp;nbsp;on-premises&amp;nbsp;environments, often requiring orchestration across multiple tools. SRE Agent delivers an&amp;nbsp;AI driven&amp;nbsp;platform that unifies these systems and automates operational workflows from start to finish.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;How Azure SRE Agent Architecture and Creation Benefit SAP on Azure Customers:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The SRE Agent&amp;nbsp;architecture is particularly well suited for SAP workloads, which are inherently&amp;nbsp;mission&amp;nbsp;critical&amp;nbsp;and span multiple Azure services, including&amp;nbsp;compute,&amp;nbsp;storage, networking, databases, and monitoring. By creating an Azure SRE Agent and associating it with SAP&amp;nbsp;related resource groups, customers gain a unified operational control plane that continuously analyzes telemetry from Azure Monitor, logs, and metrics to&amp;nbsp;identify&amp;nbsp;issues&amp;nbsp;impacting&amp;nbsp;SAP availability, performance, and stability.&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;Through automated diagnostics,&amp;nbsp;root&amp;nbsp;cause&amp;nbsp;analysis, and guided or&amp;nbsp;approval-based&amp;nbsp;remediation, Azure SRE Agent significantly reduces manual troubleshooting during SAP incidents. In addition, its support for scheduled health checks, configuration validation, and compliance audits aligns closely with SAP best practices and change&amp;nbsp;controlled environments, enabling customers to transition from reactive operations to a proactive, automated, and scalable model that improves uptime and operational confidence at scale.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Centralized Azure&amp;nbsp;Service&amp;nbsp;Management Capabilities:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This diagram illustrates Azure SRE Agent as the centralized automation and intelligence layer that manages Azure resources through Azure CLI and REST APIs, providing a unified control plane for operational tasks across the platform. From this single point, the agent connects to five core service domains: Compute (such as Virtual Machines, App Service, Container Apps, AKS,&amp;nbsp;Functions&amp;nbsp;and more), Storage (including Blob storage, file shares, managed disks, and storage accounts), Networking (covering&amp;nbsp;Vnets, load balancers, application gateways, and network security groups), Databases (Azure SQL, Cosmos DB, PostgreSQL, MySQL, and Redis), and Monitoring &amp;amp; Management (Azure Monitor, Log Analytics, Application Insights, and Azure Resource Manager). Together, the layout shows how Azure SRE Agent enables consistent, automated, and scalable operations across diverse Azure services from a single,&amp;nbsp;AI-driven&amp;nbsp;management layer.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Creating an SRE Agent in the Azure Portal:&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/H4&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Access the Azure portal and complete the following steps to create an SRE Agent.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;From Home → Create a resource,&amp;nbsp;search&amp;nbsp;for “sre agent” in the Azure Marketplace. The results clearly highlight Azure SRE Agent (Preview) as an official Microsoft Azure service, confirming that it is provisioned like any other native Azure resource rather than an external tool or addon.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Please select the Azure subscription in which the agent will be deployed and&amp;nbsp;confirm&amp;nbsp;the available Azure SRE Agent (Preview) plan.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In the Basics step, select the subscription and resource group where the Azure SRE Agent will be created. You then provide agent specific details, including the agent's name and the Azure region in which the agent will be deployed and operated. This configuration ensures that the SRE Agent is established as a first-class Azure resource, governed, scoped, and managed using the same Azure constructs as any other native service.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In this step, you define the level of access the agent will have over the Azure resource groups it manages, ensuring alignment with your organization’s security and governance requirements.&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;Two permission levels are available:&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="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;&lt;STRONG&gt;Reader:&lt;/STRONG&gt; The agent has&amp;nbsp;read only&amp;nbsp;access to the assigned resource groups. It can&amp;nbsp;observe&amp;nbsp;resource state, analyze telemetry, and generate insights, but any remediation actions require temporary elevation using the user’s permissions after explicit approval.&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;&lt;STRONG&gt;Privileged:&lt;/STRONG&gt; The agent is granted&amp;nbsp;permission&amp;nbsp;to execute approved actions directly on detected resources and resource types within its assigned resource groups. This enables faster, more automated remediation while still&amp;nbsp;operating&amp;nbsp;within Azure RBAC controls and&amp;nbsp;approval of&amp;nbsp;workflows.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;img /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This screen confirms that the Azure SRE Agent (Preview) has been successfully deployed in the Azure Portal. The banner “Your deployment is complete” indicates that all required resources were provisioned without errors and that the agent is now active in the selected subscription and resource group.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&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;&lt;SPAN data-contrast="auto"&gt;This screen shows the Azure portal search experience after the Azure SRE Agent has been successfully deployed. By typing “my” in the top search bar, the portal surfaces both services and resources associated with the user’s subscription. Under the Resources section, the newly created Azure SRE Agent instance (for example,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mysreapp&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;) appears, confirming that the agent is now registered.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&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;&lt;SPAN data-contrast="auto"&gt;Below&amp;nbsp;screen shows the Azure SRE Agent chat interface for the deployed agent (&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mysreapp&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;) within the Azure portal. It&amp;nbsp;represents&amp;nbsp;the primary interaction surface where&amp;nbsp;users engage with Azure SRE Agent using natural language to&amp;nbsp;monitor, diagnose, and remediate issues across the Azure resources associated with the agent.&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;On the left navigation pane, users can manage chat threads, review activities, access the&amp;nbsp;agent&amp;nbsp;builder,&amp;nbsp;monitor&amp;nbsp;health and insights, and configure settings. The main panel displays a new chat thread with a prompt inviting the user to ask a question or execute a command. The&amp;nbsp;quick action&amp;nbsp;buttons (such as App Services, Container Apps&amp;nbsp;and&amp;nbsp;AKS) provide guided entry points to common operational scenarios, helping users get started quickly without needing to remember specific commands.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Once the chat window opens,&amp;nbsp;Azure SAP&amp;nbsp;customers can begin interacting with the Azure SRE Agent using natural language to&amp;nbsp;monitor&amp;nbsp;and manage their SAP landscapes on Azure. To get started, try questions such as:&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="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;What can you help me&amp;nbsp;with&amp;nbsp;my SAP systems?&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;Which SAP subscriptions, resource groups, or&amp;nbsp;SAP related&amp;nbsp;resources are you managing?&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;What alerts should I configure for my SAP workload (for example, SAP HANA, ASCS, or application 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="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="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Show me a comparison of successful requests versus errors for&amp;nbsp;SAP dependent&amp;nbsp;applications across all subscriptions.&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;If you are troubleshooting a specific SAP issue, you can ask more targeted questions, for example:&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="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;Why is my SAP system or SAP HANA database slow?&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;Why is my SAP application or central services instance not responding?&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;Can you investigate issues with my SAP workload?&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;Can you retrieve key metrics (such as CPU, memory, disk I/O, or HANA latency) for my SAP resources?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Conclusion:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure SRE Agent empowers SAP customers with a centralized,&amp;nbsp;AI driven&amp;nbsp;operations&amp;nbsp;layer&amp;nbsp;built&amp;nbsp;for managing complex,&amp;nbsp;SAP landscapes on Azure. By integrating natively with Azure and using standard management interfaces, the agent delivers continuous,&amp;nbsp;end-to-end&amp;nbsp;visibility across the&amp;nbsp;compute, storage, networking, database, and monitoring layers that underpin SAP workloads. This unified operational view enables teams to detect and understand issues affecting SAP availability, performance, and stability faster and with greater confidence.&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;By combining automated diagnostics, intelligent&amp;nbsp;root cause&amp;nbsp;analysis, and guided or&amp;nbsp;approval-based&amp;nbsp;remediation, Azure SRE Agent dramatically reduces manual effort and accelerates incident resolution.&amp;nbsp;Built-in&amp;nbsp;support for proactive health checks, configuration validation, and compliance auditing aligns with SAP best practices and&amp;nbsp;change controlled&amp;nbsp;environments, allowing customers to move beyond reactive firefighting.&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Reference links:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/sre-agent/troubleshoot-azure-app-service?source=recommendations" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Tutorial: Troubleshoot an App Using Azure SRE Agent and Azure App Service Preview | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/sre-agent/billing?source=recommendations" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Billing for Azure SRE Agent Preview | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/sre-agent/incident-management?source=recommendations&amp;amp;tabs=azmon-alerts" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Incident Management in Azure SRE Agent Preview | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Feb 2026 19:08:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/azure-sre-agent-architecture-and-creation-practical-benefits-for/ba-p/4497625</guid>
      <dc:creator>AnuradhaKarnam</dc:creator>
      <dc:date>2026-02-26T19:08:02Z</dc:date>
    </item>
    <item>
      <title>Accelerating AKS Upgrades with Fleet Manager: Finding the Right Balance</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/accelerating-aks-upgrades-with-fleet-manager-finding-the-right/ba-p/4497133</link>
      <description>&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Upgrading Azure Kubernetes Service (AKS) clusters at scale can be time-consuming, especially when managing multiple environments and clusters. Azure Fleet Manager provides powerful controls to orchestrate these upgrades efficiently. However, with this flexibility comes important design considerations and trade-offs that platform teams must understand.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Disclaimer:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This article draws on publicly available documentation as of February 2026 and is intended to provide insight into how Fleet Manager manages AKS upgrades, along with the key factors to consider when defining an effective upgrade strategy.&lt;/P&gt;
&lt;P&gt;The views expressed in this article are those of the author and do not necessarily reflect the official policy or position of Microsoft. The author is a Microsoft employee.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;At the heart of AKS Fleet Manager upgrades are three foundational concepts: &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;update runs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;update stages&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;update groups&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;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;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Update run&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: An update run&amp;nbsp;represents&amp;nbsp;an update being applied to a collection of AKS clusters, consisting of the update goal and sequence. The update goal describes the desired updates (for example, upgrading to Kubernetes version 1.28.3). The update sequence describes the exact order to apply the update to multiple member clusters, expressed using stages and groups. If unspecified, all the member clusters are updated one by one sequentially. An update run can be stopped and started.&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="Arial" 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;Arial&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;Update stage&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: Update runs are divided into stages, which are applied sequentially. For example, a first update stage might update test environment member clusters, and a second update stage would then later update production environment member clusters. A wait time can be specified to delay between the application of&amp;nbsp;subsequent&amp;nbsp;update stages.&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="Arial" 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;Arial&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;Update group&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: Each update stage&amp;nbsp;contains&amp;nbsp;one or more update groups, which are used to select the member clusters to be updated. Within an update stage, updates are applied to all the different update groups in parallel; within an update group, member clusters update sequentially. Each member cluster of the fleet can only be&amp;nbsp;part&amp;nbsp;of one update group.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Image Source – Azure Portal- &amp;gt; AKS Fleet Manager -&amp;gt; Upgrade Groups Explanation&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;The Approach&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To reduce the overall time&amp;nbsp;required&amp;nbsp;to complete AKS upgrades across all clusters, there are two primary levers available:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Reduce the number of update stages&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, since stages are upgraded sequentially.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Increase the number of update groups within a stage&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, as update groups are upgraded in parallel. Each update stage can&amp;nbsp;contain&amp;nbsp;up to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;50 update groups&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, allowing as many as&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;50 AKS clusters to be upgraded concurrently&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;While both approaches can significantly speed up the upgrade process, each introduces its own risks that must be carefully considered.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Finding the right Balance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Reducing Update Stages: Speed at the Cost of Safety&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Reducing the number of update stages typically means grouping AKS clusters from multiple environments—such as dev, test, and production—into one or two stages. Although this can shorten the overall upgrade timeline, it is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;not recommended&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;This approach severely limits the time available to&amp;nbsp;validate&amp;nbsp;application behavior in lower environments before rolling changes into higher-risk environments like production. Microsoft best practices explicitly recommend keeping the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;first update stage small&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, with a minimal number of update groups. This helps&amp;nbsp;contain&amp;nbsp;the blast radius if a regression is introduced.&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’s&amp;nbsp;also important to note that&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;AKS does not currently support rollback after an upgrade&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. If a regression occurs, the only remediation&amp;nbsp;option&amp;nbsp;is to provision a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;new AKS cluster running the&amp;nbsp;previous&amp;nbsp;version&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, which can be both time-consuming and operationally expensive.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Increasing Update Groups: Parallelism with Capacity Risks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;An alternative—and&amp;nbsp;generally safer—approach is to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;increase the number of update groups starting from the second update stage onward&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. This allows more clusters to be upgraded in parallel, reducing the overall upgrade duration while still preserving a controlled validation phase.&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;However, parallel upgrades come with their own challenges. Running multiple AKS upgrades simultaneously increases the risk of failures due to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;capacity constraints&amp;nbsp;in an Availability Zone&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, particularly when node pools rely on VM SKUs with limited availability. The risk grows even further when node pools are configured with a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;higher Max Surge value&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, as more nodes are created concurrently during upgrades.&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;At the time of writing this blog, there is one important limitation to be aware of:&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;If&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;even a single AKS cluster upgrade fails&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;entire Fleet upgrade run is halted&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. There is an open feature request to introduce a configurable&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;safe-failure threshold&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, which would allow the upgrade process to continue even if a limited number of cluster upgrades fail:&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;👉&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/Azure/AKS/issues/5338" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://github.com/Azure/AKS/issues/5338&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Conclusion: Designing a Thoughtful Upgrade Strategy&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;While Azure Fleet Manager makes it possible to significantly reduce&amp;nbsp;the overall duration for&amp;nbsp;AKS upgrade, doing so safely requires thoughtful planning. The key is to strike the right balance between:&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;Reducing overall upgrade duration&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;by increasing parallelism, and&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;Minimize&amp;nbsp;risk and disruption&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;by preserving adequate validation stages and respecting capacity constraints.&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;Successful AKS upgrade strategies are rarely one-size-fits-all. They require close collaboration,&amp;nbsp;environmental&amp;nbsp;awareness, and a clear understanding of both platform limitations and operational risk. With the right design, Fleet Manager can be a powerful enabler for fast, safe, and scalable AKS upgrades.&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;For some&amp;nbsp;additional&amp;nbsp;resources, check out the following:&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:259}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/kubernetes-fleet/overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://learn.microsoft.com/en-us/azure/kubernetes-fleet/overview&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:259}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/kubernetes-fleet/concepts-update-orchestration" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://learn.microsoft.com/en-us/azure/kubernetes-fleet/concepts-update-orchestration&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:259}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Feb 2026 20:11:11 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/accelerating-aks-upgrades-with-fleet-manager-finding-the-right/ba-p/4497133</guid>
      <dc:creator>manandak</dc:creator>
      <dc:date>2026-02-26T20:11:11Z</dc:date>
    </item>
    <item>
      <title>Create an Organizational Assets Library (including Multi-Geo &amp; Information Barriers guidance)</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/create-an-organizational-assets-library-including-multi-geo/ba-p/4496135</link>
      <description>&lt;H2&gt;Overview&amp;nbsp;&lt;/H2&gt;
&lt;P&gt;This guide walks through a practical approach to setting up SharePoint Online (SPO) Organizational Assets Libraries (OAL). It includes optional guidance for more complex tenants—such as Multi-Geo and Information Barriers (IB) - because those scenarios are often under-documented.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What you’ll accomplish: &lt;/STRONG&gt;Create and register Organizational Assets Libraries so templates, fonts, and brand images are available in Office apps, with notes for Multi-Geo, Information Barriers, Brand Center, and Copilot integration where applicable.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Applies to: &lt;/STRONG&gt;Standard (single-geo) tenants, Multi-Geo tenants, tenants with Information Barriers, and environments using Brand Center and/or Copilot features for organizational assets.&lt;/P&gt;
&lt;H2&gt;Quick start (standard single-geo tenant)&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;Create a SharePoint site to host Organizational Assets Libraries (often the Brand Center site).&lt;/LI&gt;
&lt;LI&gt;Create three document libraries (typical): &lt;STRONG&gt;ImageAssets&lt;/STRONG&gt;, &lt;STRONG&gt;DocumentAssets&lt;/STRONG&gt; (templates), &lt;STRONG&gt;FontAssets&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Grant your intended audience &lt;STRONG&gt;Read&lt;/STRONG&gt; access (commonly &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt; via the site’s Visitors group).&lt;/LI&gt;
&lt;LI&gt;Enable the &lt;STRONG&gt;SharePoint Online Public CDN&lt;/STRONG&gt; (tenant setting).&lt;/LI&gt;
&lt;LI&gt;Add a &lt;STRONG&gt;Public CDN origin&lt;/STRONG&gt; for each library path (one origin per library).&lt;/LI&gt;
&lt;LI&gt;Upload approved assets (images, templates, fonts) into their respective libraries.&lt;/LI&gt;
&lt;LI&gt;Register each library with &lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt; (repeat per library).&lt;/LI&gt;
&lt;LI&gt;Validate registration and end-user experience, then allow up to &lt;STRONG&gt;24 hours&lt;/STRONG&gt; for Office apps to reflect changes.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;If you’re Multi-Geo or using Information Barriers:&lt;/STRONG&gt; follow the same flow, but repeat per geo and complete registration while the site is in &lt;STRONG&gt;Open&lt;/STRONG&gt; IB mode (details below).&lt;/P&gt;
&lt;H2&gt;Key constraints and gotchas&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Multi-Geo:&lt;/STRONG&gt; plan a repeatable &lt;STRONG&gt;per-geo pattern&lt;/STRONG&gt; (typically &lt;STRONG&gt;one Org Assets site + matching libraries per geo&lt;/STRONG&gt;) and keep naming consistent.&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Information Barriers (IB):&lt;/STRONG&gt; &lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt; cannot be run when the target site is segmented—create and register libraries first (site in &lt;STRONG&gt;Open&lt;/STRONG&gt; mode), then segment if needed.&lt;/LI&gt;
&lt;LI&gt;The “&lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt;” principal may be hidden by default, but it’s still commonly used for broad read access.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Brand Center:&lt;/STRONG&gt; many orgs host Org Assets Libraries in the Brand Center site; if Brand Center is created after libraries exist, it typically detects and uses them automatically.&lt;/LI&gt;
&lt;LI&gt;A &lt;STRONG&gt;public CDN&lt;/STRONG&gt; must be enabled to support Organizational Assets Libraries.&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;The “&lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt;” principal may be hidden by default, but it’s still commonly used for broad read access.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Brand Center:&lt;/STRONG&gt; many orgs host Org Assets Libraries in the Brand Center site; if Brand Center is created after libraries exist, it typically detects and uses them automatically.&lt;/LI&gt;
&lt;LI&gt;A &lt;STRONG&gt;public CDN&lt;/STRONG&gt; must be enabled to support Organizational Assets Libraries.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Implementation steps&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Prerequisites:&lt;/STRONG&gt; SharePoint Online Management Shell access (or equivalent), permission to manage tenant settings, and the ability to create sites and libraries in each geo.&lt;/P&gt;
&lt;OL&gt;
&lt;LI class="lia-align-left"&gt;Create a site to host your Organizational Assets Libraries (many orgs use a communication site). For ease of support, keep the site name, library names, and structure consistent over time.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-align-left lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; A Communication site is recommended, but a Team site can also work.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Example site URLs:&lt;/STRONG&gt; In a standard tenant you’ll have one site; in Multi-Geo you’ll typically use one per geo.&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Primary geo:&lt;/STRONG&gt; https://contoso.sharepoint.com/sites/BrandCenter&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;EUR geo:&lt;/STRONG&gt; https://contosoEUR.sharepoint.com/sites/BrandCenter&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;APC geo:&lt;/STRONG&gt; https://contosoAPC.sharepoint.com/sites/BrandCenter&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;If your tenant uses Information Barriers, keep each site in &lt;STRONG&gt;Open&lt;/STRONG&gt; IB mode while creating the Org Assets Libraries. You can segment the site later (if required) after libraries are created.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Configure a public CDN (required)&lt;/H3&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;To use Brand Center and Organizational Assets Libraries, configure SharePoint Online to use a &lt;STRONG&gt;Public CDN&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Set-SPOTenantCdnEnabled -CdnType Public -Enable $true&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Example output:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Public CDN enabled locations:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;SITES/BRANDCENTER/FONTS&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;*/MASTERPAGE (configuration pending)&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;*/STYLE LIBRARY (configuration pending)&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;*/CLIENTSIDEASSETS (configuration pending)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Note: You will see the new CDN is in a &lt;STRONG&gt;&lt;EM&gt;pending&lt;/EM&gt;&lt;/STRONG&gt; state until complete. This will take some time.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;Wait for the CDN to finish provisioning. Re-run the status/list commands until “pending” entries clear.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Get-SPOTenantCdnEnabled -CdnType Public
Get-SPOTenantCdnOrigins -CdnType Public&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Add CDN origins for each library&lt;/H3&gt;
&lt;OL start="5"&gt;
&lt;LI&gt;Add allowed CDN origins for each asset library path (typically one origin per library).&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Example:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Add-SPOTenantCdnOrigin -OriginUrl sites/BrandCenter/ImageAssets -CdnType Public
Add-SPOTenantCdnOrigin -OriginUrl sites/BrandCenter/TemplateAssets -CdnType Public
Add-SPOTenantCdnOrigin -OriginUrl sites/BrandCenter/FontAssets -CdnType Public&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Set permissions (required for broad consumption)&lt;/H3&gt;
&lt;OL start="6"&gt;
&lt;LI&gt;To ensure most users can consume the assets, grant &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt; (often abbreviated as EEEU) &lt;STRONG&gt;Read&lt;/STRONG&gt; access (commonly via the site’s Visitors group).&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Example: add &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt; to the Visitors group of the Organizational Assets site.&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Connect-SPOService -Url 'https://contoso-admin.sharepoint.com'
$tenant = "9cfc42cb-51da-4055-87e9-b20a170b6ba3"
$site = Get-SPOSite -Identity "https://contoso.sharepoint.com/sites/BrandCenter"
$group = Get-SPOSiteGroup $site -Group "BrandCenter Visitors"
Add-SPOUser -LoginName ("c:0-.f|rolemanager|spo-grid-all-users/" + $tenant) -Site $site -Group $group.Title&lt;/LI-CODE&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; Organizational Assets Libraries respect SharePoint security trimming. If you need a narrower audience, grant &lt;STRONG&gt;Read&lt;/STRONG&gt; to the appropriate groups instead of tenant-wide access. In many environments, &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt; is required during &lt;EM&gt;registration&lt;/EM&gt; (&lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt;) so Office can enumerate the library—test and confirm in your tenant before removing broad access.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Create libraries and upload assets&lt;/H3&gt;
&lt;OL start="7"&gt;
&lt;LI&gt;Create a document library for each asset type you plan to publish (for example: images, Office templates, fonts).&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;For example:&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="8"&gt;
&lt;LI&gt;Upload your assets into the appropriate libraries.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Example:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;&lt;img /&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;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="9"&gt;
&lt;LI&gt;Register each library using &lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt;. For this to work, &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt; must already have access to the site (for example, via the Visitors group).&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Office Template Library Example:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Add-SPOOrgAssetsLibrary -LibraryUrl 'https://contoso.sharepoint.com/sites/BrandCenter/DocumentAssets' -OrgAssetType OfficeTemplateLibrary&lt;/LI-CODE&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Image Document Library Example:&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Add-SPOOrgAssetsLibrary -LibraryUrl 'https://contoso.sharepoint.com/sites/BrandCenter/ImageAssets' -OrgAssetType ImageDocumentLibrary&lt;/LI-CODE&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Font Document Library Example:&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Add-SPOOrgAssetsLibrary -LibraryUrl 'https://contoso.sharepoint.com/sites/BrandCenter/FontAssets' -OrgAssetType OfficeFontLibrary -CdnType Public&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="10"&gt;
&lt;LI&gt;&lt;STRONG&gt;Optional:&lt;/STRONG&gt; Enable Copilot support for an image library (only applicable to &lt;STRONG&gt;ImageDocumentLibrary&lt;/STRONG&gt;).&lt;/LI&gt;
&lt;/OL&gt;
&lt;LI-CODE lang=""&gt;Set-SPOOrgAssetsLibrary -LibraryUrl 'https://contoso.sharepoint.com/sites/BrandCenter/ImageAssets' -OrgAssetType ImageDocumentLibrary -CopilotSearchable $true&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Multi-Geo mini runbook (recommended pattern)&lt;/H3&gt;
&lt;P&gt;Use this as a simple tracking sheet so each geo ends up with a complete, consistent setup.&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;Geo&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Site URL&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Libraries&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;CDN origins added&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Libraries registered&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Primary&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;https://&amp;lt;tenant&amp;gt;.sharepoint.com/sites/&amp;lt;BrandCenterOrAssetsSite&amp;gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ImageAssets / DocumentAssets / FontAssets&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Yes/No&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Yes/No&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;EUR&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;https://&amp;lt;tenant&amp;gt;EUR.sharepoint.com/sites/&amp;lt;BrandCenterOrAssetsSite&amp;gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ImageAssets / DocumentAssets / FontAssets&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Yes/No&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Yes/No&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;APC&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;https://&amp;lt;tenant&amp;gt;APC.sharepoint.com/sites/&amp;lt;BrandCenterOrAssetsSite&amp;gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ImageAssets / DocumentAssets / FontAssets&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Yes/No&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Yes/No&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Naming standard (strongly recommended):&lt;/STRONG&gt; keep the same site path and the same library names in every geo (for example, always &lt;STRONG&gt;ImageAssets&lt;/STRONG&gt;, &lt;STRONG&gt;DocumentAssets&lt;/STRONG&gt;, &lt;STRONG&gt;FontAssets&lt;/STRONG&gt;). This minimizes per-geo scripting differences and reduces support effort.&lt;/P&gt;
&lt;H3&gt;Wrap-up&lt;/H3&gt;
&lt;P&gt;At this point, each geo should have its own site, libraries, CDN origins, and registered Organizational Assets Libraries. From here, focus on governance (who can publish/approve assets), naming standards, and ongoing lifecycle management (retire old templates/fonts and keep branding current).&lt;/P&gt;
&lt;H2&gt;Validate configuration&lt;/H2&gt;
&lt;H3&gt;Admin checks (PowerShell)&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Confirm the Public CDN is enabled.&lt;/LI&gt;
&lt;LI&gt;Confirm CDN origins include one entry per assets library path.&lt;/LI&gt;
&lt;LI&gt;List registered Org Assets Libraries and verify each URL + type is present.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang=""&gt;Get-SPOTenantCdnEnabled -CdnType Public
Get-SPOTenantCdnOrigins -CdnType Public
Get-SPOOrgAssetsLibrary&lt;/LI-CODE&gt;
&lt;H3&gt;End-user checks (Office apps)&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;In &lt;STRONG&gt;PowerPoint&lt;/STRONG&gt;/&lt;STRONG&gt;Word&lt;/STRONG&gt;, confirm organizational templates appear in the template picker (if you registered an OfficeTemplateLibrary).&lt;/LI&gt;
&lt;LI&gt;In Office font lists, confirm your org fonts appear (if you registered an OfficeFontLibrary).&lt;/LI&gt;
&lt;LI&gt;For image libraries, confirm approved brand images appear in supported pickers; if you enabled &lt;STRONG&gt;-CopilotSearchable&lt;/STRONG&gt;, confirm images are discoverable as expected.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Timing:&lt;/STRONG&gt; New registrations and updates can take up to &lt;STRONG&gt;24 hours&lt;/STRONG&gt; to appear in Office apps. If you updated content, run &lt;STRONG&gt;Set-SPOOrgAssetsLibrary&lt;/STRONG&gt; for each changed library, then wait for propagation.&lt;/P&gt;
&lt;H3&gt;Updating content in existing Org Assets Libraries&lt;/H3&gt;
&lt;P&gt;If you already have Organizational Assets Libraries registered and you need to publish updated templates, fonts, or images, use the process below. The high-level flow is: &lt;STRONG&gt;update content&lt;/STRONG&gt; → &lt;STRONG&gt;run Set-SPOOrgAssetsLibrary&lt;/STRONG&gt; (per library) → &lt;STRONG&gt;wait for propagation&lt;/STRONG&gt;.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Replace or update content in each library.&lt;/STRONG&gt; Upload the new versions of templates/fonts/images into the appropriate library (and remove/retire older versions if needed).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;If Multi-Geo applies, repeat per geo.&lt;/STRONG&gt; Update the matching libraries in each geo’s site so users in each geo get the same (or intentionally regional) set of assets.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Run Set-SPOOrgAssetsLibrary for each updated library.&lt;/STRONG&gt; Execute the cmdlet against the library URL to refresh the configuration after content changes (run it once per library you updated).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Wait for Office app propagation.&lt;/STRONG&gt; Allow up to &lt;STRONG&gt;24 hours&lt;/STRONG&gt; for updates to begin showing in Office apps.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Set-SPOOrgAssetsLibrary -LibraryUrl 'https://contoso.sharepoint.com/sites/BrandCenter/DocumentAssets' -OrgAssetType OfficeTemplateLibrary&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Notes:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If your site is segmented by &lt;STRONG&gt;Information Barriers&lt;/STRONG&gt;, confirm the cmdlet behavior in your environment before making changes, and prefer performing registration/updates while the site is in &lt;STRONG&gt;Open&lt;/STRONG&gt; mode when possible.&lt;/LI&gt;
&lt;LI&gt;For &lt;STRONG&gt;image libraries&lt;/STRONG&gt;, if you are using Copilot integration settings (for example &lt;STRONG&gt;-CopilotSearchable&lt;/STRONG&gt;), keep the setting consistent when you run &lt;STRONG&gt;Set-SPOOrgAssetsLibrary&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Make sure the intended audience still has &lt;STRONG&gt;Read&lt;/STRONG&gt; access to the site/library; otherwise users may not see updates due to security trimming.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Please note:&lt;/STRONG&gt; After registering (or updating) your assets libraries, it can take up to &lt;STRONG&gt;24 hours&lt;/STRONG&gt; before changes become available in Office apps.&lt;/P&gt;
&lt;P&gt;Once fully enabled, Office apps will surface your templates and fonts. Below is an example.&lt;/P&gt;
&lt;H3&gt;Example of interacting with Org Assets from M365 Apps&lt;/H3&gt;
&lt;P&gt;Org Fonts from PowerPoint:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;From SharePoint:&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;From Office Apps:&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;H1&gt;&amp;nbsp;&lt;/H1&gt;
&lt;H1&gt;&amp;nbsp;&lt;/H1&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&amp;nbsp;&lt;/H1&gt;
&lt;H1&gt;Troubleshooting tips&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;If &lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt; fails, confirm the site is not segmented by Information Barriers (Open mode during setup).&lt;/LI&gt;
&lt;LI&gt;If assets don’t appear in Office apps, wait for propagation (up to 24 hours) and re-check that the library was registered successfully.&lt;/LI&gt;
&lt;LI&gt;If CDN commands show “pending”, allow time for provisioning and re-run the status command.&lt;/LI&gt;
&lt;LI&gt;If users can’t see assets, verify the site/library permissions include &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt; (or the intended audience group).&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Guidance: Using the SharePoint Online Public CDN&lt;/H2&gt;
&lt;P&gt;Enabling the &lt;STRONG&gt;SharePoint Online Public CDN&lt;/STRONG&gt; is a &lt;STRONG&gt;required and supported configuration&lt;/STRONG&gt; for Organizational Assets Libraries, Brand Center, and related Office experiences. While the word &lt;EM&gt;“public”&lt;/EM&gt; can sound concerning, it’s important to understand &lt;STRONG&gt;what is (and is not) exposed&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;We take great care to protect the data that runs your business. Data stored in the &lt;STRONG&gt;Microsoft 365 CDN&lt;/STRONG&gt; is encrypted both in transit and at rest, and access to data in the &lt;STRONG&gt;Microsoft 365 SharePoint CDN is secured by Microsoft 365 user permissions and token authorization&lt;/STRONG&gt;. Requests for data in the Microsoft 365 SharePoint CDN must be referred (redirected) from your Microsoft 365 tenant or an authorization token won't be generated. See: &lt;A href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/content-delivery-networks?view=o365-worldwide#is-my-data-safe" target="_blank" rel="noopener"&gt;Content delivery networks - Microsoft 365 Enterprise | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;What “Public CDN” actually means&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Only explicitly approved library paths are cached&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;The CDN does &lt;STRONG&gt;not&lt;/STRONG&gt; expose your entire tenant.&lt;/LI&gt;
&lt;LI&gt;Administrators must &lt;STRONG&gt;explicitly register CDN origins&lt;/STRONG&gt; (specific library paths).&lt;/LI&gt;
&lt;LI&gt;If a library is not registered as a CDN origin, it is &lt;STRONG&gt;not served via the CDN&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/UL&gt;
&lt;H3&gt;No new content types are exposed&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;The CDN is intended for &lt;STRONG&gt;static, non-sensitive assets&lt;/STRONG&gt; such as:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Brand images&lt;/LI&gt;
&lt;LI&gt;Office templates&lt;/LI&gt;
&lt;LI&gt;Fonts&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI&gt;It is &lt;STRONG&gt;not designed&lt;/STRONG&gt; for documents containing confidential or regulated data.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Why Microsoft requires a Public CDN for Org Assets?&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Performance and reliability&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Office clients worldwide retrieve assets faster using geographically distributed edge caching.&lt;/LI&gt;
&lt;LI&gt;This avoids repeated downloads from SharePoint origin sites.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Consistent Office app experiences&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;PowerPoint, Word, Excel, and Copilot rely on CDN-backed delivery to surface:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Templates&lt;/LI&gt;
&lt;LI&gt;Fonts&lt;/LI&gt;
&lt;LI&gt;Brand images&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI&gt;Without a public CDN, these features may not function correctly or at all.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/UL&gt;
&lt;H2&gt;Best practices&lt;/H2&gt;
&lt;P&gt;Use the practices below to keep Organizational Assets Libraries reliable, secure, and easy for end users to adopt. Where relevant, notes call out additional considerations for Multi-Geo, Information Barriers, Brand Center, and Copilot.&lt;/P&gt;
&lt;H3&gt;Governance and ownership checklist&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Owners/publishers:&lt;/STRONG&gt; named group who can add/change assets (limited membership).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Approvals:&lt;/STRONG&gt; defined review/approval step before publishing new templates/fonts/images.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Versioning/retention:&lt;/STRONG&gt; how you retire old assets and prevent outdated branding from appearing in pickers.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rollback plan:&lt;/STRONG&gt; how to revert a bad template/font/image quickly.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Change communication:&lt;/STRONG&gt; how you notify users about new/updated assets and expected timing (up to 24 hours).&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Assign clear owners (typically Brand/Comms) and a small admin group (typically IT) for each geo’s library and site.&lt;/LI&gt;
&lt;LI&gt;Decide what is “approved” vs “draft” content, and enforce it with a simple publishing process (for example, a review checklist or an approvals flow).&lt;/LI&gt;
&lt;LI&gt;Version and retire assets deliberately: keep one “current” template set and archive old assets to prevent users from picking outdated branding.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Information architecture and naming&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Keep library names and structures consistent across geos (same library names, same folder conventions) to simplify support and documentation.&lt;/LI&gt;
&lt;LI&gt;Use descriptive filenames users can recognize in pickers (for example, “Contoso_Proposal_Template_v3”).&lt;/LI&gt;
&lt;LI&gt;Prefer a small number of clearly defined libraries by asset type (images, templates, fonts) rather than many small libraries.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Permissions and access&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Ensure your intended audience has at least &lt;STRONG&gt;Read&lt;/STRONG&gt; access to the site and libraries; Organizational Assets still follow SharePoint security trimming.&lt;/LI&gt;
&lt;LI&gt;If you use broad access (for example, &lt;STRONG&gt;Everyone except external users&lt;/STRONG&gt;), document it and pair it with tight contributor permissions so only approved publishers can change assets.&lt;/LI&gt;
&lt;LI&gt;Avoid breaking inheritance in ways that make troubleshooting difficult—keep permissions simple and predictable whenever possible.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;CDN configuration&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Plan CDN changes ahead of time: enabling and provisioning can take time, and changes may not be immediate.&lt;/LI&gt;
&lt;LI&gt;Register only the origins you need (one per assets library path) and keep them consistent across environments.&lt;/LI&gt;
&lt;LI&gt;After changes, allow for propagation time before validating in Office apps.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Multi-Geo and Brand Center&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Use a repeatable pattern: &lt;STRONG&gt;one site + matching libraries per geo&lt;/STRONG&gt;, with the same structure and operational runbook.&lt;/LI&gt;
&lt;LI&gt;Be aware Brand Center is created in the &lt;STRONG&gt;primary geo&lt;/STRONG&gt;; confirm how your org wants to manage global vs regional assets.&lt;/LI&gt;
&lt;LI&gt;Document which assets are global (shared everywhere) vs regional (geo-specific) to avoid confusion for publishers and users.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Information Barriers (IB) sequencing&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Create and register Org Assets Libraries &lt;STRONG&gt;before&lt;/STRONG&gt; segmenting the site when IB is enabled (create while the site is in &lt;STRONG&gt;Open&lt;/STRONG&gt; mode, then segment later if required).&lt;/LI&gt;
&lt;LI&gt;After segmentation, re-validate that the right audience can still read the libraries (and that publishers can still manage content).&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Copilot readiness (image libraries)&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Use consistent, high-quality metadata for images (titles, descriptions, and tags). Copilot search quality depends heavily on this.&lt;/LI&gt;
&lt;LI&gt;If enabling image tagging integration, standardize on a tagging vocabulary (for example, brand terms, campaigns, departments, regions) so results are predictable.&lt;/LI&gt;
&lt;LI&gt;Only enable Copilot searchable settings on libraries where content is approved and intended for broad reuse.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Q&amp;amp;A&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Q: What is an Organizational Assets Library (OAL)?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; It’s a SharePoint document library (or set of libraries) that you register so Office apps can surface approved templates, fonts, and images to users directly within the app experience.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Do I need SharePoint Brand Center to use OAL?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; No. You can use Organizational Assets Libraries without Brand Center. Brand Center can make asset management more accessible,&amp;nbsp; for example, allowing SharePoint sites to use organizational branding, but OAL can be configured on its own.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Why is a “Public CDN” required, and is it safe?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; Office experiences rely on CDN-backed delivery for performance and reliability. “Public CDN” does not mean your whole tenant is exposed—only the specific library paths you register as CDN origins are cached. Access is still governed by Microsoft 365 authentication, token authorization, and SharePoint permissions.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Can I use this guide in a standard (single-geo) tenant?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; Yes. In a standard tenant you usually create one site and one set of libraries. The Multi-Geo guidance is only needed if your tenant is Multi-Geo (in which case you’ll typically repeat the pattern per geo).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: How do Information Barriers (IB) affect setup?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; If a site is segmented, &lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt; cannot register the library. Create the site and register the libraries while the site is in &lt;STRONG&gt;Open&lt;/STRONG&gt; mode, then segment afterward if required.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Why does “Everyone except external users” (EEEU) matter?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; In many environments, EEEU is required during library &lt;EM&gt;registration&lt;/EM&gt; so Office can enumerate the library. However, OAL still respects SharePoint security trimming. If broad internal availability is the goal, a common pattern is to grant EEEU &lt;STRONG&gt;Read&lt;/STRONG&gt; (often via the Visitors group) so Office apps can surface the assets to most internal users. If you need a narrower audience, use a group instead.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: How long until assets show up (or update) in Office apps?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; It can take up to &lt;STRONG&gt;24 hours&lt;/STRONG&gt; for new registrations &lt;EM&gt;or updates&lt;/EM&gt; to propagate. If you replaced content in an existing library, run &lt;STRONG&gt;Set-SPOOrgAssetsLibrary&lt;/STRONG&gt; for each updated library, then allow time for Office apps to refresh.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: How do I update content in an existing Org Assets Library?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; Replace the files in the library (and repeat across geos if applicable), then run &lt;STRONG&gt;Set-SPOOrgAssetsLibrary&lt;/STRONG&gt; against each library you updated. After that, allow up to &lt;STRONG&gt;24 hours&lt;/STRONG&gt; for the updated assets to start showing in Office apps.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Do I need to run Set-SPOOrgAssetsLibrary every time I replace files?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; If you want Office apps to reliably pick up changes, run &lt;STRONG&gt;Set-SPOOrgAssetsLibrary&lt;/STRONG&gt; after you update content (especially when publishing new/updated templates, fonts, or images). Treat it as the “refresh” step, then wait for propagation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: When should I enable Copilot support (CopilotSearchable) for an image library?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; Enable it only for libraries that contain approved, broadly reusable images and have strong metadata (title/description/tags). This helps ensure search results are on-brand and reduces the chance of surfacing unreviewed content.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Can I undo this later?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; Yes. You can unregister an Organizational Assets Library using SharePoint Online PowerShell (for example, &lt;STRONG&gt;Remove-SPOOrgAssetsLibrary&lt;/STRONG&gt;) and remove CDN origins if you no longer need them. Plan governance so you can retire assets cleanly without disrupting users.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Users can’t see the assets (or updates)—what should I check first?&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;A:&lt;/STRONG&gt; Start with (1) permissions to the site/library (security trimming), (2) successful registration via &lt;STRONG&gt;Add-SPOOrgAssetsLibrary&lt;/STRONG&gt;, (3) if you’re expecting an update, confirm you ran &lt;STRONG&gt;Set-SPOOrgAssetsLibrary&lt;/STRONG&gt; for that library, (4) CDN provisioning status and configured origins, and (5) propagation time (up to 24 hours).&lt;/P&gt;
&lt;H2&gt;Additional Reading&lt;/H2&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sharepoint/organization-assets-library" target="_blank" rel="noopener"&gt;Create an organization assets library - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sharepoint/connect-organizational-asset-libraries-to-copilot" target="_blank" rel="noopener"&gt;Connect organizational asset libraries to Copilot for an on-brand experience - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sharepoint/connect-organizational-asset-libraries-to-copilot" target="_blank" rel="noopener"&gt;Connect organizational asset libraries to PowerPoint for an on-brand experience - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/copilot/microsoft-365/microsoft-365-copilot-search-image-tagging-integration" target="_blank" rel="noopener"&gt;Set up and connect organizational asset library (OAL) with image tagging to Copilot search | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/powershell/module/microsoft.online.sharepoint.powershell/add-spoorgassetslibrary?view=sharepoint-ps" target="_blank" rel="noopener"&gt;Add-SPOOrgAssetsLibrary (Microsoft.Online.SharePoint.PowerShell) | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sharepoint/brand-center-overview" target="_blank" rel="noopener"&gt;SharePoint Brand Center - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/sharepoint/enable-enterprise-brand-images-powerpoint-copilot" target="_blank" rel="noopener"&gt;How to Enable Enterprise Brand Images with PowerPoint Copilot - SharePoint in Microsoft 365 | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/office-365-cdn-quickstart?view=o365-worldwide" target="_blank" rel="noopener"&gt;Office 365 Content Delivery Network (CDN) Quickstart - Microsoft 365 Enterprise | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/use-microsoft-365-cdn-with-spo?view=o365-worldwide" target="_blank" rel="noopener"&gt;Use Office 365 Content Delivery Network (CDN) with SharePoint Online - Microsoft 365 Enterprise | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/content-delivery-networks?view=o365-worldwide#is-my-data-safe" target="_blank" rel="noopener"&gt;Content delivery networks - Microsoft 365 Enterprise | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/multi-geo-capabilities-in-onedrive-and-sharepoint-online-in-microsoft-365?view=o365-worldwide" target="_blank" rel="noopener"&gt;Multi-Geo Capabilities in OneDrive and SharePoint - Microsoft 365 Enterprise | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/purview/information-barriers-sharepoint" target="_blank" rel="noopener"&gt;Use Information Barriers with SharePoint | Microsoft Learn&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;</description>
      <pubDate>Mon, 23 Feb 2026 14:53:27 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/create-an-organizational-assets-library-including-multi-geo/ba-p/4496135</guid>
      <dc:creator>mikeleemsft</dc:creator>
      <dc:date>2026-02-23T14:53:27Z</dc:date>
    </item>
    <item>
      <title>Large Mailbox Migration to Exchange Online</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/large-mailbox-migration-to-exchange-online/ba-p/4495977</link>
      <description>&lt;P&gt;Migrating large mailboxes is challenging for enterprise Exchange teams, especially when mailboxes are over 100 GB or contain extensive recoverable items. Using Exchange Messaging Records Management (MRM) to reduce mailbox size before migration can speed up moves to Exchange Online.&lt;/P&gt;
&lt;H2&gt;Why Use MRM Before a Large Mailbox Migration?&lt;/H2&gt;
&lt;P&gt;Many organizations place mailboxes on litigation hold or in-place hold, causing the recoverable items in these mailboxes to grow significantly, often exceeding the 100 GB quota in Exchange Online. Quota adjustments can be requested, allowing up to about 240 GB for the combined size of the primary mailbox and recoverable items. Still, it's common for recoverable items alone to surpass this limit.&lt;/P&gt;
&lt;P&gt;MRM lets you move content from the primary mailbox to an archive mailbox, reducing the primary's overall size. The archive mailbox may be hosted on-premises or in Exchange Online. Setting up the archive in Exchange Online is usually simpler, reducing the need for additional mailbox migrations. Occasionally, this process can result in the archive mailbox's recoverable items exceeding the 240 GB cap. Therefore, creating the archive in Exchange Online remains the most efficient solution.&lt;/P&gt;
&lt;H2&gt;Prerequisites&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;Archive mailbox created in Exchange Online&lt;/LI&gt;
&lt;LI&gt;The archive mailbox must have the correct routing domain configured as the ArchiveDomain value&lt;/LI&gt;
&lt;LI&gt;OAuth enabled in Exchange&lt;/LI&gt;
&lt;LI&gt;AutoExpandingArchiveEnabled must be enabled for either mailbox or entire organization&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;MRM Configuration&lt;/H2&gt;
&lt;P&gt;The required retention policy tag is dependent upon where the data is located within the mailbox. Our primary focus is on recoverable items for mailboxes on holds; therefore, we need to create a tag to move recoverable items older than &lt;EM&gt;x&lt;/EM&gt; number of days to archive.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;New-RetentionPolicyTag -Name RecoverableItems_31_MoveToArchive -MessageClass * -RetentionAction MoveToArchive -AgeLimitForRetention 31.0:0:0 -Type RecoverableItems -RetentionEnabled:$True -Comment "Archive all items from the Recoverable Items over 31 days"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This tag must be added to a retention policy, and the retention policy must be assigned to the user being migrated. Once this is done, you can start the managed folder assistant (MFA) to move items into the remote archive.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Start-ManagedFolderAssistant user@contoso.com&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note: &lt;/STRONG&gt;A new retention policy may need to be created specifically for these larger mailboxes.&lt;/P&gt;
&lt;H2&gt;Speed up expanded archives&lt;/H2&gt;
&lt;P&gt;One issue with migrating large mailboxes is the delay caused by auto-expanding archives. Thankfully, this delay depends on Exchange processes, which we can observe and activate manually when needed.&lt;/P&gt;
&lt;P&gt;The first thing to do is keep an eye on your archive mailbox size. Once it hits 90GB, auto-expansion should kick in. To track this, check the mailbox statistics for the archive mailbox.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Get-MailboxStatistics&amp;nbsp; &amp;lt;guid of MainArchive shard of MailUser&amp;gt; | fl *itemCount,*ItemSize&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-10" border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;AssociatedItemCount&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;6&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;DeletedItemCount&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;290041&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;ItemCount&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;2&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;TotalDeletedItemSize&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;100 GB (107,374,646,793 bytes)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;TotalItemSize&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10"&gt;
&lt;P&gt;557.2 MB (584,222,341 bytes)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The results indicate that the TotalDeletedSize has reached 100GB, which is the established quota limit. At this threshold, the auxiliary archive should trigger the next time the managed folder assistant (MFA) runs against the mailbox. Manually start the MFA to expedite this process:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Start-ManagedFolderAssistant &amp;lt;guid of MainArchive shard of MailUser&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Confirm MFA has completed by checking the ELCLastSuccessTimestamp:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;(Export-MailboxDiagnosticLogs -Identity &amp;lt;guid of MainArchive shard of MailUser&amp;gt; -ExtendedProperties).mailboxlog | Select-Xml -XPath "//MailboxTable/*" | select -ExpandProperty Node | ? {$_.name -like "ELC*"}&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once the auxiliary archive becomes available, Exchange will initiate the process of copying data into the new mailbox. The MFA must be triggered again to start copying data. Then we can proceed to verify whether any folders have been ghosted using the following steps:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;$folders = Get-MailboxFolderStatistics -FolderScope recoverableitems&amp;nbsp; &amp;lt;guid of MainArchive shard of MailUser&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;$folders | ?{-Not $_.ContentFolder -and $_.VisibleItemsInFolder} | Sort-Object LastMovedTimeStamp | ft FolderSize,LastMoved*,Content*&lt;/EM&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;FolderSize&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;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;LastMovedTimeStamp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ContentFolder&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ContentMailboxGuid&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;17.79 GB&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;11/28/2024 10:25:07 PM&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;False&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;GUID of Aux archive&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;12.95 GB&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;11/28/2024 10:25:07 PM&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;False&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;GUID of Aux archive&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;1.371 MB&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;11/28/2024 10:25:07 PM&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;False&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;GUID of Aux archive&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;11.14 GB&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;11/28/2024 10:25:07 PM&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;False&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;GUID of Aux archive&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;These folders have been copied to an auxiliary archive but are not yet expired on the MainArchive, leaving about 43GB of storage pending release. MFA will free this space after its next run, once five days have passed since "11/28/2024 10:25:07 PM". &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Our monitoring speeds up the process since MFA may take several days to finish. After five days from the LastMovedTimeStamp, we manually start the MFA using the following command:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Start-ManagedFolderAssistant &amp;lt;guid of MainArchive shard of MailUser&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;You will notice these folders shrinking and the primary archive gaining free space.&lt;/P&gt;
&lt;P&gt;If there are no ghosted folders and the mailbox is full or exceeds 90GB of recoverable items, start MFA to trigger expansion. It may help to run MFA more than once and confirm that it completed successfully.&lt;/P&gt;
&lt;H2&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;Using Messaging Records Management (MRM) ahead of a large mailbox migration helps reduce primary mailbox and recoverable items pressure by moving older content into the archive, improving the likelihood of staying within Exchange Online limits and accelerating move performance. With the right prerequisites in place, you can actively monitor archive growth and expansion. When the archive approaches capacity or when ghosted folders are older than five days, targeted monitoring and triggering MFA against a mailbox can accelerate expansion and free space sooner—keeping migrations on track.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Use MRM to move Recoverable Items older than your chosen threshold into the archive before starting migrations.&lt;/LI&gt;
&lt;LI&gt;Track archive statistics (especially TotalDeletedItemSize/TotalDeletedSize) to anticipate auto-expansion and identify bottlenecks.&lt;/LI&gt;
&lt;LI&gt;Monitor ghosted folders and run MFA after the relevant LastMovedTimeStamp interval to accelerate cleanup.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 19 Feb 2026 18:10:13 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/large-mailbox-migration-to-exchange-online/ba-p/4495977</guid>
      <dc:creator>thejimmartin</dc:creator>
      <dc:date>2026-02-19T18:10:13Z</dc:date>
    </item>
    <item>
      <title>Automating Azure OpenAI/Foundry Model Lifecycle Management</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/automating-azure-openai-foundry-model-lifecycle-management/ba-p/4491982</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;PRE&gt;&lt;SPAN data-contrast="auto"&gt;Disclaimer&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;The views expressed in this article are those of the author and do not necessarily reflect the official policy or position of Microsoft Corporation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Last week, I got&amp;nbsp;an&amp;nbsp;Teams call from a customer:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;"Our production app just went down.&amp;nbsp;Deployment&amp;nbsp;is throwing authentication&amp;nbsp;errors&amp;nbsp;and we can't figure out why."&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Working as a Cloud Solution Architect at Microsoft,&amp;nbsp;I've&amp;nbsp;debugged my fair share of Azure OpenAI issues. This one&amp;nbsp;didn't&amp;nbsp;take long to figure out—they were running a model version that Microsoft had retired three months ago. The retirement announcement?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Buried somewhere in their inbox,&amp;nbsp;probably marked&amp;nbsp;as read but never actually read. The result? Several hours of downtime and some&amp;nbsp;very stressed&amp;nbsp;engineers.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Here's&amp;nbsp;the thing: this keeps happening. As teams spin up more Azure OpenAI deployments, keeping track of everything manually just&amp;nbsp;doesn't&amp;nbsp;work anymore.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;The Challenge: Managing Azure OpenAI Deployments at Scale&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You start with one Azure OpenAI/Foundry deployments,&amp;nbsp;maybe two&amp;nbsp;model deployments. Simple enough. Six months later?&amp;nbsp;You've&amp;nbsp;got 30+ deployments scattered across resource groups, different teams testing different model versions, and&amp;nbsp;you're&amp;nbsp;pretty sure&amp;nbsp;you're&amp;nbsp;paying for stuff&amp;nbsp;nobody's&amp;nbsp;using anymore.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Here are the main headaches I see teams dealing with:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Model Retirements Sneak Up&amp;nbsp;On&amp;nbsp;You&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- Microsoft updates and retires models regularly (GPT-4, GPT-3.5, you name it). If&amp;nbsp;you're&amp;nbsp;not actively tracking this,&amp;nbsp;you'll&amp;nbsp;find out the hard way when production breaks.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&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="7" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Ghost Deployments Everywhere&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;- Remember that&amp;nbsp;Provisioned&amp;nbsp;Throughput Unit someone created for "just testing"?&amp;nbsp;It's&amp;nbsp;still running. Still costing $5,000/month. Still getting zero API calls. This stuff adds up fast.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&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="7" 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="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Compliance is a Mess&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- When your auditor&amp;nbsp;asks&amp;nbsp;"who's been accessing these AI models and from where," digging through Azure Portal logs manually is nobody's idea of&amp;nbsp;a good time.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&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="7" 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="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;No One Knows What's Actually Deployed&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- In bigger orgs, teams deploy models independently. Nobody has a complete picture of&amp;nbsp;what's&amp;nbsp;out there, where&amp;nbsp;it's&amp;nbsp;running, or what&amp;nbsp;it's&amp;nbsp;costing.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Tracking this manually&amp;nbsp;doesn't&amp;nbsp;scale. Spreadsheets are&amp;nbsp;outdated&amp;nbsp;the second you save them. You need something automated.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;The Solution:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;An Open-Source Audit Tool&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;I built a tool that handles all of this automatically. It scans your Azure subscriptions, finds every OpenAI and AI Foundry deployment, pulls actual usage data from Azure Monitor, and flags models that are about to retire.&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;Here's&amp;nbsp;what it does:&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;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Finds&amp;nbsp;all your Azure OpenAI and AI Services accounts automatically&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;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Grabs real usage metrics—API calls, token counts, the works&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;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Compares what&amp;nbsp;you've&amp;nbsp;deployed against Microsoft's official retirement schedules&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;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Spits out CSV reports with everything you need: inventories, usage stats, retirement warnings&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;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Can even configure diagnostic settings and pull detailed logs from Log Analytics if you need them&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;Best part? Zero dependencies. Just Python standard library. It runs Azure CLI commands under the hood (which you&amp;nbsp;probably already&amp;nbsp;have installed anyway).&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;Grab it here: &lt;A class="lia-external-url" href="https://github.com/anishek-microsoft/foundry_model_audit" target="_blank" rel="noopener"&gt;https://github.com/anishek-microsoft/foundry_model_audit&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How This Can Help You&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H4 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Catch Cost Leaks Before They Drain Your Budget&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;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Ever wonder if&amp;nbsp;you've&amp;nbsp;got deployments sitting idle? The audit shows you exactly which ones have zero usage. Those Provisioned Throughput Units (PTUs) are expensive—if&amp;nbsp;one's&amp;nbsp;been sitting there doing nothing for weeks,&amp;nbsp;you'll&amp;nbsp;know&amp;nbsp;immediately.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Plan Model Migrations Without the Panic&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;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Instead of scrambling when a model gets retired,&amp;nbsp;you'll&amp;nbsp;see it coming months in advance. The tool flags everything&amp;nbsp;that's&amp;nbsp;approaching retirement and even shows Microsoft's suggested replacements. You get time to test, update configs, and migrate smoothly. No emergency meetings, no rushed deployments.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Make Compliance Audits Actually Manageable&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;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Need detailed logs showing who accessed your AI models and when? Enable diagnostic&amp;nbsp;settings&amp;nbsp;and the tool pulls all that data from Log Analytics into a clean CSV. When audit season rolls around,&amp;nbsp;you've&amp;nbsp;got comprehensive access reports ready to go instead of manually piecing together Portal logs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Get Visibility Across Your Whole Organization&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;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If your Azure environment is anything like most I work with, you've got multiple teams deploying independently.&amp;nbsp;This gives you one complete picture: every account, every deployment, every region.&amp;nbsp;You'll finally know what you're actually running and what it's costing.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How It Actually Works&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The tool&amp;nbsp;ties&amp;nbsp;into Azure Resource Manager, Azure Monitor, and Log Analytics.&amp;nbsp;Here's&amp;nbsp;the flow:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="3" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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;Uses your existing `&lt;STRONG&gt;az&amp;nbsp;login&lt;/STRONG&gt;` session (no extra auth needed)&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="3" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Scans Azure Resource Manager for OpenAI and AI Services accounts&lt;/SPAN&gt; &lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="3" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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="2" data-aria-level="1"&gt;Calls Azure REST APIs to list all deployments (handles different API versions automatically)&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="3" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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="2" data-aria-level="1"&gt;Pulls metrics from Azure Monitor—API calls, token counts, last 7 days of data&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="3" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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="2" data-aria-level="1"&gt;Checks deployments against a JSON file of Microsoft's official retirement dates&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="3" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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="2" data-aria-level="1"&gt;Optionally queries Log Analytics with KQL for detailed usage logs&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;I keep the retirement database (`&lt;STRONG&gt;model_retirements.json&lt;/STRONG&gt;`) updated with Microsoft's docs.&amp;nbsp;There's&amp;nbsp;a helper script if you want to update it yourself from CSV exports.&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;Everything&amp;nbsp;outputs to&amp;nbsp;timestamped CSV files. Easy to open in Excel, diff between runs, or feed into your BI tools.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Getting Started&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Three commands and&amp;nbsp;you're&amp;nbsp;running:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;# Grab the code 
git clone https://github.com/anishek-microsoft/foundry_model_audit.git 
cd foundry_model_audit 

# Log into Azure if you haven't already 
az login 

# Run it 
python foundry_model_audit.py &lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You'll get a timestamped folder (like `&lt;STRONG&gt;foundry-audit-20260126-114221/&lt;/STRONG&gt;`) with five CSV files:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;openai_deployments.csv&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- Everything&amp;nbsp;you've&amp;nbsp;got deployed&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;targeted_deployments.csv&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- Specific models&amp;nbsp;you're&amp;nbsp;tracking with usage data&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;model_retirement_alerts.csv&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- What's retiring soon&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;log_analytics_detailed_logs.csv&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- Detailed audit logs (if you&amp;nbsp;enabled&amp;nbsp;diagnostics)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;openai_no_diagnostics.csv&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;- Accounts that&amp;nbsp;don't&amp;nbsp;have logging turned on&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Want&amp;nbsp;to check specific models?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;python foundry_model_audit.py --target-models '[{"ModelName":"gpt-4","Versions":["0613","1106-preview"]}]'&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Enable detailed logging:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;python foundry_model_audit.py --enable-diag --diag-workspace-id "/subscriptions/.../workspaces/my-workspace" &lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Full documentation, parameters, and examples are in the [README](&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;https://github.com/anishek-microsoft/foundry_model_audit&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;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;What to Look&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;For&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;in the Reports&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&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;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;&lt;STRONG&gt;Find the dead weight&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Check `targeted_deployments.csv` for anything with `totalCalls_7d = 0`. If&amp;nbsp;it's&amp;nbsp;been sitting idle for a month,&amp;nbsp;time&amp;nbsp;to shut it down.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&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;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;&lt;STRONG&gt;Spot the money burners&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Filter for `sku&amp;nbsp;=&amp;nbsp;ProvisionedManaged` (those are PTUs) with low usage.&amp;nbsp;You're&amp;nbsp;paying fixed costs whether you use them or not. Low usage means&amp;nbsp;you're&amp;nbsp;probably wasting&amp;nbsp;money.&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;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="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Watch for upcoming retirements&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;In `model_retirement_alerts.csv`, anything retiring in less than&amp;nbsp;90 days&amp;nbsp;needs your attention. Microsoft usually suggests what to upgrade to, so&amp;nbsp;you've&amp;nbsp;got a migration path.&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;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="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Security check&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;In `log_analytics_detailed_logs.csv`, scan for weird `CallerIP` or `Identity` values. If you see API calls from places or&amp;nbsp;accounts&amp;nbsp;you&amp;nbsp;don't&amp;nbsp;recognize,&amp;nbsp;that's&amp;nbsp;worth investigating.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Things&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;I'd&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;Recommend&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&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;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;Run this regularly, not just once.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Set up a weekly job (Azure Function or scheduled task, whatever works). Track how things change over time—usage patterns, costs, new&amp;nbsp;deployments.&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="10" 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;Don't&amp;nbsp;let&amp;nbsp;retirements&amp;nbsp;surprise you.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Set up some kind of alert for models retiring in the next&amp;nbsp;90 days.&amp;nbsp;Give yourself time to plan migrations instead of firefighting.&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="10" 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="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Be smart about logging.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Turn on diagnostics for production stuff where you need compliance trails. For test/dev environments? Maybe skip it to save on Log Analytics costs. (First 5GB/month is free, but it&amp;nbsp;adds up&amp;nbsp;if&amp;nbsp;you're&amp;nbsp;logging everything.)&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="10" 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="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Keep audit data secure.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;These logs have IP addresses, identities, sometimes&amp;nbsp;request details.&amp;nbsp;Don't&amp;nbsp;commit them to Git. Use Azure Blob Storage with proper access controls. Encrypt if&amp;nbsp;you're&amp;nbsp;in a regulated industry.&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;Establish an audit cadence.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Here's&amp;nbsp;what I recommend:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&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;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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Weekly&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: Run the full audit to catch new deployments and usage changes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&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;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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Monthly&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: Review retirement alerts and plan migrations for anything &amp;lt;&amp;nbsp;90 days&amp;nbsp;out&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&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;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="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Quarterly&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: Deep-dive cost analysis—look for PTU optimization opportunities and capacity right-sizing&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This schedule aligns well with Microsoft's typical model retirement announcement cadence (usually 90+&amp;nbsp;days notice).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Taking It Further: Automation and Dashboards&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Running this manually is useful, but&amp;nbsp;you're&amp;nbsp;probably wondering: "Can I automate this whole thing?" Yep.&amp;nbsp;Here's&amp;nbsp;how&amp;nbsp;I'd&amp;nbsp;set it up:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Run Audits Automatically with Azure Functions&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Deploy the script as an Azure Function with a timer trigger. Set it to run every Monday morning, whatever works for you.&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;Basic setup:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Timer trigger kicks off the audit weekly&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Use Managed Identity so you&amp;nbsp;don't&amp;nbsp;have to mess with credentials&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Save CSV files to Blob Storage&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Event Grid&amp;nbsp;notifies you&amp;nbsp;when new reports are ready&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Why&amp;nbsp;this&amp;nbsp;works well:&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;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No servers 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="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;Scales automatically if needed&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;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Built-in logs and monitoring&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;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Consumption plan keeps costs low&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;Sample deployment:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import azure.functions as func 
import subprocess 
from azure.storage.blob import BlobServiceClient 
from datetime import datetime 

def main(mytimer: func.TimerRequest) -&amp;gt; None: 
    
# Run the audit 
    result = subprocess.run(['python', 'foundry_model_audit.py'],  
                          capture_output=True, text=True) 
   
 # Upload results to Blob Storage 
    timestamp = datetime.utcnow().strftime('%Y%m%d-%H%M%S') 
    blob_service = BlobServiceClient.from_connection_string(os.environ['STORAGE_CONNECTION']) 

    # Upload each CSV file 
    for csv_file in ['openai_deployments.csv', 'targeted_deployments.csv', 'model_retirement_alerts.csv']: 
        blob_client = blob_service.get_blob_client(container='audit-reports', blob=f'{timestamp}/{csv_file}') 
        with open(csv_file, 'rb') as data: 
            blob_client.upload_blob(data) &lt;/LI-CODE&gt;
&lt;H3 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Build Dashboards with Power BI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Once audit data is flowing to Blob Storage, hook up Power BI for some actual visibility:&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;Useful dashboard views:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Cost tracking&lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;How many deployments per account and region&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;PTU deployments sitting idle (easy cost savings)&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Cost trends month-over-month&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Top 10 most expensive underused deployments&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Retirement timeline&lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;Calendar showing when stuff's retiring&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Group by urgency (30/60/90 days out)&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Track migration progress&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Usage patterns&lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;API call trends&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Token usage (prompt vs completion)&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Which deployments are actually getting hit&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Spot unusual spikes&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Compliance view&lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI&gt;Which accounts have logging enabled&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Access patterns by user/service principal&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Overall audit coverage&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Setup is&amp;nbsp;pretty standard:&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;Connect to Blob Storage, import the CSVs with Power Query, build some visuals, set auto-refresh, publish to Power BI Service. Set up alerts for critical stuff (like models retiring in 30 days).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Get Alerts in Microsoft Teams&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Use Power Automate to push notifications to Teams when stuff needs attention:&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;Flow setup:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Trigger when a new blob shows up (new audit report)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Parse the CSV for important stuff (retirements, unused PTUs)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Post an adaptive card to your Teams channel&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You'll&amp;nbsp;get messages like: "Hey,&amp;nbsp;found&amp;nbsp;5 unused Provisioned deployments worth $12K/month" or "3 models retiring in&amp;nbsp;next&amp;nbsp;90 days." Beats checking manually.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Enterprise Workflows with Logic Apps&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For bigger setups, Logic Apps can orchestrate more complex stuff:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Loop through multiple subscriptions automatically&lt;/SPAN&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Route alerts to the right team owners&lt;/SPAN&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Create work items in Azure DevOps for migrations&lt;/SPAN&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Send exec summaries via email weekly&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;Basically&amp;nbsp;turns this&amp;nbsp;from a one-off script into a proper governance system that runs itself.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Wrapping Up&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Managing Azure OpenAI&amp;nbsp;at&amp;nbsp;scale&amp;nbsp;isn't&amp;nbsp;easy. The cloud moves&amp;nbsp;fast,&amp;nbsp;models retire, costs creep up, and keeping track of everything manually just&amp;nbsp;doesn't&amp;nbsp;work past a certain point.&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 tool&amp;nbsp;won't&amp;nbsp;solve every problem, but&amp;nbsp;it'll&amp;nbsp;give you visibility.&amp;nbsp;You'll know what's deployed, what's&amp;nbsp;actually being&amp;nbsp;used, what's wasting money, and what's about&amp;nbsp;to retire.&amp;nbsp;That's&amp;nbsp;a huge step up from flying&amp;nbsp;blind.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Want to try it?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Grab the code:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;https://github.com/anishek-microsoft/foundry_model_audit&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Run `python foundry_model_audit.py` on your subscription&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; See what you find&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Set this up, run it regularly, and save yourself some headaches.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Related reading:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/ai-services/openai/" target="_blank" rel="noopener"&gt;Azure OpenAI Service Documentation&lt;/A&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/ai-foundry/concepts/model-lifecycle-retirement" target="_blank" rel="noopener"&gt;Azure AI Foundry Model Lifecycle and Retirement&lt;/A&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-monitor/essentials/metrics-supported#microsoftcognitiveservicesaccounts" target="_blank" rel="noopener"&gt;Azure Monitor Metrics for Cognitive Services&lt;/A&gt;&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/cost-management-billing/" target="_blank" rel="noopener"&gt;Azure Cost Management and Optimization&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Got questions or ideas?&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Drop a comment or open an issue on GitHub.&amp;nbsp;I'd&amp;nbsp;love to hear what you think and what features would make this more useful.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;</description>
      <pubDate>Thu, 05 Feb 2026 12:39:21 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/automating-azure-openai-foundry-model-lifecycle-management/ba-p/4491982</guid>
      <dc:creator>anishekkamal</dc:creator>
      <dc:date>2026-02-05T12:39:21Z</dc:date>
    </item>
    <item>
      <title>Hardening Spring Boot Health Probes on AKS: How to Prevent Restart Storms Before They Start</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/hardening-spring-boot-health-probes-on-aks-how-to-prevent/ba-p/4491549</link>
      <description>&lt;H3&gt;Overview&lt;/H3&gt;
&lt;P&gt;Transient platform degradations can turn into outages if health probes are overly strict or wired to the wrong endpoint. In this case study, multiple incidents were reported in which many Spring Boot pods restarted in a short time window on Azure Kubernetes Service (AKS), contributing to visible downtime.&lt;/P&gt;
&lt;P&gt;A key lesson is that probing the consolidated /actuator/health endpoint can amplify blast radius: if any health contributor degrades, the overall endpoint can report unhealthy. When that endpoint is used for liveness, kubelet can restart pods at scale and create a feedback loop (mass restarts → node pressure → additional failures).&lt;/P&gt;
&lt;P&gt;The remediation combined two changes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;separating liveness and readiness onto the dedicated Actuator probe endpoints (/actuator/health/liveness and /actuator/health/readiness), and&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;tuning probe thresholds (especially timeoutSeconds) to tolerate brief latency spikes.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This article targets &lt;STRONG&gt;platform engineers&lt;/STRONG&gt; and &lt;STRONG&gt;SREs &lt;/STRONG&gt;and provides a &lt;STRONG&gt;baseline configuration&lt;/STRONG&gt;, a &lt;STRONG&gt;troubleshooting checklist&lt;/STRONG&gt;, and a simple &lt;STRONG&gt;validation &lt;/STRONG&gt;approach.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313813"&gt;&lt;/A&gt;Environment (for reproducibility)&lt;/H3&gt;
&lt;P&gt;&lt;EM&gt;This scenario was observed on AKS (Kubernetes 1.30.3) with Spring Boot 2.3.x and an NGINX Ingress Controller deployed as a separate workload. Node OS image and JDK details are not required for the probe wiring and threshold tuning discussed here.&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313814"&gt;&lt;/A&gt;The Challenge&lt;/H2&gt;
&lt;P&gt;On AKS, even a short-lived control plane latency spike can ripple into workload behavior if kubelet health checks are configured too aggressively. Probes are meant to protect reliability, but when they are wired to the wrong signal they can turn a brief degradation into a restart loop.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Problem statement:&lt;/STRONG&gt; Probe design amplified a transient AKS control plane degradation into a mass pod restart event.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Business impact:&lt;/STRONG&gt; Visible downtime and unstable service behavior due to restart storms across multiple microservices.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Who’s affected:&lt;/STRONG&gt; SREs, platform engineers, and application teams operating Spring Boot workloads on Kubernetes (especially AKS).&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313815"&gt;&lt;/A&gt;What Happened?&lt;/H2&gt;
&lt;P&gt;We saw a familiar pattern: many Spring Boot pods restarted within a short window, and probes started failing across a large part of the fleet at the same time.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313816"&gt;&lt;/A&gt;Incident timeline&lt;/H3&gt;
&lt;P&gt;On &lt;STRONG&gt;2025-03-25&lt;/STRONG&gt;, downtime was reported across multiple Spring Boot-based microservices due to widespread pod restarts, and the event was associated with elevated Kubernetes API server connectivity/latency issues on the Linux node pool. A similar pattern was reported again on &lt;STRONG&gt;2025-06-02&lt;/STRONG&gt;: probes failed for many pods in a short window, restarts followed, and the system needed ~15 minutes to stabilize while CPU/memory pressure was elevated.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313817"&gt;&lt;/A&gt;Why this failure mode is common&lt;/H3&gt;
&lt;P&gt;What made the situation worse was the probe design: liveness and readiness were both wired to the same composite health endpoint (/actuator/health) and the liveness timeout was very strict. Under transient latency, that combination can turn “brief slowness” into “restart many pods”, and restarts add even more pressure to nodes and the cluster.&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313818"&gt;&lt;/A&gt;The Solution&lt;/H2&gt;
&lt;P&gt;We kept the solution intentionally simple and AKS-focused: reduce the blast radius during transient cluster/platform slowness, and prevent kubelet from turning short probe timeouts into mass restarts.&lt;/P&gt;
&lt;P&gt;Concretely, we did two things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;moved readiness/liveness to the dedicated Actuator probe endpoints, and&lt;/LI&gt;
&lt;LI&gt;increased probe timeouts/thresholds to tolerate brief latency spikes.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313819"&gt;&lt;/A&gt;1) Use dedicated Actuator probe endpoints&lt;/H3&gt;
&lt;P&gt;Spring Boot Actuator exposes health endpoints under /actuator/health. The consolidated endpoint is intentionally broad (it reflects multiple health contributors). For Kubernetes probes, it is usually better to use dedicated readiness/liveness endpoints so a transient dependency issue can stop traffic without forcing restarts.&lt;/P&gt;
&lt;P&gt;In this case, we moved&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;readiness to /actuator/health/readiness (so AKS can stop sending traffic when the instance is not ready) and&lt;/LI&gt;
&lt;LI&gt;liveness to /actuator/health/liveness (so short slowness does not trigger restarts).&lt;/LI&gt;
&lt;LI&gt;We kept /actuator/health for human-facing checks and dashboards.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This article focuses on Kubernetes probe wiring and thresholds. The exact Spring Boot Actuator configuration (application.yml, environment variables, and the enabled health groups/contributors) is application-specific and does not change the core recommendation: use the dedicated probe endpoints for readiness/liveness and tune probe thresholds for transient latency.&lt;/P&gt;
&lt;P&gt;If you want a minimal Spring Boot baseline for these endpoints (Spring Boot 2.3+), it typically looks like this:&lt;/P&gt;
&lt;PRE&gt;management:&lt;BR /&gt;&amp;nbsp; endpoint:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; health:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; probes:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enabled: true&lt;/PRE&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313820"&gt;&lt;/A&gt;2) Tune probe thresholds to match reality&lt;/H3&gt;
&lt;P&gt;If the platform experiences brief latency spikes, timeoutSeconds: 1 is often too aggressive for liveness.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313821"&gt;&lt;/A&gt;Implementation (Step-by-Step)&lt;/H2&gt;
&lt;P&gt;The YAML snippets below illustrate the probe configurations used before and after the remediation.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313822"&gt;&lt;/A&gt;Step 1 — Baseline probe behavior (before)&lt;/H3&gt;
&lt;H4&gt;Scenario 1 (before): readiness + liveness wired to /actuator/health&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Baseline/original readiness probe (as captured):&lt;/P&gt;
&lt;PRE&gt;readinessProbe:&lt;BR /&gt;&amp;nbsp; httpGet:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; path: /actuator/health&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Spring Boot health endpoint for readiness&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port: 8080&lt;BR /&gt;&amp;nbsp; initialDelaySeconds: 5&lt;BR /&gt;&amp;nbsp; periodSeconds: 5&lt;BR /&gt;&amp;nbsp; timeoutSeconds: 2&lt;BR /&gt;&amp;nbsp; failureThreshold: 3&lt;/PRE&gt;
&lt;P&gt;Baseline/original liveness probe (as captured; failureThreshold not specified):&lt;/P&gt;
&lt;PRE&gt;livenessProbe:&lt;BR /&gt;&amp;nbsp; httpGet:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; path: /actuator/health&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Spring Boot health endpoint for liveness&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port: 8080&lt;BR /&gt;&amp;nbsp; initialDelaySeconds: 40&lt;BR /&gt;&amp;nbsp; periodSeconds: 15&lt;BR /&gt;&amp;nbsp; timeoutSeconds: 1&lt;BR /&gt;&amp;nbsp; # failureThreshold not specified (defaults apply)&lt;/PRE&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313823"&gt;&lt;/A&gt;Step 2 — Separate liveness and readiness endpoints (after)&lt;/H3&gt;
&lt;H4&gt;Scenario 2 (after): readiness gates traffic, liveness avoids restart loops&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Remediated readiness probe:&lt;/P&gt;
&lt;PRE&gt;readinessProbe:&lt;BR /&gt;&amp;nbsp; httpGet:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; path: /actuator/health/readiness&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port: 8080&lt;BR /&gt;&amp;nbsp; initialDelaySeconds: 60&lt;BR /&gt;&amp;nbsp; periodSeconds: 5&lt;BR /&gt;&amp;nbsp; timeoutSeconds: 5&lt;BR /&gt;&amp;nbsp; failureThreshold: 3&lt;/PRE&gt;
&lt;P&gt;Remediated liveness probe:&lt;/P&gt;
&lt;PRE&gt;livenessProbe:&lt;BR /&gt;&amp;nbsp; httpGet:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; path: /actuator/health/liveness&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port: 8080&lt;BR /&gt;&amp;nbsp; initialDelaySeconds: 60&lt;BR /&gt;&amp;nbsp; periodSeconds: 30&lt;BR /&gt;&amp;nbsp; timeoutSeconds: 30&lt;BR /&gt;&amp;nbsp; failureThreshold: 5&lt;/PRE&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313824"&gt;&lt;/A&gt;Step 3 — Add a startup probe (recommended)&lt;/H3&gt;
&lt;P&gt;Use a startup probe to prevent liveness/readiness from flapping while the JVM warms up (classloading, DB migrations, cache priming). The values below are a safe starting point for many Spring Boot services; tune them based on observed startup time.&lt;/P&gt;
&lt;PRE&gt;startupProbe:&lt;BR /&gt;&amp;nbsp; httpGet:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; path: /actuator/health/liveness&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port: 8080&lt;BR /&gt;&amp;nbsp; # Allows up to 5 minutes for cold start: 30 * 10s = 300s&lt;BR /&gt;&amp;nbsp; failureThreshold: 30&lt;BR /&gt;&amp;nbsp; periodSeconds: 10&lt;BR /&gt;  timeoutSeconds: 5&lt;/PRE&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313825"&gt;&lt;/A&gt;Architecture / Dataflow&lt;/H2&gt;
&lt;P&gt;This diagram shows the causal chain at a glance: a transient platform issue can surface as slower health responses, which then interacts with probe thresholds to decide whether traffic is removed or containers restart.&lt;A class="lia-anchor" target="_blank" name="_Toc217313826"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313827"&gt;&lt;/A&gt;Validation (How to Prove It Worked)&lt;/H2&gt;
&lt;P&gt;Validation is a simple before/after check: after the change, probe failures and restarts should drop, and short AKS/platform slowness should lead to traffic being gated (readiness) instead of mass restarts (liveness). If you can capture sanitized metrics, focus on restart rate, probe failures, ingress 5xx, recovery time, and (when available) control plane latency.&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313828"&gt;&lt;/A&gt;Troubleshooting Checklist (How to Diagnose)&lt;/H2&gt;
&lt;P&gt;Use this when you see synchronized restarts across many pods.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Confirm the restart pattern.&lt;/STRONG&gt; Start by watching pods and checking placement.
&lt;OL&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl get pods -n &amp;lt;ns&amp;gt; -w&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl get pods -n &amp;lt;ns&amp;gt; -o wide&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Check events and probe failures.&lt;/STRONG&gt; You want to see whether kubelet is killing containers due to probe timeouts.
&lt;OL&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl get events -n &amp;lt;ns&amp;gt; --sort-by=.lastTimestamp&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl describe pod &amp;lt;pod&amp;gt; -n &amp;lt;ns&amp;gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Identify restart reasons.&lt;/STRONG&gt; Look for CrashLoopBackOff, OOMKilled, and repeated probe failure events.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Validate Actuator endpoint behavior from inside the pod.&lt;/STRONG&gt; This confirms which endpoint flips and how fast it responds.
&lt;OL&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl exec -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt; -- curl -sS -m 5 &lt;A class="lia-external-url" href="http://127.0.0.1:8080/actuator/health" target="_blank" rel="noopener"&gt;http://127.0.0.1:8080/actuator/health&lt;/A&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl exec -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt; -- curl -sS -m 5 &lt;A class="lia-external-url" href="http://127.0.0.1:8080/actuator/health/readiness" target="_blank" rel="noopener"&gt;http://127.0.0.1:8080/actuator/health/readiness&lt;/A&gt;&lt;/PRE&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;PRE&gt;kubectl exec -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt; -- curl -sS -m 5 http://127.0.0.1:8080/actuator/health/liveness&lt;/PRE&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Correlate with AKS/platform signals.&lt;/STRONG&gt; If available, correlate probe failures with control plane latency signals.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313829"&gt;&lt;/A&gt;Security Notes (Don’t Create a New Exposure)&lt;/H2&gt;
&lt;P&gt;Treat Actuator as an internal-only surface. Probes need access, but that does not mean the internet does.&lt;/P&gt;
&lt;P&gt;Controls that typically work well for this pattern:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Avoid routing Actuator endpoints through an internet-facing ingress.&lt;/LI&gt;
&lt;LI&gt;If ingress is unavoidable, use internal exposure and strict allowlists.&lt;/LI&gt;
&lt;LI&gt;Keep Actuator exposure minimal (only the health endpoints needed for probes).&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313830"&gt;&lt;/A&gt;Discussion &amp;amp; Feedback&lt;/H2&gt;
&lt;P&gt;If you’ve run similar AKS incidents, I’d love to compare notes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Have you seen probe failures cascade into mass restarts?&lt;/LI&gt;
&lt;LI&gt;Do you wire liveness to a “full health” endpoint today, and why?&lt;/LI&gt;
&lt;LI&gt;What timeout and failure threshold values have proven reliable in production?&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313831"&gt;&lt;/A&gt;Resources&lt;/H2&gt;
&lt;P&gt;If you want to go deeper, these references cover the probe mechanics and the Spring Boot side of the health model:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/" target="_blank" rel="noopener"&gt;Configure liveness, readiness and startup probes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.spring.io/spring-boot/docs/2.3.x/reference/html/production-ready-features.html" target="_blank" rel="noopener"&gt;Spring Boot 2.3: Production-ready features&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.spring.io/spring-boot/docs/2.3.x/reference/html/production-ready-features.html#production-ready-health-indicators" target="_blank" rel="noopener"&gt;Spring Boot 2.3: Health indicators&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/aks/monitor-aks" target="_blank" rel="noopener"&gt;Monitor Azure Kubernetes Service (AKS)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313832"&gt;&lt;/A&gt;⚠️ Microsoft Support Statement&lt;/H2&gt;
&lt;P&gt;This article represents field experiences and community best practices. For official Microsoft support and SLA-backed guidance:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://azure.microsoft.com/support/" target="_blank" rel="noopener"&gt;Azure Support&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/" target="_blank" rel="noopener"&gt;Azure documentation on Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/answers/" target="_blank" rel="noopener"&gt;Microsoft Q&amp;amp;A&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Production issues: For production-impacting problems, contact Microsoft Support.&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313833"&gt;&lt;/A&gt;🔒 Customer Privacy Notice&lt;/H2&gt;
&lt;P&gt;This article describes real-world scenarios from customer engagements. All customer-specific information has been anonymized:&lt;/P&gt;
&lt;P&gt;Company names are replaced with industry categories, exact metrics are generalized where necessary, and infrastructure details are sanitized.&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313834"&gt;&lt;/A&gt;🤝 Community Contribution&lt;/H2&gt;
&lt;P&gt;We welcome corrections, improvements, and additional real-world examples. If you spot an issue or have a better probe hardening pattern, share it via comments or reach out.&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc217313835"&gt;&lt;/A&gt;🤖 AI Tools Disclosure&lt;/H2&gt;
&lt;P&gt;Parts of this article were created with assistance from AI tools to improve clarity and structure. Review and validate all content before publication.&lt;/P&gt;</description>
      <pubDate>Thu, 05 Feb 2026 12:37:41 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/hardening-spring-boot-health-probes-on-aks-how-to-prevent/ba-p/4491549</guid>
      <dc:creator>AndreasSemmelmann</dc:creator>
      <dc:date>2026-02-05T12:37:41Z</dc:date>
    </item>
    <item>
      <title>Conditional Access for Canvas Apps with Entra</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/conditional-access-for-canvas-apps-with-entra/ba-p/4490854</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In today's Power Platform landscape, administrators have a tough task securing the ever-increasing inventory of Canvas Apps across their tenant. Canvas apps often connect to sensitive data, run on a variety of devices, and serve diverse groups of users. That is why Conditional Access has become one of the most powerful tools in an admin’s toolkit, giving you fine grained control over how, where, and under what conditions users can access your apps.&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; &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;In this post,&amp;nbsp;I will&amp;nbsp;walk through what Conditional Access means for canvas apps, how it empowers admins to&amp;nbsp;maintain&amp;nbsp;strong security without adding friction for legitimate users, and example steps to apply your own conditional access policies to an app with PowerShell.&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; &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;What Conditional Access Brings to Canvas Apps&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;Conditional Access brings granular, app-level security controls from Microsoft Entra ID directly into Power Apps. Instead of applying blanket restrictions across the entire tenant, you can enforce requirements—like MFA, compliant devices, or trusted networks—only&amp;nbsp;on&amp;nbsp;the apps that need them.&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 lets you match security to the sensitivity of each individual app.&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; &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;Key Benefits for Admins&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;EM&gt;&lt;SPAN data-contrast="auto"&gt; Tailored Protection for Sensitive Apps&lt;/SPAN&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Not every app&amp;nbsp;requires&amp;nbsp;strict&amp;nbsp;controls. Conditional Access allows you to tighten security only for apps that handle sensitive or regulated data, without&amp;nbsp;over restricting&amp;nbsp;everything else.&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;EM&gt;&lt;SPAN data-contrast="auto"&gt; Control Access by Device Type&lt;/SPAN&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Admins can easily block or allow specific device categories—like preventing mobile access to a&amp;nbsp;high-risk&amp;nbsp;app or requiring managed devices for apps that&amp;nbsp;contain&amp;nbsp;confidential information.&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;EM&gt;&lt;SPAN data-contrast="auto"&gt; Alignment With Zero Trust&lt;/SPAN&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Conditional Access enforces identity, device, and session checks in real time, supporting a Zero Trust approach without adding unnecessary friction for legitimate users.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="4"&gt;
&lt;LI style="font-style: italic;"&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;Environment-Specific Flexibility&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You can apply stricter policies in production and lighter ones in development or testing, helping teams build efficiently while keeping sensitive environments locked down.&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; &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;A Stronger Security Model&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;Conditional Access&amp;nbsp;does not&amp;nbsp;replace existing&amp;nbsp;apps&amp;nbsp;or data permissions—it complements them. App-level security roles control what users can do inside an app, while Conditional Access governs whether they can get into the app at all. Together, they create a much more robust security posture.&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; &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;How to enable conditional access for a Canvas App example&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;In this example,&amp;nbsp;I will&amp;nbsp;detail steps to set up conditional access for a Canvas App to ensure tenant guest users are not able to access the app.&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; &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 1: Create an Authentication Context in Entra ID&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;SPAN data-contrast="auto"&gt;Go to the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Entra&amp;nbsp;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;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Protection → Conditional Access → Authentication context&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Click &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;+ New authentication context&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="1" 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;Name it (e.g.,&amp;nbsp;BlockGuests_PowerAppX)&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="1" 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;Enable &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Publish to apps&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&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="o" data-font="Courier New" data-listid="1" 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;Save and note the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Authentication Context ID&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&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;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&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;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 2: Create a Conditional Access Policy&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;SPAN data-contrast="auto"&gt;Go to &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Conditional Access → Policies → + New policy&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Name the policy (e.g., Block Guests from Power App X).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Assignments:&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 style="font-weight: bold;" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Users or workload identities&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:  &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" 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;Include: &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Guest or external users&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="font-weight: bold;" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Target resources&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" 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;Choose &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Authentication context&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" 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;Select the one you created earlier&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Access controls:&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="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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Grant&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: Select &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Block access&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="5" 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;Enable the policy and click&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Create&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&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;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&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 3: Assign the Authentication Context to the Power App&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;Use&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;PowerShell&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;to bind the Authentication Context to the specific Power App:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Open PowerShell as Administrator.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Connect to Power Apps&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Add-PowerAppsAccount&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;OL&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;Run the command to attach the context to your canvas app&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Set-AdminPowerAppConditionalAccessAuthenticationContextIds&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;-EnvironmentName&amp;nbsp;"&amp;lt;your-environment-name&amp;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;-AppName&amp;nbsp;"&amp;lt;your-app-id&amp;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;-AuthenticationContextIds&amp;nbsp;"&amp;lt;your-auth-context-id&amp;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; &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This binding tells Power Apps:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;“&lt;EM&gt;When this app opens, trigger the Conditional Access policy tied to this context&lt;/EM&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; &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: Test the Policy&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;Try accessing the app as a guest user.&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;You should see access blocked based on the Conditional Access policy.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&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;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; &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; &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;Wrap Up&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;A Stronger Security Model&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;Conditional Access&amp;nbsp;does not&amp;nbsp;replace existing&amp;nbsp;apps&amp;nbsp;or data permissions—it complements them. App-level security roles control what users can do inside an app, while Conditional Access governs whether they can get into the app at all. Together, they create a much more robust security posture.&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;Bottom Line&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;Conditional Access gives admins the flexibility to apply the right security to the right app. Whether&amp;nbsp;you are&amp;nbsp;enforcing MFA, restricting device types, or securing production environments, it helps you protect sensitive data without slowing down the organization.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Documentation for further reading:&amp;nbsp;&lt;/SPAN&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/power-platform/admin/admin-manage-apps#managed-environments-conditional-access-on-individual-appsnditional-access-on-individual-apps" target="_blank"&gt;Manage Power Apps - Power Platform | Microsoft Learn&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Demo from Power CAT:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://www.youtube.com/watch?v=vYdpjeuxFww" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Conditional Access Policies for Canvas Apps - Power CAT Live&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 30 Jan 2026 15:50:56 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/conditional-access-for-canvas-apps-with-entra/ba-p/4490854</guid>
      <dc:creator>mlotorto</dc:creator>
      <dc:date>2026-01-30T15:50:56Z</dc:date>
    </item>
    <item>
      <title>Microsoft Sentinel and Dataverse Integration</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/microsoft-sentinel-and-dataverse-integration/ba-p/4490198</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Integrating&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Sentinel&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Dataverse&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;brings advanced, unified security monitoring to your Power Platform&amp;nbsp;environments.&amp;nbsp;&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;Microsoft Sentinel is a cloud-native SIEM (Security Information and Event Management) that collects and correlates logs from across Azure, Microsoft 365, and more to detect and respond to threats in real time.&amp;nbsp;&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;By streaming Dataverse audit logs into Sentinel, organizations gain centralized visibility into Power Platform activity and can&amp;nbsp;leverage&amp;nbsp;Sentinel’s analytics and automation to rapidly detect suspicious behavior and enhance governance.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-contrast="auto"&gt;Benefits of Connecting Dataverse to Sentinel&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1)" data-font="" data-listid="5" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Unified Visibility and Threat Detection:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;All Dataverse audit events (e.g.&amp;nbsp;record access, changes, logins) are ingested into Sentinel, where they can be&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;correlated with signals from identities, devices, and other applications&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. This&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;holistic view&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;enables detection of suspicious patterns that might be missed in isolation.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;For example, security analysts can spot anomalies like:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559731&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&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="3"&gt;&lt;SPAN data-contrast="auto"&gt;mass data exports&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&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="3"&gt;&lt;SPAN data-contrast="auto"&gt;unusual access locations&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&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="3"&gt;&lt;SPAN data-contrast="auto"&gt;sudden policy changes in Dataverse operations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Sentinel provides out-of-the-box analytics rules to flag many of these risky behaviors (such as a departing user downloading large datasets or&amp;nbsp;deleting&amp;nbsp;records) without requiring custom queries.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;2. &lt;STRONG&gt;Faster Investigation and Response:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;With Dataverse logs in Sentinel, analysts can use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Kusto Query Language (KQL)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to&amp;nbsp;quickly search&amp;nbsp;and correlate Dataverse activity with other security logs (identity sign-ins, Office 365 events, etc.). This speeds up root-cause analysis during incidents.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Moreover, Sentinel’s&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;SOAR&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;capabilities mean you can trigger&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;automated playbooks&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;in response to Dataverse threats. For instance, if Sentinel detects an anomalous&amp;nbsp;privilege&amp;nbsp;escalation in Dataverse, it could automatically disable the user’s account&amp;nbsp;or alert an admin via Teams. This rapid, automated response helps&amp;nbsp;contain&amp;nbsp;threats&amp;nbsp;immediately, reducing the time to mitigate incidents.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&lt;SPAN data-contrast="auto"&gt;3)&lt;STRONG&gt; Improved Governance and Compliance:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Integrating Dataverse with Sentinel strengthens oversight of Power Platform usage.&amp;nbsp;All audit logs are stored in Sentinel’s scalable data lake, allowing&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;long-term retention&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; for compliance at a lower cost than storing in Dataverse.&amp;nbsp;By correlating Dataverse activity with other enterprise logs, organizations can ensure that Power Platform apps adhere to security policies and can prove compliance.&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-contrast="auto"&gt;Prerequisites&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Before deploying the integration, ensure the following prerequisites are in place:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Sentinel workspace:&amp;nbsp;&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 aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="7" data-list-defn-props="{&amp;quot;134224900&amp;quot;:true,&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="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Sentinel enabled&amp;nbsp;in the workspace: (&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/sentinel/quickstart-onboard?tabs=defender-portal" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;See Here to Onboard to a Microsoft Sentinel Workspace&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;2. You must have permission to create Data Collection Rules (DCR) and Data Collection Endpoints in that workspace.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/sentinel/roles" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Roles and permissions in the Microsoft Sentinel platform | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-monitor/data-collection/data-collection-rule-overview" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Data collection rules in Azure Monitor - Azure Monitor | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Dataverse environment:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;3. &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;The Dataverse environment must be a &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;production&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;environment (Dataverse logging for Sentinel is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;only&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;supported for production, not sandbox).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;4. Your organization should be using Dynamics 365 Customer Engagement and/or Power Platform apps (since those rely on Dataverse).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;5. Audit logging enabled:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Auditing must be turned on&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for the Dataverse environment in the Power Platform admin settings (which also routes audit logs to Microsoft Purview).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;Setup&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With prerequisites met, follow these high-level steps to set up the Sentinel integration:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt; Enable Dataverse Auditing (if not already enabled).&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;In the Power Platform admin center, ensure&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;tenant-level and environment-level auditing&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is on. Dataverse auditing is not enabled by default, so this is critical.&amp;nbsp;You’ll&amp;nbsp;also need to enable&amp;nbsp;auditing on&amp;nbsp;the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;entity (table) level&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for all relevant Dataverse tables. Microsoft provides a managed solution to simplify this:&amp;nbsp;&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 style="list-style-type: none;"&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;Import the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Audit Settings&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;solution: If your environment uses Dynamics 365 CE apps, import the solution from&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;aka.ms/AuditSettings/Dynamics&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;; otherwise use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;aka.ms/AuditSettings/DataverseOnly&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. This managed solution will turn on detailed auditing for all standard tables (entities) in Dataverse.&amp;nbsp;&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-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&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;For any&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;custom tables&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, manually enable auditing in their settings (toggle on Auditing for the entity).&amp;nbsp;&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 style="list-style-type: none;"&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;In each&amp;nbsp;entity’s&amp;nbsp;settings, under&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Auditing&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, enable the options for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;“Single record auditing”&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;“Multiple record auditing”&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to capture detailed create/update/delete&amp;nbsp;events. Then save and publish these changes. Enabling these ensures you capture granular audit logs needed for Sentinel.&amp;nbsp;&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 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;2. Install the Sentinel Solution and Connect Data Sources.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;In the Azure Sentinel portal&amp;nbsp;&lt;/SPAN&gt;&lt;A class="lia-external-url" href="https://portal.azure.com/" target="_blank"&gt;Azure Portal&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;or the Security Admin Portal&amp;nbsp;&lt;/SPAN&gt;&lt;A class="lia-external-url" href="https://security.microsoft.com/" target="_blank"&gt;Defender Portal&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;navigate to the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Content hub&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(or in Microsoft Defender portal, go to Content hub for Sentinel) and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;install the “Microsoft Sentinel Solution for Microsoft Business Applications.”&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;This deploys all the components (analytics rules, workbooks, connectors, etc.) for Power Platform integration. Once installed, go to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Configuration &amp;gt; Data connectors&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;in Sentinel. You will see new connectors available for:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" 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 Dataverse&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 class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" 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;Microsoft Power Platform Admin Activity&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 class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" 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;Microsoft Power Automate&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 class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;(A connector for Dynamics 365 Finance &amp;amp; Operations is also included for organizations using Dynamics F&amp;amp;O).&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; Follow this link for more details on F&amp;amp;O connector: &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt; &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/sentinel/dynamics-365/deploy-dynamics-365-finance-operations-solution" target="_blank"&gt;Connect Microsoft Dynamics 365 Finance and Operations to Microsoft Sentinel | Microsoft Learn&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;For each relevant data connector (Dataverse, Power Platform Admin, Power Automate), open its page and select&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Connect&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;This step links your Dataverse environment’s audit stream to Sentinel via the Azure Monitor DCR infrastructure.&amp;nbsp;After connecting, Sentinel will start listening&amp;nbsp;for&amp;nbsp;the audit logs from Purview.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;ValidateData Ingestion.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;With auditing enabled and connectors in place, perform some sample activities in your Dataverse environment to generate logs (for example, create or update a row in a Dataverse table, change a Power Platform environment setting, run a Power Automate flow).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In general,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Dataverse and Power Automate activity logs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;should begin flowing into Sentinel within a few minutes,&amp;nbsp;whereas&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Power Platform admin logs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(e.g.&amp;nbsp;environment or D365 admin actions) may take up to an hour for the first time. Be patient and then verify ingestion by querying the logs in Sentinel. You can run KQL queries&amp;nbsp;in&amp;nbsp;the Logs blade of the Sentinel Azure portal (or the Hunting section of Defender portal) to confirm data is arriving.&amp;nbsp;&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;For example, run a query on the&amp;nbsp;PowerPlatformAdminActivity&amp;nbsp;table to see if recent records exist.&amp;nbsp;&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;After a successful setup, Microsoft Sentinel will be populating three main Log Analytics tables with your Dataverse-related logs (as listed below):&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&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;SPAN data-contrast="auto"&gt;Log Analytics Table&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;Data Collected&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;PowerPlatformAdminActivity&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;Power Platform&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;administrative&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;logs (e.g.&amp;nbsp;environment settings changes, user role assignments)&amp;nbsp;&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;PowerAutomateActivity&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;Power Automate (Flow)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;activity&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;logs (creation, runs, etc.)&amp;nbsp;&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;DataverseActivity&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;Dataverse and model-driven&amp;nbsp;app&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;business&amp;nbsp;data&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;activity logs (create, update,&amp;nbsp;delete&amp;nbsp;events on records, etc.)&amp;nbsp;&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;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;These tables&amp;nbsp;contain&amp;nbsp;the audit data that Sentinel will use for analysis.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;For instance, an update to a row in a Dataverse table will generate an event in the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;DataverseActivity&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;table,&amp;nbsp;whereas&amp;nbsp;an administrative action like changing a Data Loss Prevention (DLP) policy or adding a user to an environment appears in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;PowerPlatformAdminActivity&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;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&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 class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-contrast="auto"&gt;Analytics and Threat Detection Capabilities&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Once the data is flowing, you can&amp;nbsp;leverage&amp;nbsp;Microsoft Sentinel’s powerful analytics and automation on your Dataverse logs. The&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Business Apps Sentinel solution&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;you installed comes with&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;prebuilt analytics rules&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;tailored to Dataverse and Power Platform scenarios. These rules will automatically generate incidents for suspicious patterns, such as:&amp;nbsp;&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;Mass record downloads or deletions&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(which could&amp;nbsp;indicate&amp;nbsp;a potential&amp;nbsp;data theft or misuse)&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;Anomalous access&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, like a user accessing Dataverse from an unusual location or at an odd time&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;Privilege escalations or policy changes&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;e.g.&amp;nbsp;a user suddenly gaining a system admin role, or a DLP policy being turned off.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Security teams can also create&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;custom detection rules&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;using KQL to address organization-specific threats. All the Dataverse audit logs in Sentinel are fully&amp;nbsp;queryable&amp;nbsp;– for example, you could write a query to find when a particular record was&amp;nbsp;modified&amp;nbsp;and by whom, or to detect an unusual spike in Power Automate flow failures. These queries can be turned into new&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;alert rules&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;as needed. Sentinel provides interactive workbooks and a hunting interface to help visualize and drill into this data for proactive threat hunting.&amp;nbsp;&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;In addition to detection, Sentinel enables&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;automated&amp;nbsp;response&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for Power Platform incidents. Using&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Playbooks (Logic Apps)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, you might automate actions like disabling a user’s Power Platform account, alerting the IT team via Microsoft Teams, or creating a ticket in ServiceNow whenever a high-severity Dataverse incident is detected. For example, if multiple deletion events are detected in a short span on a sensitive table, a playbook could&amp;nbsp;immediately&amp;nbsp;notify a security channel and suspend the user's access pending investigation. This kind of end-to-end automation&amp;nbsp;greatly improves&amp;nbsp;your security posture by reducing response times and ensuring consistent actions.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In summary&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, connecting Dataverse auditing to Microsoft Sentinel equips organizations with a unified view of business application activity and the advanced tools to detect, investigate, and respond to potential security issues in their Power Platform environments. It marries the rich audit data from Dataverse with Sentinel’s powerful SIEM capabilities – enabling proactive monitoring of user actions, quick identification of anomalies, and automated defense measures to protect your low-code applications. With the integration set up, Power Platform admins and security analysts can rest easier knowing that any unusual or malicious activity in Dataverse will light up on the Sentinel radar and be handled swiftly.&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;For detailed step-by-step guidance, refer to Microsoft’s documentation on&amp;nbsp;&lt;/SPAN&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/sentinel/business-applications/deploy-power-platform-solution" target="_blank"&gt;connecting Power Platform (Dataverse) to Sentinel&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; and &lt;SPAN data-ccp-props="{}"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/sentinel/dynamics-365/deploy-dynamics-365-finance-operations-solution" target="_blank"&gt;Connect Microsoft Dynamics 365 Finance and Operations to Microsoft Sentinel | Microsoft Learn&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;These resources provide deeper instructions and&amp;nbsp;additional&amp;nbsp;tips for&amp;nbsp;a successful&amp;nbsp;integration.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 28 Jan 2026 20:53:45 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/microsoft-sentinel-and-dataverse-integration/ba-p/4490198</guid>
      <dc:creator>jcollado</dc:creator>
      <dc:date>2026-01-28T20:53:45Z</dc:date>
    </item>
    <item>
      <title>SAP RISE &amp; HANA Data Migration: AWS S3 to Azure Blob Storage via Azure Storage Mover</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/sap-rise-hana-data-migration-aws-s3-to-azure-blob-storage-via/ba-p/4487991</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;: &amp;nbsp;&lt;/H3&gt;
&lt;P&gt;Cloud migration using Azure Storage Mover enables high‑volume data transfer from Amazon S3 into Azure Blob Storage as part of SAP on Azure modernization initiatives, including RISE and SAP HANA deployments. Azure Arc multicloud connectors provide control‑plane integration with AWS, allowing Azure to authenticate and discover S3 buckets and expose them as managed external resources.&lt;/P&gt;
&lt;P&gt;Storage Mover then orchestrates the end‑to‑end data movement using S3 source and Blob target endpoints, supporting large‑scale migrations with telemetry, integrity validation, and incremental sync options. Migrated datasets land in Azure Blob Storage, where they can be consumed by SAP HANA, SAP Data Intelligence, SAP S/4Hana, BW/4Hana and downstream Azure analytics or backup workflows.&lt;/P&gt;
&lt;P&gt;The process completes as the data lands in Azure Blob Storage, establishing a cloud‑native destination for ongoing analytics, applications, or archival needs. This guide outlines the essential prerequisites, service limits, and configuration steps required to implement migration with clarity and operational confidence.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;End‑to‑End Migration with SAP Consumption Diagram:&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The migration process begins with Amazon S3, which serves as source storage containing the files and folders you intend to transfer to Azure. Azure then connects securely to your AWS environment through the Azure Arc Multicloud Connector, which authenticates to AWS, discovers your S3 buckets, and exposes their inventory to Azure as part of its cross‑cloud control‑plane integration. Once connected, Azure Storage Mover a fully managed migration engine executes the data transfer using the configured S3 source endpoint and Azure Blob target endpoint.&lt;/P&gt;
&lt;P&gt;Storage Mover supports large‑scale migrations of up to &lt;EM&gt;500 million objects per job&lt;/EM&gt;, provides incremental sync options, and offers detailed logging and job tracking for operational visibility. Once migrated datasets are staged in Azure Blob Storage, where they can be leveraged by SAP HANA, SAP Data Intelligence, SAP S/4HANA, BW/4HANA, and integrated Azure analytics or backup workflows. The cloud‑native destination that supports containers, lifecycle policies, and seamless integration with Azure analytics and application services such as Azure Synapse, Azure Data Factory, and AI workloads.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;1)&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Prerequisites:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;An active Azure subscription with the required permissions to manage Azure Storage Mover and Azure Arc resources.&lt;/LI&gt;
&lt;LI&gt;An AWS account with access to the Amazon S3 bucket you plan to migrate.&lt;/LI&gt;
&lt;LI&gt;A destination Azure Storage account to receive the transferred data.&lt;/LI&gt;
&lt;LI&gt;An Azure Storage Mover resource already deployed in your Azure environment.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;2) &lt;/STRONG&gt;&lt;STRONG&gt;Service Limits:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Supports up to 500 million objects per migration job.&lt;/LI&gt;
&lt;LI&gt;Allows a maximum of 10 concurrent migration jobs per subscription (higher limits available through support).&lt;/LI&gt;
&lt;LI&gt;Archived objects are not automatically rehydrated: Data in Deep Archive or Glacier must be restored before migration.&lt;/LI&gt;
&lt;LI&gt;Private networking is not supported: Secure data transfer is enforced using trusted Azure IP ranges.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;3) &lt;/STRONG&gt;&lt;STRONG&gt;Create Multicloud Connector for AWS:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Use Azure Arc to connect AWS services to Azure, enabling discovery and data transfer operations.&lt;img /&gt;&lt;/LI&gt;
&lt;LI&gt;Steps include selecting subscription, region, AWS account ID, and adding Inventory and Storage Data Management solutions.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;4) &lt;/STRONG&gt;&lt;STRONG&gt;Configure Endpoints: &lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;AWS S3 Source Endpoint - Navigate to Storage Endpoints → Source endpoints → Add endpoint. Select the AWS S3 bucket from the multicloud connector.&lt;/LI&gt;
&lt;LI&gt;Azure Blob Storage Target Endpoint - Select your subscription, storage account, and blob container. Assign Storage Blob Data Contributor RBAC role.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;5) &lt;/STRONG&gt;&lt;STRONG&gt;Creating Migration Project &amp;amp; Job Definition:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Create a migration project under Project Explorer.&lt;img /&gt;&lt;/LI&gt;
&lt;LI&gt;Add a Job Definition specifying source S3 endpoint and target Blob endpoint. Select migration mode: Mirror, Incremental, or Full copy.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;6) Run &amp;amp; Monitor Migration Job:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Start the job from the Job Properties pan.&lt;/LI&gt;
&lt;LI&gt;Monitor speed, progress %, and estimated completion time in Migration Overview. Review logs for warnings or transfer errors.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;7) &lt;/STRONG&gt;&lt;STRONG&gt;Post-Migration Validation:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Verify data integrity and completeness.&lt;/LI&gt;
&lt;LI&gt;Conduct UAT testing.&lt;/LI&gt;
&lt;LI&gt;Enable incremental sync if needed.&lt;/LI&gt;
&lt;LI&gt;Optionally delete S3 bucket after migration is validated.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;Conclusion: &lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The combined use of Azure Storage Mover and Azure Arc Multicloud Connector provides robust, scalable, and secure architecture for migrating data from Amazon S3 to Azure Blob Storage especially for SAP, RISE, and HANA modernization scenarios. By extending Azure’s control plane into AWS, Arc enables authenticated discovery of S3 buckets while Storage Mover orchestrates high‑throughput, policy‑driven data movement using defined source and target endpoints. With support for large object counts, telemetry, and sync capabilities, the solution ensures operational visibility and data integrity throughout the migration lifecycle. Once transferred, data lands in Azure Blob Storage, ready to integrate with SAP HANA, SAP Data Intelligence, SAP S/4HANA, BW/4HANA, and Azure-native analytics and AI services, establishing a high‑performance foundation for SAP workloads in the cloud.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Reference links:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/data-factory/data-migration-guidance-s3-azure-storage" target="_blank"&gt;Migrate data from Amazon S3 to Azure Storage - Azure Data Factory | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://userapps.support.sap.com/sap/support/knowledge/en/3476767" target="_blank"&gt;3476767 - How-To: Connect S/4HANA on premise with Azure Blob | SAP Knowledge Base Article&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 21 Jan 2026 07:01:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/sap-rise-hana-data-migration-aws-s3-to-azure-blob-storage-via/ba-p/4487991</guid>
      <dc:creator>AnuradhaKarnam</dc:creator>
      <dc:date>2026-01-21T07:01:02Z</dc:date>
    </item>
    <item>
      <title>Comparing Open-Source vs Closed LLMs for Enterprise Apps</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/comparing-open-source-vs-closed-llms-for-enterprise-apps/ba-p/4485708</link>
      <description>&lt;H1&gt;Quiz&lt;/H1&gt;
&lt;P class="lia-align-justify"&gt;Let me start with a quick two‑question quiz to test your knowledge on Open‑Source LLMs vs Closed LLMs. The answers are provided at the end of this blog *.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1)&amp;nbsp; &lt;/STRONG&gt;&lt;STRONG&gt;Which category do GPT‑4, Claude, and Gemini LLMs fall under?&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Open‑source models&lt;/LI&gt;
&lt;LI&gt;Research only models&lt;/LI&gt;
&lt;LI&gt;Closed / proprietary models&lt;/LI&gt;
&lt;LI&gt;Edge only models&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;2)&amp;nbsp; &lt;/STRONG&gt;&lt;STRONG&gt;Which is a defining trait of open&lt;/STRONG&gt;&lt;STRONG&gt;‑source LLMs?&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Always hosted by hyperscalers&lt;/LI&gt;
&lt;LI&gt;Full access to model weights and architecture&lt;/LI&gt;
&lt;LI&gt;Higher accuracy than closed models&lt;/LI&gt;
&lt;LI&gt;Built‑in enterprise support&lt;/LI&gt;
&lt;/OL&gt;
&lt;H1&gt;Overview Of LLMs In Enterprise Context&lt;/H1&gt;
&lt;P class="lia-align-justify"&gt;LLMs are advanced AI models trained in vast data. They enable tasks such as summarization, translation, content creation, and data analysis.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;When companies build applications that use AI, one of the most important decisions they face is choosing the right type of Large Language Model (LLM). There are two main choices: open‑source LLMs and closed or proprietary LLMs. Understanding the differences between them helps businesses decide which option fits their needs, goals, and security requirements.&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;Open‑source LLMs are models whose code and architecture are publicly available. This means companies can customize them, host them on Cloud or on-premises, and control how the data is handled. They offer flexibility and transparency, but they also require more technical skills and resources to manage.&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Typical Enterprise Use Cases:&lt;/STRONG&gt; Enterprises (including our customers) utilize LLMs across multiple domains to drive innovation and efficiency.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px lia-align-justify"&gt;Some examples of where customers might use LLMs include chatbots, virtual assistants, code generation, document processing, knowledge management, market research, sentiment analysis, sales enablement, resume screening, incident root cause analysis, and financial fraud detection using narrative pattern analysis.&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Key Considerations for LLM Adoption:&lt;/STRONG&gt; Data privacy, security compliance, fine-tuning options for domain specific data, integration with existing enterprise systems, total cost of ownership, model accuracy &amp;amp; bias mitigation, resource requirements.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Types: Open-Source vs Closed LLMs&lt;/H1&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Open-Source LLMs:&lt;/STRONG&gt; Open‑source Large Language Models (LLMs) are AI models whose model weights, architecture, and often training code are publicly available, allowing organizations to inspect, modify, fine‑tune, and deploy the models on their own infrastructure (cloud, on‑premises, or hybrid). Unlike proprietary models, open‑source LLMs give enterprises full control over how the model is hosted, secured, customized, and governed, but also place greater responsibility on the organization for operations, compliance, and lifecycle management.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;They are also called open-weights.&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Closed LLMs:&lt;/STRONG&gt; Closed (Proprietary) Large Language Models (LLMs) are AI models whose architecture, training data, and model weights are not publicly available and are owned, hosted, and managed by a vendor. Enterprises consume these models via managed services or APIs, with the vendor responsible for infrastructure, scaling, security controls, and ongoing model updates. Organizations can use and configure these models but cannot inspect or modify the core model internals.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Comparative Analysis&lt;/H1&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;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Open-Source LLMs&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Closed (Proprietary) LLMs&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Examples&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Meta (Facebook) - LlaMA 3, LlaMA 4&lt;/P&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mistral AI - Devstral 2, Devstral Small 2, Mistral Large 3&lt;/P&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Alibaba - Qwen&lt;/P&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Databricks - DBRX&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft - Azure OpenAI models&lt;/P&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Open AI - GPT-4o, GPT-4&lt;/P&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Google – main Gemini models&lt;/P&gt;
&lt;P&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Anthropic - Claude Sonnet 4.5, Claude Haiku 4.5, Claude Opus 4.5&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Hosting / Deployment&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Customer managed (Cloud/On prem). Runs on customer managed GPUs.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Vendor managed (mostly Cloud). API based or managed platform.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Model Access&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Full access to weights&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;No access to internals&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Customization&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Full fine‑tuning&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Prompt Engineering, RAG, Limited fine‑tuning&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Operational Overhead&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;High&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Low&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Security / Governance&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Customer responsible for Data Security and Model Governance&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Built in Security, Guardrails, and Privacy Controls&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Reliability &amp;amp; Performance&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Requires strong AI maturity. Generally, no built in SLAs.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Preferred for regulated industries. Consistent performance and SLAs. Designed for production workloads at scale.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Support&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Community driven support, Self managed operations&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Vendor backed enterprise support, continuous updates, continuous updates, integrated troubleshooting&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Incident Management&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Internal teams&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Vendor escalation paths&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Cost implications and licensing models&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;No license fee. Costs include GPUs / compute, ML Engineering, Operations &amp;amp; Security.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Usage based pricing (Tokens / API calls). Predictable Cost and Lower Operational Burden.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Scalability, flexibility, and ease of integration&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Scalability is customer managed and requires additional operational maturity. Integrates well with private data platforms but requires effort upfront.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Elastic, on demand scaling handled by vendor. Automatically handles Burst traffic, Global availability and Load balancing and failover. Fastest integration path with Plug and play APIs.&lt;/P&gt;
&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;H1&gt;Demo&lt;/H1&gt;
&lt;P class="lia-align-justify"&gt;&lt;STRONG&gt;Internals of the Llama 3 model on Google Colab using Hugging Face Transformers library &amp;amp; Python code: &lt;/STRONG&gt;Later, I plan to try something similar on the Azure platform using Microsoft Foundry. For this demo, I chose to use completely open‑source platforms.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;This was done for two main reasons:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;My goal was to show how easy it is to explore and interact with the open‑source Llama3 model without relying on any proprietary tools. By using openly available frameworks and environments, the entire workflow remains transparent, customizable, and accessible to anyone who wants to learn, experiment, or build with Llama 3 (or any open-source LLM) in a fully open ecosystem.&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;My other reason was to highlight open‑source tools and processes especially since these topics may come as talking points in customer conversations.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;AI Tools Used:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Llama 3: &lt;/STRONG&gt;Llama 3 is Meta's advanced, open-source family of Large Language Models (LLMs), offering reasoning, coding, and instruction-following capabilities for AI applications like Meta AI (on Facebook, Instagram, etc.), providing tools for developers. It comes in various sizes (8B, 70B, and larger) and versions (base and instruction-tuned).&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Hugging Face: &lt;/STRONG&gt;Hugging Face is a open‑source AI and machine learning platform used by developers, researchers, and enterprises to build, share, and deploy AI models. It is often described as the “GitHub of Machine Learning”, because it hosts millions of models, datasets, and applications in a collaborative community environment.&lt;STRONG style="color: rgb(30, 30, 30); text-align: left;"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Hugging Face Transformers: &lt;/STRONG&gt;Hugging Face Transformers is an open-source Python library that provides APIs and tools to access and use pre-trained machine learning models. It simplifies the application of complex AI models for tasks across various domains, including natural language processing (NLP), computer vision, and audio processing.&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Google Colab: &lt;/STRONG&gt;This is a free, cloud-based platform. It allows users to write and run Python code in a Jupyter Notebook environment through a web browser.&lt;STRONG style="color: rgb(30, 30, 30); text-align: left;"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Jupyter Notebook: &lt;/STRONG&gt;Jupyter Notebook is an open-source, web-based application for creating and sharing documents with live code, equations, visualizations, and narrative text. It is used for data cleaning, scientific computing, machine learning, and data exploration. It allows users to combine code execution (in Python, R, Julia, etc.) with rich text and output (like charts and images) in one interactive document, facilitating reproducible research and storytelling with data.&lt;STRONG style="color: rgb(30, 30, 30); text-align: left;"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Python:&lt;/STRONG&gt;&lt;STRONG&gt; &lt;/STRONG&gt;Python is a high level‑, interpreted programming language known for its simple, readable syntax and wide range of uses in web development, data science, AI, automation, and more.&lt;STRONG style="color: rgb(30, 30, 30); text-align: left;"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;The Python code will examine the internals of the Llama 3 model on Google Colab, using Hugging Face and Python code. The Hugging Face Transformers library is used to load the model and inspect its configuration and architecture:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Step-1:&lt;/STRONG&gt; Get access to the Llama 3 model on Hugging Face (e.g., meta-llama/Meta-Llama-3-8B).&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Step-2:&lt;/STRONG&gt; Generate a Hugging Face API Token with "read" or "write" permissions. Configure Hugging Face Access Token in Google Colab Environment.&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Step-3:&lt;/STRONG&gt; In Google Colab, create a Jupyter Notebook and write Python code for the following tasks (code in following section):&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;o&amp;nbsp;&amp;nbsp; Install Libraries: Install the necessary Python packages.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;o&amp;nbsp;&amp;nbsp; Retrieve the token from Colab secrets.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;o&amp;nbsp;&amp;nbsp; The Python script first loads the model’s configuration, then loads the model itself to examine its architecture and inspect its layers.&lt;/P&gt;
&lt;P&gt;The screenshot from Google Colab environment:&lt;/P&gt;
&lt;img /&gt;
&lt;H1&gt;Jupyter Notebook Python Code&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;Get access to the Llama 3 model on Hugging Face (e.g., meta-llama/Meta-Llama-3-8B). Install Libraries: Install the necessary Python packages.&lt;/LI&gt;
&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;!pip install transformers torch accelerate bitsandbytes&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Generate a Hugging Face API token with "read" or “write” permissions&lt;/LI&gt;
&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;#!huggingface-cli login&lt;/P&gt;
&lt;P&gt;from google.colab import userdata&lt;/P&gt;
&lt;P&gt;from huggingface_hub import login&lt;/P&gt;
&lt;P&gt;# Retrieve the token from Colab secrets&lt;/P&gt;
&lt;P&gt;TokenAllAccessWrite = userdata.get('TokenAllAccessWrite')&lt;/P&gt;
&lt;P&gt;# Log in to Hugging Face&lt;/P&gt;
&lt;P&gt;if TokenAllAccessWrite:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; login(TokenAllAccessWrite)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print("Successfully logged in to Hugging Face!")&lt;/P&gt;
&lt;P&gt;else:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print("TokenAllAccessWrite not found in Colab secrets.")&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Python Code to Inspect Llama 3 Internals. The following Python script loads the model's configuration and then the model itself, allowing you to print the architecture and inspect its layers.&lt;/LI&gt;
&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;# 1. Inspect the model configuration&lt;/P&gt;
&lt;P&gt;# The config object contains hyperparameters defining the architecture (e.g., number of layers, hidden size, attention heads)&lt;/P&gt;
&lt;P&gt;print(f"--- Loading Configuration for {model_id} ---")&lt;/P&gt;
&lt;P&gt;config = AutoConfig.from_pretrained(model_id, token=True) # Use token=True if HF_TOKEN env var is set&lt;/P&gt;
&lt;P&gt;print(config)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;print("\n--- Key Architectural Details from Config ---")&lt;/P&gt;
&lt;P&gt;print(f"Vocab size: {config.vocab_size}")&lt;/P&gt;
&lt;P&gt;print(f"Hidden size: {config.hidden_size}")&lt;/P&gt;
&lt;P&gt;print(f"Number of attention heads: {config.num_attention_heads}")&lt;/P&gt;
&lt;P&gt;print(f"Number of hidden layers (Transformer blocks): {config.num_hidden_layers}")&lt;/P&gt;
&lt;P&gt;print(f"Max position embeddings (Context length): {config.max_position_embeddings}")&lt;/P&gt;
&lt;P&gt;print(f"Grouped Query Attention (GQA) num_key_value_heads: {config.num_key_value_heads}") # Llama 3 uses GQA&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;# 2. Load the actual model and inspect its structure&lt;/P&gt;
&lt;P&gt;# This will download the model weights (approx. 16GB for 8B model) and cache them&lt;/P&gt;
&lt;P&gt;# device_map="auto" efficiently loads the model across available resources (GPU/CPU)&lt;/P&gt;
&lt;P&gt;print(f"\n--- Loading Model {model_id} to Inspect Architecture ---")&lt;/P&gt;
&lt;P&gt;try:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; model = AutoModelForCausalLM.from_pretrained(&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; model_id,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; device_map="auto",&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; torch_dtype=torch.bfloat16, # Llama 3 trained in bfloat16&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; token=True&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; )&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print("\n--- Model Architecture (pytorch modules) ---")&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print(model)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; # You can access specific layers, e.g., the first decoder layer&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; first_decoder_layer = model.model.layers[0]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print("\n--- Details of the First Decoder Layer ---")&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print(first_decoder_layer)&lt;/P&gt;
&lt;P&gt;except Exception as e:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f"\nAn error occurred: {e}")&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; print("Ensure you have requested access on Hugging Face and your token is set correctly.")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H1&gt;Conclusion&lt;/H1&gt;
&lt;UL&gt;
&lt;LI class="lia-align-justify"&gt;&lt;STRONG&gt;Decision-Making Considerations for Enterprises:&lt;/STRONG&gt; Choosing the right LLM depends on enterprise goals, constraints and technical needs.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px lia-align-justify"&gt;Careful evaluation of cost, scalability, security, and long-term sustainability will guide the decision towards Open-Source vs Closed LLMs.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Enterprises must weigh the benefits of open-source LLMs:&lt;/STRONG&gt; Control, Autonomy, Customizable, Strong community support.&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Enterprises must weigh the benefits of closed (proprietary) LLMs:&lt;/STRONG&gt; Speed, High performance, Integrated services, Reliability, Governance.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Reference Links / Recommended Reading&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure OpenAI in Foundry Models:&lt;/STRONG&gt; &lt;A href="https://azure.microsoft.com/en-us/products/ai-foundry/models/openai/" target="_blank" rel="noopener"&gt;https://azure.microsoft.com/en-us/products/ai-foundry/models/openai/&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Hugging Face: &lt;/STRONG&gt;&lt;A href="https://huggingface.co/" target="_blank" rel="noopener"&gt;https://huggingface.co/&lt;/A&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Hugging Face Transformers: &lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;A href="https://huggingface.co/docs/transformers/en/index" target="_blank" rel="noopener"&gt;https://huggingface.co/docs/transformers/en/index&lt;/A&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;A href="https://github.com/huggingface/transformers" target="_blank" rel="noopener"&gt;https://github.com/huggingface/transformers&lt;/A&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Google Colab: &lt;/STRONG&gt;&lt;A href="https://colab.research.google.com/" target="_blank" rel="noopener"&gt;https://colab.research.google.com/&lt;/A&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Llama 3: &lt;/STRONG&gt;&lt;A href="https://www.llama.com/models/llama-3/" target="_blank" rel="noopener"&gt;https://www.llama.com/models/llama-3/&lt;/A&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Jupyter Notebook: &lt;/STRONG&gt;&lt;A href="https://jupyter.org/" target="_blank" rel="noopener"&gt;https://jupyter.org/&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Python&lt;/STRONG&gt;:&amp;nbsp; &lt;A href="https://www.python.org/" target="_blank" rel="noopener"&gt;https://www.python.org/&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;* Quiz: The correct answers are option C for question 1 and option B for question 2.&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 14 Jan 2026 18:52:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/comparing-open-source-vs-closed-llms-for-enterprise-apps/ba-p/4485708</guid>
      <dc:creator>ashishmahajan</dc:creator>
      <dc:date>2026-01-14T18:52:02Z</dc:date>
    </item>
    <item>
      <title>Migration from SAP ERP On-Premises to SAP S/4HANA in Microsoft Azure</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/migration-from-sap-erp-on-premises-to-sap-s-4hana-in-microsoft/ba-p/4480421</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This describes the&amp;nbsp;tool guided&amp;nbsp;migration of an&amp;nbsp;on-premises&amp;nbsp;SAP ERP system into Microsoft Azure, combined with a system conversion to SAP S/4HANA. The Software Update Manager (SUM) acts as the technical engine for the conversion. I will also explain how the SAP&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Cloud Appliance Library streamlines this process through a&amp;nbsp;step-by-step&amp;nbsp;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;In general, there are three primary paths for migrating to SAP S/4HANA:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: bold;" aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="2" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Selective Data Transition&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: bold;" aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="2" 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;STRONG style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="auto"&gt;New Implementation&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: bold;" aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="2" 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;STRONG style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="auto"&gt;SAP S/4HANA System Conversion&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;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;1.System Conversion&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;It&amp;nbsp;will&amp;nbsp;break down into the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Preparation Phase&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Realization Phase&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;Preparation Phase&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; System Requirements&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This phase ensures that the current SAP ECC system, infrastructure, database, and operating system meet the&amp;nbsp;minimum&amp;nbsp;prerequisites for a conversion to SAP S/4HANA.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Key activities include:&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;Verifying supported OS, DB, and Unicode requirements&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;Checking add-ons and thirdparty components&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;Confirming hardware capacity (CPU, RAM, storage)&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="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Assessing source release compatibility for SUM execution&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 step forms the technical foundation before any planning can begin.&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; Maintenance Planner&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SAP Maintenance Planner&amp;nbsp;validates&amp;nbsp;and prepares the system stack for conversion.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;It checks:&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;Active add-ons and their compatibility&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;Installed components and&amp;nbsp;required&amp;nbsp;upgrade paths&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;Target SAP S/4HANA release stack&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="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Required XML file generation for SUM&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;Outcome:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;A stack XML file used by SUM to guide the technical conversion.&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; Simplification Item Check (SICheck)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SICheck&amp;nbsp;analyzes the ECC system for mandatory functional and technical changes required by SAP S/4HANA.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;This includes:&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;Identifying&amp;nbsp;simplification items (Example:&amp;nbsp;Finance, Logistics, master data changes)&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;Highlighting inconsistencies in custom or standard objects&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;Showing mandatory actions before conversion (Example:&amp;nbsp;Customer Vendor Integration&amp;nbsp;(CVI)&amp;nbsp;for&amp;nbsp;Business Partner&amp;nbsp;(BP), Open Item Management updates)&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 provides a detailed “to-do&amp;nbsp;list” to bring the system into an S/4HANAcompliant state.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Custom Code Preparation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This phase ensures that custom developments (Zprograms, enhancements, exits) will work on the S/4HANA environment.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Activities include:&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;Running ABAP Test Cockpit (ATC) checks&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;Identifying&amp;nbsp;usage-based custom code via SAP Readiness Check / UPL&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;Adapting code for removed or deprecated data structures (Example:&amp;nbsp;MATDOC, tables replaced in S/4HANA)&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;Planning remediation for performance or syntax changes&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 ensures custom code does not break after conversion.&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;Realization Phase&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="5"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Software Update Manager (SUM)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The Software Update Manager serves as the technical engine for system conversion.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;It performs:&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="7" 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;Database migration to SAP HANA&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="7" 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;Software&amp;nbsp;component&amp;nbsp;upgrade to S/4HANA&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="7" 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;Data conversion and migration&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="7" 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;Technical downtime execution&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="7" 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;Post-processing of the system landscape&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-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SUM combines upgrade, migration, and conversion into one guided procedure.&amp;nbsp;You can perform the conversion using the&amp;nbsp;in-place&amp;nbsp;option, allowing the existing SAP ECC system to remain&amp;nbsp;on-premises. Alternatively, you can combine the move with a transition to a hyperscaler,&amp;nbsp;an approach that becomes particularly powerful in the context of&amp;nbsp;RISE with SAP.&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;RISE with SAP&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;provides a comprehensive, modular cloud transformation offering that bundles software, infrastructure, and managed services into a single contract. It enables organizations to modernize their SAP landscape by running SAP S/4HANA in a hyperscaler environment (such as Microsoft Azure) while SAP takes responsibility for technical operations at the application layer. This includes lifecycle management, technical monitoring, SLA-backed operations, security patching, and upgrading orchestration. RISE&amp;nbsp;also supports business transformation through embedded tools,&amp;nbsp;extensibility options, and continuous innovation.&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;By integrating your system conversion with RISE with SAP, you can streamline the journey to S/4HANA, reduce operational overhead, shift from&amp;nbsp;CAPEX&amp;nbsp;(Capital Expenditure)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;to OPEX&amp;nbsp;(Operational Expenditure), and accelerate innovation using cloud-scale capabilities&amp;nbsp;while SUM delivers the technical conversion engine underneath.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="6"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Application-Specific Follow-Up Activities&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;After the technical conversion, functional&amp;nbsp;teams’&amp;nbsp;complete configuration and validation tasks specific to their modules.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Example:&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="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;Finance: Activation of Universal Journal, data reconciliation, asset accounting migration&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;Logistics: Credit management migration, new ATP 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="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;Security: Role and authorization adjustments&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;SAP Basis&amp;nbsp;and ABAP team:&amp;nbsp;Fiori activation and launchpad configurations&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="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Techno functional:&amp;nbsp;Business validation and testing&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="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;SAP Basis:&amp;nbsp;Cutover activities and golive preparation&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;These steps&amp;nbsp;ensure that&amp;nbsp;the converted system is functional, optimized, and ready for productive&amp;nbsp;use.&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;Summary View:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&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;SPAN data-contrast="auto"&gt;Phase&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;Step&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;Purpose&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;Preparation&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;System Requirements&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;Ensure technical foundation is ready&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-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;Maintenance Planner&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;Validate system stack &amp;amp; generate XML&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-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;SICheck&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;Identify&amp;nbsp;required functional simplifications&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-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;Custom Code Preparation&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;Analyze &amp;amp; adapt custom developments&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;Realization&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;Software Update Manager&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;Perform technical upgrade &amp;amp; data conversion&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-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;Application&amp;nbsp;Follow-up&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;Complete module-specific configuration &amp;amp; validation&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-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="2"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;New implementation:&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;New Implementation with DMO (Database Migration Option)&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;A&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;New Implementation&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(Greenfield approach) means building a completely&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;new SAP S/4HANA system&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and migrating selected data into 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;How DMO fits in:&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;DMO is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;not&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;used on the new S/4HANA system itself,&amp;nbsp;instead&amp;nbsp;it is used on the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;source ECC system&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;when needed to support the transition process.&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 would use DMO when you want to:&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="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;Upgrade and/or migrate the old ECC system to the SAP HANA database&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;temporarily&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;Enable smoother extraction of data using SAP Migration Cockpit or 3rdparty ETL tools&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;Prepare the source system technically and functionally before data migration to the new S/4HANA system&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;DMO prepares the old system&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, but the final target is a clean, newly installed S/4HANA instance.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;We have&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;two options&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;when using the Software Update Manager (SUM):&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="16" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;DMO with System Move:&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;In this scenario, SUM begins the procedure on the source system and then continues execution on the target system. This is typically used when migrating to a new host or infrastructure while performing the upgrade and database migration in one combined process.&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="16" 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;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;DMO Migration Option – Move to SAP S/4HANA on a Hyperscaler (DMOVE2S4):&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;Here, SUM starts an&amp;nbsp;additional&amp;nbsp;application server that runs in the target environment but still belongs to the source system landscape. This enables a controlled transition to a hyperscaler environment (such as Azure) while completing the conversion and migration steps&amp;nbsp;required&amp;nbsp;for SAP S/4HANA.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In both cases, several preparatory tasks must be completed in the target environment, such as:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: bold;" aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="12" data-list-defn-props="{&amp;quot;335551671&amp;quot;:3,&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="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Selective Data Transition (SDT) with DMO:&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;Selective Data Transition&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is a hybrid approach between Brownfield and Greenfield.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;It allows moving&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;only the data you choose&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, such as:&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="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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Specific company codes&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="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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Selected historical periods&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="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;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Organizational carveouts&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="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;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;M&amp;amp;A&amp;nbsp;(Merger and acquisition)&amp;nbsp;landscape consolidation&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;How DMO fits in:&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;DMO is typically used as the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;first step in preparing the source ECC system&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;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" 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;It migrates the source ECC system to SAP HANA&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="11" 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;Performs required technical 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="11" 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;Ensures compatibility with the S/4HANA data model&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="11" 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;Prepares system objects so that selective extraction tools (SNP, Natuvion, CBS, etc.) can run&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;After DMO, partner tools extract selected data into the target S/4HANA system.&amp;nbsp;DMO modernizes and upgrades the source system, enabling selective extraction and migration.&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;Target Environment Preparation Tasks (for DMO with System Move &amp;amp; DMOVE2S4)&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;Before SUM can execute migration steps in the target environment, several technical preparations must be completed. These ensure that the new infrastructure (IaaS, or hyperscaler) is fully ready for the handover from the source system.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Provisioning the Target Infrastructure&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You must set up a clean, properly sized environment that will serve as the new application host or target system. This includes:&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="17" 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;Creating virtual machines or hosts (on hyperscaler)&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="17" 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;Ensuring CPU, RAM, and storage meet SAP sizing guidelines&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="17" 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;Preparing&amp;nbsp;appropriate disk&amp;nbsp;layout for /usr/sap, /sapmnt, /hana/shared, and log/data volumes (for HANA scenarios)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Operating System Preparation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The OS must meet SAP and SUM prerequisites:&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="18" 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;Install a certified OS version (Example:&amp;nbsp;RHEL, SLES, Windows if applicable)&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="18" 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;Apply required OS patches and kernel versions&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="18" 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;Configure OS locales, time synchronization, and system limits (ulimits, transparent huge pages, UUID config)&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="18" 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;Create SAP system users (Example:&amp;nbsp;&amp;lt;sid&amp;gt;adm, sidadm, sapadm) if not automatically provisioned&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Network and Connectivity Setup&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;DMO requires bidirectional connectivity between source and target systems:&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;Open required TCP ports (e.g., DIAG, RFC, HANA SQL ports, SAP Host Agent ports)&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="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="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Validate hostname resolution using DNS or /etc/hosts&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="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="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Set up VPN, ExpressRoute, or Peering if migrating to a hyperscaler&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="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="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Ensure no restrictive firewalls block SUM or SAP Host Agent communication&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; SAP Host Agent Installation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SUM&amp;nbsp;requires&amp;nbsp;a functional Host Agent on the target system:&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="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;Install SAP Host Agent (latest version recommended)&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;Configure Host Agent service user and permissions&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="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Validate connectivity from source to target Host Agent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="5"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; File System Preparation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Depending on your architecture:&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;Set up NFS shares for /sapmnt (if shared in distributed system environments)&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;Prepare directories for SUM extraction and temporary files&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;Ensure proper ownership and permissions: sidadm:sapsys&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="6"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Database Preparation&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For HANA-based targets:&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="22" 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;Provision SAP HANA DB following sizing guidelines&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="22" 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;Configure data and log volumes with recommended I/O throughput&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="22" 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;Install the correct HANA version compatible with your SUM stack&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="22" 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;Validate HANA OS parameters (vm.dirty_background_ratio, thp, huge pages)&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="22" 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;Ensure network configuration supports SAP HANA replication if needed&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="7"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Software Staging and Media Preparation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For SUM to continue the target:&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="23" 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;Download and stage SAP software media (kernel, stack files, SAP HANA installation media, archives)&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="23" 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;Ensure directories are accessible to SUM during the handover phase&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="23" 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;Upload SUM SAR files and extract them on the target host if required by your scenario&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="8"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Security and User Setup&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Depending on your landscape:&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="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;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Configure secure shell (SSH) trust between source and target (for SUM)&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="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;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Set up service users and groups (sapsys, &amp;lt;sid&amp;gt;adm)&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="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;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Validate OS-level sudo rules if needed for certain scripts or root actions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="9"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Parameter Alignment Between Source &amp;amp; Target&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To ensure SUM can continue seamlessly:&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="25" 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;Synchronize system parameters (Example:&amp;nbsp;time zone, code page, locale)&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="25" 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;Ensure consistent SAP profiles (DEFAULT.PFL, instance profiles)&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="25" 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;Confirm kernel patch levels where&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="10"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Storage &amp;amp; Backup Preparation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Before running SUM:&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="26" 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;Configure snapshot policies if supported by your hyperscaler&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="26" 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;Ensure backup tools or agents are installed (Azure Backup, thirdparty agents)&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="26" 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;Validate I/O throughput to avoid SUM performance bottlenecks during migration&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="11"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Validation &amp;amp; Health Checks&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Before starting SUM:&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="27" 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;Run OS validation scripts provided by SAP&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="27" 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;Test Host Agent connectivity from the source system&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="27" 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;Confirm network speed between source ↔ target meets SAP&amp;nbsp;minimum&amp;nbsp;requirements&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="27" 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;Validate free disk space for SUM logs, dumps, and temporary directories&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;Summary Comparison&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;Approach&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;Target System&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;Role of DMO&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;When to Use&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;New Implementation&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;Brandnew&amp;nbsp;S/4HANA installation&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;Prepares source ECC (HANA migration + upgrade) before extracting data&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;Modernization, redesign,&amp;nbsp;bestpractice&amp;nbsp;adoption&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;Selective Data Transition&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;Part-new, part-reused S/4HANA system&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;Prepares source ECC (technical readiness for selective extraction)&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;Carveouts, mergers, consolidations, partial history moves&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-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;System Conversion – Data Migration Option to Microsoft Azure:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The diagram illustrates a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;coordinated,&amp;nbsp;tool driven,&amp;nbsp;end-to-end&amp;nbsp;migration path&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;where:&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="36" 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;The&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Customer&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;sets direction and&amp;nbsp;validates&amp;nbsp;outcomes&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="36" 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;Maintenance Planner&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;creates a certified conversion plan&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="36" 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;SAP CAL&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;automatically provisions the Azure target landscape&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="36" 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;SUM&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;executes all technical conversion and database migration steps&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;Together, these components create a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;standardized, repeatable, and automated path&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to move from SAP ERP&amp;nbsp;on-premises&amp;nbsp;to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;SAP S/4HANA on Microsoft Azure&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-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Conclusion:&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 Database Migration Option (DMO) of the Software Update Manager provides a powerful and flexible framework for transitioning SAP systems to SAP S/4HANA&amp;nbsp;whether through a classic system conversion, a new implementation scenario, or a selective data transition approach. Both&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;DMO with System Move&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;DMOVE2S4&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; extend these capabilities by enabling migrations to new infrastructure or hyperscale environments while&amp;nbsp;maintaining&amp;nbsp;a controlled,&amp;nbsp;SAP supported&amp;nbsp;technical procedure.&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;Regardless of which DMO scenario is selected, success&amp;nbsp;hinges&amp;nbsp;thoroughly preparing the target environment. Proper provisioning of infrastructure, operating system configuration, network readiness, SAP Host Agent installation, file system setup, software staging, and security alignment ensure a smooth and stable handover from source to target. These preparation activities minimize technical risk, reduce downtime, and enable SUM to execute&amp;nbsp;migration&amp;nbsp;and conversion with high reliability.&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;By combining SAP’s proven migration tooling with a well-prepared target landscape, organizations can confidently modernize their SAP footprint, leverage hyperscale scalability, and move toward a future ready SAP S/4HANA platform aligned with cloud transformation strategies.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Reference links: &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="30" 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;SUM &amp;amp; DMO on SAP Help Portal:&lt;/SPAN&gt; &lt;A href="https://help.sap.com/docs/SAP_PROCESS_CONTROL/da035968c7f745df8ef99c024a817832/13b7ff20b1c24b2cb2450f6a8bf0afe8.html?q=software+update+manager" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Software Update Manager | SAP Help Portal&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&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="30" 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;SAP Note 2377305 – DMO: Database Migration Option:&lt;/SPAN&gt; &lt;A href="https://me.sap.com/notes/2377305" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://me.sap.com/notes/2377305&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&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="33" 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;SAP Readiness Check:&lt;/SPAN&gt; &lt;A href="https://help.sap.com/docs/cloud-alm/applicationhelp/integrating-readiness-check?q=SAP+Readiness+Check#sap-readiness-check-on-sap-for-me" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Integration Between SAP Readiness Check and SAP Cloud ALM | SAP Help Portal&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&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="33" 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;SAP CAL Homepage:&lt;/SPAN&gt; &lt;A href="https://cal.sap.com/" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://cal.sap.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;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" 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;RISE with SAP Overview:&lt;/SPAN&gt; &amp;nbsp;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://www.sap.com/products/erp/rise.html" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;RISE with SAP | Transformation journey to SAP Business Suite&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;335559731&amp;quot;:720}"&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="35" 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;RISE with SAP S/4HANA Cloud documentation:&lt;/SPAN&gt; &lt;A href="https://help.sap.com/docs/RISE_WITH_SAP" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://help.sap.com/docs/RISE_WITH_SAP&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="35" 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;SAP on Azure migration:&lt;/SPAN&gt; &lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://azure.microsoft.com/en-us/solutions/sap/migration/?msockid=31275a685442648a09a74cad552c652b" target="_blank"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;SAP on Azure Migration – SAP Intelligent Enterprise | Microsoft Azure&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Mon, 22 Dec 2025 21:00:39 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/migration-from-sap-erp-on-premises-to-sap-s-4hana-in-microsoft/ba-p/4480421</guid>
      <dc:creator>AnuradhaKarnam</dc:creator>
      <dc:date>2025-12-22T21:00:39Z</dc:date>
    </item>
    <item>
      <title>Preparing for Azure PostgreSQL Certificate Authority Rotation: A Comprehensive Operational Guide</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/preparing-for-azure-postgresql-certificate-authority-rotation-a/ba-p/4478109</link>
      <description>&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181273"&gt;&lt;/A&gt;The Challenge&lt;/H2&gt;
&lt;P&gt;It started with a standard notification in the Azure Portal: &lt;STRONG&gt;Tracking-ID YK3N-7RZ&lt;/STRONG&gt;. A routine Certificate Authority (CA) rotation for Azure Database for PostgreSQL.&lt;/P&gt;
&lt;P&gt;As Cloud Solution Architects, we’ve seen this scenario play out many times. The moment “certificate rotation” is mentioned, a wave of unease ripples through engineering teams. Let’s be honest: for many of us—ourselves included—certificates represent the edge of our technical “comfort zone.” We know they are critical for security, but the complexity of PKI chains, trust stores, and SSL handshakes can be intimidating. There is a silent fear: &lt;EM&gt;“If we touch this, will we break production?”&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;We realized we had a choice. We could treat this as an opportunity, and we could leave that comfort zone.&lt;/P&gt;
&lt;P&gt;We approached our customer with a proactive proposal: &lt;STRONG&gt;Let’s use this event to stop fearing certificates and start mastering them.&lt;/STRONG&gt; Instead of just patching the immediate issue, we used this rotation as a catalyst to review and upgrade the security posture of their database connections. We wanted to move from “hoping it works” to “knowing it’s secure.”&lt;/P&gt;
&lt;P&gt;The response was overwhelmingly positive. The teams didn’t just want a quick fix; they wanted “help for self-help.” They wanted to understand the mechanics behind sslmode and build the confidence to manage trust stores proactively.&lt;/P&gt;
&lt;P&gt;This guide is the result of that journey. It is designed to help you navigate the upcoming rotation not with anxiety, but with competence—turning a mandatory maintenance window into a permanent security improvement.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181274"&gt;&lt;/A&gt;Two Levels of Analysis&lt;/H3&gt;
&lt;P&gt;A certificate rotation affects your environment on &lt;STRONG&gt;two distinct levels&lt;/STRONG&gt;, requiring different expertise and actions:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Responsibility&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Key Questions&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Actions&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Platform Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cloud/Platform Teams&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Which clusters, services, and namespaces are affected? How do we detect at scale?&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Azure Service Health monitoring, AKS scanning, infrastructure-wide assessment&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Application Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Application/Dev Teams&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;What SSL mode? Which trust store? How to update connection strings?&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Code changes, dependency updates, trust store management&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;This article addresses &lt;STRONG&gt;both levels&lt;/STRONG&gt; - providing platform-wide detection strategies (Section 5) and application-specific remediation guidance (&lt;A style="background-color: rgb(255, 255, 255); font-style: normal; font-weight: 400;" href="#community--1-platform-remediation" target="_blank" rel="noopener"&gt;&lt;EM&gt;Platform-Specific Remediation&lt;/EM&gt;&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Business Impact:&lt;/STRONG&gt; In production environments, certificate validation failures cause &lt;STRONG&gt;complete database connection outages&lt;/STRONG&gt;. A single missed certificate rotation has caused hours of downtime for enterprise customers, impacting revenue and customer trust.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Who’s Affected:&lt;/STRONG&gt; DevOps engineers, SREs, database administrators, and platform engineers managing Azure PostgreSQL instances - especially those using: - Java applications with custom JRE cacerts - Containerized workloads with baked-in trust stores - Strict SSL modes (sslmode=verify-full, verify-ca)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181275"&gt;&lt;/A&gt;The Solution&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;What we’ll cover:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;🛡️&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Reliability&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;: How to prevent database connection outages through proactive certificate management&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;🔄 &lt;STRONG&gt;Resiliency&lt;/STRONG&gt;: Automation strategies that ensure your trust stores stay current&lt;/P&gt;
&lt;P&gt;🔒&amp;nbsp;&lt;STRONG&gt;Security&lt;/STRONG&gt;: Maintaining TLS security posture while rotating certificates safely&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Takeaway:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This rotation is a&amp;nbsp;&lt;STRONG&gt;client trust topic&lt;/STRONG&gt;, not a server change. Applications trusting root CAs (DigiCert Global Root G2, Microsoft RSA Root CA 2017) without intermediate pinning are unaffected. Risk concentrates where strict validation meets custom trust stores.&lt;A class="lia-anchor" target="_blank" name="_Toc216181276"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;📦 &lt;STRONG&gt;Platform-Specific Implementation:&lt;/STRONG&gt; Detailed remediation guides for Java, .NET, Python, Node.js, and Kubernetes are available in our &lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide" target="_blank" rel="noopener"&gt;&lt;EM&gt;GitHub Repository&lt;/EM&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; The &lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide" target="_blank" rel="noopener"&gt;&lt;EM&gt;GitHub Repository&lt;/EM&gt;&lt;/A&gt;. contains community-contributed content provided as-is. Test all scripts in non-production environments before use.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181277"&gt;&lt;/A&gt;1. Understanding Certificate Authority Rotation&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181278"&gt;&lt;/A&gt;What Changes During CA Rotation?&lt;/H3&gt;
&lt;P&gt;Azure Database for PostgreSQL uses TLS/SSL to encrypt client-server connections. The database server presents a certificate chain during the TLS handshake:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Certificate Chain Structure:&lt;/STRONG&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;&lt;EM&gt;Figure: Certificate chain structure showing the rotation from old intermediate (red, deprecated) to new intermediate (blue, active after rotation). Client applications must trust the root certificates (green) to validate the chain.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;📝 &lt;STRONG&gt;Diagram Source:&lt;/STRONG&gt; The Mermaid source code for this diagram is available in &lt;A href="https://techcommunity.microsoft.com/Document%20Upload/certificate-chain-diagram.mmd" target="_blank" rel="noopener"&gt;&lt;EM&gt;certificate-chain-diagram.mmd&lt;/EM&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181279"&gt;&lt;/A&gt;Why Root Trust Matters&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Key Principle:&lt;/STRONG&gt; If your application trusts the &lt;STRONG&gt;root certificate&lt;/STRONG&gt; and allows the chain to be validated dynamically, you are &lt;STRONG&gt;not affected&lt;/STRONG&gt;. The risk occurs when:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Custom trust stores&lt;/STRONG&gt; contain only the old intermediate certificate (not the root)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Certificate pinning&lt;/STRONG&gt; is implemented at the intermediate level&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Strict validation&lt;/STRONG&gt; is enabled (sslmode=verify-full in PostgreSQL connection strings)&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181280"&gt;&lt;/A&gt;2. Who Is Affected and Why&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181281"&gt;&lt;/A&gt;Risk Assessment Matrix&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Application Type&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Trust Store&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;SSL Mode&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Risk Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Action Required&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Cloud-native app (Azure SDK)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;OS Trust Store&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;require&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟢 &lt;STRONG&gt;Low&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;None - Azure SDK handles automatically&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Java app (default JRE)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;System cacerts&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;verify-ca&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟡 &lt;STRONG&gt;Medium&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Verify JRE version (11.0.16+, 17.0.4+, 8u381+)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Java app (custom cacerts)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Custom JKS file&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;verify-full&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;High&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update custom trust store with new intermediate&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;.NET app (Windows)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows Cert Store&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;require&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟢 &lt;STRONG&gt;Low&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;None - automatic via Windows Update&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Python app (certifi)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;certifi bundle&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;verify-ca&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟡 &lt;STRONG&gt;Medium&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update certifi package (pip install --upgrade certifi)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Node.js app (default)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Built-in CAs&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;verify-ca&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟢 &lt;STRONG&gt;Low&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;None - Node.js 16+, 18+, 20+ auto-updated&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Container (Alpine)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;/etc/ssl/certs&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;verify-full&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;High&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update base image or install ca-certificates-bundle&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Container (custom)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Baked-in certs&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;verify-full&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;High&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Rebuild image with updated trust store&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H4&gt;How to Read This Matrix&lt;/H4&gt;
&lt;P&gt;Use the above matrix to &lt;STRONG&gt;quickly&lt;/STRONG&gt; assess whether your applications are affected by CA rotation. Here is an overview, how you read the matrix:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Column&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Meaning&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Application Type&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;What kind of application do you have? (e.g., Java, .NET, Container)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Trust Store&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Where does the application store its trusted certificates?&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;SSL Mode&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;How strictly does the application validate the server certificate?&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Risk Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟢 Low / 🟡 Medium / 🔴 High - How likely is a connection failure?&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Action Required&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;What specific action do you need to take?&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Risk Level Logic:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Risk Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Why?&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;🟢 &lt;STRONG&gt;Low&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Automatic updates (OS/Azure SDK) or no certificate validation&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;🟡 &lt;STRONG&gt;Medium&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Manual update required but straightforward (e.g., pip install --upgrade certifi)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;High&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Custom trust store must be manually updated - highest outage risk&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181282"&gt;&lt;/A&gt;SSL Mode Security Posture&lt;/H3&gt;
&lt;P&gt;Understanding SSL modes is critical because they determine &lt;STRONG&gt;both security posture AND rotation impact&lt;/STRONG&gt;. This creates a dual consideration:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;SSL Mode&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Certificate Validation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Rotation Impact&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Security Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Recommendation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;disable&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ None&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ No impact&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;INSECURE&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Never use in production&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;allow&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ None&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ No impact&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟠 &lt;STRONG&gt;WEAK&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Not recommended&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;prefer&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ Optional&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Minimal&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟡 &lt;STRONG&gt;WEAK&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Not recommended&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;require&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ No (Npgsql 6.0+)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ No impact&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟡 &lt;STRONG&gt;WEAK&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Upgrade to verify-full&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;verify-ca&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Chain only&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;Critical&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔵 &lt;STRONG&gt;MODERATE&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update trust stores&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;verify-full&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Chain + hostname&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 &lt;STRONG&gt;Critical&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🟢 &lt;STRONG&gt;SECURE&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Recommended&lt;/STRONG&gt; - Update trust stores&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Key Insight:&lt;/STRONG&gt; Applications using weak SSL modes (everything below verify-ca) are &lt;STRONG&gt;technically unaffected&lt;/STRONG&gt; by CA rotation but represent &lt;STRONG&gt;security vulnerabilities&lt;/STRONG&gt;. The safest path is verify-full with current trust stores.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181283"&gt;&lt;/A&gt;⚖️ The Security vs.&amp;nbsp;Resilience Trade-off&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;The Paradox:&lt;/STRONG&gt; Secure applications (verify-full) have the &lt;STRONG&gt;highest rotation risk&lt;/STRONG&gt; 🔴, while insecure applications (require) are &lt;STRONG&gt;unaffected&lt;/STRONG&gt; but have security gaps.&lt;/P&gt;
&lt;P&gt;Teams discovering weak SSL modes during rotation preparation face a critical decision:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Option&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Approach&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Rotation Impact&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Security Impact&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Recommended For&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;🚀 Quick Fix&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Keep weak SSL mode (require)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ No action needed&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;⚠️ Security debt remains&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Emergency situations only&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;🛡️ Proper Fix&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Upgrade to verify-full&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;🔴 Requires trust store updates&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Improved security posture&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;All production systems&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Our Recommendation:&lt;/STRONG&gt; Use CA rotation events as an opportunity to &lt;STRONG&gt;improve your security posture&lt;/STRONG&gt;. The effort to update trust stores is a one-time investment that pays off in long-term security.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181284"&gt;&lt;/A&gt;Common Scenarios&lt;/H3&gt;
&lt;H4&gt;Scenario 1: Enterprise Java Application&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Problem: Custom trust store created 2+ years ago for PCI compliance&lt;/LI&gt;
&lt;LI&gt;Risk: High - contains only old intermediate certificates&lt;/LI&gt;
&lt;LI&gt;Solution: Export new intermediate from Azure, import to custom cacerts&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;Scenario 2: Kubernetes Microservices&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Problem: Init container copies trust store from ConfigMap at startup&lt;/LI&gt;
&lt;LI&gt;Risk: High - ConfigMap never updated since initial deployment&lt;/LI&gt;
&lt;LI&gt;Solution: Update ConfigMap, redeploy pods with new trust store&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;Scenario 3: Legacy .NET Application&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Problem: .NET Framework 4.6 on Windows Server 2016 (no Windows Update)&lt;/LI&gt;
&lt;LI&gt;Risk: Medium - depends on manual certificate store updates&lt;/LI&gt;
&lt;LI&gt;Solution: Import new intermediate to Windows Certificate Store manually&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181285"&gt;&lt;/A&gt;3. Trust Store Overview&lt;/H2&gt;
&lt;P&gt;A &lt;STRONG&gt;trust store&lt;/STRONG&gt; is the collection of root and intermediate CA certificates that your application uses to validate server certificates during TLS handshakes. Understanding where your application’s trust store is located determines how you’ll update it for CA rotations.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181286"&gt;&lt;/A&gt;Trust Store Locations by Platform&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Category&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Platform&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Trust Store Location&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Update Method&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Auto-Updated?&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;OS Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cert:\LocalMachine\Root&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows Update&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Yes&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Debian/Ubuntu&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;/etc/ssl/certs/ca-certificates.crt&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;apt upgrade ca-certificates&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Yes (with updates)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Red Hat/CentOS&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;/etc/pki/tls/certs/ca-bundle.crt&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;yum update ca-certificates&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ Yes (with updates)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Runtime Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Java JRE&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$JAVA_HOME/lib/security/cacerts&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Java security updates&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ With JRE updates&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Python (certifi)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;site-packages/certifi/cacert.pem&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;pip install --upgrade certifi&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ Manual&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Node.js&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bundled with runtime&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Node.js version upgrade&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;✅ With Node.js updates&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Custom&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Custom JKS&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Application-specific path&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;keytool -importcert&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ Manual&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Container image&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;/etc/ssl/certs (baked-in)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Rebuild container image&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ Manual&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;ConfigMap mount&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Kubernetes ConfigMap&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update ConfigMap, redeploy&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;❌ Manual&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181287"&gt;&lt;/A&gt;Why This Matters for CA Rotation&lt;/H3&gt;
&lt;P&gt;Applications using &lt;STRONG&gt;auto-updated&lt;/STRONG&gt; trust stores (OS-managed, current runtime versions) generally handle CA rotations automatically. The risk concentrates in:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Custom trust stores&lt;/STRONG&gt; created for compliance requirements (PCI-DSS, SOC 2) that are rarely updated&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Baked-in container certificates&lt;/STRONG&gt; from images built months or years ago&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Outdated runtimes&lt;/STRONG&gt; (old JRE versions, frozen Python environments) that haven’t received security updates&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Air-gapped environments&lt;/STRONG&gt; where automatic updates are disabled&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;When planning for CA rotation, focus your assessment efforts on applications in the “Manual” update category.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181288"&gt;&lt;/A&gt;4. Platform-Specific Remediation&lt;/H2&gt;
&lt;P&gt;📦 &lt;STRONG&gt;Detailed implementation guides are available in our GitHub repository:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;&lt;EM&gt;azure-certificate-rotation-guide&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181289"&gt;&lt;/A&gt;Quick Reference: Remediation by Platform&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Platform&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Trust Store Location&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Update Method&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Guide&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Java&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$JAVA_HOME/lib/security/cacerts&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update JRE or manual keytool import&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/platform-remediation/java-cacerts.md" target="_blank" rel="noopener"&gt;&lt;EM&gt;java-cacerts.md&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;.NET (Windows)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows Certificate Store&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows Update (automatic)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/platform-remediation/dotnet-windows.md" target="_blank" rel="noopener"&gt;&lt;EM&gt;dotnet-windows.md&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Python&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;certifi package&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;pip install --upgrade certifi&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/platform-remediation/python-certifi.md" target="_blank" rel="noopener"&gt;&lt;EM&gt;python-certifi.md&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Node.js&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Built-in CA bundle&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update Node.js version&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/platform-remediation/nodejs.md" target="_blank" rel="noopener"&gt;&lt;EM&gt;nodejs.md&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Containers&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Base image /etc/ssl/certs&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Rebuild image or ConfigMap&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/platform-remediation/containers-kubernetes.md" target="_blank" rel="noopener"&gt;&lt;EM&gt;containers-kubernetes.md&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181290"&gt;&lt;/A&gt;Scripts &amp;amp; Automation&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Script&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Download&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;State&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Scan-AKS-TrustStores.ps1&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Scan all pods in AKS for trust store configurations&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/scripts/Scan-AKS-TrustStores.ps1" target="_blank" rel="noopener"&gt;&lt;EM&gt;PowerShell&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;tested&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;validate-connection.sh&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Test PostgreSQL connection with SSL validation&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/scripts/validate-connection.sh" target="_blank" rel="noopener"&gt;&lt;EM&gt;Bash&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;not tested&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;update-cacerts.sh&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update Java cacerts with new intermediate&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/scripts/update-cacerts.sh" target="_blank" rel="noopener"&gt;&lt;EM&gt;Bash&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;not tested&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181291"&gt;&lt;/A&gt;5. Proactive Detection Strategies&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181292"&gt;&lt;/A&gt;Database-Level Discovery: Identifying Connected Clients&lt;/H3&gt;
&lt;P&gt;One starting point for impact assessment is querying the PostgreSQL database itself to identify which applications are connecting. We developed a SQL query that joins pg_stat_ssl with pg_stat_activity to reveal active TLS connections, their SSL version, and cipher suites.&lt;/P&gt;
&lt;P&gt;🔍 &lt;STRONG&gt;Get the SQL Query:&lt;/STRONG&gt; Download the complete detection script from our GitHub repository: &lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/scripts/detect-clients.sql" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;&lt;EM&gt;detect-clients.sql&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H4&gt;Important Limitations&lt;/H4&gt;
&lt;P&gt;This query has significant constraints that you must understand before relying on it for CA rotation planning:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Limitation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Impact&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Mitigation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Point-in-time snapshot&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Only shows currently connected clients&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Run query repeatedly over days/weeks to capture periodic jobs and batch processes&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;No certificate details&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cannot identify which CA certificate the client is using&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Requires client-side investigation (trust store analysis)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Connection pooling&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;May show pooler instead of actual application&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Use application_name in connection strings to identify true source&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Idle connections&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Long-running connections may be dormant&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cross-reference with application activity logs&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Recommended approach:&lt;/STRONG&gt; Use this query to create an initial inventory, then investigate each unique application_name and client_addr combination to determine their trust store configuration and SSL mode.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181293"&gt;&lt;/A&gt;Proactive Monitoring with Azure Monitor&lt;/H3&gt;
&lt;P&gt;To detect certificate-related issues &lt;STRONG&gt;before and after&lt;/STRONG&gt; CA rotation, configure Azure Monitor alerts. This enables early warning when SSL handshakes start failing.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why this matters:&lt;/STRONG&gt; After CA rotation, applications with outdated trust stores will fail to connect. An alert allows you to detect affected applications quickly rather than waiting for user reports.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Official Documentation:&lt;/STRONG&gt; For complete guidance on creating and managing alerts, see &lt;A href="https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-overview" target="_blank" rel="noopener"&gt;&lt;EM&gt;Azure Monitor Alerts Overview&lt;/EM&gt;&lt;/A&gt; and &lt;A href="https://learn.microsoft.com/azure/azure-monitor/alerts/alerts-create-log-alert-rule" target="_blank" rel="noopener"&gt;&lt;EM&gt;Create a Log Search Alert&lt;/EM&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Here is a short example of an Azure Monitor Alert definition as a starting point.&lt;/P&gt;
&lt;LI-CODE lang="yaml"&gt;{
  "alertRule": {
    "name": "PostgreSQL SSL Connection Failures",
    "severity": 2,
    "condition": {
      "query": "AzureDiagnostics | where ResourceType == 'SERVERS' and Category == 'PostgreSQLLogs' and Message contains 'SSL error' | summarize count() by bin(TimeGenerated, 5m)",
      "threshold": 5,
      "timeAggregation": "Total",
      "windowSize": "PT5M"
    }
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Alert Configuration Notes:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Setting&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Recommended Value&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Rationale&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Severity&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;2 (Warning)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Allows investigation without triggering critical incident response&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Threshold&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;5 failures/5min&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Filters noise while catching genuine issues&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Evaluation Period&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;5 minutes&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Balances responsiveness with alert fatigue&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Action Group&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Platform Team&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Ensures quick triage and coordination&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181294"&gt;&lt;/A&gt;6. Production Validation&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181295"&gt;&lt;/A&gt;Pre-Rotation Validation Checklist&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Inventory all applications&lt;/STRONG&gt; connecting to Azure PostgreSQL&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Identify trust store locations&lt;/STRONG&gt; for each application&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Verify root certificate presence&lt;/STRONG&gt; in trust stores&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Test connection with new intermediate&lt;/STRONG&gt; in non-production environment&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Update monitoring alerts&lt;/STRONG&gt; for SSL connection failures&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Prepare rollback plan&lt;/STRONG&gt; if issues occur&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Schedule maintenance window&lt;/STRONG&gt; (if required)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Notify stakeholders&lt;/STRONG&gt; of potential impact&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181296"&gt;&lt;/A&gt;Testing Procedure&lt;/H3&gt;
&lt;P&gt;We established a systematic 3-step validation process to ensure zero downtime. This approach moves from isolated testing to gradual production rollout.&lt;/P&gt;
&lt;P&gt;🧪 &lt;STRONG&gt;Technical Validation Guide:&lt;/STRONG&gt; For the complete list of psql commands, connection string examples for Windows/Linux, and automated testing scripts, please refer to our &lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/validation-guide.md" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;&lt;EM&gt;Validation Guide&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt; in the GitHub repository.&lt;/P&gt;
&lt;H4&gt;Connection Testing Strategy&lt;/H4&gt;
&lt;P&gt;The core of our validation strategy was testing connections with explicit sslmode settings. We used the psql command-line tool to simulate different client behaviors.&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Test Scenario&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Expected Result&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Encryption only&lt;/STRONG&gt; (sslmode=require)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Verify basic connectivity&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Connection succeeds even with unknown CA&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;CA validation&lt;/STRONG&gt; (sslmode=verify-ca)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Verify trust store integrity&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Connection succeeds &lt;STRONG&gt;only&lt;/STRONG&gt; if CA chain is valid&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Full validation&lt;/STRONG&gt; (sslmode=verify-full)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Verify strict security compliance&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Connection succeeds &lt;STRONG&gt;only&lt;/STRONG&gt; if CA chain AND hostname match&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Pro Tip:&lt;/STRONG&gt; Test with verify-full and an &lt;STRONG&gt;explicit root CA file&lt;/STRONG&gt; containing the new Microsoft/DigiCert root certificates &lt;STRONG&gt;before&lt;/STRONG&gt; the rotation date. This validates that your trust stores will work after the intermediate certificate changes.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 1: Test in Non-Production&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Validate connections against a test server using the new intermediate certificate (Azure provides test endpoints during the rotation window).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 2: Canary Deployment&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Deploy the updated trust store to a single “canary” instance or pod. Monitor: - Connection success rate - Error logs - Response times&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 3: Gradual Rollout&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Once the canary is stable, proceed with a phased rollout: 1. Update 10% of pods 2. Monitor for 1 hour 3. Update 50% of pods 4. Monitor for 1 hour 5. Complete rollout&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181297"&gt;&lt;/A&gt;7. Best Practices and Lessons Learned&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181298"&gt;&lt;/A&gt;Certificate Management Best Practices&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Practice&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Guidance&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Trust Root CAs, Not Intermediates&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Configure trust stores with root CA certificates only. This provides resilience against intermediate certificate rotations.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Trust &lt;A href="https://www.microsoft.com/pkiops/docs/repository.htm" target="_blank" rel="noopener"&gt;&lt;EM&gt;Microsoft TLS RSA Root G2&lt;/EM&gt;&lt;/A&gt; and &lt;A href="https://knowledge.digicert.com/general-information/digicert-trusted-root-authority-certificates" target="_blank" rel="noopener"&gt;&lt;EM&gt;DigiCert Global Root G2&lt;/EM&gt;&lt;/A&gt; instead of specific intermediates&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Automate Trust Store Updates&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Use OS-provided trust stores when possible (automatically updated). For custom trust stores, implement CI/CD pipelines.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Schedule bi-annual trust store audits&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Use SSL Mode Appropriately&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Choose SSL mode based on security requirements. verify-ca is recommended for most scenarios.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;See Security Posture Matrix in Section 2&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Maintain Container Images&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Rebuild container images monthly to include latest CA certificates. Use init containers for runtime updates.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Multi-stage builds with CA certificate update step&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Avoid Certificate Pinning&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Never pin intermediate certificates. If pinning is required for compliance, implement automated update processes.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Pin only root CA certificates if absolutely necessary&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181299"&gt;&lt;/A&gt;SSL Mode Decision Guide&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;SSL Mode&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Security Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Resilience&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;When to Use&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;require&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Medium&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;High&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Encrypted traffic without certificate validation. Use when CA rotation resilience is more important than MITM protection.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;verify-ca&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;High&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Medium&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Validates certificate chain. &lt;STRONG&gt;Recommended for most production scenarios.&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;verify-full&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Highest&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Low&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Strictest validation with hostname matching. Use only when compliance requires it.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181300"&gt;&lt;/A&gt;Organizational Communication Model&lt;/H3&gt;
&lt;P&gt;Effective certificate rotation requires structured communication across multiple layers:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Layer&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Responsibility&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Key Action&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Service Health&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Microsoft publishes announcements to affected subscriptions&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Monitor Azure Service Health proactively&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Platform/Cloud Team&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Receives Azure announcements, triages criticality&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Follow ITSM processes, assess impact&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Application Teams&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Execute application-level changes&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Update trust stores, validate connections&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Security Teams&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Define certificate validation policies&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Set compliance requirements&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181301"&gt;&lt;/A&gt;Ownership and Responsibility Matrix&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Team&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Responsibility&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Deliverable&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Platform/Cloud Team&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Monitor Azure Service Health, coordinate response&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Impact assessment, team notifications&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Application Teams&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Application-level changes (connection strings, trust stores)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Updated configurations, validation results&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Security Teams&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Define certificate policies, compliance requirements&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Policy documentation, audit reports&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;All Teams (Shared)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Certificate lifecycle collaboration&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Playbooks, escalation paths, training&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181302"&gt;&lt;/A&gt;Certificate Rotation Playbook Components&lt;/H3&gt;
&lt;P&gt;Organizations should establish documented playbooks including:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Component&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Recommended Frequency&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Trust Store Audits&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bi-annual (every 6 months)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Ensure certificates are current&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Certificate Inventory&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Quarterly review&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Know what certificates exist where&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Playbook Updates&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Annual or after incidents&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Keep procedures current&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Team Training&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Annual&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Build knowledge and confidence&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181303"&gt;&lt;/A&gt;Field Observations: Common Configuration Patterns&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Pattern&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Observation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Risk&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Implicit SSL Mode&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Teams don’t explicitly set sslmode, relying on framework defaults&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Unexpected behavior during CA rotation&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Copy-Paste Configurations&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Connection strings copied without understanding options&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Works until certificate changes expose gaps&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Framework-Specific Defaults&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Java uses JRE trust store, .NET uses Windows Certificate Store, Python depends on certifi package&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Some require manual updates, some are automatic&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181304"&gt;&lt;/A&gt;Framework Trust Store Defaults&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Framework&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Default Trust Store&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Update Method&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Risk Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Java/Quarkus&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;JRE cacerts&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Manual or JRE update&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Medium - requires awareness&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;.NET&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows Certificate Store&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Windows Update&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Low - automatic&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Node.js&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bundled certificates&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Node.js version update&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Low - automatic&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Python&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;certifi package&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;pip install --upgrade certifi&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;High - manual intervention required&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181305"&gt;&lt;/A&gt;Knowledge and Confidence Challenges&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Challenge&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Impact&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Mitigation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Limited certificate knowledge&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Creates uncertainty and risk-averse behavior&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Proactive education, hands-on workshops&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Topic intimidation&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;“Certificates” can seem complex, leading to avoidance&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Reality: Implementation is straightforward once understood&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Previous negative experiences&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Leadership concerns based on past incidents&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Document successes, share lessons learned&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Visibility gaps&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Lack of visibility into application dependencies&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Maintain certificate inventory, use discovery tools&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Monitoring Strategy (Recommended for Post-Rotation):&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;While pre-rotation monitoring focuses on inventory, post-rotation monitoring should track:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Key Metrics:&lt;/STRONG&gt; - Connection failure rates (group by application, SSL error types) - SSL handshake duration (detect performance degradation) - Certificate validation errors (track which certificates fail) - Application error logs (filter for “SSL”, “certificate”, “trust”)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Recommended Alerts:&lt;/STRONG&gt; - Threshold: &amp;gt;5 SSL connection failures in 5 minutes - Anomaly detection: Connection failure rate increases &amp;gt;50% - Certificate expiry warnings: 30, 14, 7 days before expiration&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Dashboard Components:&lt;/STRONG&gt; - Connection success rate by application - SSL error distribution (validation failures, expired certificates, etc.) - Certificate inventory with expiry dates - Trust store update status across infrastructure&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These metrics, alerts and thresholds are only starting points and need to be adjusted based on your environment and needs.&lt;/P&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181306"&gt;&lt;/A&gt;Post-Rotation Validation and Telemetry&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; This article focuses on &lt;STRONG&gt;preparation&lt;/STRONG&gt; for upcoming certificate rotations. Post-rotation metrics and incident data will be collected after the rotation completes and can inform future iterations of this guidance.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Recommended Post-Rotation Activities:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Here are some thoughts on post-rotation activities that could create more insights on the effectiveness of the preparation.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; Incident Tracking:&lt;BR /&gt;&lt;/STRONG&gt;After rotation completes, organizations should track: - Production incidents related to SSL/TLS connection failures - Services affected and their business criticality - Mean Time to Detection (MTTD) for certificate-related issues - Mean Time to Resolution (MTTR) from detection to fix&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Success Metrics to Measure&lt;/STRONG&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Pre-Rotation Validation:&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; - Number of services inventoried and assessed - Percentage of services requiring trust store updates - Testing coverage (dev, staging, production)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Post-Rotation Outcomes:&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; - Zero-downtime success rate (percentage of services with no impact) - Applications requiring emergency patching - Time from rotation to full validation&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Impact Assessment&lt;BR /&gt;&lt;/STRONG&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Telemetry to Collect:&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; - Total connection attempts vs. failures (before and after rotation) - Duration of any service degradation or outages - ustomer-facing impact (user-reported issues, support tickets) - Geographic or subscription-specific patterns&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Continuous Improvement&lt;/STRONG&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Post-Rotation Review:&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; - What worked well in the preparation phase? - Which teams or applications were unprepared? - What gaps exist in monitoring or alerting? - How can communication be improved for future rotations?&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;Documentation Updates:&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; - Update playbooks with lessons learned - Refine monitoring queries based on observed patterns - Enhance team training materials - Share anonymized case studies across the organization&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181307"&gt;&lt;/A&gt;8. Engagement &amp;amp; Next Steps&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181308"&gt;&lt;/A&gt;Discussion Questions&lt;/H3&gt;
&lt;P&gt;We’d love to hear from the community:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s your experience with certificate rotations?&lt;/STRONG&gt; Have you encountered unexpected connection failures during CA rotation events?&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Which trust store update method works best for your environment?&lt;/STRONG&gt; OS-managed, runtime-bundled, or custom trust stores?&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;How do you handle certificate management in air-gapped environments?&lt;/STRONG&gt; What strategies have worked for your organization?&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181309"&gt;&lt;/A&gt;Share Your Experience&lt;/H3&gt;
&lt;P&gt;If you’ve implemented proactive certificate management strategies or have lessons learned from CA rotation incidents, we encourage you to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Comment below&lt;/STRONG&gt; with your experiences and tips&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Contribute to the &lt;/STRONG&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;&lt;EM&gt;GitHub repository&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt; with additional platform guides or scripts&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Connect with us on LinkedIn&lt;/STRONG&gt; to continue the conversation&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181310"&gt;&lt;/A&gt;Call to Action&lt;/H3&gt;
&lt;P&gt;Take these steps &lt;STRONG&gt;now&lt;/STRONG&gt; to prepare for the CA rotation:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Assess your applications&lt;/STRONG&gt; - Use the Risk Assessment Matrix (Section 2) to identify which applications use sslmode=verify-ca or verify-full with custom trust stores&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Import root CA certificates&lt;/STRONG&gt; - Add &lt;A href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_blank" rel="noopener"&gt;&lt;EM&gt;DigiCert Global Root G2&lt;/EM&gt;&lt;/A&gt; and &lt;A href="https://www.microsoft.com/pkiops/docs/repository.htm" target="_blank" rel="noopener"&gt;&lt;EM&gt;Microsoft RSA Root CA 2017&lt;/EM&gt;&lt;/A&gt; to your trust stores&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Upgrade SSL mode&lt;/STRONG&gt; - Change your connection strings to at least sslmode=verify-ca (recommended: verify-full) for improved security&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Document your changes&lt;/STRONG&gt; - Record which applications were updated, what trust stores were modified, and the validation results&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Automate for the future&lt;/STRONG&gt; - Implement proactive certificate management so future CA rotations are handled automatically (OS-managed trust stores, CI/CD pipelines for container images, scheduled trust store audits)&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181311"&gt;&lt;/A&gt;9. Resources&lt;/H2&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181312"&gt;&lt;/A&gt;Official Documentation&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Azure PostgreSQL:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/postgresql/flexible-server/concepts-networking-ssl-tls" target="_blank" rel="noopener"&gt;&lt;EM&gt;Azure PostgreSQL SSL/TLS Concepts&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/postgresql/flexible-server/how-to-connect-tls-ssl" target="_blank" rel="noopener"&gt;&lt;EM&gt;Azure PostgreSQL - Connect with TLS/SSL&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;PostgreSQL &amp;amp; libpq:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://www.postgresql.org/docs/current/libpq-ssl.html" target="_blank" rel="noopener"&gt;&lt;EM&gt;PostgreSQL libpq SSL Support&lt;/EM&gt;&lt;/A&gt; - SSL mode options and environment variables&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.postgresql.org/docs/current/app-psql.html" target="_blank" rel="noopener"&gt;&lt;EM&gt;PostgreSQL psql Reference&lt;/EM&gt;&lt;/A&gt; - Command-line tool documentation&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.postgresql.org/docs/current/ssl-tcp.html" target="_blank" rel="noopener"&gt;&lt;EM&gt;PostgreSQL Server SSL/TLS Configuration&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Certificate Authorities:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_blank" rel="noopener"&gt;&lt;EM&gt;DigiCert Root Certificates&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.microsoft.com/pkiops/docs/repository.htm" target="_blank" rel="noopener"&gt;&lt;EM&gt;Microsoft PKI Repository&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/security/trusted-root/program-requirements" target="_blank" rel="noopener"&gt;&lt;EM&gt;Microsoft Trusted Root Program&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181313"&gt;&lt;/A&gt;Community Resources&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/" target="_blank" rel="noopener"&gt;&lt;EM&gt;Let’s Encrypt Root Expiration (2021 Incident)&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://csrc.nist.gov/publications/detail/sp/800-57-part-1/rev-5/final" target="_blank" rel="noopener"&gt;&lt;EM&gt;NIST SP 800-57: Key Management Guidelines&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://cheatsheetseries.owasp.org/cheatsheets/Pinning_Cheat_Sheet.html" target="_blank" rel="noopener"&gt;&lt;EM&gt;OWASP Certificate Pinning Cheat Sheet&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://neon.com/blog/postgres-needs-better-connection-security-defaults" target="_blank" rel="noopener"&gt;&lt;EM&gt;Neon Blog: PostgreSQL Connection Security Defaults&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181314"&gt;&lt;/A&gt;Tools and Scripts&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://github.com/AndreasSemmelmann/azure-certificate-rotation-guide/blob/main/scripts/Scan-AKS-TrustStores.ps1" target="_blank" rel="noopener"&gt;&lt;EM&gt;PowerShell AKS Trust Store Scanner&lt;/EM&gt;&lt;/A&gt; (see&amp;nbsp;&lt;A style="background-color: rgb(255, 255, 255); font-style: normal; font-weight: 400;" href="#community--1-platform-remediation" target="_blank" rel="noopener"&gt;&lt;EM&gt;Platform-Specific Remediation&lt;/EM&gt;&lt;/A&gt;)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.postgresql.org/docs/current/app-psql.html" target="_blank" rel="noopener"&gt;&lt;EM&gt;PostgreSQL Interactive Terminal (psql)&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://jdbc.postgresql.org/documentation/ssl/" target="_blank" rel="noopener"&gt;&lt;EM&gt;PostgreSQL JDBC SSL Documentation&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181315"&gt;&lt;/A&gt;Industry Context&lt;/H3&gt;
&lt;P&gt;Certificate rotation challenges are not unique to Azure PostgreSQL. Similar incidents have occurred across the industry:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Historical Incidents:&lt;/STRONG&gt; - &lt;STRONG&gt;Let’s Encrypt Root Expiration (2021)&lt;/STRONG&gt;: Widespread impact when DST Root CA X3 expired, affecting older Android devices and legacy systems - &lt;STRONG&gt;DigiCert Root Transitions&lt;/STRONG&gt;: Multiple cloud providers experienced customer impact during CA changes - &lt;STRONG&gt;Internal PKI Rotations&lt;/STRONG&gt;: Enterprises face similar challenges when rotating internally-issued certificates&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Relevant Standards:&lt;/STRONG&gt; - &lt;STRONG&gt;NIST SP 800-57&lt;/STRONG&gt;: Key Management Guidelines (certificate lifecycle best practices) - &lt;STRONG&gt;OWASP Certificate Pinning&lt;/STRONG&gt;: Guidance on balancing security and operational resilience - &lt;STRONG&gt;CIS Benchmarks&lt;/STRONG&gt;: Recommendations for TLS/SSL configuration in cloud environments&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181316"&gt;&lt;/A&gt;Authors&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Author&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Role&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Contact&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Andreas Semmelmann&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cloud Solution Architect, Microsoft&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://www.linkedin.com/in/andreas-semmelmann-07b193196/" target="_blank" rel="noopener"&gt;&lt;EM&gt;LinkedIn&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Mpho Muthige&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cloud Solution Architect, Microsoft&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;A href="https://www.linkedin.com/in/mpho-muthige-0835a322/" target="_blank" rel="noopener"&gt;&lt;EM&gt;LinkedIn&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;A class="lia-anchor" target="_blank" name="_Toc216181317"&gt;&lt;/A&gt;Disclaimers&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Disclaimer:&lt;/STRONG&gt;&lt;BR /&gt;The information in this blog post is provided for general informational purposes only and does not constitute legal, financial, or professional advice. While every effort has been made to ensure the accuracy of the information at the time of publication, Microsoft makes no warranties or representations as to its completeness or accuracy. Product features, availability, and timelines are subject to change without notice. For specific guidance, please consult your legal or compliance advisor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Support Statement:&lt;/STRONG&gt;&lt;BR /&gt;This article represents field experiences and community best practices. For official Microsoft support and SLA-backed guidance:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Support:&lt;/STRONG&gt; &lt;A href="https://azure.microsoft.com/support/" target="_blank" rel="noopener"&gt;&lt;EM&gt;https://azure.microsoft.com/support/&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Official Documentation:&lt;/STRONG&gt; &lt;A href="https://learn.microsoft.com/azure/" target="_blank" rel="noopener"&gt;&lt;EM&gt;https://learn.microsoft.com/azure/&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft Q&amp;amp;A:&lt;/STRONG&gt; &lt;A href="https://learn.microsoft.com/answers/" target="_blank" rel="noopener"&gt;&lt;EM&gt;https://learn.microsoft.com/answers/&lt;/EM&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Production Issues:&lt;/STRONG&gt; Always open official support tickets for production-impacting problems.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Customer Privacy Notice:&lt;/STRONG&gt;&lt;BR /&gt;This article describes real-world scenarios from customer engagements. All customer-specific information has been anonymized. No NDAs or customer confidentiality agreements were violated in creating this content.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;AI-generated content disclaimer:&lt;/STRONG&gt;&lt;BR /&gt;This content was generated in whole or in part with the assistance of AI tools. AI-generated content may be incorrect or incomplete. Please review and verify before relying on it for critical decisions. &lt;A href="https://go.microsoft.com/fwlink/?linkid=2173149" target="_blank" rel="noopener"&gt;&lt;EM&gt;See terms&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Community Contribution:&lt;/STRONG&gt; The GitHub repository referenced in this article contains community-contributed scripts and guides. These are provided as-is for educational purposes and should be tested in non-production environments before use.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Tags:&lt;/STRONG&gt; #AzurePostgreSQL #CertificateRotation #TLS #SSL #TrustStores #Operations #DevOps #SRE #CloudSecurity #AzureDatabase&lt;/P&gt;</description>
      <pubDate>Mon, 15 Dec 2025 18:55:36 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/preparing-for-azure-postgresql-certificate-authority-rotation-a/ba-p/4478109</guid>
      <dc:creator>AndreasSemmelmann</dc:creator>
      <dc:date>2025-12-15T18:55:36Z</dc:date>
    </item>
    <item>
      <title>In-App Notification PCF Control</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/in-app-notification-pcf-control/ba-p/4477890</link>
      <description>&lt;H2&gt;Overview&lt;/H2&gt;
&lt;P&gt;A robust Power Apps Component Framework (PCF) &lt;A class="lia-external-url" href="https://github.com/SweetsNSavories/InAppNotificationPCF/tree/main/pcfproject" target="_blank" rel="noopener"&gt;control &lt;/A&gt;for Dataverse, designed to deliver, display, and manage in-app notifications. This control supports secure environment variable lookup, publisher-agnostic logic, recipient resolution, and integrates with Microsoft Graph for advanced scenarios. It is built for easy adoption by developers and customers.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Testing Status:&lt;/STRONG&gt;&amp;nbsp;This control has been tested for minimum positive flow scenarios. Comprehensive testing for edge cases, error handling, and production readiness is recommended before deployment.&lt;/P&gt;
&lt;P&gt;For more information about in-app notifications in Dataverse, see&amp;nbsp;&lt;A href="https://learn.microsoft.com/power-apps/developer/model-driven-apps/clientapi/send-in-app-notifications" target="_blank" rel="noopener"&gt;Microsoft Docs: Send in-app notifications within model-driven apps&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Build &amp;amp; Run&lt;/H2&gt;
&lt;P&gt;npm install npm run build&lt;/P&gt;
&lt;H2&gt;Features&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Notification Delivery:&lt;/STRONG&gt;&amp;nbsp;Send notifications to users or groups in Dataverse.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Recipient Resolution:&lt;/STRONG&gt;&amp;nbsp;Fetch and display recipient names using systemuser IDs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Environment Variable Lookup:&lt;/STRONG&gt;&amp;nbsp;Secure, publisher-agnostic configuration.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft Graph Integration:&lt;/STRONG&gt;&amp;nbsp;Authenticate and fetch data from Microsoft Graph using MSAL.js.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Robust UI:&lt;/STRONG&gt;&amp;nbsp;Modern, responsive React components with Fluent UI styling.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Error Handling:&lt;/STRONG&gt;&amp;nbsp;Graceful fallback for missing recipients and robust client-side logic.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Project Structure&lt;/H2&gt;
&lt;P&gt;NotificationControl/ components/ NotificationDetails.tsx # Displays notification details and recipient info NotificationForm.tsx # Main form for creating and sending notifications NotificationList.tsx # Lists all notifications and handles navigation NotificationForm.css # Styles for the notification form NotificationList.css # Styles for the notification list context/ NotificationContext.tsx # React context for notification state hooks/ useNotifications.ts # Custom hook for notification logic utils/ api.ts # Core notification logic, environment variable lookup, Graph API integration auth.ts # Authentication helpers for MSAL.js ControlManifest.Input.xml # PCF control manifest (input) ControlManifest.xml # PCF control manifest index.ts # Entry point for the control&lt;/P&gt;
&lt;H2&gt;Component Details &amp;amp; Usage&lt;/H2&gt;
&lt;H3&gt;NotificationList.tsx&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Displays a list of notifications and allows navigation to detail view. Notifications are grouped by title and body for efficiency.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Props:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;notifications: Array of notification objects.&lt;/LI&gt;
&lt;LI&gt;onSelect: Handler to select a notification for detail view.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Key Features:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Grouping:&lt;/STRONG&gt;&amp;nbsp;Notifications are grouped by title and body because the same notification is sent separately to each recipient in Dataverse. This prevents duplicate entries in the list view.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Lazy Loading:&lt;/STRONG&gt;&amp;nbsp;Recipients are loaded on-demand (lazy loaded) when you click to view details, reducing initial load time and improving performance.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Date Filtering:&lt;/STRONG&gt;&amp;nbsp;Only notifications from the last 7-14 days are loaded to keep the list manageable and avoid costly aggregation queries on large datasets.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use to provide users with an overview of all notifications. Passes context and props to child components.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;Sent notifications grouped by title and body, showing count and recipient access.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;NotificationDetails.tsx&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Displays the details of a notification, including title, body, icon, type, and recipient information.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Props:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;notification: The notification object to display.&lt;/LI&gt;
&lt;LI&gt;showSystemUsers: Whether to show recipient info.&lt;/LI&gt;
&lt;LI&gt;onBack: Handler to return to the notification list.&lt;/LI&gt;
&lt;LI&gt;context: Dataverse context for API calls.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Key Functions:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;fetchNames: Fetches recipient names from Dataverse using systemuser IDs. Handles missing recipients gracefully by showing "No recipient assigned".&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use in detail view to show notification info and recipient names. Handles all edge cases for missing or undefined recipients.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;Detail view with graceful fallback for missing recipients.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;NotificationForm.tsx&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Main form for creating and sending notifications. Centralizes environment variable and authentication logic.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Props:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;context: Dataverse context for environment variable lookup and authentication.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Key Functions:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Handles user input, MSAL authentication, and notification submission.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Features:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Multiple recipient selection options: System Users, Teams, Queues, and Outlook DLs&lt;/LI&gt;
&lt;LI&gt;Required fields: Title and Body&lt;/LI&gt;
&lt;LI&gt;Optional settings: Icon Type (Info, Success, Error, Warning) and Notification Type (Toast, Banner)&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use as the entry point for users to create and send notifications. Integrates with Microsoft Graph for advanced scenarios.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;Comprehensive form with multiple recipient selection options: System Users, Teams, Queues, and Outlook DLs.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;NotificationContext.tsx&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Provides global notification state and actions to components via React context.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use to share notification state and actions across components.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;useNotifications.ts&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Custom React hook for fetching, sending, and managing notifications.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use in components to access notification logic and state.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;api.ts&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Contains core logic for notification delivery, environment variable lookup, recipient resolution, and Microsoft Graph API integration.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Key Functions:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;getDLMemberObjectIds,&amp;nbsp;getSystemUserIdsByObjectIds,&amp;nbsp;getSystemUserNamesByIds: Utility functions for recipient resolution.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use for all backend logic and API calls related to notifications.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;auth.ts&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&amp;nbsp;Handles authentication logic using MSAL.js for Microsoft Graph API access.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adoption:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Use to authenticate users and obtain tokens for Graph API calls.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;How to Adopt This Control&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Import the control into your Dataverse environment.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Configure environment variables for publisher-agnostic setup.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Grant users read privileges on the&amp;nbsp;appnotifications&amp;nbsp;entity.&lt;/STRONG&gt;&amp;nbsp;Users receiving in-app notifications must have read privilege on the&amp;nbsp;appnotifications&amp;nbsp;table in Dataverse to view their notifications.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use NotificationForm to create and send notifications.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Display notifications using NotificationList and NotificationDetails.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Integrate with Microsoft Graph by configuring Azure AD app registration and MSAL.js.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Customize styles using the provided CSS files.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;Prerequisites: Environment Variables &amp;amp; Attaching the Control&lt;/H2&gt;
&lt;H3&gt;1. Environment Variables Setup&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt;&amp;nbsp;This control uses&amp;nbsp;&lt;STRONG&gt;Dataverse environment variables&lt;/STRONG&gt;&amp;nbsp;(not local&amp;nbsp;.env&amp;nbsp;files) to store configuration values like Azure AD app registration details for Microsoft Graph integration.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Required Environment Variables:&lt;/STRONG&gt;&amp;nbsp;You must create the following environment variables in your Dataverse organization:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;InAppNotif_App_Tenant_Id&lt;/STRONG&gt;&amp;nbsp;- Your Azure AD Tenant ID&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;InAppNotif_App_Client_Id&lt;/STRONG&gt;&amp;nbsp;- Your Azure AD App Registration Client ID (for Microsoft Graph/MSAL authentication)&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;How to Create Environment Variables in Dataverse:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Go to&amp;nbsp;&lt;STRONG&gt;Power Apps Maker Portal&lt;/STRONG&gt;&amp;nbsp;(make.powerapps.com)&lt;/LI&gt;
&lt;LI&gt;Select&amp;nbsp;&lt;STRONG&gt;Solutions&lt;/STRONG&gt;&amp;nbsp;from the left navigation&lt;/LI&gt;
&lt;LI&gt;Open your solution (or create a new one)&lt;/LI&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;New&lt;/STRONG&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;STRONG&gt;More&lt;/STRONG&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;STRONG&gt;Environment variable&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Create each variable:
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Display Name&lt;/STRONG&gt;:&amp;nbsp;InAppNotif App Tenant Id&amp;nbsp;(or similar)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt;:&amp;nbsp;InAppNotif_App_Tenant_Id&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data Type&lt;/STRONG&gt;: Text&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Default Value&lt;/STRONG&gt;: Your Azure AD Tenant ID&lt;/LI&gt;
&lt;LI&gt;Repeat for&amp;nbsp;InAppNotif_App_Client_Id&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;How the Control Uses These Variables:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The control reads these environment variables at runtime using the Dataverse WebAPI:&lt;/P&gt;
&lt;P&gt;// Example from api.ts const clientId = await getEnvironmentVariable("InAppNotif_App_Client_Id", context); const tenantId = await getEnvironmentVariable("InAppNotif_App_Tenant_Id", context);&lt;/P&gt;
&lt;P&gt;This approach makes the control&amp;nbsp;&lt;STRONG&gt;publisher-agnostic&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;easy to configure&lt;/STRONG&gt;&amp;nbsp;across different environments without modifying code.&lt;/P&gt;
&lt;H3&gt;2. Attaching the Control to a Form&lt;/H3&gt;
&lt;P&gt;This PCF control can be attached to&amp;nbsp;&lt;STRONG&gt;any field on any form&lt;/STRONG&gt;&amp;nbsp;in Dataverse. The control supports the following field types:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Single Line of Text&lt;/LI&gt;
&lt;LI&gt;Email&lt;/LI&gt;
&lt;LI&gt;Phone&lt;/LI&gt;
&lt;LI&gt;URL&lt;/LI&gt;
&lt;LI&gt;Multiple Lines of Text&lt;/LI&gt;
&lt;LI&gt;Whole Number&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt;&amp;nbsp;The field value itself is not used by the control—it only serves as a placeholder for the control's UI. You can place this control on any entity (User, Account, Contact, custom entities, etc.) based on your requirements.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Steps:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Navigate to the Form Editor&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Go to&amp;nbsp;&lt;STRONG&gt;Power Apps Maker Portal&lt;/STRONG&gt;&amp;nbsp;(make.powerapps.com)&lt;/LI&gt;
&lt;LI&gt;Select&amp;nbsp;&lt;STRONG&gt;Tables&lt;/STRONG&gt;&amp;nbsp;from the left navigation&lt;/LI&gt;
&lt;LI&gt;Choose your desired table (e.g.,&amp;nbsp;&lt;STRONG&gt;User&lt;/STRONG&gt;,&amp;nbsp;&lt;STRONG&gt;Account&lt;/STRONG&gt;,&amp;nbsp;&lt;STRONG&gt;Contact&lt;/STRONG&gt;)&lt;/LI&gt;
&lt;LI&gt;Click on&amp;nbsp;&lt;STRONG&gt;Forms&lt;/STRONG&gt;&amp;nbsp;tab&lt;/LI&gt;
&lt;LI&gt;Select and edit the form where you want to add notifications&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Add or Select a Field&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Find an existing field that matches one of the supported types (Text, Email, Phone, URL, Multiple Lines, Whole Number)&lt;/LI&gt;
&lt;LI&gt;Or add a new field to the form if needed&lt;/LI&gt;
&lt;LI&gt;Click on the field to select it&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Add the Custom Control&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;With the field selected, click&amp;nbsp;&lt;STRONG&gt;+ Component&lt;/STRONG&gt;&amp;nbsp;in the right panel&lt;/LI&gt;
&lt;LI&gt;Or right-click the field and select&amp;nbsp;&lt;STRONG&gt;Properties&lt;/STRONG&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;STRONG&gt;Components&lt;/STRONG&gt;&amp;nbsp;tab&lt;/LI&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;+ Component&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Search for and select&amp;nbsp;&lt;STRONG&gt;NotificationControl&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;The control will appear in the Components list&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Configure Control Properties&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Label&lt;/STRONG&gt;: Set a custom label (e.g., "Notifications")&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Hide label&lt;/STRONG&gt;: Check this to hide the field label (recommended for cleaner UI)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Form field width&lt;/STRONG&gt;: Set to desired column width (default: 1 column)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Show component on&lt;/STRONG&gt;: Select platforms (Web, Mobile, Tablet)&lt;/LI&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;Done&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Set as Primary Control (Optional)&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;In the Components section, you'll see both the default field control and NotificationControl&lt;/LI&gt;
&lt;LI&gt;You can make NotificationControl the primary control for better visibility&lt;/LI&gt;
&lt;LI&gt;Or keep both and configure display preferences&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Save and Publish&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;Save&lt;/STRONG&gt;&amp;nbsp;to save your changes&lt;/LI&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;Publish&lt;/STRONG&gt;&amp;nbsp;to make the control available to users&lt;/LI&gt;
&lt;LI&gt;The control will now appear on the form when users access it&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;Example: NotificationControl configured on Primary Email field of User form&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Result:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The control will appear on the form, showing all in-app notifications for the current environment&lt;/LI&gt;
&lt;LI&gt;Users can view, create, and manage notifications directly from any form where the control is placed&lt;/LI&gt;
&lt;LI&gt;The control displays with a "New Notification" button and list of existing notifications grouped by title/body&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Prerequisites: Outlook DL Selection &amp;amp; Graph API Access&lt;/H2&gt;
&lt;H3&gt;1. Outlook Distribution List (DL) Selection&lt;/H3&gt;
&lt;P&gt;To enable users to select Outlook Distribution Lists (DLs) for notifications, your control integrates with Microsoft Graph API. This requires:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Azure AD app registration with delegated permissions to read DLs and users.&lt;/LI&gt;
&lt;LI&gt;Environment variable(s) to store the Azure AD Client ID and other config.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Steps:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Register an app in Azure AD (portal.azure.com &amp;gt; Azure Active Directory &amp;gt; App registrations).&lt;/LI&gt;
&lt;LI&gt;Add delegated permissions for&amp;nbsp;Group.Read.All,&amp;nbsp;User.Read, and any other required Graph scopes.&lt;/LI&gt;
&lt;LI&gt;Store the Client ID and other config in Dataverse environment variables.&lt;/LI&gt;
&lt;LI&gt;Configure your control to use these variables for Graph API calls.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;2. App Registration &amp;amp; Graph API Access&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;The app registration must allow access to Microsoft Graph for reading users and groups.&lt;/LI&gt;
&lt;LI&gt;Redirect URI should be set for SPA (Single Page Application) and implicit grant enabled.&lt;/LI&gt;
&lt;LI&gt;The control uses MSAL.js to authenticate and acquire tokens for Graph API.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Security Note:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;By default, the control stores the authentication token in the browser (local/session storage) for convenience and seamless user experience.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;If customers want to avoid storing tokens in the browser:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;They can disable persistent authentication or use a different MSAL configuration.&lt;/LI&gt;
&lt;LI&gt;This may require users to re-authenticate more frequently and could impact usability.&lt;/LI&gt;
&lt;LI&gt;Document this option in your deployment guide and provide configuration instructions.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Example MSAL config:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;const msalConfig = { auth: { clientId: clientIdFromEnvVar, authority: "https://login.microsoftonline.com/common", redirectUri: window.location.origin }, cache: { cacheLocation: "sessionStorage", // or "localStorage" storeAuthStateInCookie: false } };&lt;/P&gt;
&lt;H2&gt;Redirect URI Requirement for MSAL Silent Authentication&lt;/H2&gt;
&lt;H3&gt;Why You Need a Redirect URI&lt;/H3&gt;
&lt;P&gt;For MSAL.js to perform silent authentication (acquire tokens without user interaction), your Azure AD app registration must include a valid redirect URI. In Dataverse/Power Apps, this is often set to an empty HTML web resource.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The redirect URI is where MSAL will redirect the browser after authentication.&lt;/LI&gt;
&lt;LI&gt;For silent authentication, MSAL uses an iframe and the redirect URI must be a valid, accessible page in your environment.&lt;/LI&gt;
&lt;LI&gt;An empty HTML web resource is commonly used because it loads quickly and does not display content.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;How to Set Up&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Create an empty HTML web resource in Dataverse:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Go to Power Apps &amp;gt; Solutions &amp;gt; Add &amp;gt; Web Resource.&lt;/LI&gt;
&lt;LI&gt;Name it (e.g.,&amp;nbsp;msal-redirect.html).&lt;/LI&gt;
&lt;LI&gt;Content can be just:&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/LI&gt;
&lt;LI&gt;Save and publish.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Add the web resource URL as a redirect URI in Azure AD app registration:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Go to Azure Portal &amp;gt; Azure Active Directory &amp;gt; App registrations &amp;gt; Your app.&lt;/LI&gt;
&lt;LI&gt;Under&amp;nbsp;&lt;STRONG&gt;Authentication&lt;/STRONG&gt;, add the web resource URL (e.g.,&amp;nbsp;https://&amp;lt;org&amp;gt;.crm.dynamics.com/WebResources/msal-redirect.html) as a redirect URI for SPA.&lt;/LI&gt;
&lt;LI&gt;Enable&amp;nbsp;&lt;STRONG&gt;Access tokens&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;ID tokens&lt;/STRONG&gt;&amp;nbsp;under Implicit grant.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt;&amp;nbsp;When adding your web resource redirect URI as a SPA in Azure AD app registration, ensure you enable both&amp;nbsp;&lt;STRONG&gt;Access token&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;ID token&lt;/STRONG&gt;&amp;nbsp;under Implicit grant. This allows MSAL.js to acquire tokens for authentication and API access, enabling seamless user experience and secure integration with Microsoft Graph.&lt;/P&gt;
&lt;H3&gt;Example&lt;/H3&gt;
&lt;P&gt;Redirect URI: https://yourorg.crm.dynamics.com/WebResources/msal-redirect.html&lt;/P&gt;
&lt;H3&gt;Why This Matters&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Without a valid redirect URI, MSAL cannot complete silent authentication and users may be prompted to sign in more often.&lt;/LI&gt;
&lt;LI&gt;The empty HTML web resource acts as a safe landing page for token acquisition.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Using Dataverse Teams for In-App Notifications&lt;/H2&gt;
&lt;P&gt;If your organization configures on-floor teams as Dataverse Teams (with members assigned in Dataverse), supervisors can leverage this feature to send targeted in-app notifications to their team members.&lt;/P&gt;
&lt;H3&gt;How It Works&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Dataverse Team:&lt;/STRONG&gt;&amp;nbsp;A group entity in Dataverse that can have multiple users as members. Teams can represent departments, on-floor groups, or any logical unit.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Supervisor Use Case:&lt;/STRONG&gt;&amp;nbsp;If you are a supervisor and your team is set up as a Dataverse Team, you can select the team in the notification form and send in-app notifications to all its members at once.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Benefits&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Targeted Communication:&lt;/STRONG&gt;&amp;nbsp;Easily notify all team members about important updates, tasks, or alerts.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Efficient Workflow:&lt;/STRONG&gt;&amp;nbsp;No need to select individual users; simply select the team and send the notification.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Integration:&lt;/STRONG&gt;&amp;nbsp;The PCF control fetches team members from Dataverse and ensures notifications are delivered to each member.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Example Scenario&lt;/H3&gt;
&lt;P&gt;A supervisor wants to notify their on-floor team about a shift change. The team is configured as a Dataverse Team. The supervisor selects the team in the notification form and sends the message. All team members receive the notification instantly in their Dataverse environment.&lt;/P&gt;
&lt;H3&gt;How to Set Up&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;Ensure your teams are created and configured in Dataverse (Power Apps &amp;gt; Teams).&lt;/LI&gt;
&lt;LI&gt;Assign users as members to each team.&lt;/LI&gt;
&lt;LI&gt;Use the notification form in the PCF control to select a team and send notifications.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This approach streamlines communication and ensures all relevant users are informed efficiently. For more details, see&amp;nbsp;&lt;A href="https://learn.microsoft.com/power-platform/admin/manage-teams" target="_blank" rel="noopener"&gt;Microsoft Docs: Manage teams in Dataverse&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Using Queue Selection for Workstream Notifications&lt;/H2&gt;
&lt;P&gt;If your organization uses queues and workstreams (common in Customer Service or Omnichannel scenarios), you can leverage queue selection to send in-app notifications to all agents associated with a specific workstream.&lt;/P&gt;
&lt;H3&gt;How It Works&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Queue:&lt;/STRONG&gt;&amp;nbsp;A Dataverse entity that holds work items and is associated with agents who can work on those items.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Workstream:&lt;/STRONG&gt;&amp;nbsp;A collection of queues and routing rules that define how work is distributed to agents.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Agent Use Case:&lt;/STRONG&gt;&amp;nbsp;Supervisors or admins can select a queue in the notification form to send in-app notifications to all agents assigned to that queue's workstream.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Benefits&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Targeted Communication:&lt;/STRONG&gt;&amp;nbsp;Notify all agents working on a specific queue or workstream about important updates, new assignments, or urgent issues.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Efficient Workflow:&lt;/STRONG&gt;&amp;nbsp;No need to manually identify and select agents; simply select the queue and the control will resolve all associated agents.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Integration:&lt;/STRONG&gt;&amp;nbsp;The PCF control fetches queue members from Dataverse and ensures notifications are delivered to each agent.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Example Scenario&lt;/H3&gt;
&lt;P&gt;A supervisor wants to notify all agents working on the "Support Queue" about a critical system update. The supervisor selects the queue in the notification form and sends the message. All agents associated with that queue's workstream receive the notification instantly.&lt;/P&gt;
&lt;H3&gt;How to Set Up&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;Ensure your queues and workstreams are configured in Dataverse (Power Apps &amp;gt; Queues).&lt;/LI&gt;
&lt;LI&gt;Assign agents to queues or workstreams.&lt;/LI&gt;
&lt;LI&gt;Use the notification form in the PCF control to select a queue and send notifications to all associated agents.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This approach is especially useful for Customer Service and Omnichannel environments where agents are organized by workstreams. For more details, see&amp;nbsp;&lt;A href="https://learn.microsoft.com/dynamics365/customer-service/set-up-queues-manage-activities-cases" target="_blank" rel="noopener"&gt;Microsoft Docs: Manage queues in Dataverse&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;For more details, see the&amp;nbsp;&lt;A href="https://learn.microsoft.com/power-apps/maker/data-platform/environment-variables" target="_blank" rel="noopener"&gt;Microsoft Docs: Use environment variables in Dataverse&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/power-apps/developer/component-framework/add-custom-controls-forms-views" target="_blank" rel="noopener"&gt;Add PCF controls to forms&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/active-directory/develop/quickstart-register-app" target="_blank" rel="noopener"&gt;Microsoft Docs: Register an app with Azure AD&lt;/A&gt;, and&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications" target="_blank" rel="noopener"&gt;MSAL.js configuration options&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Developer Notes&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;All components are documented with JSDoc comments for easy understanding.&lt;/LI&gt;
&lt;LI&gt;Error handling and fallback logic are implemented for robust user experience.&lt;/LI&gt;
&lt;LI&gt;The codebase is modular and easy to extend for new notification types or integrations.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Contributing&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;Fork the repository and create a pull request for improvements or bug fixes.&lt;/LI&gt;
&lt;LI&gt;Please document new components and functions using JSDoc comments and update the README as needed.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Testing &amp;amp; Production Readiness&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Current Testing Status:&lt;/STRONG&gt;&amp;nbsp;This control has been tested for minimum positive flow scenarios only.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Before Production Deployment:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Perform comprehensive testing including edge cases, error scenarios, and negative flows&lt;/LI&gt;
&lt;LI&gt;Conduct security audits and vulnerability assessments&lt;/LI&gt;
&lt;LI&gt;Test with your organization's specific Dataverse configuration and data&lt;/LI&gt;
&lt;LI&gt;Validate performance under expected load conditions&lt;/LI&gt;
&lt;LI&gt;Ensure compliance with your organization's governance and security policies&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;License&lt;/H2&gt;
&lt;P&gt;MIT&lt;/P&gt;
&lt;H2&gt;Disclaimer&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;USE AT YOUR OWN RISK&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This control is provided as-is without any warranties, express or implied. Neither the author nor Microsoft Corporation are responsible for any issues, damages, or losses arising from the use, deployment, or adaptation of this control.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;This control has been tested for minimum positive flow scenarios only&lt;/LI&gt;
&lt;LI&gt;Organizations must conduct their own thorough review and testing before deployment&lt;/LI&gt;
&lt;LI&gt;Ensure the control meets your organization's security, compliance, and design standards&lt;/LI&gt;
&lt;LI&gt;No support or maintenance guarantees are provided&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Responsibility:&lt;/STRONG&gt; By using this control, you acknowledge that you have reviewed the code, tested it in your environment, and accept full responsibility for its deployment and operation within your organization.&lt;/P&gt;</description>
      <pubDate>Mon, 15 Dec 2025 14:13:21 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/in-app-notification-pcf-control/ba-p/4477890</guid>
      <dc:creator>PravinT</dc:creator>
      <dc:date>2025-12-15T14:13:21Z</dc:date>
    </item>
    <item>
      <title>Optimizing Exchange Online PowerShell</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/optimizing-exchange-online-powershell/ba-p/4476918</link>
      <description>&lt;P&gt;The Exchange Online PowerShell module is a powerful tool. As environments scale and tasks grow in complexity, performance and reliability become critical. This post takes a holistic approach to optimizing Exchange Online management and automation in four parts:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Windows PowerShell performance tips&lt;/LI&gt;
&lt;LI&gt;Best practices that apply to all M365 PowerShell modules&lt;/LI&gt;
&lt;LI&gt;Best practices specific to the Exchange Online PowerShell module&lt;/LI&gt;
&lt;LI&gt;The future of automation&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;=================&lt;/H5&gt;
&lt;img /&gt;
&lt;H4&gt;General Windows PowerShell Performance Tips&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Seemingly obvious but often overlooked, if you want to get peak performance from any PowerShell module, you need to optimize Windows PowerShell itself.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Keep PowerShell Updated:&lt;/STRONG&gt; Always use the latest supported version of PowerShell for security, compatibility, and performance improvements.
&lt;UL&gt;
&lt;LI&gt;Windows PowerShell 5.1 is preinstalled on the currently supported versions of Windows. Security updates and other patches are included in Windows Updates.&lt;/LI&gt;
&lt;LI&gt;For PowerShell 7, follow the steps &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.5#upgrade-an-existing-installation" target="_blank" rel="noopener"&gt;here&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Disable telemetry&lt;/STRONG&gt; if not needed by setting the POWERSHELL_TELEMETRY_OPTOUT environment variable:&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="powershell"&gt;$env:POWERSHELL_TELEMETRY_OPTOUT = "true"&lt;/LI-CODE&gt;
&lt;H5&gt;=================&lt;/H5&gt;
&lt;H4&gt;Best Practices for all M365 PowerShell Modules&lt;/H4&gt;
&lt;P&gt;These best practices are vital for, but not specific to Exchange Online PowerShell. In other words, although I’ve used Exchange Online cmdlets in the examples provided, all tips in this section apply to other M365-specific modules like SharePoint, Teams, or Security and Compliance PowerShell.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Use the latest module version&lt;/STRONG&gt; to benefit from performance improvements and bug fixes.
&lt;UL&gt;
&lt;LI&gt;For Admins, establish a regular update cadence for all M365 PowerShell modules. Testing new releases on local machines or management servers is ideal for admins, as it offers flexibility and low risk if problems occur.&lt;/LI&gt;
&lt;LI&gt;Leverage auto-updates for automation tools, if available. For example, the&amp;nbsp;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell?tabs=portal#dependency-management" target="_blank" rel="noopener"&gt;Managed Dependencies feature&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; for Azure Functions Apps.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Use service principal or app-only (sometimes called app-based) authentication&lt;/STRONG&gt; &lt;STRONG&gt;for automation&lt;/STRONG&gt; to avoid interactive logins and improve script reliability.
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps" target="_blank" rel="noopener"&gt;App-only authentication in Exchange Online PowerShell and Security &amp;amp; Compliance PowerShell&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The exact name, requirements and config for app-only authentication can differ across other services or even in our documentation, but the use-case and benefits are universal for all M365 services.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;Script smarter, not harder…&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Parallel Processing:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Leverage&amp;nbsp;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/exchange/more-efficient-bulk-operations-with-powershell-parallelism/4409693" target="_blank" rel="noopener" data-lia-auto-title="ForEach-Object -Parallel" data-lia-auto-title-active="0"&gt;ForEach-Object -Parallel&lt;/A&gt; (in PowerShell 7+) or background jobs to perform bulk operations faster.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Use -ResultSize to return only the necessary data.&lt;/STRONG&gt; This is especially beneficial when querying many objects.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="powershell"&gt;Get-EXOMailbox -ResultSize 100&lt;/LI-CODE&gt;
&lt;P&gt;&lt;EM&gt;This example retrieves only the first 100 mailboxes (rather than default of 1,000), reducing resources and time to execute.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Prioritize service-side filtering when available.&lt;/STRONG&gt; Not all filters are created equal. Understanding how, or more importantly, &lt;EM&gt;where&lt;/EM&gt; filtering is done when using different methods can have a substantial impact on performance.
&lt;UL&gt;
&lt;LI&gt;Experienced PowerShell users know about pipelining with Where-Object to filter data. This is one example of &lt;STRONG&gt;client-side&lt;/STRONG&gt; filtering&lt;STRONG&gt;. &lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Most cmdlets available in the various M365 PowerShell modules support the -Filter parameter. This leverages &lt;STRONG&gt;service-side&lt;/STRONG&gt; (a.k.a. server-side) filtering.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="powershell"&gt;Get-EXOMailbox -Filter "Department -eq 'Sales'"&lt;/LI-CODE&gt;
&lt;P&gt;&lt;EM&gt;This example limits results to mailboxes for the sales department and leverages service-side filtering to ensure only the data we want is returned to the client.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Service-side filtering is much more efficient for several reasons. A deep-technical explanation of this is outside the scope of the current post, so you can take my word for it or seek out more information for yourself. There are plenty of great, easy to find articles across the web on this topic.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Following the above recommendations helps ensure that we, the users (and our tools), have a solid foundation for optimal performance. Next, let’s look at ways to ensure we get the best performance out of the Exchange Online module itself.&lt;/P&gt;
&lt;H5&gt;=================&lt;/H5&gt;
&lt;img /&gt;
&lt;H4 class="lia-align-left"&gt;Exchange Online PowerShell (EXO)&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Exchange Online PowerShell module (EXO V3+) introduced significant performance improvements, especially around how cmdlet help files are handled.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Use the Exchange Online V3 Module:&lt;/STRONG&gt; The latest module supports REST-based cmdlets, offering better performance and reliability.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;How much better and more reliable? I thought you’d never ask…&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;From &lt;A href="https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#rest-api-connections-in-the-exo-v3-module" target="_blank" rel="noopener"&gt;REST API connections in the EXO V3 module&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;The following table compares the benefits of REST API cmdlets to unavailable remote PowerShell cmdlets and the&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps#cmdlets-in-the-exchange-online-powershell-module" target="_blank" rel="noopener"&gt;exclusive Get-EXO* cmdlets in the EXO V3 module&lt;/A&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-indent-margin-left-30px" border="1" style="width: 93.7963%; height: 248px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 67px;"&gt;&lt;td style="height: 67px;"&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Remote PowerShell cmdlets &lt;/STRONG&gt;(deprecated)&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Get-EXO* cmdlets&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;REST API cmdlets&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 39px;"&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Security&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Least secure&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Highly secure&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Highly secure&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 39px;"&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Performance&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Low performance&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;High performance&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Medium performance&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 39px;"&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Reliability&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Least reliable&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Highly reliable&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P class=""&gt;Highly reliable&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 67px;"&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;&lt;STRONG&gt;Functionality&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;All parameters and output properties available&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;Limited parameters and output properties available&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P class=""&gt;All parameters and output properties available&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Follow the guidelines from this doc.&lt;/STRONG&gt; &lt;STRONG&gt;Don’t skip this!!&lt;/STRONG&gt;&lt;BR /&gt;&lt;A href="https://techcommunity.microsoft.com/blog/exchange/reducing-memory-consumption-of-the-exchange-online-powershell-v3-module/3970086" target="_blank" rel="noopener"&gt;Microsoft Tech Community: Reducing Memory Consumption in EXO V3&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;=================&lt;/H5&gt;
&lt;H4&gt;The Future! Microsoft Graph PowerShell SDK&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Microsoft Graph PowerShell SDK is the future of Microsoft 365 automation. It’s modular, cross-platform, and supports modern authentication. Graph can feel overwhelming to those who are comfortable with the current PowerShell modules. If you haven’t started using Graph because you aren’t sure where to start, I recommend you &lt;A href="https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0" target="_blank" rel="noopener"&gt;Install the Microsoft Graph PowerShell SDK&lt;/A&gt; and check out our aptly named “&lt;A href="https://learn.microsoft.com/en-us/powershell/microsoftgraph/get-started?view=graph-powershell-1.0" target="_blank" rel="noopener"&gt;Getting started&lt;/A&gt;” documentation (don’t look at me like that).&lt;/P&gt;
&lt;P&gt;Better yet, if you’re a Support for Mission Critical customer, ask your Customer Success Account Manager or Customer Solution Lead about the Microsoft-led training options and learn from an expert!&lt;/P&gt;
&lt;P&gt;If you’re already using the Microsoft Graph PowerShell SDK, great! The tips outlined throughout this post can provide the same benefits with Graph.&lt;/P&gt;
&lt;H5&gt;=================&lt;/H5&gt;
&lt;H3&gt;✅ Final Thoughts&lt;/H3&gt;
&lt;P&gt;Optimizing PowerShell performance isn’t just about speed – it’s about reliability, scalability, and resource efficiency. Whether you’re using PowerShell for daily management or building and maintaining automation tools for your organization, following these guidelines should have immediate and lasting benefits.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Dec 2025 14:12:36 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/optimizing-exchange-online-powershell/ba-p/4476918</guid>
      <dc:creator>erscofie</dc:creator>
      <dc:date>2025-12-11T14:12:36Z</dc:date>
    </item>
    <item>
      <title>Navigating Microsoft's Copilot Studio and Azure AI Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/navigating-microsoft-s-copilot-studio-and-azure-ai-foundry/ba-p/4472233</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Key Insights into Microsoft's AI Landscape&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://www.microsoft.com/en-us/microsoft-365-copilot/microsoft-copilot-studio/" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Copilot Studio&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Excels in rapid, low-code/no-code development of conversational AI for quick deployment and Microsoft 365 integration.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/what-is-azure-ai-foundry" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Azure AI Foundry&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Offers comprehensive, code-first AI lifecycle management for advanced customization, enterprise-grade solutions, and deep control over models and data.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Synergistic Approach:&lt;/STRONG&gt; The most effective strategy often involves using Copilot Studio as the user-facing interface and Azure AI Foundry as the robust backend engine for complex AI tasks.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In the rapidly evolving landscape of artificial intelligence, Microsoft provides two powerful yet distinct platforms for AI development: Copilot Studio and Azure AI Foundry. While both aim to empower organizations with AI capabilities, they cater to different needs and technical expertise levels. Understanding their individual strengths and, crucially, how they can be strategically combined, is paramount for building effective and scalable AI solutions. This guide delves into the specific scenarios where each platform shines and illustrates the immense benefits of a unified approach.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Copilot Studio: Rapid Conversational AI Development&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H5&gt;&lt;STRONG&gt;Simplifying AI Agent Creation for Business Users and Quick Deployments&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Copilot Studio is designed for speed and accessibility, making it an ideal choice for users who need to build conversational AI agents without extensive coding knowledge. It offers a low-code/no-code environment that empowers business users, analysts, and citizen developers to create, deploy, and manage AI-powered chatbots and virtual assistants with remarkable efficiency.&lt;/P&gt;
&lt;P&gt;Copilot Studio is accessible from&amp;nbsp;&lt;A href="https://copilotstudio.microsoft.com/" target="_blank" rel="noopener"&gt;https://copilotstudio.microsoft.com&lt;/A&gt;&amp;nbsp;and can be used through different&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/billing-licensing" target="_blank" rel="noopener"&gt;licensing options&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;H5&gt;&lt;STRONG&gt;Key Characteristics and Use Cases of Copilot Studio&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Copilot Studio's appeal lies in its user-friendly interface and seamless integration with the Microsoft ecosystem:&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Low-code/No-code Development:&lt;/STRONG&gt; Its visual canvas allows for intuitive design and deployment of agents, making AI accessible to a broader audience.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rapid Deployment:&lt;/STRONG&gt; Ideal for scenarios requiring quick prototyping and deployment of conversational bots, often within hours or days.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft 365 Integration:&lt;/STRONG&gt; Tightly integrated with applications like Teams, Outlook, and SharePoint, it's perfect for enhancing productivity within the M365 environment. It can extend Microsoft 365 Copilot's capabilities to connect with external systems.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Simple Workflows:&lt;/STRONG&gt; Best suited for tasks such as IT helpdesk FAQs, HR policy queries, basic customer service, and routine automation.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Limited Customization Needs:&lt;/STRONG&gt; When pre-built templates and standard models are sufficient, Copilot Studio provides a straightforward path to implementation.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Examples of Copilot Studio in action include internal HR bots for answering common employee questions, customer service agents handling FAQs on websites, and bots automating routine tasks like generating reports or summarizing meetings. It prioritizes ease of use and quick time-to-value, making it a go-to for organizations seeking to rapidly implement conversational AI.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Azure AI Foundry: For Advanced AI Development&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H5&gt;&lt;STRONG&gt;Comprehensive Control for Developers and Data Scientists&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Azure AI Foundry, formerly known as Azure AI Studio, is a code-first, comprehensive platform built for developers and data scientists who demand granular control over the entire AI lifecycle. It provides a robust environment for building, deploying, managing, and monitoring complex, enterprise-grade AI applications.&lt;/P&gt;
&lt;P&gt;The Azure AI Foundry Management Center is available from&amp;nbsp;&lt;A href="https://ai.azure.com/" target="_blank" rel="noopener"&gt;https://ai.azure.com&lt;/A&gt;. While there is no specific license cost for using Azure AI Foundry, note that the different underlying Azure services such as Azure OpenAI, Azure AI Search and the LLMs will incur&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/costs-plan-manage" target="_blank" rel="noopener"&gt;consumption costs&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;H5&gt;&lt;STRONG&gt;Key Characteristics and Use Cases of Azure AI Foundry&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Azure AI Foundry is tailored for sophisticated AI projects requiring deep customization and robust governance:&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Code-first Environment:&lt;/STRONG&gt; It caters to developers and data scientists proficient in languages like Python and tools such as PromptFlow, offering unparalleled control over models and data.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Full AI Lifecycle Management:&lt;/STRONG&gt; From model selection and grounding to prompt testing, deployment, evaluation, tracing, and monitoring, Azure AI Foundry covers every stage of AI development.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Advanced Customization:&lt;/STRONG&gt; Ideal for scenarios requiring specialized models, stronger reasoning capabilities, image analysis, and domain-specific AI solutions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Enterprise-Scale Solutions:&lt;/STRONG&gt; Designed for production-ready applications that necessitate robust monitoring, tracing, compliance features, data security, and privacy.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data-Sensitive Operations:&lt;/STRONG&gt; Provides granular control over how AI models handle sensitive internal data, ensuring compliance and security.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Use cases for Azure AI Foundry include developing sophisticated AI agents for cyber threat detection, legal document summarization, visual issue detection in IT support, and orchestrating multi-agent systems. It's the platform of choice for organizations needing to own and manage all aspects of their copilots, ensuring high levels of customization, security, and scalability.&lt;/P&gt;
&lt;P&gt;Azure AI Foundry specializes in advanced AI capabilities like&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/retrieval-augmented-generation" target="_blank" rel="noopener"&gt;Retrieval-Augmented Generation (RAG)&lt;/A&gt;,&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/benchmark-model-in-catalog" target="_blank" rel="noopener"&gt;model benchmarking&lt;/A&gt;, and&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/model-inference/how-to/github/create-model-deployments?" target="_blank" rel="noopener"&gt;multi-modal integrations&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;&lt;STRONG&gt;When to Use Both &lt;/STRONG&gt;&lt;/H2&gt;
&lt;H5&gt;&lt;STRONG&gt;Combining Accessibility with Power for Comprehensive Solutions&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;For many organizations, the most effective AI strategy isn't choosing between Copilot Studio and Azure AI Foundry, but rather leveraging their complementary strengths. This hybrid approach allows for the agility of low-code development while maintaining the control and power of a code-first platform.&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;Strategic Integration Models&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;The synergy between Copilot Studio and Azure AI Foundry can manifest in several powerful ways:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Frontend/Backend Architecture:&lt;/STRONG&gt; Copilot Studio can serve as the intuitive, user-facing conversational interface (the "front door"), while Azure AI Foundry acts as the powerful backend processing engine (the "engine room"). Copilot Studio captures user requests and routes complex queries or reasoning tasks to Azure AI Foundry for processing, leveraging its advanced models, knowledge bases, and enterprise controls.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Progressive Complexity and Cost Optimization:&lt;/STRONG&gt; Begin with Copilot Studio for rapid prototyping and simpler AI agents. As requirements evolve and solutions demand deeper customization, integration with sensitive data, or robust governance, migrate or integrate complex components with Azure AI Foundry. This also allows for cost optimization by handling lightweight tasks in Copilot Studio while scaling heavy inference in Azure AI Foundry.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Leveraging Custom Models:&lt;/STRONG&gt; Azure AI Foundry allows organizations to develop and deploy custom, specialized models. These models can then be directly integrated and consumed within Copilot Studio prompts, enabling low-code agents to leverage highly tailored and powerful AI capabilities.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Multi-channel Deployment and Enterprise Governance:&lt;/STRONG&gt; Deploy Copilot Studio agents across various channels like Teams, web, and mobile, providing a consistent user experience. Simultaneously, utilize Azure AI Foundry for compliance-controlled processing, robust monitoring, and centralized governance of AI assets.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This combined approach allows organizations to harness the benefits of both platforms: the speed and accessibility of Copilot Studio for conversational AI, and the depth of control, customization, and full lifecycle management offered by Azure AI Foundry for advanced, enterprise-grade applications.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Comparative Analysis&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H5&gt;&lt;STRONG&gt;A Side-by-Side Look at Capabilities and Best-Fit Scenarios&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;To further clarify the distinction and complementary nature of these platforms, let's compare their core capabilities and ideal applications:&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;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Feature/Aspect&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Copilot Studio&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Azure AI Foundry&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Combined Approach&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Development Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Low-code/No-code, visual canvas&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Code-first, SDKs, PromptFlow&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Hybrid: Low-code frontend, code-first backend&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Primary Users&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Business users, citizen developers, analysts&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Developers, data scientists, AI engineers&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cross-functional teams&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Speed of Deployment&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Very fast (hours to days)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Moderate to fast (days to weeks, depending on complexity)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Fast prototyping, robust scaling&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Customization Level&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Limited (templates, connectors)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Extensive (custom models, tools, logic)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Tailored UX with advanced AI logic&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Integration Ecosystem&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Microsoft 365, Power Platform&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Azure services, broad model catalog, external systems&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Comprehensive M365 and broader enterprise integration&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;AI Lifecycle Management&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Basic (build, test, publish, analytics)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Full (model selection, grounding, evaluation, monitoring, tracing)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Streamlined development with full control&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Complexity of Use Cases&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Simple FAQs, basic automation, routing&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Complex reasoning, multi-agent systems, RAG over sensitive data&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;From simple Q&amp;amp;A to sophisticated enterprise AI&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Governance &amp;amp; Control&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Power Platform admin, basic ALM&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Enterprise-grade security, compliance, isolation, detailed logging&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;User-friendly governance for agents, strict control for core AI&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Cost Optimization&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Efficient for lightweight tasks&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Optimized for complex, scalable inference&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Balancing efficiency for simple tasks with robust processing for complex ones&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;&lt;STRONG&gt;Getting Started with Building Custom Copilots&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;If you're exploring how to begin your journey with custom copilots, things should be starting to click. As someone deeply involved in learning experiences, I’ve seen firsthand that customers learn best by doing. So, to help you dive in, I recommend starting with these hands-on Microsoft Learn tutorials:&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Copilot Studio:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Create and deploy an agent&lt;/STRONG&gt;&amp;nbsp;- Learn how to build and deploy an agent using Copilot Studio. This tutorial walks you through adding knowledge, testing content updates in real-time, and deploying your agent to a test page:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/fundamentals-get-started" target="_blank" rel="noopener"&gt;Link to tutorial&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Building agents with generative AI&lt;/STRONG&gt;&amp;nbsp;- Discover how to create agents powered by generative AI. This module outlines key features and prerequisites to get you started:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/microsoft-copilot-studio/nlu-gpt-quickstart" target="_blank" rel="noopener"&gt;Link to tutorial&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Create and publish agents&lt;/STRONG&gt;&amp;nbsp;- Explore how to design agents tailored to real business scenarios—ones that both customers and employees can interact with:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/training/paths/work-power-virtual-agents/" target="_blank" rel="noopener"&gt;Link to tutorial&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;Azure AI Foundry:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Build a basic chat app in Python&lt;/STRONG&gt;&amp;nbsp;- Set up your local dev environment with the Azure AI Foundry SDK, write prompts, run your app code, trace LLM calls, and perform basic evaluations:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/quickstarts/get-started-code" target="_blank" rel="noopener"&gt;Link to tutorial&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use the chat playground&lt;/STRONG&gt;&amp;nbsp;- This QuickStart shows you how to deploy a chat model and experiment with it in the Azure AI Foundry portal’s playground:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/quickstarts/get-started-playground" target="_blank" rel="noopener"&gt;Link to tutorial&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure AI Foundry documentation&lt;/STRONG&gt;&amp;nbsp;- Dive into the full documentation to learn how developers and organizations can rapidly build intelligent apps using prebuilt and customizable APIs and models:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/" target="_blank" rel="noopener"&gt;Link to tutorial&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Ultimately, the choice between Copilot Studio and Azure AI Foundry, or the decision to use both, hinges on the specific needs, technical capabilities, and strategic objectives of an organization. Copilot Studio offers an accessible entry point into AI, enabling rapid development of conversational agents for everyday business scenarios. Azure AI Foundry provides the deep control and comprehensive toolkit necessary for building complex, scalable, and highly customized AI solutions for the enterprise. The most forward-thinking approach for many organizations will be a hybrid one, leveraging Copilot Studio for agile, user-facing interactions and entrusting Azure AI Foundry with the heavy lifting of advanced AI model management and data processing. This synergistic model allows businesses to achieve both speed and scale, delivering powerful AI experiences while maintaining stringent control and compliance.&lt;/P&gt;</description>
      <pubDate>Sat, 22 Nov 2025 01:33:03 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/navigating-microsoft-s-copilot-studio-and-azure-ai-foundry/ba-p/4472233</guid>
      <dc:creator>anishekkamal</dc:creator>
      <dc:date>2025-11-22T01:33:03Z</dc:date>
    </item>
    <item>
      <title>Azure AI Foundry vs. Azure Databricks – A Unified Approach to Enterprise Intelligence</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/azure-ai-foundry-vs-azure-databricks-a-unified-approach-to/ba-p/4467576</link>
      <description>&lt;H4&gt;&lt;STRONG&gt;Key Insights into Azure AI Foundry and Azure Databricks&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Complementary Powerhouses:&lt;/STRONG&gt; Azure AI Foundry is purpose-built for generative AI application and agent development, focusing on model orchestration and rapid prototyping, while Azure Databricks excels in large-scale data engineering, analytics, and traditional machine learning, forming the data intelligence backbone.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Seamless Integration for End-to-End AI:&lt;/STRONG&gt; A critical native connector allows AI agents developed in Foundry to access real-time, governed data from Databricks, enabling contextual and data-grounded AI solutions. This integration facilitates a comprehensive AI lifecycle from data preparation to intelligent application deployment.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Specialized Roles for Optimal Performance:&lt;/STRONG&gt; Enterprises leverage Databricks for its robust data processing, lakehouse architecture, and ML model training capabilities, and then utilize AI Foundry for deploying sophisticated generative AI applications, agents, and managing their lifecycle, ensuring responsible AI practices and scalability.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In the rapidly evolving landscape of artificial intelligence, organizations seek robust platforms that can not only handle vast amounts of data but also enable the creation and deployment of intelligent applications. Microsoft Azure offers two powerful, yet distinct, services in this domain: Azure AI Foundry and Azure Databricks. While both contribute to an organization's AI capabilities, they serve different primary functions and are designed to complement each other in building comprehensive, enterprise-grade AI solutions.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Decoding the Core Purpose: Foundry for Generative AI, Databricks for Data Intelligence&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;At its heart, the distinction between Azure AI Foundry and Azure Databricks lies in their core objectives and the types of workloads they are optimized for. Understanding these fundamental differences is crucial for strategic deployment and maximizing their combined potential.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Azure AI Foundry: The Epicenter for Generative AI and Agents&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Azure AI Foundry emerges as Microsoft's unified platform specifically engineered for the development, deployment, and management of generative AI applications and AI agents. It represents a consolidation of capabilities from what were formerly Azure AI Studio and Azure OpenAI Studio. Its primary focus is on accelerating the entire lifecycle of generative AI, from initial prototyping to large-scale production deployments.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Characteristics of Azure AI Foundry:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Generative AI Focus:&lt;/STRONG&gt; Foundry streamlines the development of large language models (LLMs) and customized generative AI applications, including chatbots and conversational AI. It emphasizes prompt engineering, Retrieval-Augmented Generation (RAG), and agent orchestration.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Extensive Model Catalog:&lt;/STRONG&gt; It provides access to a vast catalog of over 11,000 foundation models from various publishers, including OpenAI, Meta (Llama 4), Mistral, and others. These models can be deployed via managed compute or serverless API deployments, offering flexibility and choice.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Agentic Development:&lt;/STRONG&gt; A significant strength of Foundry is its support for building sophisticated AI agents. This includes tools for grounding agents with knowledge, tool calling, comprehensive evaluations, tracing, monitoring, and guardrails to ensure responsible AI practices. Foundry Local further extends this by allowing offline and on-device development.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Unified Development Environment:&lt;/STRONG&gt; It offers a single management grouping for agents, models, and tools, promoting efficient development and consistent governance across AI projects.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Enterprise Readiness:&lt;/STRONG&gt; Built-in capabilities such as Role-Based Access Control (RBAC), observability, content safety, and project isolation ensure that AI applications are secure, compliant, and scalable for enterprise use.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img&gt;
&lt;P&gt;&lt;EM&gt;Figure 1: Conceptual Architecture of Azure AI Foundry illustrating its various components for AI development and deployment.&lt;/EM&gt;&lt;/P&gt;
&lt;/img&gt;
&lt;H4&gt;&lt;STRONG&gt;Azure Databricks: The Powerhouse for Data Engineering, Analytics, and Machine Learning&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Azure Databricks, on the other hand, is an Apache Spark-based data intelligence platform optimized for large-scale data engineering, analytics, and traditional machine learning workloads. It acts as a collaborative workspace for data scientists, data engineers, and ML engineers to process, analyze, and transform massive datasets, and to build and deploy diverse ML models.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Characteristics of Azure Databricks:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Unified Data Analytics Platform:&lt;/STRONG&gt; Central to Databricks is its lakehouse architecture, built on Delta Lake, which unifies data warehousing and data lakes. This provides a single platform for data engineering, SQL analytics, and machine learning.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Big Data Processing:&lt;/STRONG&gt; Excelling in distributed computing, Databricks is ideal for processing large datasets, performing ETL (Extract, Transform, Load) operations, and real-time analytics at scale.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Comprehensive ML and AI Workflows:&lt;/STRONG&gt; It offers a specialized environment for the full ML lifecycle, including data preparation, feature engineering, model training (both classic and deep learning), and model serving. Tools like MLflow are integrated for tracking, evaluating, and monitoring ML models.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data Intelligence Features:&lt;/STRONG&gt; Databricks includes AI-assistive features such as Databricks Assistant and Databricks AI/BI Genie, which enable users to interact with their data using natural language queries to derive insights.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Unified Governance with Unity Catalog:&lt;/STRONG&gt; Unity Catalog provides a centralized governance solution for all data and AI assets within the lakehouse, ensuring data security, lineage tracking, and access control.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img&gt;
&lt;P&gt;&lt;EM&gt;Figure 2: The Databricks Data Intelligence Platform with its unified approach to data, analytics, and AI.&lt;/EM&gt;&lt;/P&gt;
&lt;/img&gt;
&lt;H2&gt;&lt;STRONG&gt;The Symbiotic Relationship: Integration and Complementary Use Cases&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;While distinct in their primary functions, Azure AI Foundry and Azure Databricks are explicitly designed to work together, forming a powerful, integrated ecosystem for end-to-end AI development and deployment. This synergy is key to building advanced, data-driven AI solutions in the enterprise.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Seamless Integration for Enhanced AI Capabilities&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The integration between the two platforms is a cornerstone of Microsoft's AI strategy, enabling AI agents and generative applications to be grounded in high-quality, governed enterprise data.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Integration Points:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Native Databricks Connector in AI Foundry:&lt;/STRONG&gt; A significant development in 2025 is the public preview of a native connector that allows AI agents built in Azure AI Foundry to directly query real-time, governed data from Azure Databricks. This means Foundry agents can leverage Databricks AI/BI Genie to surface data insights and even trigger Databricks Jobs, providing highly contextual and domain-aware responses.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data Grounding for AI Agents:&lt;/STRONG&gt; This integration enables AI agents to access structured and unstructured data processed and stored in Databricks, providing the necessary context and knowledge base for more accurate and relevant generative AI outputs. All interactions are auditable within Databricks, maintaining governance and security.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Model Crossover and Availability:&lt;/STRONG&gt; Foundation models, such as the Llama 4 family, are made available across both platforms. Databricks DBRX models can also appear in the Foundry model catalog, allowing flexibility in where models are trained, deployed, and consumed.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Unified Identity and Governance:&lt;/STRONG&gt; Both platforms leverage Azure Entra ID for authentication and access control, and Unity Catalog provides unified governance for data and AI assets managed by Databricks, which can then be respected by Foundry agents.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Here's a breakdown of how a typical flow might look:&lt;/P&gt;
&lt;img&gt;
&lt;P&gt;&lt;EM&gt;Mindmap 1: Illustrates the complementary roles and integration points between Azure Databricks and Azure AI Foundry within an end-to-end AI solution.&lt;/EM&gt;&lt;/P&gt;
&lt;/img&gt;
&lt;P&gt;&lt;STRONG&gt;When to Use Which (and When to Use Both)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Choosing between Azure AI Foundry and Azure Databricks, or deciding when to combine them, depends on the specific requirements of your AI project:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose Azure AI Foundry When You Need To:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Build and deploy production-grade generative AI applications and multi-agent systems.&lt;/LI&gt;
&lt;LI&gt;Access, evaluate, and benchmark a wide array of foundation models from various providers.&lt;/LI&gt;
&lt;LI&gt;Develop AI agents with sophisticated capabilities like tool calling, RAG, and contextual understanding.&lt;/LI&gt;
&lt;LI&gt;Implement enterprise-grade guardrails, tracing, monitoring, and content safety for AI applications.&lt;/LI&gt;
&lt;LI&gt;Rapidly prototype and iterate on generative AI solutions, including chatbots and copilots.&lt;/LI&gt;
&lt;LI&gt;Integrate AI agents deeply with Microsoft 365 and Copilot Studio.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Choose Azure Databricks When You Need To:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Perform large-scale data engineering, ETL, and data warehousing on a unified lakehouse.&lt;/LI&gt;
&lt;LI&gt;Build and train traditional machine learning models (supervised, unsupervised learning, deep learning) at scale.&lt;/LI&gt;
&lt;LI&gt;Manage and govern all data and AI assets centrally with Unity Catalog, ensuring data quality and lineage.&lt;/LI&gt;
&lt;LI&gt;Conduct complex data analytics, business intelligence (BI), and real-time data processing.&lt;/LI&gt;
&lt;LI&gt;Leverage AI-assistive tools like Databricks AI/BI Genie for natural language interaction with data.&lt;/LI&gt;
&lt;LI&gt;Require high-performance compute and auto-scaling for data-intensive workloads.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Use Both for Comprehensive AI Solutions:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The most powerful approach for many enterprises is to leverage both platforms. Azure Databricks can serve as the robust data backbone, handling data ingestion, processing, governance, and traditional ML model training. Azure AI Foundry then sits atop this foundation, consuming the prepared and governed data to build, deploy, and manage intelligent generative AI agents and applications. This allows for:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Domain-Aware AI:&lt;/STRONG&gt; Foundry agents are grounded in enterprise-specific data from Databricks, leading to more accurate, relevant, and trustworthy AI responses.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;End-to-End AI Lifecycle:&lt;/STRONG&gt; Databricks manages the "data intelligence" part, and Foundry handles the "generative AI application" part, covering the entire spectrum from raw data to intelligent user experience.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Optimized Resource Utilization:&lt;/STRONG&gt; Each platform focuses on what it does best, leading to more efficient resource allocation and specialized toolsets for different stages of the AI journey.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;STRONG&gt;Comparative Analysis: Features and Capabilities&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;To further illustrate their distinct yet complementary nature, let's examine a detailed comparison of their features, capabilities, and typical user bases.&lt;/P&gt;
&lt;img&gt;
&lt;P&gt;&lt;EM&gt;Radar Chart 1: This chart visually compares Azure AI Foundry and Azure Databricks across several key dimensions, illustrating their specialized strengths. Azure AI Foundry excels in generative AI and agent orchestration, while Azure Databricks dominates in data engineering, unified data governance, and traditional ML workflows.&lt;/EM&gt;&lt;/P&gt;
&lt;/img&gt;
&lt;H5&gt;&lt;STRONG&gt;A Detailed Feature Comparison&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Feature Category&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Azure AI Foundry&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Databricks&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Primary Focus&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Generative AI application &amp;amp; agent development, model orchestration&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Large-scale data engineering, analytics, traditional ML, and AI workflows&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Data Handling&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Connects to diverse data sources (e.g., Databricks, Azure AI Search) for grounding AI agents. Not a primary data storage/processing platform.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Native data lakehouse architecture (Delta Lake), optimized for big data processing, storage, and real-time analytics.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;AI/ML Capabilities&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Foundation models (LLMs), prompt engineering, RAG, agent orchestration, model evaluation, content safety, responsible AI tooling.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Traditional ML (supervised/unsupervised), deep learning, feature engineering, MLflow for lifecycle management, Databricks AI/BI Genie.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Development Style&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Low-code agent building, prompt flows, unified SDK/API, templates.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Code-first (Python, SQL, Scala, R), notebooks, IDE integrations.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Model Access &amp;amp; Deployment&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Extensive model catalog (11,000+ models), serverless API, managed compute deployments, model benchmarking.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Training and serving custom ML models, including deep learning. Models available for deployment through MLflow.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Governance &amp;amp; Security&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Azure-based security &amp;amp; compliance, RBAC, project isolation, content safety guardrails, tracing, evaluations.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Unity Catalog for unified data &amp;amp; AI governance, lineage tracking, access control, Entra ID integration.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Key Users&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;AI developers, business analysts, citizen developers, AI app builders.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Data scientists, data engineers, ML engineers, data analysts.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Integration Points&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Native connector to Databricks AI/BI Genie, Azure AI Search, Microsoft 365, Copilot Studio, Power Platform.&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Microsoft Fabric, Power BI, Azure AI Foundry, Azure Purview, Azure Monitor, Azure Key Vault.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;&lt;EM&gt;Table 1: A comparative overview of the distinct features and functionalities of Azure AI Foundry and Azure Databricks&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Concluding Thoughts&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;In essence, Azure AI Foundry and Azure Databricks are not competing platforms but rather essential components of a unified, comprehensive AI strategy within the Azure ecosystem. Azure Databricks provides the robust, scalable foundation for all data engineering, analytics, and traditional machine learning workloads, acting as the "data intelligence platform." Azure AI Foundry then leverages this foundation to specialize in the rapid development, deployment, and operationalization of generative AI applications and intelligent agents. Together, they enable enterprises to unlock the full potential of AI, transforming raw data into powerful, domain-aware, and governed intelligent solutions.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Frequently Asked Questions (FAQ)&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;What is the main difference between Azure AI Foundry and Azure Databricks?&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;Azure AI Foundry is specialized for building, deploying, and managing generative AI applications and AI agents, focusing on model orchestration and prompt engineering. Azure Databricks is a data intelligence platform for large-scale data engineering, analytics, and traditional machine learning, built on a Lakehouse architecture.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;Can Azure AI Foundry and Azure Databricks be used together?&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;Yes, they are designed to work synergistically. Azure AI Foundry can leverage a native connector to access real-time, governed data from Azure Databricks, allowing AI agents to be grounded in enterprise data for more accurate and contextual responses.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;Which platform should I choose for training large machine learning models?&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;For training large-scale, traditional machine learning, and deep learning models, Azure Databricks is generally the preferred choice due to its robust capabilities for data processing, feature engineering, and ML lifecycle management (MLflow). Azure AI Foundry focuses more on the deployment and orchestration of pre-trained foundation models and generative AI applications.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;Does Azure AI Foundry replace Azure Machine Learning or Databricks?&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;No, Azure AI Foundry complements these services. It provides a specialized environment for generative AI and agent development, often integrating with data and models managed by Azure Databricks or Azure Machine Learning for comprehensive AI solutions.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="5"&gt;
&lt;LI&gt;How do these platforms handle data governance?&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;Azure Databricks utilizes Unity Catalog for unified data and AI governance, providing centralized control over data access and lineage. Azure AI Foundry integrates with Azure-based security and compliance features, ensuring responsible AI practices and data privacy within its generative AI applications.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 05 Nov 2025 23:26:57 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/azure-ai-foundry-vs-azure-databricks-a-unified-approach-to/ba-p/4467576</guid>
      <dc:creator>anishekkamal</dc:creator>
      <dc:date>2025-11-05T23:26:57Z</dc:date>
    </item>
    <item>
      <title>When Your CRM Plays Hide-and-Seek: The Mystery of Missing Columns in Dynamics 365</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/when-your-crm-plays-hide-and-seek-the-mystery-of-missing-columns/ba-p/4467139</link>
      <description>&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-15"&gt;What Happened?&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Personal views across multiple organizations started showing empty columns, even though the data was there. For businesses&amp;nbsp;that&amp;nbsp;rely on these views for daily decisions, this&amp;nbsp;isn’t&amp;nbsp;a normal&amp;nbsp;glitch—the end users can easily assume that “no data” in the view means no data in the record and make decisions based on an incomplete picture of customer information.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;The Detective Work&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Our investigation uncovered the culprit: a mismatch between two behind-the-scenes&amp;nbsp;players—&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;View XML&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Fetch XML&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. Think of them as the blueprint and the builder. When they don’t talk to each other properly, your view looks fine&amp;nbsp;but&amp;nbsp;can’t fetch the data it needs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;Why It Matters&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This&amp;nbsp;isn’t&amp;nbsp;just a tech hiccup—it’s&amp;nbsp;a reminder of how small cracks in system design can ripple into big business headaches. It also highlights the need for smarter automation and better error detection in enterprise platforms.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;The Fix (and the Frustration)&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The good news?&amp;nbsp;A&amp;nbsp;manual fix&amp;nbsp;was quickly&amp;nbsp;identified&amp;nbsp;over a year ago. The&amp;nbsp;bad news? It&amp;nbsp;was&amp;nbsp;manual.&amp;nbsp;&amp;nbsp;And many impacted users&amp;nbsp;didn’t&amp;nbsp;even know that their views were bad.&amp;nbsp;&amp;nbsp;We needed a better solution and&amp;nbsp;now,&amp;nbsp;we have one.&amp;nbsp;&amp;nbsp;&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;Starting in October 2025, Microsoft rolled out a behind the scenes fix option.&amp;nbsp;&amp;nbsp;Once&amp;nbsp;it’s&amp;nbsp;turned on, any time a user opens a corrupted view, that view will be automatically updated to display the correct data.&amp;nbsp;&amp;nbsp;If the user has permission to edit the view, the updates will be saved so that the view will be permanently fixed.&amp;nbsp;&amp;nbsp;But&amp;nbsp;there’s&amp;nbsp;still a catch.&amp;nbsp;&amp;nbsp;Microsoft&amp;nbsp;doesn’t&amp;nbsp;want to enable a process that&amp;nbsp;makes data changes (in this&amp;nbsp;case,&amp;nbsp;the data is the view definition) without your company’s permission.&amp;nbsp;&amp;nbsp;If your organization is running into this issue,&amp;nbsp;here’s&amp;nbsp;a quick test to assure that the new Microsoft fix will work for you:&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="1" 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;Identify&amp;nbsp;views that you know are not&amp;nbsp;rendering&amp;nbsp;properly and that you will be able to access&amp;nbsp;&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="%2." data-font="" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;If you create a copy of a view that is corrupted, the copy will also have&amp;nbsp;the corruption, so you can create&amp;nbsp;additional&amp;nbsp;views to test&amp;nbsp;&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="1" 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="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In your browser URL bar, append the following to the end of your Dynamics URL:&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;amp;flags=FCB.DataSetViewFixMissingFetchColumns=true&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="%2." data-font="" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;This will&amp;nbsp;enables&amp;nbsp;a “feature flag” that fixes the views issue, but only for the user that added the flag to the URL and only until their session expires.&amp;nbsp;&amp;nbsp;Other users will not see the update.&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="%2." data-font="" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;If your URL looks like this:&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;https://org7909d641.crm.dynamics.com/main.aspx?appid=12345678-1234-1234-1234-123456789012&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;… make it look like this and hit enter&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;https://org7909d641.crm.dynamics.com/main.aspx?appid=12345678-1234-1234-1234-123456789012&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;amp;flags=FCB.DataSetViewFixMissingFetchColumns=true&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="%2." data-font="" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Wait for Dynamics to reload&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="1" 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="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Test opening the corrupted views.&amp;nbsp;&amp;nbsp;You’ll&amp;nbsp;see that&amp;nbsp;they’re&amp;nbsp;magically working as expected&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;When you are satisfied that this is working for you as desired, open a case with Microsoft Support and request that your organization be enabled for the&amp;nbsp;DataSetViewFixMissingFetchColumns&amp;nbsp;FCB.&amp;nbsp;&amp;nbsp;This will enable the fix for all users across your Dynamics organization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;Takeaway&lt;/STRONG&gt;&lt;/SPAN&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;If your CRM starts acting like a magician hiding data,&amp;nbsp;don’t&amp;nbsp;panic. The data is still there—you just need to coax it back with the right fix. And&amp;nbsp;now&amp;nbsp;there’s&amp;nbsp;an option&amp;nbsp;to make sure that&amp;nbsp;this&amp;nbsp;issues&amp;nbsp;goes&amp;nbsp;away for good.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 04 Nov 2025 21:20:22 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-mission-critical-blog/when-your-crm-plays-hide-and-seek-the-mystery-of-missing-columns/ba-p/4467139</guid>
      <dc:creator>JeffM</dc:creator>
      <dc:date>2025-11-04T21:20:22Z</dc:date>
    </item>
  </channel>
</rss>

