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

<channel>
	<title>Liam Cleary [MVP Alumni and MCT]</title>
	<atom:link href="https://helloitsliam.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://helloitsliam.com</link>
	<description>Architecture, Development, Security, Hacking and anything that I deem as important</description>
	<lastBuildDate>Mon, 18 May 2026 15:35:36 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/helloitsliam.com/wp-content/uploads/2023/01/cropped-Liam-New-2.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Liam Cleary [MVP Alumni and MCT]</title>
	<link>https://helloitsliam.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">197682877</site>	<item>
		<title>Growing Older, Not Growing Old</title>
		<link>https://helloitsliam.com/2026/05/18/growing-older-not-growing-old/</link>
					<comments>https://helloitsliam.com/2026/05/18/growing-older-not-growing-old/#respond</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Mon, 18 May 2026 15:35:36 +0000</pubDate>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Random]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=47369</guid>

					<description><![CDATA[Turning 50 is one of those strange milestones in life. It is just a number, but at the same time it is not. Hitting that half-century mark forces you to stop for a minute and really look at where you are, where you have been, and maybe where you are heading next. This past weekend, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="p1 wp-block-paragraph">Turning 50 is one of those strange milestones in life. It is just a number, but at the same time it is not. Hitting that half-century mark forces you to stop for a minute and really look at where you are, where you have been, and maybe where you are heading next.</p>



<p class="p1 wp-block-paragraph">This past weekend, I was at Hersheypark as a chaperone for my son’s middle school band trip. As I wandered around the park listening to him and his friends talk complete gibberish, laugh at things that made absolutely no sense, and just enjoy life without a care in the world, I found myself being pulled back to when I was that age.</p>



<p class="p1 wp-block-paragraph">Back to the days when responsibility barely existed. Back to the feeling of freedom, whether it was real or not. Back to when life felt incredibly simple.</p>



<p class="p1 wp-block-paragraph">As I watched hundreds of school kids walking around the park, from middle school all the way up to high school age, it suddenly hit me just how far removed I am from that stage of life. Not in a bad way, just in a very real way.</p>



<p class="p1 wp-block-paragraph">Then, a few days before that, I was standing at the soccer field watching my son’s team, listening to a couple of parents talking about how old they felt. The funny part was that none of them were older than 35. I have to admit that made me chuckle a bit. It was another one of those moments where I realized, “Yeah… I really am at a different stage of life now.”</p>



<p class="p1 wp-block-paragraph">Now this is not some dramatic “woe is me, I am old” moment. Far from it. I know plenty of people significantly older than me who are still active, sharp, driven, and enjoying life. This is more about the realization that I am now at that age.</p>



<ul class="wp-block-list">
<li>Old enough to be the dad of almost all the adult players on both of my soccer teams.</li>



<li>Old enough to have married, kids, and grandchildren.</li>



<li>Old enough that when younger parents talk about feeling old, I just smile quietly to myself.</li>
</ul>



<p class="p1 wp-block-paragraph">Yet mentally, in many ways, I still feel like my almost 14-year-old son running around Hersheypark with his friends.</p>



<p class="p1 wp-block-paragraph">Now, admittedly, the body does not always agree with me on that one. Recovery takes longer than it used to. Random aches appear for no reason whatsoever. Injuries somehow happen while sleeping. But overall, I am genuinely grateful. I am grateful to still be fit and healthy enough to do the things I love.</p>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li>I can still play and coach soccer.</li>



<li>I can still mountain bike, run, hike, and stay active.</li>



<li>I still have the energy to keep up with life, family, work, and the endless chaos that comes with all of it.</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="p1 wp-block-paragraph">As I thought about all of this, I found myself asking a pretty simple question:</p>



<p class="p1 wp-block-paragraph">“<strong>Am I happy with where I am?</strong>”</p>



<p class="p1 wp-block-paragraph">Of course, there are things I could improve. There are things I wish I had done better. There are areas where I still need to grow as a husband, dad, friend, coach, and person in general. That never really stops.</p>



<p class="p1 wp-block-paragraph">But overall? Honestly, yes. I am happy with life.</p>



<p class="p1 wp-block-paragraph">I have an amazing wife whom I love more than anything. I genuinely do not know where I would be without her. She has supported me, grounded me, encouraged me, and probably pushed me when I needed it most. Looking back, a huge amount of where I am today is because of her influence, guidance, patience, and belief in me.</p>



<p class="p1 wp-block-paragraph">I have fantastic kids that I am incredibly proud of, even if they occasionally do completely ridiculous things. But that is part of growing up. We all did stupid things at some point.</p>



<p class="p1 wp-block-paragraph">I love what I do for work. I am grateful that I have been able to build something that gives me flexibility and allows me to work from home and be present for my family. That is something I never take for granted.</p>



<p class="p1 wp-block-paragraph">Overall, I am simply grateful for where life is right now.</p>



<p class="p1 wp-block-paragraph">As I look around at friends my age who are also reaching this point in life, I think this stage is less about getting older and more about reprioritizing. It is about figuring out what really matters. It is about recognizing that time moves faster than we think. It is about understanding that change is not always a bad thing.</p>



<p class="p1 wp-block-paragraph"><strong>Sometimes the next chapter is the exciting part.</strong></p>



<p class="p1 wp-block-paragraph">So, as a few of us step into this half-century stage together, I think it is time to celebrate it, not dread it. Time to embrace whatever comes next. Time to enjoy the next phase of family, friendships, adventures, and life in general.</p>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li>There is still a lot left to do.</li>



<li>Still places to go.</li>



<li>Still memories to make.</li>



<li>Still goals to chase.</li>



<li>Still adventures ahead.</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="p2 wp-block-paragraph">So to my fellow half-century friends, here’s to the next 50.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/05/18/growing-older-not-growing-old/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47369</post-id>	</item>
		<item>
		<title>How HEFT Works in SharePoint Framework (SPFx)</title>
		<link>https://helloitsliam.com/2026/05/11/how-heft-works-in-sharepoint-framework-spfx/</link>
					<comments>https://helloitsliam.com/2026/05/11/how-heft-works-in-sharepoint-framework-spfx/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Mon, 11 May 2026 16:45:49 +0000</pubDate>
				<category><![CDATA[Heft]]></category>
		<category><![CDATA[SharePoint Framework]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[SPFx]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=47338</guid>

					<description><![CDATA[While the commands used to build SharePoint Framework solutions may feel familiar, the engine powering them has fundamentally changed. HEFT introduces a structured, phase-based workflow that replaces script-heavy orchestration with a predictable, configuration-driven pipeline. This article walks through how HEFT operates inside an SPFx project and explains what actually happens when you build, serve, or package your solution.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the first article, we explored what HEFT is and why it was introduced into the SharePoint Framework. Now we turn to the practical side of the conversation: how HEFT actually works when you build a Shar<strong>ePoint Framework (SPFx) solution.</strong></p>



<p class="wp-block-paragraph">Although developers still run familiar commands such as <strong><code>build</code>, <code>serve</code></strong>, and <code><strong>package-solution</strong></code>, the underlying system executing those commands has changed. HEFT now orchestrates the entire toolchain behind the scenes. Understanding its workflow does not require deep technical knowledge of its internal configuration files. Instead, it requires understanding how HEFT structures work into phases and tasks, how it relies on the SPFx rig, and how it executes plugins in a predictable order.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">The Foundation: Phases and Tasks</h2>



<p class="wp-block-paragraph">HEFT organizes work into <strong>phases</strong>, and each phase contains one or more <strong>tasks</strong>. This structure replaces the older script-driven approach previously used in SPFx.</p>



<p class="wp-block-paragraph">A phase represents a logical stage in the build lifecycle. For example, there are phases for building, testing, and packaging. Each phase defines what types of work must occur at that stage.</p>



<p class="wp-block-paragraph">Inside each phase are tasks. A task performs a specific responsibility, such as compiling TypeScript, processing Sass, running tests, or bundling assets. Tasks are implemented through plugins and are executed in a defined sequence.</p>



<p class="wp-block-paragraph">This structured model means that HEFT does not simply run commands in order. Instead, it evaluates the current phase, identifies the tasks attached to it, and executes them according to the configuration defined by the SPFx rig and your project’s configuration files.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">The SPFx Rig: Where the Defaults Come From</h2>



<p class="wp-block-paragraph">Every SPFx project references a rig configuration. The rig defines the default build behavior for SharePoint Framework projects.</p>



<p class="wp-block-paragraph">The SPFx rig specifies:</p>



<ul class="wp-block-list">
<li>Which phases are available</li>



<li>Which tasks belong to those phases</li>



<li>Which plugins implement those tasks</li>



<li>The default configuration for those plugins</li>
</ul>



<p class="wp-block-paragraph">Because your project references the rig, you inherit a complete build pipeline without having to define it manually. This is important because it ensures consistency across all SPFx projects and allows Microsoft to evolve the toolchain while maintaining compatibility.</p>



<p class="wp-block-paragraph">When HEFT runs, it first loads the rig configuration, then applies any project-level configuration overrides. This layered approach ensures that the default pipeline remains stable while still allowing controlled customization.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">What Happens When You Run a Build Command</h2>



<p class="wp-block-paragraph">From a developer’s perspective, building an SPFx project looks straightforward. You run a command such as <code>npm run build</code>. However, under the hood, HEFT follows a structured process.</p>



<ul class="wp-block-list">
<li>First, HEFT loads your project configuration and resolves the rig reference. This tells HEFT which phases and tasks are available for execution.</li>



<li>Next, HEFT activates the requested phase. For a standard build, this is the build phase. The build phase contains tasks such as TypeScript compilation and asset processing.</li>



<li>HEFT then executes the tasks in the order defined by the rig. For example, TypeScript compilation must complete before bundling can occur. If a task fails, HEFT stops the phase and clearly reports the error.</li>



<li>Once compilation and preprocessing tasks are completed successfully, HEFT invokes the bundling step. This uses webpack internally, but HEFT controls when and how webpack is executed.</li>



<li>After bundling completes, HEFT produces the expected output artifacts, such as compiled JavaScript and processed assets.</li>
</ul>



<p class="wp-block-paragraph">Because the workflow is defined declaratively, every execution of the build phase follows the same sequence.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">A Simple Practical Example</h2>



<p class="wp-block-paragraph">To make this clearer, consider a basic SPFx web part project created with the standard generator.</p>



<p class="wp-block-paragraph">The project includes:</p>



<ul class="wp-block-list">
<li>TypeScript source files</li>



<li>SCSS styles</li>



<li>A manifest file</li>



<li>Static assets</li>
</ul>



<p class="wp-block-paragraph">You run the build command.</p>



<p class="wp-block-paragraph">Here is what HEFT does conceptually.</p>



<ul class="wp-block-list">
<li>HEFT reads your project configuration and determines that it is an SPFx solution using the SPFx rig. It activates the build phase defined in that rig.</li>



<li>The first task compiles TypeScript files. If there are type errors, the build fails at this stage.</li>



<li>Once TypeScript compilation succeeds, HEFT runs the Sass processing task. Styles are transformed and prepared for bundling.</li>



<li>Next, HEFT runs the webpack task. The webpack configuration is generated according to the SPFx rig. If you have not customized it, the default configuration is used. Webpack bundles your solution into optimized output files.</li>



<li>Finally, HEFT completes the phase and produces the build output.</li>
</ul>



<p class="wp-block-paragraph">At no point are you writing custom build scripts or manually chaining tasks. The entire workflow is orchestrated through phases, tasks, and configuration.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Included Plugins in the Workflow</h2>



<p class="wp-block-paragraph">HEFT uses plugins to implement tasks. The SPFx toolchain includes built-in plugins for common activities such as:</p>



<ul class="wp-block-list">
<li>TypeScript compilation</li>



<li>Sass processing</li>



<li>Jest testing</li>



<li>Webpack bundling</li>



<li>Running additional scripts</li>
</ul>



<p class="wp-block-paragraph">Each plugin is responsible for one aspect of the build. HEFT coordinates them rather than embedding their logic directly into the core engine. This plugin model improves modularity. If a plugin needs to be configured, you modify its configuration file. If a new capability is required, it can be added as a separate plugin instead of rewriting the pipeline.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">How Custom Code Fits into the Workflow</h2>



<p class="wp-block-paragraph">The workflow also allows custom logic through documented extension points. If you need to run custom code during the build, the Run Script Plugin lets you register a script file to execute in a specific phase. HEFT treats that script as part of the pipeline.</p>



<p class="wp-block-paragraph">If you need to adjust how webpack behaves, the Webpack Patch Plugin lets you modify the generated webpack configuration before bundling. Both mechanisms operate within the structured phase and task model. They do not replace the pipeline. They integrate into it.</p>



<p class="wp-block-paragraph">This design preserves stability while allowing flexibility.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Migration Context: From Gulp to HEFT</h2>



<p class="wp-block-paragraph">In the previous Gulp-based toolchain, developers commonly modified <code>gulpfile.js</code> to inject custom behavior. That approach relied on imperative scripts and custom task definitions.</p>



<p class="wp-block-paragraph">The HEFT model replaces that with:</p>



<ul class="wp-block-list">
<li>Configuration-driven phase definitions</li>



<li>Plugin-based task execution</li>



<li>Structured extension points</li>
</ul>



<p class="wp-block-paragraph">The migration documentation emphasizes that although the underlying orchestration system has changed, the user-facing experience remains familiar. Developers still use standard commands, and SPFx projects still produce the same outputs.</p>



<p class="wp-block-paragraph">The key difference is how those outputs are generated and managed internally.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Why This Workflow Is Important</h2>



<p class="wp-block-paragraph">The HEFT workflow improves predictability and maintainability. Because tasks are explicitly defined and executed in known phases, the build process is easier to reason about.</p>



<p class="wp-block-paragraph">This structured approach also improves reliability in automated environments such as CI/CD pipelines. The same phase-based workflow runs locally and in build agents, reducing discrepancies between development and production builds.</p>



<p class="wp-block-paragraph">Most importantly, the workflow is designed to evolve. Since tasks are implemented through plugins and configured declaratively, improvements to the toolchain can be delivered through updated rig definitions rather than rewriting individual projects.</p>



<p class="wp-block-paragraph"></p>



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



<p class="wp-block-paragraph">HEFT’s workflow in SPFx is built around clear phases, modular tasks, and configuration-driven execution. When you run a build command, HEFT loads the SPFx rig, activates the appropriate phase, executes its tasks in order, and produces predictable output.</p>



<p class="wp-block-paragraph">Although the visible developer experience has not changed dramatically, the underlying orchestration model is significantly more structured than before. That structure is what enables safer customization, smoother upgrades, and long-term sustainability for SPFx solutions.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/05/11/how-heft-works-in-sharepoint-framework-spfx/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47338</post-id>	</item>
		<item>
		<title>Getting Identities to Talk Across Tenants with Microsoft Entra Cross-Tenant Synchronization</title>
		<link>https://helloitsliam.com/2026/04/27/getting-identities-to-talk-across-tenants-with-microsoft-entra-cross-tenant-synchronization/</link>
					<comments>https://helloitsliam.com/2026/04/27/getting-identities-to-talk-across-tenants-with-microsoft-entra-cross-tenant-synchronization/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 17:11:04 +0000</pubDate>
				<category><![CDATA[Entra ID]]></category>
		<category><![CDATA[Microsoft Entra Cross-Tenant Synchronization]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=47288</guid>

					<description><![CDATA[If you have been working in Microsoft 365 for any length of time, you have probably run into a situation where you needed users from one tenant to have access to resources in another. Maybe your organization acquired another company. Maybe you have a subsidiary that runs its own tenant. Maybe you are operating in [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you have been working in Microsoft 365 for any length of time, you have probably run into a situation where you needed users from one tenant to have access to resources in another. Maybe your organization acquired another company. Maybe you have a subsidiary that runs its own tenant. Maybe you are operating in both commercial and government cloud environments simultaneously. Whatever the reason, managing identities across tenant boundaries is one of those problems that sounds simple until you actually have to do it.</p>



<p class="wp-block-paragraph">The traditional approach has been B2B guest invitations. You invite the user, they accept, and they show up in your directory as a guest. It works fine for a handful of people. At scale, though, it becomes a mess. Attributes drift. People leave the source organization, and their guest accounts linger. Display names go stale. Someone has to manually track all of it, and that someone is usually you.</p>



<p class="wp-block-paragraph">Microsoft Entra Cross-Tenant Synchronization (CTS) is the automated solution to that problem. Instead of managing guest accounts by hand, you configure a provisioning engine to handle creation, updates, and removals automatically. </p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">So What Is It?</h2>



<p class="wp-block-paragraph">Cross-Tenant Synchronization is a feature of Microsoft Entra ID that automatically provisions and manages users across two separate tenants. You have a source tenant where your users live, and a target tenant where you want those users to appear. CTS keeps the two in sync without you having to do anything manually once it is set up.</p>



<p class="wp-block-paragraph">It is built on the same provisioning engine that Microsoft uses for automated user provisioning to SaaS applications. If you have ever configured app provisioning in Entra ID, the concepts will feel familiar. If you have not, do not worry about that yet. The important thing to understand right now is that this is not a one-time operation. It is an ongoing, automated relationship between two tenants.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">What Can It Do?</h2>



<p class="wp-block-paragraph">The most obvious thing CTS does is create users in the target tenant based on what exists in the source. When you add someone to the sync configuration, they are automatically provisioned in the target. No invitation required, no manual steps, no waiting on end users to accept anything.</p>



<p class="wp-block-paragraph">Beyond creation, it keeps user attributes up to date. Things like display names, job titles, departments, email addresses, and manager information stay consistent across both tenants as long as the sync is running. If something changes in the source, it flows through to the target on the next cycle.</p>



<p class="wp-block-paragraph">It also handles deprovisioning. When a user leaves scope, either because they left the organization or because you removed them from the configuration, they get removed from the target tenant as well. That alone is a significant improvement over the traditional guest model, where stale accounts often stick around long after they should have been cleaned up.</p>



<p class="wp-block-paragraph">Users appear in the target tenant as B2B collaboration users. By default, they are created as external members rather than external guests, which means they behave much more like internal users across Microsoft 365 workloads. They show up in Teams directories, they have broader access to SharePoint, and they generally run into fewer friction points day to day. You can configure them as guests if that suits your environment better, but member is the default for good reason.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">What About Different Cloud Environments?</h2>



<p class="wp-block-paragraph">Standard CTS works within the same Microsoft cloud. Commercial to commercial, or GCC-High to GCC-High. But Microsoft also supports synchronization across different cloud environments, which opens things up considerably.</p>



<p class="wp-block-paragraph">You can synchronize identities between a commercial tenant and an Azure Government tenant, or vice versa. You can also go between commercial and the 21Vianet cloud used in China. This matters a lot to organizations that operate across both commercial and government environments, which is more common than you might think, particularly in the defense and federal contracting space.</p>



<p class="wp-block-paragraph">The configuration for cross-cloud synchronization follows the same general pattern as the same-cloud setup, with a few additional steps to establish trust across the cloud boundary. I will cover that in detail in a later article.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Why Does This Matter?</h2>



<p class="wp-block-paragraph">The short answer is that it removes a significant amount of manual work and replaces it with something reliable and consistent.</p>



<p class="wp-block-paragraph">If you have been managing guest accounts across tenants by hand, you know how quickly it becomes a problem. Users change roles, and their guest profile in the other tenant still shows their old job title. Someone leaves, and their guest account sits there for months. A new person joins, and someone has to remember to send them an invitation, hope they accept it, and then manually verify that the attributes look right.</p>



<p class="wp-block-paragraph">CTS takes all of that off your plate. Once it is configured, it runs on its own. Accounts get created when they should, updated when they should, and removed when they should. The tenants stay consistent without requiring ongoing manual effort to maintain that consistency.</p>



<p class="wp-block-paragraph">It also benefits the users themselves. With automatic invitation redemption, they do not have to take any action to appear in the target tenant. Access just works. That is a much better experience than receiving an invitation email, clicking through a consent prompt, and hoping everything is set up correctly on the other side.</p>



<p class="wp-block-paragraph">For organizations running multi-tenant environments, whether that is due to a merger, a regulatory requirement, or just the way things grew over time, CTS gives you a foundation for managing identities that actually scales.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/04/27/getting-identities-to-talk-across-tenants-with-microsoft-entra-cross-tenant-synchronization/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47288</post-id>	</item>
		<item>
		<title>Rethinking Conditional Access</title>
		<link>https://helloitsliam.com/2026/04/20/rethinking-conditional-access/</link>
					<comments>https://helloitsliam.com/2026/04/20/rethinking-conditional-access/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Mon, 20 Apr 2026 21:29:25 +0000</pubDate>
				<category><![CDATA[Conditional Access Policies]]></category>
		<category><![CDATA[Microsoft Security]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=47268</guid>

					<description><![CDATA[Conditional Access is often treated like a set of firewall rules, but that approach only goes so far in a cloud-first world. This article breaks down how Microsoft 365 security evolves from static, condition-based policies to persona-driven and risk-aware access, helping you design a model that is simpler, stronger, and built for real-world identity threats.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There is a moment most organizations hit when working with Conditional Access in Microsoft 365. At first, everything feels straightforward. You create a few policies, require MFA, block some risky locations, and it all seems under control. Then the environment grows. More apps, more users, more edge cases. Suddenly, policies begin to overlap, exceptions creep in, and what once felt clean becomes difficult to reason about.</p>



<p class="wp-block-paragraph">The root cause is rarely the technology itself. It is almost always the <strong>approach taken to designing Conditional Access</strong>.</p>



<p class="wp-block-paragraph">At a high level, most organizations fall into one of three patterns. </p>



<ul class="wp-block-list">
<li>Some treat Conditional Access like a set of firewall rules. </li>



<li>Others organize it around user personas. </li>



<li>The more mature environments evolve further, using risk and real-time signals to make decisions dynamically.</li>
</ul>



<p class="wp-block-paragraph">Each approach has value. Each also has limitations. The real goal is not to pick one but to understand how they fit together into a scalable model.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">The Starting Point: Thinking in “Firewall Rules”</h2>



<p class="wp-block-paragraph">It is completely natural to begin by treating Conditional Access like a firewall. For years, that is how access control worked. You defined rules based on conditions, and the system enforced them consistently.</p>



<p class="wp-block-paragraph">In this model, Conditional Access policies are built around straightforward logic. If a user connects from outside a trusted network, require MFA. If a sign-in comes from a high-risk country, block it. If an application is sensitive, add an extra layer of authentication.</p>



<p class="wp-block-paragraph">There is a certain clarity to this. It is easy to explain, easy to implement, and aligns with how many administrators have been trained to think about security. In fact, Microsoft’s own baseline recommendations encourage this kind of thinking early on, especially when enforcing MFA and blocking legacy authentication.</p>



<p class="wp-block-paragraph">The issue is not that this model is wrong. It is that it assumes the environment is static.</p>



<p class="wp-block-paragraph">Users no longer behave in predictable, fixed patterns. They move constantly between locations, devices, and networks. A user signing in from a different country might be traveling or an attacker. A device might be inside the corporate network but completely unmanaged. A trusted IP range might include compromised endpoints.</p>



<p class="wp-block-paragraph">What begins as a small set of rules often expands into a large and fragmented collection of policies. One policy for location, another for applications, another for device state, and more to handle exceptions. Over time, it becomes difficult to determine which policy is actually enforcing what behavior. Troubleshooting becomes reactive rather than intentional.</p>



<p class="wp-block-paragraph">More importantly, this approach does not truly understand the user. It focuses on <strong>where the request comes from, not on who is making it or how risky it is</strong>.</p>



<p class="wp-block-paragraph">To make that distinction clearer, it helps to contrast how this approach behaves compared to more modern designs:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Aspect</th><th class="has-text-align-left" data-align="left">Firewall-Style Conditional Access</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">Decision Driver</td><td class="has-text-align-left" data-align="left">Static conditions (IP, location, app)</td></tr><tr><td class="has-text-align-left" data-align="left">View of User</td><td class="has-text-align-left" data-align="left">Generic, not role-aware</td></tr><tr><td class="has-text-align-left" data-align="left">Flexibility</td><td class="has-text-align-left" data-align="left">Low once deployed</td></tr><tr><td class="has-text-align-left" data-align="left">Scalability</td><td class="has-text-align-left" data-align="left">Degrades as policies grow</td></tr><tr><td class="has-text-align-left" data-align="left">Troubleshooting</td><td class="has-text-align-left" data-align="left">Often complex due to overlap</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">That limitation is what drives the next stage of maturity.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Shifting the Perspective: Designing Around Personas</h2>



<p class="wp-block-paragraph">As environments grow, organizations begin to recognize that not all users should be treated the same. A global administrator logging into the tenant carries a very different level of risk than a standard employee checking email. A contractor who has access to a limited set of resources should not be governed by the same policies as a full-time employee.</p>



<p class="wp-block-paragraph">This is where persona-based Conditional Access design comes into play.</p>



<p class="wp-block-paragraph">Instead of building policies around conditions alone, policies are built around <strong>identity roles and responsibilities</strong>. Users are grouped into logical personas, and each persona is assigned a consistent set of controls.</p>



<p class="wp-block-paragraph">For example, administrators might be required to use strong, phishing-resistant authentication methods and access systems only from compliant devices. Standard users might have a balanced set of controls that enforce MFA without introducing unnecessary friction. Guests might be restricted to browser-based access with tighter controls around data movement.</p>



<p class="wp-block-paragraph">This shift changes how policies are structured. Rather than a scattered collection of rules, you begin to see a layered model emerge. There is a baseline that applies to everyone, and then additional policies that apply based on the user&#8217;s identity.</p>



<p class="wp-block-paragraph">The benefit here is not just improved security. It is clarity.</p>



<p class="wp-block-paragraph">Policies become easier to read, audit, and explain. When something breaks, you can trace it back to a persona rather than digging through dozens of overlapping conditions. Governance improves because the design is intentional rather than reactive.</p>



<p class="wp-block-paragraph">However, persona-based design still has a limitation. It assumes that users behave consistently within their roles.</p>



<p class="wp-block-paragraph">An administrator is always high-impact, but a standard user is not always low-risk. A compromised standard account can be just as dangerous when used to move laterally or access sensitive data. Likewise, a legitimate admin performing routine work should not always be subjected to maximum friction.</p>



<p class="wp-block-paragraph">That is where the most advanced approach comes in.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Moving to Adaptive Security: Risk-Based Conditional Access</h2>



<p class="wp-block-paragraph">The most mature Conditional Access designs move beyond static definitions entirely. Instead of relying only on roles or predefined conditions, they incorporate <strong>real-time risk signals</strong> into every access decision.</p>



<p class="wp-block-paragraph">Microsoft provides these signals through identity protection capabilities. Sign-in behavior is continuously analyzed for patterns such as impossible travel, unfamiliar locations, unusual application access, or indicators of compromised credentials. Each authentication attempt is assigned a risk level, and Conditional Access policies respond accordingly.</p>



<p class="wp-block-paragraph">This allows access decisions to become dynamic.</p>



<p class="wp-block-paragraph">A user signing in under normal conditions, from a familiar device and location, may experience little to no friction. The same user, attempting access from a suspicious location or exhibiting unusual behavior, may be required to perform additional authentication or be blocked entirely.</p>



<p class="wp-block-paragraph">What makes this powerful is not just the increased security, but the balance it creates. Instead of applying strict controls universally, security is applied <strong>where and when it is needed</strong>.</p>



<p class="wp-block-paragraph">To better understand how these three approaches differ in practice, the comparison below highlights how each one handles core decision-making:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Capability</th><th>Firewall-Style</th><th>Persona-Based</th><th>Risk-Based</th></tr></thead><tbody><tr><td>Primary Focus</td><td>Conditions (location, device)</td><td>Identity and role</td><td>Real-time signals</td></tr><tr><td>Policy Behavior</td><td>Static</td><td>Structured but still static</td><td>Dynamic and adaptive</td></tr><tr><td>User Context Awareness</td><td>Low</td><td>Moderate</td><td>High</td></tr><tr><td>Security Strength</td><td>Basic</td><td>Strong</td><td>Advanced</td></tr><tr><td>User Experience</td><td>Often inconsistent</td><td>Controlled</td><td>Optimized and adaptive</td></tr><tr><td>Alignment with Zero Trust</td><td>Limited</td><td>Strong</td><td>Full</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">This approach aligns directly with Zero Trust principles. Every request is evaluated independently. Trust is not assumed based on past behavior, and access is continuously reassessed.</p>



<p class="wp-block-paragraph">Of course, this model introduces new considerations. It requires the right licensing, integration with identity protection services, and ongoing monitoring to ensure that risk signals are accurate and meaningful. It also requires a shift in mindset, moving away from static rules toward adaptive decision-making.</p>



<p class="wp-block-paragraph">But when implemented correctly, it represents a significant step forward in both security and usability.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Why No Single Approach Is Enough</h2>



<p class="wp-block-paragraph">It might be tempting to view these approaches as competing models, but in practice, they are stages in an evolution.</p>



<p class="wp-block-paragraph">Firewall-style policies provide the foundation. They establish baseline protections and address the most obvious risks. Persona-based design brings structure and aligns policies with how organizations actually operate. Risk-based controls add intelligence, allowing decisions to adapt in real time.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A well-designed Conditional Access strategy combines all three.</p>
</blockquote>



<p class="wp-block-paragraph">At the base, you enforce universal protections such as MFA and blocking legacy authentication. On top of that, you layer persona-specific controls that reflect the different levels of access and risk across your user population. Finally, you introduce risk-based policies that dynamically adjust enforcement based on behavior and threat signals.</p>



<p class="wp-block-paragraph">This layered approach is what allows Conditional Access to scale without becoming unmanageable.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">What Microsoft Best Practices Emphasize</h2>



<p class="wp-block-paragraph">Across Microsoft’s guidance and the broader security community, a few themes consistently emerge.</p>



<p class="wp-block-paragraph">The first is that <strong>baseline protections are essential</strong>. Every environment should enforce MFA, block legacy authentication, and protect privileged accounts. These are not advanced configurations; they are foundational requirements.</p>



<p class="wp-block-paragraph">The second is that <strong>identity must be the primary focus</strong>. Network-based thinking does not translate well to cloud environments. Trust cannot be based solely on location or IP address. It must be based on who the user is, the state of their device, and the associated risk of their activity.</p>



<p class="wp-block-paragraph">The third is the importance of <strong>simplicity and clarity</strong>. Overly complex policies are difficult to maintain and even harder to troubleshoot. A smaller number of well-designed policies is far more effective than a large number of granular rules.</p>



<p class="wp-block-paragraph">Finally, there is a strong emphasis on <strong>testing and iteration</strong>. Conditional Access policies should be deployed in report-only mode first, validated with test users, and gradually rolled out. This reduces the risk of unintended consequences and ensures that policies behave as expected.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Bringing It All Together</h2>



<p class="wp-block-paragraph">The evolution of Conditional Access mirrors the broader shift in security. It starts with control. Simple rules, clearly defined boundaries, and predictable behavior. Then it moves toward understanding. Recognizing that users are different, that roles matter, and that policies should reflect that reality. Finally, it becomes adaptive. Decisions are made in real time, based on context, behavior, and risk.</p>



<p class="wp-block-paragraph">The organizations that succeed with Conditional Access are not the ones with the most policies. They are the ones with the most <strong>intentional design</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">They do not ask, “What rule should we add next?”<br>They ask, “What decision are we trying to make, and what information do we need to make it correctly?”</p>
</blockquote>



<p class="wp-block-paragraph">That is the difference between managing access and truly controlling identity.</p>



<p class="wp-block-paragraph">And in a world where identity is the new perimeter, that difference is everything.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/04/20/rethinking-conditional-access/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47268</post-id>	</item>
		<item>
		<title>SOCCER CLUB SEEKING SPONSORS FOR 2026</title>
		<link>https://helloitsliam.com/2026/02/05/soccer-club-seeking-sponsors-for-2026/</link>
					<comments>https://helloitsliam.com/2026/02/05/soccer-club-seeking-sponsors-for-2026/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 17:48:48 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Personal Project]]></category>
		<category><![CDATA[Soccer]]></category>
		<category><![CDATA[Summit Valley United]]></category>
		<category><![CDATA[Summit Valley United Academy]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=47018</guid>

					<description><![CDATA[You may or may not know this, but I am the owner of a soccer club (I know my UK family and friends will tell me off - it will always be Football) based here in Winchester, Virginia, and the surrounding areas. When we first started this project, it wasn’t a club; it was an idea. A simple belief that players in our region deserved more than pickup games, recreation leagues, or teams that disappeared after a season. We wanted to build something real, something structured, and something players could be proud to represent.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">You may or may not know this, but I am the owner of a soccer club (<em>I know my UK family and friends will tell me off &#8211; it will always be Football</em>) based here in <strong>Winchester, Virginia, and the surrounding areas</strong>. When we first started this project, it wasn’t a club; it was an idea. A simple belief that players in our region deserved more than pickup games, recreation leagues, or teams that disappeared after a season. We wanted to build something real, something structured, and something players could be proud to represent.</p>



<p class="wp-block-paragraph">From that vision, <strong>Berryville FC</strong> was born. Now, as we move into the next stage of our journey and publicly rebrand as <strong><a href="https://summitvalleyunited.com/">Summit Valley United</a></strong>, our mission has only grown stronger. And this year, more than ever, <strong>we need partners who believe in what we are building.</strong></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>WHERE WE STARTED</strong></h2>



<p class="wp-block-paragraph">We began with almost nothing:</p>



<ul id="r980a642" class="wp-block-list">
<li><em>No home field</em></li>



<li><em>No uniforms</em></li>



<li><em>No sponsors</em></li>



<li><em>No guaranteed roster</em></li>



<li><em>No reputation</em></li>
</ul>



<p class="wp-block-paragraph">Just commitment, effort, and a desire to create a true soccer environment for local players. We practiced wherever we could find space. We funded everything ourselves: training equipment, league fees, even soccer balls. Every season came down to personal sacrifice and belief. But the players kept showing up. The team kept growing. The mission kept advancing.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>WHERE WE ARE NOW</strong></h2>



<p class="wp-block-paragraph">Today, everything looks different because the hard work paid off, and the club has grown far beyond its early beginnings. We now have the foundation, structure, and ambition to operate at a higher level. This spring, we are preparing two competitive adult teams, including a UPSL Premier side, to represent our club in national-level competition. These environments demand real commitment, financial stability, proper equipment, trained staff, and the discipline to run the club professionally.</p>



<p class="wp-block-paragraph">At the same time, we are building the next major step in our journey: the launch of the <strong>Summit Valley United Academy in Fall 2026</strong>. This will introduce high-level youth travel teams designed to elevate players across our entire region. It will not be recreation soccer, nor a casual training option. It will be structured, development-focused, and aligned with long-term pathways that prepare young athletes for high school, college, and even adult competitive play.</p>



<p class="wp-block-paragraph">With our rebrand to <strong>Summit Valley United</strong>, we now carry a real regional identity that reflects where our players come from and who we represent. Our footprint reaches across <strong>Northern Virginia</strong>, the <strong>Shenandoah Valley</strong>, the <strong>Eastern Panhandle of West Virginia</strong>, and even parts of <strong>Maryland</strong>. We are united by geography and purpose, and our message: <strong>United | Resilient | Strong</strong>, captures exactly who we are becoming. With this growth comes incredible opportunity, but also a greater responsibility to provide a professional, stable, and meaningful environment for every player who wears our badge.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>WHY WE NEED SPONSORS</strong></h2>



<p class="wp-block-paragraph">Running a competitive club responsibly isn’t cheap. Every season involves major costs:</p>



<ul id="l7fb78711" class="wp-block-list">
<li><em>League Fees</em></li>



<li><em>Referee Fees</em></li>



<li><em>Home Field Rentals</em></li>



<li><em>Training Facilities</em></li>



<li><em>Equipment (balls, goals, cones, and pinnies)</em></li>



<li><em>Player Insurance</em></li>



<li><em>Matchday Operations</em></li>



<li><em>Coaching Development</em></li>



<li><em>Youth Academy Launch Infrastructure</em></li>



<li><em>Marketing, Media, and Live Streaming</em></li>



<li><em>Uniform Packages and Warm-Ups</em></li>
</ul>



<p class="wp-block-paragraph">Until now, much of this has come out of pocket from leadership. To grow safely and sustainably, <strong>we need partners who believe in giving players in our region a real pathway to train, compete, and develop</strong>.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>WHAT SPONSORS RECEIVE</strong></h2>



<p class="wp-block-paragraph">This isn’t a donation. This is a partnership. Sponsors will potentially receive the following:</p>



<ul id="rcbut11691" class="wp-block-list">
<li><em>Logo Placement on Kits</em></li>



<li><em>Website and Social Media Placement</em></li>



<li><em>Spotlight Posts and Cross-Promotion</em></li>



<li><em>Brand Integration in Matchday Media</em></li>



<li><em>Opportunity to Support Youth Programs</em></li>



<li><em>Community Visibility Across Two States</em></li>
</ul>



<p class="wp-block-paragraph">Our teams compete against clubs across Virginia, Maryland, DC, and West Virginia, meaning your brand is traveling, seen, and respected across the region. As the youth academy launches, that visibility grows even more.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>WHY NOW IS THE TIME TO JOIN US</strong></h2>



<p class="wp-block-paragraph">2026 is a turning point. We’re not a startup club anymore. We’re not trying to “<strong>see if this works.</strong>” We know it works, and now we’re scaling. Your support will help us:</p>



<ul id="4sbdh14102" class="wp-block-list">
<li><em>Stabilize our adult teams</em></li>



<li><em>Build the youth academy</em></li>



<li><em>Invest in better training equipment</em></li>



<li><em>Support players who cannot afford the full costs</em></li>



<li><em>Build long-term infrastructure for the region</em></li>



<li><em>Strengthen the next generation of talent</em></li>
</ul>



<p class="wp-block-paragraph">This is more than soccer. This is building a community. This is creating opportunities for players who have never had them before. If you’ve watched us grow or believe in what we’re trying to accomplish, we’d love to talk.</p>



<h2 class="wp-block-heading"><strong>INTERESTED IN SPONSORING SUMMIT VALLEY UNITED?</strong></h2>



<p class="wp-block-paragraph">Whether you&#8217;re a business owner, organization, or individual supporter, we have sponsorship levels for all budgets; from training shirt sponsors to premier jersey placements, from youth academy partners to community supporters.</p>



<ul class="wp-block-list">
<li><strong>Let’s grow this together.</strong></li>



<li><strong>Let’s elevate soccer in our region.</strong></li>



<li><strong>Let’s build something that lasts.</strong></li>
</ul>



<p class="wp-block-paragraph">Reach out to begin the conversation: <a href="https://www.berryvillefc.com/contact" target="_blank" rel="noreferrer noopener"><u>REACH OUT</u></a></p>



<p class="wp-block-paragraph">If you don&#8217;t want to sponsor, or it is not a great fit, but you feel you can donate to help as we continue to grow this year, then you can use this option: <a href="https://bit.ly/svu-donations">https://bit.ly/svu-donations</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/02/05/soccer-club-seeking-sponsors-for-2026/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47018</post-id>	</item>
		<item>
		<title>What Is Heft for SharePoint Framework (SPFx) and Why It Matters</title>
		<link>https://helloitsliam.com/2026/01/08/what-is-heft-for-sharepoint-framework-spfx-and-why-it-matters/</link>
					<comments>https://helloitsliam.com/2026/01/08/what-is-heft-for-sharepoint-framework-spfx-and-why-it-matters/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 17:52:39 +0000</pubDate>
				<category><![CDATA[Heft]]></category>
		<category><![CDATA[SharePoint Framework]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[SPFx]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=46927</guid>

					<description><![CDATA[The SharePoint Framework has evolved significantly over the years, and with that evolution comes the need for a more modern, maintainable, and predictable build system. HEFT represents a foundational shift in how SPFx projects are built, moving away from script-heavy tooling toward a configuration-driven, standardized approach. This article explains what HEFT is, why Microsoft introduced it into SPFx, and why the change matters for both developers and organizations building long-term SharePoint solutions.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you have worked with the SharePoint Framework (SPFx) for any length of time, you are already familiar with the build experience that comes with it. You write TypeScript, reference React or another framework, run a few commands, and eventually produce a deployable SharePoint package. For years, that experience was powered by a toolchain built around <strong>Gulp</strong>, <strong>Webpack</strong>, and a growing collection of scripts layered on top of one another.</p>



<p class="wp-block-paragraph">As the SharePoint Framework matured, however, that build system began to show its age. It worked, but it became harder to extend, harder to maintain, and increasingly difficult to modernize without breaking compatibility. To address these challenges, Microsoft introduced <strong>Heft</strong> as the new build orchestrator for SharePoint Framework projects.</p>



<p class="wp-block-paragraph">You can learn more about Heft here: <a href="https://heft.rushstack.io">https://heft.rushstack.io</a></p>



<p class="wp-block-paragraph">This article offers a high-level explanation of why Heft is used in the SharePoint Framework and how it improves the SPFx build experience.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>The Role of a Toolchain in the SharePoint Framework</strong></h2>



<p class="wp-block-paragraph">Before understanding Heft, it helps to step back and consider what a build toolchain actually does in the SharePoint Framework. When you run a command such as <code>build</code>, <code>serve</code>, or <code>package-solution</code> commands, a large number of things happen behind the scenes:</p>



<ul class="wp-block-list">
<li><em>TypeScript files are compiled</em></li>



<li><em>Sass files are transformed into CSS</em></li>



<li><em>Code is bundled and optimized</em></li>



<li><em>Linting and validation rules may run</em></li>



<li><em>Local development servers are started</em></li>



<li><em>Assets are prepared for deployment</em></li>
</ul>



<p class="wp-block-paragraph">None of this happens automatically. A toolchain coordinates these tasks, decides their order, handles configuration, and ensures everything runs consistently across environments.</p>



<p class="wp-block-paragraph">Historically, SharePoint Framework relied on <strong>Gulp</strong> as the main orchestrator. Over time, this led to a complex setup with JavaScript-based task definitions, custom scripts, and tightly coupled dependencies. While powerful, this approach also made the system fragile and difficult to evolve. Heft was introduced to solve those problems.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>What Heft Is</strong></h2>



<p class="wp-block-paragraph"><strong>Heft</strong> is a <strong>build orchestration system</strong>. It does not replace tools like TypeScript, Webpack, or Jest. Instead, it <strong>coordinates them</strong> in a structured, predictable, and configurable way. You can think of Heft as the conductor of an orchestra. The individual instruments (<em>TypeScript, Webpack, Sass, ESLint</em>) still do their own jobs, but Heft decides:</p>



<ul class="wp-block-list">
<li><em>When they run</em></li>



<li><em>How they are configured</em></li>



<li><em>How their outputs connect to one another</em></li>
</ul>



<p class="wp-block-paragraph">Rather than relying on handwritten JavaScript task files, Heft is driven primarily by <strong>configuration</strong>. This makes builds easier to understand, modify safely, and standardize across projects.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Why Microsoft Introduced Heft into the SharePoint Framework</strong></h2>



<h3 class="wp-block-heading"><strong>The Legacy Toolchain Was Becoming Unmanageable</strong></h3>



<p class="wp-block-paragraph">The original SharePoint Framework toolchain evolved incrementally over many years. Each new feature added another layer of configuration or scripting. Over time, this created:</p>



<ul class="wp-block-list">
<li><em>Hidden dependencies between tasks</em></li>



<li><em>Complex Gulp pipelines that were difficult to reason about</em></li>



<li><em>A higher risk of breaking changes when upgrading the SharePoint Framework versions</em></li>



<li><em>Limited flexibility for customization without deep internal knowledge</em></li>
</ul>



<p class="wp-block-paragraph">Heft offered a way to <strong>reset the foundation</strong> without changing how developers build solutions.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>A Shift Toward Configuration Over Code</strong></h3>



<p class="wp-block-paragraph">One of the biggest philosophical changes Heft brings is the shift from <strong>configuration to custom scripts</strong>. In the older model, extending the build often meant writing JavaScript inside a <code>gulpfile</code>. While powerful, this approach has drawbacks:</p>



<ul class="wp-block-list">
<li><em>Scripts can conflict with internal logic</em></li>



<li><em>Custom logic can silently break on upgrades</em></li>



<li><em>Builds become harder to audit or standardize across teams</em></li>
</ul>



<p class="wp-block-paragraph">Heft replaces most of this with <strong>JSON-based configuration files</strong> that clearly describe intent rather than implementation. This makes the build pipeline more transparent and less error-prone.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Consistency Across Projects and Teams</strong></h3>



<p class="wp-block-paragraph">Large organizations often struggle with building consistency. Two SharePoint Framework projects may look similar on the surface, but behave very differently under the hood due to custom scripts.</p>



<p class="wp-block-paragraph">Heft promotes <strong>repeatable and predictable builds</strong> by encouraging teams to rely on shared configurations and standardized behaviors. This is especially important in enterprise environments where:</p>



<ul class="wp-block-list">
<li><em>Multiple teams contribute to the same tenant</em></li>



<li><em>CI/CD pipelines must be stable</em></li>



<li><em>Build behavior needs to be auditable and supportable long-term</em></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Alignment with Modern Engineering Practices</strong></h3>



<p class="wp-block-paragraph">Heft is part of a broader engineering ecosystem used internally by Microsoft and across many large-scale projects. By adopting it for the SharePoint Framework, Microsoft aligned SharePoint development with:</p>



<ul class="wp-block-list">
<li><em>Modern dependency management practices</em></li>



<li><em>Structured build lifecycles</em></li>



<li><em>Plugin-based extensibility models</em></li>



<li><em>Long-term maintainability strategies</em></li>
</ul>



<p class="wp-block-paragraph">This alignment reduces the risk that the SharePoint Framework becomes isolated or outdated compared to other modern development platforms.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>What Makes Heft Different from Gulp</strong></h2>



<p class="wp-block-paragraph">While both Heft and Gulp can orchestrate tasks, they take fundamentally different approaches.</p>



<p class="wp-block-paragraph"><strong>Gulp: Imperative and Script-Driven</strong><br>With Gulp, developers define tasks using JavaScript. The build logic lives in code, and the order of operations is defined programmatically. This provides flexibility but also introduces complexity and risk.</p>



<p class="wp-block-paragraph"><strong>Heft: Declarative and Configuration-Driven</strong><br>Heft uses <strong>structured configuration files</strong> to define what should happen, not how to manually execute it. Tasks are modular, well-defined, and predictable.</p>



<p class="wp-block-paragraph">This makes builds:</p>



<ul class="wp-block-list">
<li><em>Easier to understand</em></li>



<li><em>Safer to customize</em></li>



<li><em>More resilient to future changes</em></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>The Concept of Rigs in Heft</strong></h2>



<p class="wp-block-paragraph">One of the most important ideas in Heft is the concept of a <strong>rig</strong>. A rig is a <strong>predefined build profile</strong> that describes how a certain type of project should behave. SharePoint Framework provides its own rig, which includes:</p>



<ul class="wp-block-list">
<li><em>Default build phases</em></li>



<li><em>Standard plugins</em></li>



<li><em>Expected behaviors for packaging and serving</em></li>
</ul>



<p class="wp-block-paragraph">By referencing a rig, a SharePoint Framework project automatically inherits a proven build configuration without copying files or scripts. This allows Microsoft to improve the build system over time while keeping projects stable.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Why This Matters to SharePoint Framework Developers</strong></h2>



<p class="wp-block-paragraph">At first glance, Heft might seem like an internal change that does not affect day-to-day development. However, it has several real-world benefits for developers.</p>



<ul class="wp-block-list">
<li><strong>Fewer Breaking Changes During Upgrades</strong><br>Because the build logic is centralized and standardized, SharePoint Framework upgrades are less likely to break custom build scripts. Developers spend less time fixing tooling and more time building solutions.<br></li>



<li><strong>Cleaner Project Structure</strong><br>Projects are easier to navigate because configuration files are explicit and purpose-driven. Instead of reading JavaScript build scripts, developers can inspect JSON files to understand behavior.<br></li>



<li><strong>Safer Customization</strong><br>When customization is required, Heft provides controlled extension points rather than unrestricted script access. This reduces accidental breakage and makes it easier to reverse changes.<br></li>



<li><strong>Better Fit for CI/CD Pipelines</strong><br>Heft&#8217;s predictable execution model makes it well-suited for automated builds, validation, and packaging in continuous integration environments.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Why Heft Matters to Organizations</strong></h2>



<p class="wp-block-paragraph">For organizations that invest heavily in SharePoint Framework solutions, Heft delivers value that extends well beyond individual developer productivity. It introduces a more structured and predictable build foundation that supports long-term stability, governance, and scalability across teams and projects.</p>



<p class="wp-block-paragraph">From a maintainability perspective, Heft helps reduce the accumulation of technical debt in build systems. By replacing ad-hoc scripts and tightly coupled task logic with standardized, configuration-driven behavior, solutions become easier to support and evolve over time. This is especially important for enterprise SharePoint Framework solutions that may remain in production for many years and must continue to build reliably as dependencies and environments change.</p>



<p class="wp-block-paragraph">Heft also supports stronger security and compliance practices. Standardized build processes are inherently easier to review, audit, and secure than custom script-based pipelines. Because Heft favors declarative configuration over executable scripts, it reduces the likelihood of hidden or unintended behaviors running during builds, which is an important consideration in regulated or security-sensitive environments.</p>



<p class="wp-block-paragraph">Finally, Heft improves knowledge transfer and team continuity. New developers can onboard more quickly because build behavior is explicit, consistent, and documented through configuration files rather than scattered across custom scripts. This clarity lowers the learning curve, reduces reliance on tribal knowledge, and makes it easier for teams to collaborate effectively on SharePoint Framework projects.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Heft as a Foundation for the Future</strong></h2>



<p class="wp-block-paragraph">Heft is not just a replacement for Gulp. It is a <strong>foundation for how the SharePoint Framework evolves going forward</strong>. By moving to a modern, extensible, and standardized build orchestrator, Microsoft has positioned SharePoint Framework to:</p>



<ul class="wp-block-list">
<li><em>Adopt new tooling more easily</em></li>



<li><em>Improve performance incrementally</em></li>



<li><em>Support more complex enterprise scenarios</em></li>



<li><em>Reduce friction for both developers and platform maintainers</em></li>
</ul>



<p class="wp-block-paragraph">This shift reflects a broader trend in modern development: <strong>simpler interfaces, stronger conventions, and clearer extension points</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Final Thoughts</strong></h2>



<p class="wp-block-paragraph">Heft represents a significant but necessary change in how SharePoint Framework projects are built. While much of the functionality remains familiar, the underlying philosophy has shifted toward clarity, consistency, and long-term sustainability.</p>



<p class="wp-block-paragraph">For developers, Heft means fewer surprises and more predictable builds. For organizations, it means better governance and reduced maintenance overhead. And for the SharePoint Framework platform itself, it means a healthier future built on modern engineering principles.</p>



<p class="wp-block-paragraph">Understanding Heft is less about learning new commands and more about recognizing <strong>why the SharePoint Framework needed a stronger, cleaner foundation</strong> and how Heft provides it.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/01/08/what-is-heft-for-sharepoint-framework-spfx-and-why-it-matters/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46927</post-id>	</item>
		<item>
		<title>Secure Plugins, Agents, and Graph Connectors in Copilot</title>
		<link>https://helloitsliam.com/2026/01/06/secure-plugins-agents-and-graph-connectors-in-copilot/</link>
					<comments>https://helloitsliam.com/2026/01/06/secure-plugins-agents-and-graph-connectors-in-copilot/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Tue, 06 Jan 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Security]]></category>
		<category><![CDATA[Copilot]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=46862</guid>

					<description><![CDATA[As organizations extend Microsoft 365 Copilot with plugins, agents, and Graph connectors, securing AI interactions becomes crucial. Proper governance is necessary to prevent data exposure and risks associated with improper configurations. Microsoft Purview plays a key role in ensuring compliance and monitoring, providing a framework for maintaining safety throughout the AI ecosystem.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">As organizations begin extending Microsoft 365 Copilot through plugins, agents, and Graph connectors, the responsibility for securing AI interactions expands beyond basic tenant governance. These components enable Copilot to access external systems, perform actions on behalf of users, and integrate business data that exists outside Microsoft 365. With that flexibility comes elevated risk. Administrators must ensure these extensions operate within defined security boundaries, comply with and support auditing requirements, and never create unintended pathways for sensitive data to flow into the wrong systems or identities.</p>



<p class="wp-block-paragraph">Microsoft Purview plays a central role in governing AI behavior, including Copilot’s interaction with external systems. Purview’s AI Hub adds a formal framework for identifying sensitive content, evaluating risk, enforcing safety checks, monitoring AI output, and validating whether Copilot-initiated actions comply with organizational policy. Securing plugins, agents, and connectors is not simply good practice; it is part of the broader AI safety architecture that Microsoft now expects organizations to adopt.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Understanding Copilot Extensibility Components</strong></h2>



<p class="wp-block-paragraph">Before you can secure anything, you need complete clarity on what Copilot extensibility actually includes.</p>



<h3 class="wp-block-heading"><strong>Graph Connectors</strong></h3>



<p class="wp-block-paragraph">Graph connectors allow external data sources to be indexed into Microsoft Search and the Semantic Index. This makes the data discoverable to Copilot, meaning permissions, visibility, and indexing decisions directly impact AI behavior. Because connectors can introduce a large amount of previously siloed data into Copilot’s reach, they require strict scoping and careful review.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Agents</strong></h3>



<p class="wp-block-paragraph">Agents are programmable constructs that can retrieve information, execute business logic, or call external APIs on behalf of a user. They extend Copilot from being a passive interpreter of content to an active participant in workflows. Agents must be treated as high-trust components because they can introduce new capabilities that Copilot would never have by default.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Plugins</strong></h3>



<p class="wp-block-paragraph">Plugins extend agent behavior with additional actions or frameworks. They can provide two-way integration with external systems, enabling Copilot to query, create, or update data. Plugins sit at the intersection of identity, data access, and automation, which means improper configuration can lead to privilege escalation or unintended data movement.</p>



<p class="wp-block-paragraph">Together, these components form the operational surface where Copilot interacts with information that goes beyond Microsoft 365. Each one must be governed tightly.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Risks Introduced by Extending Copilot</strong></h2>



<p class="wp-block-paragraph">Microsoft’s AI security model makes one thing very clear: AI is not the risk; <strong>improper configuration is</strong>. Copilot adheres to all security controls, but plugins, connectors, and agents can expand that boundary if they are not adequately governed.</p>



<p class="wp-block-paragraph">Key risks include:</p>



<ul class="wp-block-list">
<li><strong>Broader data visibility</strong> <em>through indexing external systems that were never intended to be searched.</em></li>



<li><strong>Privilege amplification</strong><em> if agents or plugins have more permissions than the users invoking them.</em></li>



<li><strong>Uncontrolled data movement</strong> <em>if external APIs receive sensitive content without classification or protection.</em></li>



<li><strong>Inadequate auditing</strong><em> if plugin or agent activity is not captured in Purview’s recording pipeline.</em></li>



<li><strong>Shadow AI pathways</strong> <em>if connectors surface content no one realized was accessible.</em></li>
</ul>



<p class="wp-block-paragraph">Microsoft Purview’s AI safety features, including output monitoring, risk analytics, and data classification enforcement, are explicitly designed to mitigate these risks. But the foundational responsibility remains in how organizations configure extensibility itself.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Securing Graph Connectors as a Copilot Data Boundary</strong></h2>



<p class="wp-block-paragraph">Graph connectors widen the Semantic Index by introducing external datasets. If these datasets are not controlled, Copilot may surface or summarize information without the proper governance frameworks applied.</p>



<h3 class="wp-block-heading"><strong>Essential Controls for Graph Connectors</strong></h3>



<p class="wp-block-paragraph"><strong>Enforce Least Privilege</strong><br>Connector identities must have only the permissions necessary to access and index the external content. Over-permissive service accounts immediately become AI exposure risks.</p>



<p class="wp-block-paragraph"><strong>Validate Access Control Mappings</strong><br>Connector ACLs directly determine who can search and, therefore, who Copilot can assist. Permissions must match the exact organizational structure of the external system.</p>



<p class="wp-block-paragraph"><strong>Control What Gets Indexed</strong><br>Connector indexing scopes should be configured to exclude content that is:</p>



<ul class="wp-block-list">
<li><em>Sensitive</em></li>



<li><em>Unclassified</em></li>



<li><em>Not governed under Purview policies</em></li>



<li><em>Not intended for organizational search visibility</em></li>
</ul>



<p class="wp-block-paragraph"><strong>User-Level Permission Trimming Still Applies</strong><br>Even with external data, Copilot respects the Microsoft Graph permission model. If a user cannot see a connector’s indexed item, Copilot cannot use it.</p>



<p class="wp-block-paragraph"><strong>Monitor Connector Health</strong><br>Connector logs, ingestion status, failed crawls, permission errors, and item counts should be part of your operational security checks.</p>



<p class="wp-block-paragraph">Graph connectors are robust, but they fundamentally alter what Copilot can discover. Securing them is mandatory.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Securing Agents and Custom Actions</strong></h2>



<p class="wp-block-paragraph">Agents introduce programmable logic into Copilot, allowing the AI to perform tasks that extend far beyond summarizing content or retrieving information. Because agents can call APIs, trigger workflows, or execute logic on behalf of a user, they must be governed with the same discipline applied to high-trust applications. Securing them begins with strict control over the actions they are allowed to perform. An agent should operate within a narrow and well-defined permission set, avoiding broad or unnecessary access to external systems. Over-permissioning is one of the fastest ways to expand Copilot’s reach unintentionally, so organizations must regularly review what each agent can do and confirm that its scope aligns with business requirements.</p>



<p class="wp-block-paragraph">Administrative control is equally important. The ability to create, register, or update agents should only be granted to privileged identities protected by strong authentication, device compliance requirements, and Conditional Access controls. Because agents essentially introduce new capabilities into your AI ecosystem, their configuration must never fall into the hands of standard users or unmonitored service accounts. Purview’s auditing and monitoring tools become essential here, as every agent execution, external call, or data retrieval should be captured in logs. This provides traceability if an agent behaves unexpectedly or retrieves data it should not.</p>



<p class="wp-block-paragraph">The organization should also validate output handling to ensure agent responses comply with corporate policy. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Microsoft Purview’s AI Safety controls help evaluate whether agent-generated content contains inaccurate details, sensitive data, or content that violates regulatory obligations. </p>
</blockquote>



<p class="wp-block-paragraph">By testing how an agent behaves in different scenarios, including edge cases, administrators gain confidence that it will operate safely once deployed. Securing agents ultimately means controlling their permissions, tightening their administrative boundaries, monitoring their actions, and validating their output through the broader governance framework Copilot relies on.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Plugin Governance and Data Flow Control</strong></h2>



<p class="wp-block-paragraph">Plugins extend agent functionality and allow Copilot to interact with external frameworks or automation systems. Because plugins can initiate both inbound and outbound data flows, they require strong governance to prevent unintended information disclosure. Organizations must begin by establishing a controlled deployment model that allows only approved plugins to be used. This pre-approval process ensures each plugin undergoes a security and compliance review before it becomes part of the AI ecosystem. Once deployed, plugin usage should be restricted to specific roles or user groups rather than made universally available. Role-based assignment reduces exposure and keeps sensitive integrations out of reach of users who have no operational need for them.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Data security must be considered at every stage of plugin interaction.</p>
</blockquote>



<p class="wp-block-paragraph">Purview’s classification and labeling capabilities should be applied to data flowing into or out of plugin interactions, ensuring sensitive information is not inadvertently processed by external systems or returned in Copilot responses without proper protections. Equally important is output monitoring, which helps detect whether a plugin produces content that may contain regulated data, internal secrets, or unsafe operational instructions. This is especially relevant when plugins perform write operations or integrate with systems that store sensitive business information.</p>



<p class="wp-block-paragraph">Continuous monitoring of plugin behavior is necessary to maintain governance integrity. Observing usage patterns, reviewing logs, and identifying anomalies help detect situations in which a plugin may be invoked unexpectedly or outside its intended workflows. Conditional Access also plays a role by blocking plugin use from high-risk sessions or unmanaged devices. By combining operational oversight, strict permissioning, strong data-handling controls, and session-level governance, organizations maintain predictable and controlled data flow across all plugin interactions.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Identity, Consent, and Administrative Controls</strong></h2>



<p class="wp-block-paragraph">Any extension that interfaces with Copilot inevitably interacts with identity and permissions. Identity Hardening Requirements:</p>



<ul class="wp-block-list">
<li><strong>Admin Consent for High-Risk Permissions</strong><br><em>Extensibility components should request only the permissions required for their function.</em></li>



<li><strong>Strict App Consent Policies</strong><br><em>Users should not be able to self-consent to plugins or agent integrations.</em></li>



<li><strong>Periodic Review of Connected Apps</strong><br><em>Administrators must regularly evaluate all registered connectors, plugins, and agents for permission drift or outdated configurations.</em></li>



<li><strong>Conditional Access for API and Graph Usage</strong><br><em>Use CA policies to restrict app and service principal access to compliant environments.</em></li>
</ul>



<p class="wp-block-paragraph">This ensures plugins, agents, and connectors never exceed their intended authority.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Validation, Testing, and Continuous Monitoring</strong></h2>



<p class="wp-block-paragraph">Securing Copilot extensibility is not a one-time configuration exercise. Plugins, agents, and connectors introduce new operational paths through which data can move, actions can be executed, and systems can be influenced. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Because these capabilities extend beyond native Microsoft 365 workloads, organizations must adopt a rigorous validation and continuous monitoring approach. </p>
</blockquote>



<p class="wp-block-paragraph">Proper testing ensures that these components behave as expected under real-world conditions, respect the boundaries defined by your governance model, and do not accidentally expose sensitive information.</p>



<p class="wp-block-paragraph">Validation begins with ensuring that data boundaries are enforced correctly. Administrators should test each connector, plugin, and agent under controlled conditions to confirm that they only access the datasets they were explicitly designed to interact with. For connectors, this means verifying that indexed content from external systems appears in Microsoft Search only for users with the proper access rights. For agents, administrators must confirm that actions remain restricted to their intended scope and that agents do not retrieve or generate information beyond the permissions assigned. Plugin validation should go further by evaluating not only the data retrieved but also how the plugin handles and returns output to Copilot.</p>



<p class="wp-block-paragraph">Once initial validation is complete, organizations should conduct scenario-based testing to understand how extensibility components behave under different user profiles and security contexts. This includes testing what happens when:</p>



<ul class="wp-block-list">
<li><em>A user with minimal permissions interacts with a connector or agent</em></li>



<li><em>A privileged user attempts to invoke high-risk plugin actions</em></li>



<li><em>Conditional Access policies restrict specific actions or sessions</em></li>



<li><em>Sensitive content is input into or returned from AI-driven processes</em></li>
</ul>



<p class="wp-block-paragraph">These tests can reveal weaknesses or unintended pathways that are not visible during normal configuration review. They also validate that the organization’s Purview controls, such as DLP, sensitivity labels, and safe output evaluation, are functioning correctly across the entire extensibility surface.</p>



<p class="wp-block-paragraph"><strong>Continuous monitoring</strong> is essential because extensibility components evolve. Connector indexing patterns can change as external systems grow. API endpoints used by plugins may update. Agents may require new logic as workflows evolve. Without ongoing oversight, these changes can introduce blind spots in your governance model. Administrators should use Purview’s AI activity insights, audit logging, and classification-based monitoring to observe how Copilot interacts with extensibility components over time. These tools help detect anomalies such as unexpected data access, rapid increases in connector ingestion volume, or plugin outputs containing sensitive information.</p>



<p class="wp-block-paragraph">Monitoring should also involve periodic review of app permissions and service principal access. Since connectors and agents rely heavily on identity and privilege mapping, permission creep can occur as administrators adjust roles, onboarding processes evolve, or APIs require expanded capabilities. Scheduled security reviews help ensure permissions remain aligned with least-privilege best practices and that no extensibility component gains rights beyond what is operationally necessary.</p>



<p class="wp-block-paragraph">Organizations should incorporate <strong>red-team-style</strong> exercises to test the resilience of their extensibility governance against misuse or misconfiguration. These exercises can include simulating malicious prompts, attempting to exploit plugin functionality, or deliberately introducing misaligned permissions to validate whether Purview controls and DLP rules block unsafe operations. This type of testing verifies whether AI behavior remains inside the defined safety and compliance boundary even when confronted with adversarial or unexpected scenarios.</p>



<p class="wp-block-paragraph">By combining structured validation, persona-based testing, continuous telemetry monitoring, and periodic security reviews, organizations create a resilient governance loop around Copilot extensibility. This ensures that connectors, agents, and plugins remain aligned to policy, behave consistently under stress, and maintain compliance with corporate and regulatory requirements as the environment grows and evolves.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Thoughts</strong></h2>



<p class="wp-block-paragraph">Securing Copilot extensibility is not just about protecting external systems. It is about preserving the entire AI ecosystem inside your organization. Plugins, agents, and connectors extend the reach of AI, but they also extend your responsibility to enforce least privilege, monitor data flows, validate behavior, and apply continuous governance.</p>



<p class="wp-block-paragraph">Microsoft Purview now provides the central control plane for AI safety, including content classification, output monitoring, risk evaluation, and compliance controls. By aligning your extensibility governance with Purview and Microsoft 365 security, you ensure that Copilot operates inside a secure, entirely governed, and intentionally defined boundary.</p>



<p class="wp-block-paragraph">When these controls are correctly implemented, Copilot becomes a safe, predictable, and transformative capability. When ignored, extensions become the fastest path to unintended data exposure.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/01/06/secure-plugins-agents-and-graph-connectors-in-copilot/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46862</post-id>	</item>
		<item>
		<title>Manage Semantic Index and Search Exposure for Copilot</title>
		<link>https://helloitsliam.com/2026/01/03/manage-semantic-index-and-search-exposure-for-copilot/</link>
					<comments>https://helloitsliam.com/2026/01/03/manage-semantic-index-and-search-exposure-for-copilot/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Sat, 03 Jan 2026 14:56:42 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Security]]></category>
		<category><![CDATA[Copilot]]></category>
		<category><![CDATA[Search]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=46844</guid>

					<description><![CDATA[Microsoft 365 Copilot utilizes a semantic index to enhance data interpretation and search relevance by mapping relationships and understanding context. It operates within strict security boundaries, governed by Microsoft Graph and permissions. Effective management of access and exposure is crucial, as it affects how Copilot retrieves and processes organizational content.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Microsoft 365 Copilot uses a <strong>semantic index</strong> to understand and interpret your organization’s data with greater context, relevance, and conceptual understanding. The semantic index enhances search by mapping relationships, capturing synonyms, and representing data in a way that supports “meaning-based” retrieval, beyond simple keyword matching.</p>



<p class="wp-block-paragraph">Under the hood, Copilot combines semantic indexing with Microsoft Graph to ground responses in your real content. This means that Copilot can provide more accurate and relevant insights because it understands not just <em><strong>what</strong></em> words are in your documents, chats, and files, but also <em><strong>how the content relates to your queries</strong></em>.</p>



<p class="wp-block-paragraph">However, with great power comes increased responsibility. Because Copilot surfaces organizational data using the same index that powers Microsoft Search, this step is essential to ensure Copilot only sees what you intend it to see. Poorly governed search exposure means Copilot will faithfully reflect unintended access, overshared content, or improperly indexed data.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>What the Semantic Index Is and How Copilot Uses It?</strong></h2>



<p class="wp-block-paragraph">The semantic index for Microsoft 365 Copilot is a model trained on content from Microsoft Graph that enhances search relevance and accuracy while respecting your existing security, privacy, and compliance boundaries.</p>



<p class="wp-block-paragraph">In practice, indexing translates organizational content into mathematical representations (vectors) that capture semantic relationships. This enables Copilot to provide results based on intent and contextual similarity; for example, linking terms like “<strong>USA</strong>,” “<strong>United States</strong>,” and “<strong>U.S.A.</strong>” because they share semantic meaning, rather than simple exact matches.</p>



<p class="wp-block-paragraph">Microsoft builds these indices automatically for your tenant when you enable Copilot and assign at least one Microsoft 365 Copilot license.</p>



<p class="wp-block-paragraph">Critically:</p>



<ul class="wp-block-list">
<li>The semantic index is generated from <strong>Microsoft Graph</strong>, which means it includes content from SharePoint, OneDrive, mailboxes, Teams, and other Graph-traceable sources.</li>



<li><strong>Permissions are respected at every level</strong>. Content appears in Copilot only if users already have access via Microsoft 365 permissions.</li>



<li>The semantic index does <strong>not</strong> create new access rights or override any access controls in your tenant. </li>
</ul>



<p class="wp-block-paragraph">In essence, the semantic index is a high-performance retrieval layer that enhances Copilot&#8217;s understanding and response to user prompts while operating strictly within your established security boundaries.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>The Link Between Microsoft Search and Copilot Access</strong></h2>



<p class="wp-block-paragraph">Everything Copilot retrieves or interprets is governed by the same permission-trimmed index that powers Microsoft Search. Copilot does not maintain a separate index, nor does it bypass or override permissions. Its retrieval pipeline is built entirely on top of the Microsoft Search and Microsoft Graph security models, meaning Copilot will only surface content that a user is already allowed to access. This alignment is intentional and foundational to Copilot’s security posture.</p>



<p class="wp-block-paragraph">At the core of this model are three principles:</p>



<ul class="wp-block-list">
<li><strong>Permission trimming</strong> <em>ensures a user only sees the content they already have access to, regardless of where it lives.</em></li>



<li><strong>Role-based access control</strong> <em>determines what content is indexed and visible, based on Microsoft 365 and Microsoft Graph permissions.</em></li>



<li><strong>Personalization signals</strong> <em>influence the order and relevance of results, based on user interactions, common collaborators, and organizational patterns.</em></li>
</ul>



<p class="wp-block-paragraph">The implications for Copilot are straightforward but extremely important. If a user cannot find a file, message, or site through Microsoft Search, Copilot cannot surface, summarize, or reference it. Conversely, if a user can discover something through Search, Copilot can use that content as part of its grounding and semantic interpretation.</p>



<p class="wp-block-paragraph">Copilot also relies on Graph to validate user identity, map access tokens, and enforce security controls before retrieving any content. Every request Copilot makes must pass through these validation layers. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The AI never bypasses these frameworks and cannot elevate its own access based on prompts alone.</p>
</blockquote>



<p class="wp-block-paragraph">Because of this, Microsoft Search governance becomes Copilot governance. Oversharing in SharePoint becomes oversurfacing in Copilot. Broad group permissions become broader AI visibility. Clean, well-structured search boundaries produce clean, predictable Copilot outcomes. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The two systems are inseparably linked, and your Copilot readiness depends entirely on how well your search exposure is managed.</p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Controls That Manage Semantic Index Exposure</strong></h2>



<p class="wp-block-paragraph">You cannot directly turn Semantic Index off, and Microsoft does not provide a standalone toggle to “<strong>hide from Copilot</strong>”, because exposure is governed by Search indexing and access controls.</p>



<p class="wp-block-paragraph">Instead, you manage exposure using the following valid and supported controls:</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>SharePoint NoCrawl / Search Exclusion</strong></h3>



<p class="wp-block-paragraph">SharePoint sites and libraries can be marked as <strong>Not indexed</strong> in Microsoft Search. This removes them from the tenant-level semantic index. Administrators can configure the “<strong>Allow this site to appear in search results</strong>” setting to <strong>No</strong>.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Permission Trimming and Access Control</strong></h3>



<p class="wp-block-paragraph">Semantic index respects role-based access control. Users only see indexed content they have permission to access. This includes:</p>



<ul class="wp-block-list">
<li><em>SharePoint and OneDrive permission sets</em></li>



<li>E<em>xchange mailbox access</em></li>



<li><em>Teams and channel membership</em></li>



<li><em>Sensitivity labels with security restrictions</em></li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Sensitivity Labels and Encryption</strong></h3>



<p class="wp-block-paragraph">Sensitivity labels with encryption and restricted extraction behavior feed into Microsoft Search&#8217;s filtering and indexing. While labels do not prevent indexing entirely, they can be used in combination with SharePoint’s search visibility settings to reduce semantic exposure.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Managing Copilot Connectors</strong></h3>



<p class="wp-block-paragraph">Copilot Graph Connectors bring external content into your semantic index. These connectors inherit ACLs from the source system. If you misconfigure connector permissions, Copilot may index content that users were not intended to see. Administrators can review and adjust connector permission mappings via the Microsoft 365 admin center.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Validate Search and Semantic Index Exposure</strong></h2>



<p class="wp-block-paragraph">Ensuring Copilot only sees the correct content requires structured testing. Because Copilot’s grounding mechanism relies entirely on Microsoft Search and Graph, the most accurate way to validate AI exposure is to validate search exposure.</p>



<p class="wp-block-paragraph">The <strong>first</strong> step is to <strong>test Microsoft Search for each persona</strong>. Administrators should log in as standard users, department users, and high-privilege roles to search for sensitive areas such as HR libraries, executive documents, or financial reports. If a user cannot find the content through Search, Copilot will not interpret it. If the content appears, it is considered discoverable and must be addressed through access or indexing controls.</p>



<p class="wp-block-paragraph">A <strong>second</strong> validation is <strong>testing Sensitivity Labels</strong>. Administrators should verify that encrypted or protected content is not returning in search results for unauthorized users, and that extraction-restricted labels correctly prevent Copilot from summarizing or generating content from those files.</p>



<p class="wp-block-paragraph">Graph Connector visibility should also be evaluated. If external data sources are indexed, administrators should confirm that only intended users can see connector-fed items in search results. Overly broad connector mappings are a common source of unexpected AI exposure.</p>



<p class="wp-block-paragraph"><strong>SharePoint’s “Check Permissions”</strong> tool remains critical. Because SharePoint access can be granted through inheritance, links, or membership in large groups, this tool provides a definitive view of who can see what. Any discrepancy between intended access and actual access becomes a direct Copilot exposure risk.</p>



<p class="wp-block-paragraph"><strong>Finally</strong>, once indexing and permissions are validated, administrators should run controlled Copilot queries to confirm that the AI adheres to the search governance boundaries. This includes attempting to summarize sensitive files, querying protected areas, and validating that Copilot declines actions when it lacks the required access.</p>



<p class="wp-block-paragraph">These tests collectively ensure the Semantic Index reflects your intended visibility model, not your accidental one.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Ongoing Governance and Index Hygiene</strong></h2>



<p class="wp-block-paragraph">Semantic exposure is not static. As content grows, sites multiply, and teams evolve, the Semantic Index adapts automatically. This makes ongoing governance essential.</p>



<p class="wp-block-paragraph">Administrators should regularly review newly created SharePoint sites to ensure they do not inherit overly permissive access. Many organizations unintentionally expose content by allowing new sites to be created without owners, without proper sensitivity labels, or with broad membership.</p>



<p class="wp-block-paragraph">Group membership reviews should also be conducted routinely. Because many permissions derive from Microsoft 365 Groups and security groups, changes in group membership directly affect semantic visibility.</p>



<p class="wp-block-paragraph">Graph Connector configurations require periodic auditing as well. External systems may shift, roles may change, or data structures may be updated. Each of these affects what gets indexed and how permissions are interpreted.</p>



<p class="wp-block-paragraph">Search and Intelligence settings in the Microsoft 365 admin center should be monitored to confirm that verticals, result types, and indexing scopes align with organizational policies.</p>



<p class="wp-block-paragraph">Finally, the broader governance ecosystem, including data classification, retention, sensitivity labels, and DLP, should continue to evolve alongside Copilot adoption. The stronger and more consistent your data governance program becomes, the more predictable your Semantic Index remains.</p>



<p class="wp-block-paragraph">Ongoing governance is the only way to ensure that the AI continues to operate within a secure, fully controlled boundary as your data landscape grows.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><strong>Thoughts</strong></h2>



<p class="wp-block-paragraph">The Semantic Index is one of the most powerful components of Microsoft 365 Copilot, enabling the AI to understand content through context, relationships, and meaning rather than relying solely on keywords. This capability delivers enormous productivity benefits, but it also increases the importance of maintaining strict control over search visibility and access boundaries.</p>



<p class="wp-block-paragraph">Because Copilot depends entirely on Microsoft Search and Microsoft Graph for grounding, your search governance becomes your AI governance. Overshared files become discoverable insights. Poorly configured permissions become unintended AI visibility. Conversely, strong access controls, structured labeling, thoughtful indexing decisions, and disciplined permission hygiene result in a tightly governed and predictable AI environment.</p>



<p class="wp-block-paragraph">By applying the correct controls, including search exclusion, permission trimming, sensitivity labeling, connector governance, and continuous auditing, you define a safe, intentional boundary for AI-driven interpretation. This ensures Copilot enhances productivity without exposing content that should remain private.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2026/01/03/manage-semantic-index-and-search-exposure-for-copilot/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46844</post-id>	</item>
		<item>
		<title>Music</title>
		<link>https://helloitsliam.com/2025/12/28/music/</link>
					<comments>https://helloitsliam.com/2025/12/28/music/#respond</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Mon, 29 Dec 2025 02:48:12 +0000</pubDate>
				<category><![CDATA[Album]]></category>
		<category><![CDATA[Drum and Bass]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Personal Project]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[music]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=46816</guid>

					<description><![CDATA[Music has always been something I felt pulled toward creating, not just listening to, but building from the ground up. For as long as I can remember, I have wanted to make electronic music and share it. That drive started years ago as a teenager in the UK and grew stronger when my brother and [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Music has always been something I felt pulled toward creating, not just listening to, but building from the ground up. For as long as I can remember, I have wanted to make electronic music and share it.</p>



<p class="wp-block-paragraph">That drive started years ago as a teenager in the UK and grew stronger when my brother and I ran our own small record label, <strong>Kitschy Records</strong>. </p>



<p class="wp-block-paragraph"><a href="https://www.beatport.com/label/kitschy-records/16169">https://www.beatport.com/label/kitschy-records/16169</a></p>



<p class="wp-block-paragraph">At that time, we both spent a lot of time in music, learning, experimenting, and dreaming about what we could create. Even as life moved on and priorities shifted, that goal never really left me. Making music was always there in the background, waiting.</p>



<p class="wp-block-paragraph">Fast forward to today, after many, many years of everyday life, I have released my first drum and bass album called &#8220;<strong>DIRECTION</strong>&#8220;, and it is now live on Spotify.</p>



<p class="wp-block-paragraph">If <strong>vocal-driven drum and bass</strong> is your thing, I would love for you to check it out; if not, then no worries. </p>



<figure class="wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Spotify Embed: DIRECTION" style="border-radius: 12px" width="100%" height="352" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/album/2wCuhEDThOlDj4vvXDJB24?si=9euHWgxLSYSU3Rmxofv41g&amp;utm_source=oembed"></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2025/12/28/music/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46816</post-id>	</item>
		<item>
		<title>Comparing CMMC 1.0, 2.0, and 3.0</title>
		<link>https://helloitsliam.com/2025/12/17/comparing-cmmc-1-0-2-0-and-3-0/</link>
					<comments>https://helloitsliam.com/2025/12/17/comparing-cmmc-1-0-2-0-and-3-0/#comments</comments>
		
		<dc:creator><![CDATA[helloitsliam]]></dc:creator>
		<pubDate>Wed, 17 Dec 2025 15:00:00 +0000</pubDate>
				<category><![CDATA[CMMC]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[CUI]]></category>
		<category><![CDATA[DFARS]]></category>
		<category><![CDATA[DoD]]></category>
		<category><![CDATA[DoW]]></category>
		<category><![CDATA[FAR]]></category>
		<category><![CDATA[FCI]]></category>
		<category><![CDATA[FedRAMP]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[GCC-HIGH]]></category>
		<category><![CDATA[NIST]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://helloitsliam.com/?p=46662</guid>

					<description><![CDATA[The evolution from CMMC 1.0 to 3.0 reflects a steady refinement from complexity to clarity, aligning defense cybersecurity with NIST standards and automation. It is essential to know what changed, what’s next, and how Microsoft 365 and Azure environments can stay ahead of compliance.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The cybersecurity requirements for contractors working with the Department of Defense (DoD) / Department of War (DoW)have evolved significantly since the original version of the Cybersecurity Maturity Model Certification (CMMC). Over time, the program has been refined to balance industry feedback, operational practicality, and real-world risk.</p>



<p class="wp-block-paragraph">Understanding how CMMC 1.0, 2.0, and the forthcoming 3.0 compare is critical. It helps organizations assess where they stand, what their obligations are, and how to prepare for the next stage of compliance. In this article, we examine significant differences across versions and their implications for organizations, especially those that leverage Microsoft 365 and Azure.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Fundamental Differences: Structure, Scope, and Philosophy</strong></h3>



<figure class="wp-block-table"><table><thead><tr><th><strong>Version</strong></th><th><strong>Certification Levels</strong></th><th><strong>Assessment Approach</strong></th><th><strong>Foundational Philosophy</strong></th></tr></thead><tbody><tr><td><strong>CMMC 1.0</strong></td><td>5 levels (Level 1–5).</td><td>Third-party assessment required for all levels.</td><td>Layered maturity: “basic” cyber hygiene, advanced practices, and process maturity.</td></tr><tr><td><strong>CMMC 2.0</strong></td><td>3 levels: Level 1 (Foundational), Level 2 (Advanced), Level 3 (Expert).</td><td>Self-assessment allowed for some Level 1 and Level 2 cases; third-party or government-led assessment for higher levels.</td><td>Simplified structure aligned with NIST standards, allowing flexibility through POA&amp;Ms.</td></tr><tr><td><strong>CMMC 3.0 (proposed)</strong></td><td>Expected to maintain a 3-level structure; refine control standards and assessment detail.</td><td>Likely more automation, updated baseline standards, and potential for continuous compliance.</td><td>Streamlined model integrating updated NIST guidance with improved clarity and technical effectiveness.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Why the changes matter:</strong></p>



<ul class="wp-block-list">
<li><em>The shift from 1.0 to 2.0 reduced complexity and aligned the model with standards such as NIST SP 800-171, easing compliance for small- and mid-sized contractors.</em></li>



<li><em>CMMC 3.0 builds on this by emphasizing automation, modernization, and continuous assurance rather than static certification cycles.</em></li>



<li><em>For cloud-enabled contractors, these changes reduce implementation overhead and align directly with tools already available in Microsoft 365 and Azure.</em></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>What Changed Between 1.0 and 2.0</strong></h3>



<p class="wp-block-paragraph">The move from CMMC 1.0 to 2.0 represented a significant shift toward simplification and practicality.</p>



<p class="wp-block-paragraph"><strong>Key differences include:</strong></p>



<ul class="wp-block-list">
<li><em><strong>Reduction in levels:</strong> CMMC 1.0 featured five levels, while 2.0 consolidated them into three levels: Foundational, Advanced, and Expert—to eliminate redundancy and confusion.</em></li>



<li><em><strong>Removal of maturity processes:</strong> The 1.0 model included process-maturity assessments that evaluated the extent to which cybersecurity practices were institutionalized. 2.0 eliminated this requirement to focus purely on control implementation.</em></li>



<li><em><strong>Introduction of POA&amp;Ms:</strong> Plans of Action and Milestones allow organizations to document deficiencies and remediate them within a set timeframe, replacing the rigid “pass/fail” system of 1.0.</em></li>



<li><em><strong>Alignment with existing frameworks:</strong> CMMC 2.0 anchors Level 2 directly to the 110 controls of NIST SP 800-171, ensuring consistency across federal cybersecurity programs.</em></li>



<li><em><strong>Flexible assessment:</strong> While 1.0 required third-party certification at all levels, 2.0 allows for self-assessments at Level 1 and certain Level 2 contracts, reserving third-party reviews for higher-risk environments.</em></li>
</ul>



<p class="wp-block-paragraph"><strong>Impact for contractors:</strong><br>CMMC 2.0 made compliance more attainable, especially for smaller suppliers in the Defense Industrial Base (DIB). Organizations can now leverage existing security investments, prioritize higher-risk areas, and progressively mature their programs without duplicating effort.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>What CMMC 3.0 Brings</strong></h3>



<p class="wp-block-paragraph">CMMC 3.0, still under development, is expected to refine rather than replace the 2.0 model. It focuses on enhancing clarity, aligning with the latest NIST updates, and embracing automation for continuous compliance.</p>



<p class="wp-block-paragraph"><strong>Expected enhancements include:</strong></p>



<ul class="wp-block-list">
<li><em><strong>Updated baseline:</strong> CMMC 3.0 will align with NIST SP 800-171 Revision 3 and NIST SP 800-172, introducing updated controls and clarifying parameters for sensitive data protection.</em></li>



<li><em><strong>Outcome-based controls:</strong> Fewer but broader requirements focused on measurable outcomes, improving technical precision while reducing duplication.</em></li>



<li><em><strong>Emphasis on automation:</strong> The new version is expected to leverage automated control validation, continuous monitoring, and real-time evidence collection to replace periodic manual audits.</em></li>



<li><em><strong>Greater clarity and standardization:</strong> Updated guidance will reduce ambiguity in interpretations and ensure consistency across contractors and assessors.</em></li>
</ul>



<p class="wp-block-paragraph"><strong>What this means for contractors:</strong><br>CMMC 3.0 represents an evolution toward continuous assurance. Contractors that adopt automated compliance dashboards, centralized log retention, and continuous validation on platforms such as <strong>Microsoft Defender for Cloud</strong> or <strong>Compliance Manager </strong>will be well-positioned to meet upcoming requirements.</p>



<figure class="wp-block-table"><table><thead><tr><th><strong>Feature</strong></th><th><strong>CMMC 1.0</strong></th><th><strong>CMMC 2.0</strong></th><th><strong>CMMC 3.0 (Expected)</strong></th></tr></thead><tbody><tr><td>Levels</td><td>5</td><td>3</td><td>3</td></tr><tr><td>Maturity processes</td><td>Yes</td><td>Removed</td><td>Simplified further</td></tr><tr><td>POA&amp;Ms allowed</td><td>No</td><td>Yes</td><td>Yes</td></tr><tr><td>Baseline standard</td><td>Mix of CMMC-unique, NIST, FAR/DFARS</td><td>NIST SP 800-171 / FAR baseline</td><td>NIST SP 800-171 Rev 3 and NIST SP 800-172</td></tr><tr><td>Assessment flexibility</td><td>All third-party</td><td>Mixed: self, third-party, government-led</td><td>Expected hybrid with automation and self-reporting</td></tr><tr><td>Focus</td><td>Broad maturity and processes</td><td>Realistic, control-based compliance</td><td>Continuous, outcome-based assurance</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Implications for Microsoft 365 and Azure Environments</strong></h3>



<p class="wp-block-paragraph">For organizations using Microsoft cloud services, the CMMC evolution aligns naturally with built-in capabilities.</p>



<p class="wp-block-paragraph"><strong>More precise mapping</strong><br>Many of the NIST SP 800-171 and 800-172 controls map directly to Microsoft 365 and Azure services, including access management, encryption, and incident response.</p>



<p class="wp-block-paragraph"><strong>Automation-ready architecture</strong><br>Tools like Defender for Cloud, Purview, Sentinel, and Compliance Manager already support continuous monitoring, policy enforcement, and evidence generation; key capabilities for CMMC 3.0.</p>



<p class="wp-block-paragraph"><strong>Reduced administrative overhead</strong><br>With POA&amp;Ms now permissible, cloud-native compliance tracking minimizes manual documentation while maintaining traceability for assessments.</p>



<p class="wp-block-paragraph"><strong>Future-proofing</strong><br>Organizations investing in automation, zero-trust identity governance, and centralized monitoring will be prepared for both current and forthcoming CMMC requirements.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Conclusion</strong></h3>



<p class="wp-block-paragraph">The CMMC framework’s evolution reflects the DoD&#8217;s/DoW’s shift toward more innovative, scalable, and transparent cybersecurity oversight.</p>



<ul class="wp-block-list">
<li><em><strong>CMMC 1.0</strong> introduced the vision of structured maturity but proved too rigid and resource-intensive.</em></li>



<li><em><strong>CMMC 2.0</strong> refined that vision, simplifying levels, removing unnecessary maturity layers, and aligning with trusted federal standards.</em></li>



<li><em><strong>CMMC 3.0</strong> continues the evolution, focusing on automation, continuous monitoring, and modernized controls to keep pace with emerging threats.</em></li>
</ul>



<p class="wp-block-paragraph">For defense contractors, this evolution signals progress not just in compliance but also in operational resilience. Organizations leveraging Microsoft 365 and Azure already have the core tools to meet and maintain compliance through configuration, automation, and governance.</p>



<p class="wp-block-paragraph">CMMC is no longer just a certification framework; it is a living model of cyber maturity. Adapting to its evolution ensures not only contract eligibility but also enduring trust, operational security, and alignment with national defense objectives.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Note</strong></h3>



<p class="wp-block-paragraph">As of December 2025, the Department of Defense (DoD)/Department of War (DoW) has <strong>not formally released or announced an official version labeled “CMMC 3.0.”</strong> The current, legally recognized framework remains <strong>CMMC 2.0</strong>, codified in the final rule published under <strong>Titles 48</strong> and <strong>32 CFR</strong> on <strong>November 10, 2025</strong>. This rulemaking establishes the Cybersecurity Maturity Model Certification program as a mandatory requirement for specific defense contracts and begins a <strong>phased implementation period extending through November 2028</strong>.</p>



<p class="wp-block-paragraph">While the DoD/DoW continues to evaluate updates to align future revisions of CMMC with <strong>NIST SP 800-171 Revision 3 and SP 800-172</strong>, there is <strong>no official release date, draft, or publication</strong> for any “<strong>CMMC 3.0</strong>” standard. References to CMMC 3.0 in public discussions reflect anticipated future modernization efforts, such as enhanced automation, continuous compliance monitoring, and improved control clarity. <strong>Still, these have not yet been formally adopted or implemented.</strong></p>



<p class="wp-block-paragraph">Until further notice, <strong>CMMC 2.0 remains the authoritative version</strong>, and all contractors should prepare for compliance with the requirements defined in the November 2025 final rule and the corresponding DFARS clauses.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://helloitsliam.com/2025/12/17/comparing-cmmc-1-0-2-0-and-3-0/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46662</post-id>	</item>
	</channel>
</rss>