The ADDS project gave me a working on premises Active Directory environment. Two Domain Controllers, Group Policy, user lifecycle management, shared storage and a Hyper-V home lab all running on emeka.cloud. That was the foundation. This project is what comes next.
Most organisations do not run purely on premises or purely in the cloud. They run both, connected through hybrid identity. A user's Active Directory account on premises is the same identity they use to sign into Microsoft 365, access their emails, join a Teams call and open a SharePoint document. Building that connection myself, understanding how it works under the hood and documenting it is exactly what this project is about.
There is also a bigger picture I am working toward. When I complete the MID Server project, I want my on premises Active Directory environment, my Microsoft 365 cloud environment and my AWS EC2 infrastructure all feeding into a single ServiceNow CMDB. That is a complete ITOM picture built entirely from scratch in a home lab. This project is the middle piece that makes it possible.
This project is more complex than the ADDS project and deliberately so. Starting from a verified Microsoft 365 tenant and a free Azure account, I extended the on premises emeka.cloud Active Directory environment into Microsoft Entra ID using Microsoft Entra Connect. From there the project covers cloud identity management, MFA and Conditional Access, Windows Hello for Business, Exchange Online email administration, Windows deployment using MDT and ADK, Microsoft 365 Apps deployment using the Office Deployment Tool, Intune device management across Windows, macOS and iOS, LAPS for Entra ID, Windows kiosk mode, update rings, app protection policies, server management using Windows Admin Centre and Azure Arc, Teams and SharePoint administration and Microsoft 365 security and compliance.
Every section is built hands on and documented as I go. Nothing is pre-configured or templated. Same approach as the ADDS project.
Hybrid Identity and Azure AD Connect Syncing on premises Active Directory users to Microsoft Entra ID using Microsoft Entra Connect (formerly Azure AD Connect). One identity working both on premises and in the cloud.
Microsoft Entra ID Managing cloud identities, understanding the difference between cloud-only and synced accounts, assigning licenses, and managing access from the Entra ID portal.
MFA, Conditional Access and Windows Hello for Business Enforcing Multi Factor Authentication, building Conditional Access policies that control how and where users sign in, and configuring Windows Hello for Business for passwordless authentication.
Exchange Online Full cloud email administration. Mailbox management, shared mailboxes, distribution groups and email flow. Email fully migrated from Zoho to Microsoft Exchange Online as part of this project.
Windows Deployment with MDT, ADK and Office Deployment Tool Building an automated Windows deployment pipeline using Microsoft Deployment Toolkit and Windows Assessment and Deployment Kit. Task sequences, boot images and network based deployment. Microsoft 365 Apps deployed using the Office Deployment Tool and Office Customisation Tool.
Microsoft Intune and Endpoint Management Enrolling and managing Windows, macOS and iOS devices from a single Intune console. Compliance policies, configuration profiles, app protection policies, update rings, Windows kiosk mode, LAPS for Entra ID and device actions across multiple device types and operating systems.
Windows Admin Centre Browser-based management of on-premises Domain Controllers and Hyper-V hosts from a single modern interface without using multiple MMC consoles.
Azure Arc Onboarding on-premises servers to Azure for cloud-based monitoring, policy enforcement and security assessment without moving them to the cloud.
Teams and SharePoint Administration Creating and managing department Teams and SharePoint sites. Permissions tied to the security groups built in the ADDS project, so access management stays consistent across on-premises and cloud.
Microsoft 365 Security and Compliance Microsoft Secure Score, audit logging, usage reporting and security posture management across the entire Microsoft 365 environment.
MDT vs Intune: Traditional vs Modern Deployment Demonstrating both traditional on-premises Windows deployment using MDT and modern cloud-based device management using Intune. Most organisations are somewhere between the two during their transition to modern management. Understanding both is what makes the difference in a real IT support role.
Microsoft 365 admin centre for the emeka.cloud tenant. Microsoft 365 Business Premium subscription with Exchange Online fully configured and emeka.cloud set as the primary domain.
Microsoft Entra ID overview for the emeka.cloud tenant. Entra ID sits at the centre of this project by connecting on-premises Active Directory through Azure AD Connect, securing access through MFA and Conditional Access and managing identities across both Microsoft 365 and Azure.
Azure subscription activated under emeka@emeka.cloud — the same account used for Microsoft 365 and Entra ID. Free account with $200 credit providing access to Azure services, including Entra ID, Azure AD Connect configuration and Azure Arc for on-premises server management.
Before building anything, I needed a clear picture of the full environment. This project does not replace anything built in the ADDS project. Everything on premises stays exactly as it was. This project layers cloud identity, cloud administration and modern device management on top of that existing foundation.
Microsoft 365 Business Premium Monthly rolling subscription for 2 users. Includes Exchange Online, Teams, SharePoint, OneDrive and the Microsoft 365 admin centre. Email has been fully migrated from Zoho to Microsoft Exchange Online as part of this project. emeka.cloud is the primary domain, and all users have @emeka.cloud addresses.
Microsoft Azure Free account activated under emeka@emeka.cloud with $200 credit. Entra ID is included permanently under the free tier. The same account connects Microsoft 365, Azure and Entra ID under one identity; no switching between accounts, no separate tenants.
emeka.cloud Custom Domain Verified in Microsoft 365 admin centre as the primary custom domain. Used across Microsoft 365, Entra ID and Azure under the same tenant. SPF record updated in Namecheap to cover Microsoft Exchange Online and sends on behalf of emeka.cloud without conflicting.
ADCON-MID Dedicated Windows Server 2022 VM on the same Hyper-V host as DC1. 2 vCPUs, 4GB RAM, 50GB storage. Domain joined to emeka.cloud. This single VM hosts multiple roles, including Azure AD Connect for hybrid identity sync, MDT and ADK for Windows deployment, and the ServiceNow MID Server in the next project. Kept on the same host as DC1, so it stays available whenever the host is running.
Windows ADK and Windows PE Add-on Windows Assessment and Deployment Kit installed on ADCON-MID. Provides the deployment engine, Windows PE boot environment and the imaging tools MDT depends on. Free download from Microsoft. ADK installed before MDT because MDT cannot function without it.
Microsoft Deployment Toolkit MDT installed on ADCON-MID alongside ADK. Provides the automated deployment framework, including deployment shares, task sequences and network-based Windows deployment. Free tool from Microsoft used alongside ADK to build a traditional Windows deployment pipeline.
Office Deployment Tool Free Microsoft tool for deploying and customising Microsoft 365 Apps. Used alongside the Office Customisation Tool to configure exactly which apps get installed, which features are included and how updates are managed. Installed and configured on ADCON-MID as part of the deployment pipeline.
Existing On Premises Environment DC1 and DC2 running Windows Server 2022 on separate Hyper-V hosts. DELL-LAPTOP running Windows 11 and HP-PAVILION running Windows 10 on bare metal. All domain joined to emeka.cloud. Three on-premises users ready to sync to Entra ID via Azure AD Connect.
In an enterprise environment, each of these roles would typically run on a dedicated server. Azure AD Connect on its own VM, MDT on its own deployment server. For a home lab, that approach would mean creating and managing several additional VMs, which adds unnecessary complexity without adding meaningful learning.
Running multiple roles on one dedicated VM is a conscious decision based on the scale of the environment. The machine is not a workstation, and it is not a Domain Controller. It is a dedicated utility VM that exists purely to run background services and tools. That distinction matters and is worth understanding that it is the same thinking that drives server consolidation decisions in real organisations.
The OU structure, security groups, user accounts and Group Policy objects all remain on premises exactly as documented in the ADDS project. Azure AD Connect will sync those identities to Entra ID. Intune will manage the same physical devices that were domain-joined and GPO-managed in the ADDS project. The security groups from ADDS will set permissions in SharePoint and Teams. This is one environment built in two phases: on-premises first, cloud second.
ADCON-MID, A dedicated Windows server VM domain joined to emeka.cloud on the same Hyper-V host as DC1. Hosts Azure AD Connect, MDT and ADK and will host the ServiceNow MID Server in the next project
ADCON-MID moved into the Servers OU in Active Directory Users and Computers. Separated from workstations deliberately as servers and workstations have different management requirements and keeping them in separate OUs means Group Policy can be targeted correctly at each.
Microsoft Deployment Toolkit Deployment Workbench open on ADCON-MID
This is the section where the ADDS project and this project actually meet. Everything I built on premises including the Domain Controllers, the OUs, the user accounts which existed in isolation up to this point. Microsoft 365 was set up but had no idea my on premises Active Directory existed. Microsoft Entra Connect is what bridges that gap.
Once the sync ran, my on premises users existed in two places at once. They are still in Active Directory on premises, managed the same way they always were. But now they also exist in Entra ID in the cloud. One identity, two locations. That is hybrid identity and that is what most organisations actually run today.
Microsoft Entra Connect Get Started page showing two sync options: Cloud Sync and Connect Sync. Connect Sync selected deliberately. Cloud Sync is a newer lightweight approach designed for simpler environments but has limitations around which scenarios it supports. Connect Sync is the full installation that supports all hybrid identity scenarios including Hybrid Azure AD Join, password writeback and granular OU filtering. This is what enterprise environments use and what this project needed
The wizard gave me two options straight away: Express or Customise. Express would have synced everything in my directory automatically using Microsoft defaults. That sounds convenient but the problem is it would have pushed Domain Controllers, Builtin accounts and system containers into Entra ID. These are objects that have no business being in the cloud.
I chose Customise because I wanted to control exactly what gets synced. That meant selecting specific OUs, choosing the authentication method deliberately and understanding every decision I was making rather than clicking through a wizard and hoping for the best.
Microsoft Entra connect Sync wizard showing the 2 setup paths: Customize and Express
One of the most important decisions in the whole setup is how users prove who they are when signing into Microsoft 365. There were three main options — Password Hash Sync, Pass-through Authentication and Federation with AD FS.
I chose Password Hash Sync. It syncs a hash of the on premises password up to Entra ID so users sign into Microsoft 365 with the same credentials they already use on their domain joined machines. The reason I picked this over the others is resilience. Pass-through Authentication and AD FS both need the on premises environment to be available every time a user signs into the cloud. If my DC goes down, cloud sign in breaks too. With Password Hash Sync the hash is stored in Entra ID, and cloud authentication works independently of whatever is happening on premises.
I also enabled Single Sign-On. This means a user already logged into DELL-LAPTOP does not get asked for their password again when they open Teams or Outlook. The machine's existing Windows session is used to authenticate them automatically. That is the experience enterprise users expect and it is how it should work.
User Sign-In screen showing Password Hash Synchronization selected and Single Sign-On enabled. I chose Password Hash Sync over Pass-through Authentication and AD FS because it does not create a dependency on my on premises environment being available for every cloud sign in. Single Sign-On means users already logged into a domain joined machine authenticate to Microsoft 365 automatically without being prompted.
The next step was pointing Entra Connect at my on premises emeka.cloud forest. When I clicked Add Directory it asked for domain administrator credentials. What happens behind the scenes is Entra Connect uses those credentials once to create a dedicated synchronisation service account in Active Directory, a service account with only the permissions it needs to read the directory and run the sync. My administrator credentials are not stored after that. Future syncs run under that dedicated service account.
That is least privilege applied correctly. A specific account for a specific job with nothing extra.
Active Directory forest asking for a service account to sync with
emeka.cloud Active Directory forest successfully added as a configured directory, the green tick confirms Entra Connect can communicate with DC1 and has the right permissions. A dedicated sync service account was created automatically in my on premises AD during this step. All future sync operations run under that account rather than the domain administrator credentials.
The OU filtering screen was the most important part of the whole setup. By default every OU and container in the domain is selected, which means if I had just clicked Next without thinking, Domain Controllers, Builtin accounts, system objects and internal containers would all end up in Entra ID.
I went through the list deliberately and unticked everything that should never go to the cloud.
What I kept:
Departments: my three on premises users live here across the HR, IT and Operations OUs
Workstations: DELL-LAPTOP and HP-PAVILION
Servers: ADCON-MID
Disabled Accounts: worth keeping for visibility and audit purposes
This is exactly why I chose Customise over Express. Express would have synced everything. Customise let me be deliberate about what ends up in the cloud.
Domain and OU Filtering showing only the OUs that need to be in the cloud are selected. Domain Controllers, Builtin, System and other internal containers excluded. Departments, Workstations, Servers and Disabled Accounts included. This is what Customise mode is for, keeping the Entra ID directory clean and scoped to objects that have a real reason to exist there.
On the Optional Features screen I enabled Password Writeback alongside Password Hash Sync. This one matters for Self Service Password Reset which I configure in Section 5. Without Password Writeback, if a user resets their password through the cloud SSPR portal their on premises password stays unchanged. They would end up with two different passwords for what is supposed to be one identity. Password Writeback closes that gap. Cloud password resets flow back to on premises AD automatically.
Optional features with Password writeback enabled.
Configuration complete. Microsoft Entra Connect Sync installed and running on ADCON-MID. Password Hash Sync, Single Sign-On and Password Writeback all confirmed. The initial sync started automatically as soon as installation finished. mS-DS-ConsistencyGuid is being used as the source anchor, this means even if a user's UPN changes in the future their cloud identity stays correctly linked to their on premises account.
Once the installer finished I went straight to three places to confirm everything had actually synced correctly.
Synchronization Service Manager on ADCON-MID showing all connector operations completing successfully after resolving a permission issue on the sync service account. The emeka.cloud Export operation previously showed completed-export-errors with error code 8344, meaning insufficient access rights. Delegating the correct write permissions to the MSOL sync account on the domain resolved it. Password Writeback is now fully operational, cloud password resets will write back to on premises AD automatically
Microsoft Entra ID showing all accounts in the emeka.cloud tenant after the first sync. emeka@emeka.cloud is my cloud only global admin account, created directly in Microsoft 365 and intentionally never synced from on premises. It stays as a cloud only break-glass admin account that works even if the sync breaks. emeka.iwu, tina.timothy, tina.tymokhin and james.bond all came from the on premises Active Directory, their identities started on premises and now exist in both places.
Microsoft 365 admin centre showing all synced users now visible as Active Users. emeka@emeka.cloud holds the Microsoft 365 Business Premium licence. The rest are unlicensed existing as identities in the tenant but cannot access Microsoft 365 apps until a licence is assigned. Tina Timothy gets the second licence as the primary standard user for demonstrating Microsoft 365 services throughout this project.
Syncing users was only half the picture. My domain joined machines were still completely invisible to Entra ID. They existed in on premises Active Directory but the cloud had no idea they were there. Hybrid Microsoft Entra ID Join is what fixes that.
Going back into the Microsoft Entra Connect configuration I selected Configure device options then Configure Hybrid Microsoft Entra ID join. This is different from a full Azure AD Join where a machine leaves the on premises domain entirely. Hybrid join keeps the machine in both worlds simultaneously. Still domain joined to emeka.cloud on premises, still managed by Group Policy, but now also registered in Entra ID and visible from the cloud.
Configure Hybrid Microsoft Entra ID join selected in Microsoft Entra Connect device options. This registers domain joined machines with Entra ID while keeping them joined to the on premises emeka.cloud Active Directory. The result is devices managed by Group Policy on premises and visible in Entra ID in the cloud at the same time.
The key thing Entra Connect configures during this process is the Service Connection Point. The SCP is an object written directly into my on premises Active Directory that tells domain joined machines where to find the Entra ID tenant. Without it machines have no way of automatically discovering Entra ID when they try to register. Once the SCP was written to emeka.cloud using Enterprise Admin credentials the domain joined machines could find the tenant and complete their registration.
I selected Windows 10 or later domain-joined devices only. The other option covers Windows 7 and 8.1 which require AD FS for hybrid join. This environment has no downlevel devices and no AD FS so that option was not relevant.
SCP Configuration showing the Service Connection Point being written to the emeka.cloud Active Directory forest using Enterprise Admin credentials. The SCP is the object domain joined machines look up in AD to find the Entra ID tenant when they attempt to register. Without this written to AD the hybrid join process cannot complete automatically
One thing I noticed after the configuration completed was a new computer account called AZUREADSSOACC appearing in the Computers container in Active Directory. This is created automatically by Entra Connect when Single Sign-On is enabled. It is not a real machine — it is a Kerberos decryption account that makes seamless SSO work. When a domain joined machine tries to authenticate to Microsoft 365 silently without prompting the user for credentials, it uses a Kerberos ticket. The AZUREADSSOACC account holds the Kerberos decryption key that Entra ID uses to validate that ticket. Without this account seamless SSO cannot function. It sits in the Computers container rather than any of my custom OUs because Entra Connect creates it there automatically and it should be left exactly where it is.
AZUREADSSOACC computer account created automatically in the Computers container by Microsoft Entra Connect during Single Sign-On configuration. This is not a physical machine. It is a Kerberos decryption account that enables seamless SSO. When a domain joined machine authenticates to Microsoft 365 silently it presents a Kerberos ticket which Entra ID validates using the decryption key held by this account. It lives in the Computers container because Entra Connect places it there automatically and it should not be moved
After the configuration completed I went to DELL-LAPTOP, ran gpupdate /force, restarted and then ran dsregcmd /join to trigger the registration. I ran the status check logged in as tina.timothy rather than the admin account to confirm hybrid join works for synced domain users not just administrators.
dsregcmd /status on DELL-LAPTOP confirming successful Hybrid Microsoft Entra ID join. AzureADJoined: YES and DomainJoined: YES simultaneously. The machine is managed by on premises Active Directory through Group Policy and also registered in Entra ID in the cloud. DeviceAuthStatus: SUCCESS confirms the device certificate is valid and Entra ID authentication is working. Run as tina.timothy to confirm hybrid join works for synced domain users not just the admin account."
Checking the Entra ID Devices page confirmed everything had registered correctly.
Microsoft Entra ID Devices page showing all registered devices. Dell-Laptop showing as Hybrid Microsoft Entra joined confirming the hybrid join completed successfully. ADCON-MID also showing as Hybrid joined because it is a domain joined Windows Server in the Servers OU which was included in the sync scope and registered automatically. iPhone 16 Pro Max showing as Microsoft Entra registered because signing into Microsoft 365 and Authenticator on the device triggered automatic registration. HP-PAVILION will appear once the same process is completed on that machine.
With users synced and devices registered in Entra ID the hybrid identity picture is now complete for this environment. Users that started in on premises Active Directory now exist in Entra ID. Machines that were only known to on premises AD are now visible in the cloud. The foundation is in place for everything that follows.
Once the sync ran and the hybrid join completed, Entra ID became the central identity platform for the entire environment. On premises users exist here. The cloud only admin account exists here. Devices are registered here. Every application that needs to verify who someone is goes through Entra ID. It is the single point of identity for both on premises and cloud resources.
Microsoft Entra ID All Users page showing all accounts in the emeka.cloud tenant. The On-premises sync enabled column tells the whole story, emeka@emeka.cloud shows No, confirming it is a cloud only account created directly in Microsoft 365
This is the most important distinction I had to understand in a hybrid environment.
emeka@emeka.cloud is a cloud only account. I created it directly in Microsoft 365 before any sync was configured. It exists only in Entra ID and can only be used to sign into cloud services. I deliberately keep it this way as a break-glass global admin account. If the sync ever breaks, if Entra Connect goes down, if something goes wrong with the on premises environment, this account still works and I can still get into the tenant. That is why Microsoft recommends keeping at least one cloud only global admin account in every hybrid environment, (Microsoft).
Other users are synced accounts. They started life in my on premises Active Directory and Entra Connect brought them into Entra ID. The critical thing about synced accounts is where changes must be made. If I need to update a synced user's name, department or job title I have to do it in ADUC on DC1. Not in Entra ID. The next sync cycle picks up the change and reflects it in the cloud automatically. Trying to edit those attributes directly in Entra ID does not work because most of them are greyed out.
Attribute Properties of an on-prem user
Properties of emeka@emeka.cloud in Microsoft Entra ID confirming cloud only attributes.
Synced users appear in Entra ID and Microsoft 365 automatically after the sync but they arrive unlicensed. They exist as identities but cannot access any Microsoft 365 services until a licence is assigned. With two Microsoft 365 Business Premium licences available, emeka@emeka.cloud holds one as the global admin account. The second licence goes to tina.timothy who is the primary standard user for demonstrating Microsoft 365 services throughout this project.
emeka.iwu, tina.tymokhin and james.bond sync to Entra ID and are visible for identity management but remain unlicensed. They cannot access Microsoft 365 apps but their identities are centrally managed alongside everyone else.
Microsoft 365 Business Premium licence assigned to tina.timothy@emeka.cloud. As a synced account Tina arrived in Microsoft 365 unlicensed after the Entra Connect sync. Licence assignment is done manually here or can be automated through group based licensing in Entra ID. With the licence assigned Tina now has access to Exchange Online, Teams, SharePoint and OneDrive
The security groups built during the ADDS project did not stay on premises. Entra Connect synced them to Entra ID alongside the user accounts. HR-Staff, IT-Staff and the other department security groups all appear in Entra ID Groups. This matters because those same groups will be used to control access in SharePoint and Teams later in this project. The group that gives someone access to the HR shared drive on premises is the same group that gives them access to the HR SharePoint site in the cloud. One group, consistent access control across both environments.
Microsoft Entra ID Groups page showing all groups including security groups synced from the on premises Active Directory.
Having user identities in the cloud is only valuable if those identities are properly protected. A username and password alone is not enough. I already knew this before this project as every time I sign into my global admin account Microsoft asks me to confirm a code on my Authenticator app. Setting it up deliberately for other users in this project made me understand exactly how it works and why it matters.
I implemented MFA, meaning that signing in will require more than just a password. After entering the correct password a user is asked to prove their identity a second way like; approving a notification on the Microsoft Authenticator app, entering a code from the app or using another registered method. Even if someone steals a password they still cannot get in without that second factor.
The way I configured MFA here is through Conditional Access rather than the older per-user MFA settings. Conditional Access is the modern recommended approach. It gives granular control over when MFA is required, for which users, on which apps and under what conditions. Per-user MFA is a blunt instrument — it is either on or off for each person. Conditional Access is a policy engine that evaluates multiple signals before making an access decision.
Authentication Methods Policies page in Microsoft Entra ID showing the available MFA methods for the emeka.cloud tenant. Microsoft Authenticator and Passkey are enabled for all users. Email OTP and Software OATH tokens also enabled. SMS and Voice call disabled because they are less secure methods and not needed when Authenticator is available. These are the methods users can register and use for both MFA and Self Service Password Reset.
Conditional Access evaluates who is signing in, what they are signing into, where they are signing in from and what device they are using. Based on those signals it either allows access, blocks access or requires additional verification like MFA. It is a set of rules that can be as broad or as targeted as needed
Conditional Access Policies page showing two active policies in the emeka.cloud tenant. Both policies are enabled and enforcing. Conditional Access requires Entra ID P1 or above, which is not included in Microsoft 365 Business Premium. The Entra ID P2 free trial was activated to access this feature and demonstrate it properly.
The first policy is the most fundamental. Every sign in to any cloud app by any user in the tenant requires MFA. No exceptions for standard users. The policy targets all users, all cloud apps and grants access only when MFA has been satisfied.
Require MFA for All Users policy configuration targets all users (except the global admin), all cloud apps, granting access only when multifactor authentication is satisfied. This is the baseline security policy for the tenant. Every sign in to Microsoft 365, Azure or any connected app requires a second factor regardless of who the user is or where they are signing in from.
The second policy is a location based control. Sign in attempts from outside the United Kingdom are blocked entirely. To make this work I first created a Named Location in Conditional Access called United Kingdom. The policy then includes any location and excludes the United Kingdom, meaning anything that is not the UK gets blocked.
I deliberately excluded the Global Administrator role from this policy. This is important. If you block all users including yourself from signing in outside the UK and you happen to be abroad, you lock yourself out of the tenant with no way back in. Excluding Global Administrator from blocking policies was a safety measure.
Named Location configured in Conditional Access for the United Kingdom. Named Locations are referenced in Conditional Access policies to target or exclude specific geographic regions. The Block Sign In Outside UK policy includes any location and excludes this named location, meaning any sign in attempt originating outside the UK is blocked at the policy level.
Block Sign In Outside UK policy configuration — targeting all users with Global Administrator excluded deliberately. Including any location and excluding the United Kingdom named location. Grant set to Block access. Global Administrator excluded as a safety measure
Testing MFA as Tina Timothy
To test, I signedin in as tina.timothy@emeka.cloud for the first time after the policy was enabled. Signing into office.com as Tina triggered the MFA registration prompt immediately. She was asked to set up Microsoft Authenticator before being allowed to continue. Once set up the Authenticator app was registered and Tina was signed in with full access to her licensed Microsoft 365 apps.
I also tested with emeka.iwu@emeka.cloud. MFA kicked in for that account too even though emeka.iwu has no Microsoft 365 licence. The account authenticated successfully through MFA but landed on a limited view with no access to Microsoft 365 apps. That is exactly what I expected and it demonstrates two things at once; Conditional Access applies to all users regardless of licence status, and licences control what apps you can access after authentication.
MFA registration prompt appearing for tina.timothy@emeka.cloud on first sign in after the Conditional Access policy was enabled
tina.timothy@emeka.cloud signed into Microsoft 365 after completing MFA registration. Full app access available; Outlook, Teams, Word, Excel, PowerPoint, OneNote, OneDrive and SharePoint all accessible. MFA satisfied, Conditional Access policy passed, licence assigned.
emeka.iwu@emeka.cloud signed into Microsoft 365 after completing MFA. Limited app access compared to tina.timothy because emeka.iwu has no Microsoft 365 Business Premium licence assigned
Self Service Password Reset
SSPR lets users reset their own passwords without calling the helpdesk. In ITIL terms this reduces the volume of password reset incidents that would otherwise hit the service desk — one of the most common ticket types in any organisation. I enabled SSPR for all users in the tenant through the Password Reset properties page in Entra ID.
With Password Writeback configured during the Entra Connect setup, any password reset through SSPR automatically writes back to the on premises Active Directory. The user ends up with one consistent password across both on premises and cloud without IT needing to touch anything.
Self Service Password Reset enabled for all users in the emeka.cloud tenant. With Password Writeback configured through Microsoft Entra Connect, any password reset through the SSPR portal automatically updates the on premises Active Directory password as well
Cloud Email Administration
One of the first decisions I made when setting up this project was whether to keep Zoho handling my email or move everything to Microsoft Exchange Online. I decided to move fully to Exchange Online. It made more sense to have everything under one platform; identity, email, Teams and SharePoint all connected rather than split across two providers.
Exchange admin centre showing active mailboxes for the emeka.cloud tenant. emeka@emeka.cloud and tina.timothy@emeka.cloud both have Exchange Online mailboxes assigned automatically when their Microsoft 365 Business Premium licences were activated.
Shared Mailbox: helpdesk@emeka.cloud
A shared mailbox is one that multiple people can access and send from without needing a dedicated licence. The helpdesk@emeka.cloud shared mailbox was created so that helpdesk emails can be received and responded to centrally rather than going to one person's individual inbox.
I delegated access to emeka@emeka.cloud so the admin account can read and send on behalf of the helpdesk address. In a real organisation this would be delegated to the whole IT support team so any member can handle incoming helpdesk emails without them needing to share login credentials.
helpdesk@emeka.cloud shared mailbox created in Exchange Online with emeka@emeka.cloud delegated as a member. Shared mailboxes do not require a Microsoft 365 licence which makes them cost effective for team inboxes like IT support, finance queries or general enquiries. The delegation means the admin account can read, reply and send as helpdesk@emeka.cloud without needing a separate login.
Shared mailbox showing the left panel of emeka@emeka.cloud mailbox. This is only possible because permissions were already assigned
Distribution Group: All Staff
A distribution group is an email address that delivers to multiple recipients at once. I created allstaff@emeka.cloud as a distribution group with both emeka@emeka.cloud and tina.timothy@emeka.cloud as members. Sending an email to allstaff@emeka.cloud delivers it to both accounts simultaneously.
The distinction between a distribution group and a security group is that a Distribution groups are email only, they cannot be used for permissions, SharePoint access or Conditional Access targeting. Security groups handle access control.
All Staff distribution group created in Microsoft 365 with emeka@emeka.cloud and tina.timothy@emeka.cloud as members. Sending to allstaff@emeka.cloud delivers to both accounts simultaneously.
Internal Email Flow
Testing the internal email flow was straightforward. Signed into Outlook as emeka@emeka.cloud, composed an email to tina.timothy@emeka.cloud and sent it. Opened Outlook as tina.timothy in a separate browser window and the email had already arrived. As it was a communication between users in the same tenant, no MX records was involved, no external routing, Microsoft delivered it internally within the tenant instantly.
This matters because it confirms Exchange Online is working correctly for the most common scenario in any organisation, like colleagues emailing each other. Everything else like shared mailboxes, distribution groups and email rules builds on top of this basic internal flow working correctly.
Internal email composed and sent from emeka@emeka.cloud to tina.timothy@emeka.cloud through Outlook online. Both accounts are in the same Microsoft 365 tenant so Microsoft delivers this internally without it leaving the platform or going through MX records.
The same email received in tina.timothy@emeka.cloud's Outlook inbox confirming internal email flow is working correctly between tenant users. Delivered instantly without any external routing.
Managing Devices from the Cloud
Having users synced, identities secured and email running through Exchange Online is only part of the picture. The devices those users work on need to be managed too. Intune is what does that. It is the cloud based management layer that enforces security baselines, pushes configuration to devices and gives IT the ability to remotely manage, lock or wipe a device from a browser without ever touching it physically.
Enabling Automatic Enrolment
The first thing I configured was automatic MDM enrolment. This tells Intune to accept enrolment from licensed users in the tenant.
intune.microsoft.com → Devices → Windows → Windows enrolment → Automatic enrolment → MDM user scope set to All.
Enrolling Windows via Group Policy
For DELL-XPS-LAPTOP I used the Group Policy auto enrolment path. I had already created the Intune-Auto-Enrolment GPO in the Workstations OU but it was not working. The MDM policy was not showing in Group Policy Editor because the Windows ADMX administrative templates on DC1 were outdated and did not include the MDM policy definition.
The fix came from this Microsoft Learn article: Enrol a Windows device automatically using Group Policy. The solution was downloading the latest Windows ADMX templates, installing the package on DC1 and copying the PolicyDefinitions folder to SYSVOL. Once the templates were updated the MDM policy appeared in Group Policy Editor and the existing GPO started applying correctly.
There was one more thing blocking enrolment. DELL-XPS-LAPTOP had the domain Administrator account logged in and enrolment kept failing silently. Intune enrolment requires a licensed Entra ID user to be signed in. The domain Administrator has no Microsoft 365 licence so Intune had nothing to associate the enrolment with. Logging in as tina.timothy@emeka.cloud resolved it..
Microsoft Intune All Devices page showing three enrolled devices across three platforms. DELL-XPS-LAPTOP running Windows 11 managed as a corporate device with primary user tina.timothy@emeka.cloud. iPhone running iOS as a personal BYOD device with primary user emeka@emeka.cloud. MacBook Pro running macOS as a personal device. All three showing as Compliant and checked in recently.
Enrolling iOS
Enrolling an iPhone into Intune wasn't really straightforward. Apple requires a trust relationship between Microsoft and Apple before any iOS device can be managed through a third party MDM. That trust is established through an Apple MDM Push Certificate.
The process involves downloading a certificate signing request from Intune, taking that CSR to the Apple Push Certificates Portal, generating the push certificate there and uploading the resulting PEM file back to Intune. Without this certificate Intune cannot communicate with any Apple device at all.
I also created an iOS Device Enrolment BYOD profile using Device enrolment with Company Portal as the enrolment type, assigned to all users. BYOD means individuals use their personal device to access corporate resources (data, apps) that is being managed by the company without taking full control of the personal device.
With those two things in place I downloaded Company Portal from the App Store, signed in with emeka@emeka.cloud and completed enrolment through the app.
Apple MDM Push Certificate configured in Microsoft Intune and created through Apple Push Certificates Portal using the CSR downloaded from Intune and uploaded back to establish the trusted connection between Microsoft and Apple.
iOS Device Enrolment BYOD profile configured with Device enrolment with Company Portal as the enrolment type, assigned to all users. The user installs Company Portal and enrols voluntarily. The organisation gets compliance enforcement and visibility over work data without the device becoming fully corporate managed.
Enrolling macOS
The MacBook enrolled through the same Company Portal path. Downloaded Company Portal from the Mac App Store, signed in with emeka@emeka.cloud and followed the enrolment prompts. The MacBook appeared in Intune within minutes showing as managed and compliant.
Microsoft Entra ID All Devices page showing the complete device inventory for the emeka.cloud tenant. iPhone, DELL-XPS-LAPTOP and MacBook Pro enrolled and managed by Intune. HP-Pavilion, ADCON-MID and Dell-VM-Win11 remain Hybrid Entra joined but not yet enrolled in Intune. The MDM and Compliant columns show which devices are under active Intune management versus simply registered with Entra ID. Registration and management are two different things.
Compliance Policies
A compliance policy defines the security baseline a device must meet to be considered trusted. If a device fails compliance it can be blocked from accessing company resources through Conditional Access. I created three separate policies covering all three enrolled platforms.
Windows Compliance Policy
Thirteen settings covering the full Windows security baseline. BitLocker required, Secure Boot required, Code Integrity required, Microsoft Defender Antimalware required, real-time protection required, firewall required, antivirus and antispyware required, minimum OS version enforced and password requirements set. DELL-XPS-LAPTOP passed all thirteen on first evaluation.
The policy also includes a Machine Risk Score setting tied to Microsoft Defender for Endpoint. That setting generated a notification about a missing connector because Defender is not yet fully configured. The setting cannot evaluate until the connector exists. This gets addressed in Section 12 when Defender for Business is set up. All other settings evaluate correctly in the meantime.
Windows 10/11 Compliance Policy detail for DELL-XPS-LAPTOP showing all 13 configured settings evaluating as Compliant.
iOS Compliance Policy
Jailbreak detection, minimum OS version, passcode requirements including alphanumeric type and screen lock timeout. The initial evaluation returned a remediation failed error on the passcode requirement. The cause was that Face ID was the primary unlock method and no passcode was set alongside it. Setting a passcode resolved it immediately. A personal reminder that BYOD devices often have configuration conflicts between what the user has set up and what the compliance policy expects.
iOS compliance policy showing all settings evaluating as Compliant. Jailbroken devices blocked, minimum OS version met, all password requirements satisfied.
macOS Compliance Policy
System integrity protection required, minimum OS version set to 13.0, password and encryption requirements enforced, firewall enabled with incoming connections blocked and stealth mode enabled, Gatekeeper set to Mac App Store and identified developers only. The MacBook passed all settings on first evaluation.
macOS compliance policy showing all settings evaluating as Compliant. System integrity protection required, data storage encryption enabled, firewall active with stealth mode on, Gatekeeper restricting app sources to Mac App Store and identified developers.
Configuration Profiles
Compliance policies check whether a device meets requirements. Configuration profiles actively push settings to devices. These are the cloud equivalent of Group Policy Objects and they work on any managed device regardless of whether it is domain joined.
Edge Browser Configuration
The first profile pushed Microsoft Edge settings to DELL-XPS-LAPTOP. Homepage set to my ServiceNow developer instance, new tab page configured and startup behaviour defined. All four settings applied successfully without anyone touching the device.
I initially tried to push a corporate lock screen image and a desktop wallpaper. Both failed because the Personalization CSP that handles these settings only works on Windows Enterprise and Education editions. DELL-XPS-LAPTOP runs Windows 11 on a non-Enterprise edition.
"Edge Browser Configuration profile successfully applied to DELL-XPS-LAPTOP. All four settings confirmed as Succeeded
LAPS Configuration
Without LAPS every Windows device in an organisation typically shares the same local administrator password. If one device is compromised that password works on every other device. LAPS fixes this by giving every device a unique password that rotates automatically and is stored securely in Entra ID where only IT can retrieve it.
I created a LAPS Configuration profile under Endpoint Security with the backup directory set to Azure Active Directory, password age set to 30 days, password length 14 characters with full complexity. The policy applied successfully to DELL-XPS-LAPTOP.
DELL-XPS-LAPTOP device configuration policies showing Edge Browser Configuration, LAPS Configuration and Windows Update Ring all successfully applied. Three distinct management capabilities delivered from Intune without touching the device.
Windows Update Ring
Without update management devices update whenever Microsoft decides which can mean unexpected restarts during working hours and untested updates landing on production machines. The update ring I configured defers quality updates by 7 days and feature updates by 30 days, schedules automatic installation outside active hours between 8am and 6pm and gives users the option to pause updates temporarily. All 20 settings applied successfully.
Windows Update Ring policy showing all 20 settings successfully applied to DELL-XPS-LAPTOP. Quality updates deferred 7 days, feature updates deferred 30 days, installation scheduled outside active hours, deadline enforcement active
BitLocker Recovery Key
DELL-XPS-LAPTOP already had BitLocker enabled. I ran the BackupToAAD-BitLockerKeyProtector PowerShell command to escrow the existing recovery key to Entra ID. Within minutes the key appeared in the Intune console. If the device ever triggers a BitLocker recovery prompt the IT admin can retrieve the 48 digit key from Intune without physical access and without the user needing to do anything.
BitLocker recovery key successfully stored in Microsoft Entra ID and retrievable from the Intune console. If DELL-XPS-LAPTOP ever triggers a BitLocker recovery prompt, the recovery key can be retrieved from Intune without physical access to the device.
Every enrolled device in Intune has remote actions available directly from the console. No physical access needed.
Actions available on DELL-XPS-LAPTOP: Sync forces an immediate check-in. Collect diagnostics gathers device logs without user involvement. Secure allows remote lock and BitLocker key rotation. Locate device shows the last known location. Remote actions include restart, fresh start and Autopilot reset. Remove data covers retire and wipe.
Remote management actions available for DELL-XPS-LAPTOP from the Intune console. Sync, Collect diagnostics, Secure, Locate device, Remote actions and Remove data all available without physical access to the device. Retire removes company data while leaving personal data intact. Wipe returns the device to factory settings.
Having identities managed, devices enrolled and email running through Exchange Online meant the next thing to configure was how people actually work together. Teams handles communication and meetings. SharePoint handles file storage and document management. Every Team automatically gets a SharePoint site created for it and files shared in a Teams channel are stored in that SharePoint document library.
I created four Teams reflecting the department structure from the ADDS project. IT Department, HR Department and Operations are private teams so only members can see them and request to join. All Staff is public so anyone in the organisation can join and see announcements.
The structure mirrors the OU design from the ADDS project deliberately. The same thinking that shaped the on premises directory now shapes the cloud collaboration environment.
Microsoft Teams showing four department teams created for the emeka.cloud tenant. IT Department, HR Department and Operations configured as private teams. All Staff configured as public for company wide communication and announcements.
Creating teams is straightforward. The more interesting administrative work happens in the Teams admin centre where policies control what users can do across meetings and messaging.
I created a custom meeting policy called emeka.cloud Standard Meeting Policy. Two decisions stood out when configuring it.
Lobby bypass is set to People in my organisation only. Anyone outside the organisation joining a meeting has to wait in the lobby until an organiser admits them. This prevents uninvited guests from joining meetings directly.
Meeting recording is enabled with automatic expiration after 60 days. Recordings are stored in OneDrive and SharePoint and take up storage. Setting an expiration means old recordings are cleaned up automatically rather than accumulating indefinitely. Transcription is enabled alongside recording, useful for accessibility and for catching up on missed meetings.
Microsoft Teams Meeting Policies page showing the emeka.cloud Standard Meeting Policy created alongside the default Microsoft provided policies. The custom policy controls lobby access, recording with 60 day automatic expiration, transcription and video settings for all licensed users.
I created emeka.cloud Messaging Policy with editing and deleting of sent messages enabled, read receipts set to user controlled, priority notifications allowed for urgent messages and voice messages permitted in both chats and channels.
Read receipts as a user controlled setting rather than forced on or off is a deliberate choice. Forcing read receipts on creates pressure on users who may need time to respond. Letting individuals decide respects how different people work.
Microsoft Teams Messaging Policy showing emeka.cloud Messaging Policy created and assigned to licensed users. Editing and deleting sent messages enabled, read receipts user controlled, priority notifications allowed, voice messages permitted.
When I created the four Teams, SharePoint automatically created a corresponding site for each one. Going into the SharePoint admin centre showed all the sites that had been generated including IT Department, HR Department, Operations, All Staff, a Communication Site and a few others Microsoft creates by default.
Files uploaded in a Teams channel go into the SharePoint document library for that team. Users can access those files through Teams or directly through SharePoint. The storage is the same either way.
SharePoint admin centre Active Sites page showing sites created for the emeka.cloud tenant. Each Team has a corresponding SharePoint site generated alongside it. IT Department, HR Department, Operations and All Staff all have SharePoint sites for file storage alongside a Communication Site created by Microsoft for company wide broadcasting.
The security groups built in Active Directory during the ADDS project synced to Entra ID through Microsoft Entra Connect. Those same groups are now available to assign as SharePoint site members.
For each department site I added the corresponding on premises security group as a Site member with Edit access. HR-Staff to the HR Department site, IT-Staff to the IT Department site and Operations-Staff to the Operations site.
Each site already had a default member object, the Microsoft 365 Group created automatically when the Team was built. That default group handles Teams membership. The on premises security group sits alongside it and handles access for users whose access is managed through Active Directory. Both grant access to the site.
The group controlling access to the HR shared drive on premises is the same group controlling access to the HR SharePoint site in the cloud. One group, consistent access control across both environments without creating duplicate groups or managing permissions separately in two places.
Operations SharePoint site permissions showing both the default Operations Members Microsoft 365 Group and the Operations-Staff security group synced from on premises Active Directory as Site members with Edit access. Operations-Staff was created in Active Directory during the ADDS project, synced to Entra ID through Microsoft Entra Connect and added here.
SharePoint and OneDrive were set to Anyone by default, meaning users could share files using links that require no sign-in. Anyone with the link could access the file without identifying themselves. That is not appropriate for a corporate environment.
I changed both SharePoint and OneDrive external sharing to New and existing guests. External sharing is still possible but anyone receiving a shared file must sign in or verify their identity with a code before accessing it. Anonymous links are blocked. Guest access expires after 30 days and verification codes require reauthentication after 7 days.
External collaboration remains possible when needed but all access is authenticated, tracked and time limited
SharePoint and OneDrive external sharing settings changed from Anyone to New and existing guests. Anonymous sharing links disabled. External recipients must sign in or provide a verification code. Guest access expires after 30 days and verification codes require reauthentication after 7 days.
OneDrive is the personal file storage for each licensed user. Two settings worth configuring at the admin level are retention and storage limits.
The default retention period for a deleted user's OneDrive was 30 days. That is not long enough for an organisation to identify and recover files from a departed employee. I changed it to 180 days, giving six months to recover anything important before it is permanently deleted.
The storage limit is 1024 GB per user, the full allocation included with Microsoft 365 Business Premium. Each licensed user gets 1 TB of cloud storage. Storage limits can be reduced for specific users if needed but the default is appropriate for most business users.
OneDrive retention period set to 180 days. When a user account is deleted their OneDrive files are kept for 180 days before permanent deletion. Data from a departed employee may be needed weeks or months after their account is removed and 180 days gives enough time to recover what matters.
OneDrive storage limit showing 1024 GB per user, the full 1 TB allocation included with Microsoft 365 Business Premium. Personal files, synced documents and Teams file attachments all count toward this limit. Storage limits can be adjusted per user from the admin centre if needed.
The Conditional Access policies from Section 5 apply when users sign into Teams and SharePoint. MFA is required before access is granted. The compliance policies from Section 8 can be configured to block access from non-compliant devices. The security groups from the ADDS project control who can edit content on each SharePoint site.
Managing servers the traditional way means opening a remote desktop session, launching multiple MMC consoles and switching between them constantly. DNS Manager on one window, Active Directory Users and Computers on another, Event Viewer on a third. Windows Admin Centre replaces all of that with a single browser based interface that can manage multiple servers simultaneously without a single remote desktop session.
Azure Arc takes the story further. Once a server is onboarded to Azure Arc it appears in the Azure portal as a managed resource even though it is sitting on premises. Azure Policy, Microsoft Defender for Cloud and Azure Monitor can all reach it from the cloud without the server moving anywhere.
Together they represent how modern organisations are approaching server management, which is a browser based tooling for on premises administration and cloud visibility for governance and security posture.
I installed Windows Admin Centre on ADCON-MID. ADCON-MID was the right choice for this because it is a dedicated utility server that already hosts Entra Connect and runs continuously. Installing Windows Admin Centre on a Domain Controller directly is not recommended as it is better practice to use a separate management server.
The installation wizard offered Express or Custom setup. Express on a Windows Server configures Windows Admin Centre on port 443 with remote access automatically. I selected Express, chose to generate a self signed TLS certificate and set automatic updates. The self signed certificate generates a browser warning on first access which is expected in a home lab environment without a certificate authority.
After installation Windows Admin Centre was accessible at https://adcon-mid.emeka.cloud from any browser on the network.
Once inside Windows Admin Centre I added four connections:
DC1.emeka.cloud
DC2.emeka.cloud
ADCON-MID.emeka.cloud
ADCON-MID as the local gateway
All four connected successfully using domain administrator credentials. The connections list showed recent timestamps confirming active connectivity to each server.
Windows Admin Centre connections list on ADCON-MID showing DC1.emeka.cloud, DC2.emeka.cloud, ADCON-MID.emeka.cloud and the local gateway all connected. Recent timestamps confirming successful connectivity to each server. From this single browser based console all four servers can be managed.
Clicking into DC1.emeka.cloud opened its full management dashboard showing CPU usage, memory, network throughput and storage at a glance. From the left panel I could access Events, Services, Processes, Storage, Registry, Scheduled Tasks, Roles and Features, Updates and more, everything that would normally require separate MMC consoles or remote desktop.
The Events view showed Windows event logs without opening Event Viewer. The Services view showed all running services with the ability to start, stop and restart them from the browser. The PowerShell view opened a live PowerShell session running directly against DC1.
DC1.emeka.cloud management dashboard in Windows Admin Centre showing CPU, memory, network and storage at a glance. Full server visibility from a browser tab on ADCON-MID. The left panel shows the full range of management tools available including Events, Services, Storage, PowerShell and more.
Windows event logs for DC1.emeka.cloud viewed directly through Windows Admin Centre. Critical, warning and informational events all visible and filterable from the same interface.
Windows services running on DC1.emeka.cloud viewed and manageable through Windows Admin Centre. All Active Directory related services visible including their running status. Services can be started, stopped and restarted directly from the browser without touching the server.
Live PowerShell session running against DC1.emeka.cloud through Windows Admin Centre on ADCON-MID. Get-ADUser returning all Active Directory users showing name, UPN and enabled status. The output includes every account in the emeka.cloud directory including synced users, built in accounts and the MSOL service account created by Microsoft Entra Connect.
Windows Admin Centre handles on premises server management. Azure Arc handles cloud visibility and governance for those same on premises servers. The two complement each other, Windows Admin Centre for administration, Azure Arc for security posture and policy enforcement from the cloud.
Azure Arc works by installing the Azure Connected Machine Agent on the on premises server. Once installed the agent establishes an outbound connection to Azure and the server appears in the Azure portal as a managed resource. No inbound firewall rules, no VPN required, the agent connects outbound over HTTPS.
I onboarded DC1 to Azure Arc using a PowerShell script generated from the Azure portal. The script required a service principal with the correct permissions to create resources in Azure. Getting those permissions right took several attempts and is documented in Section 15. Once the permissions were correct the script completed in under five minutes.
Azure Arc onboarding script completing successfully on DC1. The Azure Connected Machine Agent downloaded, installed and connected DC1 to Azure under the emeka-homelab resource group in UK South. The agent retrieved a certificate from Azure and established the outbound connection. DC1 is now visible and manageable from the Azure portal as an Arc enabled server.
DC1.emeka.cloud showing as a Connected Arc enabled server in the Azure portal under the emeka-homelab resource group. FQDN DC1.emeka.cloud, IP address 192.168.10.225, operating system Windows Server 2022 Datacenter Evaluation and agent version all confirmed
Azure Arc Machines page showing DC1.emeka.cloud as a connected Arc enabled server. Status Connected confirming the Azure Connected Machine Agent is running and communicating with Azure. DC1 is now part of the Azure management plane and can have Azure Policy applied to it, appear in Microsoft Defender for Cloud and be monitored through Azure Monitor despite running on premises in the home lab.
With DC1 onboarded to Azure Arc it can now receive Azure Policy assignments, appear in Microsoft Defender for Cloud security assessments and be monitored through Azure Monitor. These are cloud governance capabilities being extended to an on premises server without moving it anywhere.
In a real organisation this matters because not everything can move to the cloud immediately. Some servers stay on premises for compliance, latency or cost reasons. Azure Arc lets those servers participate in the same governance and security framework as cloud resources. One management plane covering both environments.
DC2 and ADCON-MID can be onboarded through the same process when needed. The same script with updated server names handles additional machines.
After building the environment, I also needed to secure it, which requires a different set of tools. Microsoft 365 includes a security measurement framework, audit logging, usage reporting and a unified compliance portal that together give an administrator visibility into what is happening across the entire tenant. Section 11 covers all of that.
Secure Score is a continuous measurement of the security posture of a Microsoft 365 tenant. Every recommended security action has a point value and completing it increases the score. The score does not measure breraches, rather it measures how many of the available security controls that are configured.
When I first opened Secure Score the tenant was sitting at 35.9%, 98 out of 273 points. Microsoft showed a comparison against organisations of a similar size averaging 48.14%. That gave me a clear benchmark to work toward.
The recommended actions list had 46 items to address. Many of them require Defender for Office 365 plan configuration which is covered in Section 12. Several others require Entra ID Identity Protection which is a P2 feature. Rather than trying to action everything at once I picked two quick wins that were straightforward to complete immediately.
Microsoft Secure Score initially showing 35.9% for the emeka.cloud tenant. 98 out of 273 points achieved with 46 recommended actions still to address. The comparison against similar sized organisations averaging 48.14% gives a clear benchmark. Secure Score updates continuously as the security posture of the tenant changes. Each recommended action shows the percentage point increase completing it would provide, making it straightforward to prioritise high impact actions first.
Mailbox auditing records every significant action taken on a mailbox; emails read, messages moved or deleted, login activity, delegate actions. Without it there is no record of what happened to a mailbox if something goes wrong. I connected to Exchange Online through PowerShell and confirmed auditing was enabled at the organisation level with Set-OrganizationConfig and verified it with Get-OrganizationConfig returning AuditDisabled: False.
Exchange Online PowerShell confirming mailbox auditing enabled for the emeka.cloud tenant. Set-OrganizationConfig with AuditDisabled set to false enables audit logging across all mailboxes at the organisation level. Get-OrganizationConfig returning AuditDisabled: False confirms the setting applied.
The default Teams configuration allowed anonymous users to join meetings without signing in. I turned this off in the Teams admin centre under the Global meeting policy. Anyone joining a meeting from outside the organisation now needs to authenticate rather than joining anonymously. A small change with a meaningful security impact, uncontrolled anonymous access to internal meetings is a straightforward data exposure risk.
After completing the three actions the Secure Score updated to 40.29%. A 4.39 percentage point improvement from three configuration changes that each took a few minutes.
Microsoft Secure Score updated to 40.29% after completing two recommended actions, enabling mailbox auditing, and restricting anonymous users from Teams meetings.
Usage reports give administrators visibility into how Microsoft 365 services are actually being used. The reports cover Exchange, Teams, SharePoint, OneDrive and other services with data available for 7, 30, 90 and 180 day periods.
The overview page for the emeka.cloud tenant showed 2 active users across Exchange, OneDrive, SharePoint and Teams. 55 email activities recorded covering sent, received and read actions. 25 files stored in SharePoint and 4 in OneDrive. 1 Office activation confirmed. Teams activity was not yet showing significant data as the service had only recently been configured.
In a real organisation usage reports answer practical questions, which services are actually being used, which users are not engaging, whether the investment in a particular service is justified. They also feed into licence optimisation decisions. A user with a Business Premium licence who never uses Teams or SharePoint may be better served by a cheaper licence tier.
Microsoft 365 Usage Reports overview for the emeka.cloud tenant. 2 active users across services, 55 email activities, 25 SharePoint files, 4 OneDrive files and 1 Office activation. Usage reports are available for 7, 30, 90 and 180 day periods and give administrators visibility into service adoption across the organisation. Teams and Viva Engage showing no activity yet as both services were recently configured.
Exchange Online activity report showing email send, receive and read activity for the emeka.cloud tenant. The report breaks down activity per user and over time, making it straightforward to identify inactive mailboxes or unusual activity patterns. Exchange usage data is one of the most useful signals for licence reviews, a user with no email activity for 30 days may not need a full Exchange Online licence.
Microsoft Teams activity report for the emeka.cloud tenant. Limited activity showing as Teams was recently configured and the tenant has only two licensed users. In a larger organisation this report shows channel messages, meeting participation, calls and file sharing activity, giving administrators the data to understand Teams adoption and identify users who may need additional training or support.
The classic Microsoft compliance portal was retired in November 2024 and all compliance tooling moved to the new Microsoft Purview portal at purview.microsoft.com. The new portal brings together audit logging, data loss prevention, information protection, insider risk management and compliance manager in one place.
The compliance posture score in Purview showed 0% at this stage. No formal compliance assessments have been configured against industry regulations yet. This is expected for a home lab tenant. configuring compliance assessments against frameworks like ISO 27001 or NIST is planned as part of the Microsoft Purview section covered in Section 14.
Microsoft Purview portal home page showing the new unified compliance platform for the emeka.cloud tenant. The classic compliance portal was retired in November 2024 with all data migrated here. Purview brings together audit logging, data loss prevention, information protection, insider risk management and compliance management. The compliance posture score at 0% reflects that no formal regulatory assessments have been configured yet, but is addressed in Section 14.
Microsoft Defender for Business is included in the Business Premium subscription and I found it to be very practical as It gives visibility into what is actually happening on managed devices. Visibility into what vulnerabilities exist, what software is installed, what security configurations are missing and what threats have been detected. Setting it up was quick and it revealed a lot about DELL-XPS-LAPTOP in the first hour.
The setup wizard walked through four steps. User permissions were emeka@emeka.cloud, assigned as Security Administrator with full access to view and manage security settings, and tina.timothy@emeka.cloud assigned as Security Reader with read only visibility. Email notifications were configured for both incidents and vulnerabilities so alerts arrive by email without needing to check the portal constantly.
All three Intune enrolled devices were onboarded through the wizard. Defender for Business connects to Intune directly and pushes the onboarding configuration to enrolled devices automatically.
The simplified configuration option was selected rather than continuing to manage security settings through Intune manually. Selecting simplified configuration tells Defender for Business to create Microsoft recommended security policies automatically and apply them across all onboarded devices.
Microsoft Defender for Business setup complete. Security Administrator and Security Reader roles assigned. Email notifications configured for incidents and vulnerabilities. All three Intune enrolled devices onboarded
Two security policies were created automatically and pushed to DELL-XPS-LAPTOP through Intune:
The NGP Windows default policy covers next generation antivirus protection. 27 settings applied across real time monitoring, cloud protection, behaviour monitoring, network protection, email scanning, script scanning, PUA blocking, automatic sample submission and scheduled scanning. All 27 showing as succeeded.
The Firewall Windows default policy covers Windows Firewall across domain, private and public network profiles. 9 settings applied covering inbound and outbound default actions and firewall enablement across all three network types. All 9 showing as succeeded.
36 security configuration settings applied to DELL-XPS-LAPTOP without touching the device.
Next Generation Protection default policy showing 27 security settings applied successfully to DELL-XPS-LAPTOP
Windows Firewall default policy showing 9 settings applied successfully across domain, private and public network profiles. Inbound connections blocked by default across all profiles
Device configuration view for DELL-XPS-LAPTOP showing all 36 security settings applied successfully. 9 Firewall settings and 27 Next Generation Protection settings all showing Success.
Once devices onboarded the Defender dashboard updated with real data. Secure Score jumped to 42.45% reflecting the additional security controls activated by Defender. Device compliance showing 0% noncompliant confirmed all enrolled devices were meeting the compliance baseline. No active incidents and no active malware detected on initial assessment.
Microsoft Defender for Business dashboard showing the security overview for the emeka.cloud tenant after onboarding. Secure Score at 42.45% reflecting the additional controls activated by Defender.
DELL-XPS-LAPTOP appeared in the device inventory within 30 minutes of onboarding. Status Active, primary user Tina Timothy, Windows 11 64-bit build 26200.9168, onboarded through Intune. Within the first hour Defender had completed a full assessment of the device.
Microsoft Defender for Business device inventory showing DELL-XPS-LAPTOP onboarded and active. Status Active, onboarding method Intune, Windows 11 25H2, domain emeka.cloud, primary user Tina Timothy. No known risks on initial detection. The device appeared in the inventory within 30 minutes of the Defender and Intune connector being established
DELL-XPS-LAPTOP device detail in Defender for Business showing full device information. Private and public IP addresses recorded, Defender engine version and Sense client version current, first seen and last seen timestamps confirming successful check-in
The vulnerabilities tab showed 966 items on DELL-XPS-LAPTOP. Multiple Critical severity CVEs scoring 9.8 and 9.6 across Windows 11, Google Chrome and Microsoft Edge. The root cause of the majority was straightforward — the September 2026 Security Updates had not been installed on the device.
966 vulnerabilities detected on DELL-XPS-LAPTOP by Microsoft Defender for Business. Multiple Critical severity CVEs scoring 9.8 across Windows 11 and Google Chrome. Defender identifies each vulnerability by CVE reference, severity score, affected software and first detection date.
The software inventory tab showed every application installed on DELL-XPS-LAPTOP with version numbers and CVE counts. Windows 11 carrying 625 known vulnerabilities. Chrome at 288. VS Code at 39. Edge at 49. Dell SupportAssist, Dell Update, PuTTY, Oracle VirtualBox, VMware Player, GitHub Desktop, Zoom, Loom and more all identified automatically.
Software inventory gives administrators complete visibility into what is installed across managed devices without logging into each machine or running manual discovery.
software inventory for DELL-XPS-LAPTOP discovered automatically by Microsoft Defender for Business. Every application identified with version number and CVE count. Windows 11 carrying 625 vulnerabilities, Chrome 288, VS Code 39, Edge 49. Dell SupportAssist, PuTTY, Oracle VirtualBox, VMware Player, GitHub Desktop and Zoom all visible
The missing KBs tab identified two outstanding patches. The September 2026 Security Updates KB5124008 covering 624 vulnerabilities on Windows 11 and the August 2026 Hotpatch KB5129241 covering 1 additional vulnerability. A single missing monthly update patch was responsible for the vast majority of the vulnerability count.
Missing security updates for DELL-XPS-LAPTOP showing September 2026 Security Updates KB5124008 covering 624 vulnerabilities and August 2026 Hotpatch KB5129241. One missing monthly patch accounts for the majority of the 966 vulnerability count. The Windows Update Ring configured in Intune in Section 8 defers quality updates by 7 days before deploying them automatically
The vulnerability management recommendations page showed 65 active items across the tenant. Software update recommendations for Windows 11, Chrome, Edge, VS Code, Dell SupportAssist and PuTTY. Configuration change recommendations covering Attack Surface Reduction rules, LDAP signing and encryption, LSA protection, Credential Guard, UAC settings, controlled folder access and firewall notification settings.
Each recommendation shows the number of affected devices, the category of change required, the relevant security benchmarks recommending it and the related threats it mitigates.
Microsoft Defender for Business security recommendations showing 65 active items. Software updates and configuration changes across operating system, browser, attack surface reduction, network, firewall and security controls categories. Each recommendation is prioritised and linked to the threats it mitigates, the security benchmarks that require it and the number of devices affected. A complete security hardening roadmap generated automatically from what Defender found on the enrolled device.
Clicking into the Windows 11 update recommendation showed the full breakdown containing 625 vulnerabilities, 24 Critical, 477 High and 124 Medium severity CVEs, with a verified remote code execution exploit publicly available for at least one of them. A remediation request was created directly from the recommendation with a due date of 7 days, High priority and assigned to the admin account.
Windows 11 update recommendation showing 625 vulnerabilities resolved by a single patch. 24 Critical, 477 High and 124 Medium severity CVEs. A verified remote code execution exploit is publicly available making this a high priority remediation. The entire vulnerability count traced back to one missing monthly security update.
Remediation request created for the Windows 11 update recommendation. Due date set 7 days out, priority High, notes referencing the September 2026 Security Updates and the Intune Update Ring that will deploy the patch automatically. Defender does not push the patch directly, rather it creates a tracked request that gives the security team visibility over what needs doing and when.
Remediation queue showing the Windows 11 update request active with High priority, due 26 September 2026, 0 of 1 devices remediated, assigned to emeka@emeka.cloud. Once the September 2026 Security Updates are installed through the Intune Windows Update Ring the remediated count updates automatically. The queue gives administrators a single place to track all outstanding security remediation work from identification through to completion.
Defender for Business and Intune work as a pair in this environment. Intune manages device configuration and compliance. Defender provides security visibility and vulnerability management. The Windows compliance policy configured in Section 8 included a Machine Risk Score setting that could not evaluate at the time because the Defender connector was not yet configured. With Defender now active and the Intune connector enabled that setting can evaluate correctly, a device with a High or Critical risk score in Defender would be marked non-compliant in Intune and blocked from accessing company resources through Conditional Access. The full security enforcement loop is now complete.
Microsoft 365 Copilot came included with the Business Premium subscription and I wanted to document it properly rather than just mention it exists. Every organisation with Microsoft 365 is either already deploying Copilot, planning to or actively deciding whether to. Knowing how to administer it and what it actually does in practice is becoming an expected part of the Microsoft 365 skill set.
The first thing I understood when setting it up is that Copilot access is licence driven. Both emeka@emeka.cloud and tina.timothy@emeka.cloud have access because both have Business Premium with Copilot licences assigned. Managing who gets Copilot means managing licence assignment through the Microsoft 365 admin centre, the same process used for every other service in the tenant. There is no separate Copilot permissions panel.
The Copilot section in the admin centre gives visibility into configuration, consumption and adoption across the tenant. When I opened it the top actions flagged three things. Copilot was not pinned to the Windows taskbar making it harder for users to find. Enterprise websites had not been connected so Copilot could only draw on Microsoft 365 data rather than wider organisational knowledge. No Viva Engage community had been set up to support adoption.
In a real organisation the IT admin would work through these actions as part of a Copilot rollout. Pinning Copilot to the taskbar ensures users see it without needing to search for it. Connecting the company intranet or external knowledge bases extends what Copilot can reference when answering questions. The adoption dashboard shows which users are engaging with Copilot and which are not, giving the admin team the data to target training and awareness where it is needed most.
Microsoft 365 Copilot admin controls showing configuration, consumption and adoption management for the emeka.cloud tenant. Top actions flagged include pinning Copilot to the Windows taskbar for user discovery, connecting enterprise websites to extend Copilot beyond Microsoft 365 data and setting up a Viva Engage community to support adoption.
I opened a blank Word document in the browser and used Copilot to draft an IT incident report for a BitLocker recovery event. I chose this scenario deliberately because it connected directly to what was built in Section 8. In that section BitLocker recovery keys were escrowed to Entra ID and made retrievable from the Intune console. If a user ever triggers BitLocker recovery the IT team retrieves the key from Intune and the incident gets documented. Copilot handles the documentation side of that workflow.
The output covered incident summary, impact, actions taken, preliminary root cause and follow-up actions, a complete structured report from a single prompt. In a real service desk environment this reduces the time spent writing routine incident documentation while ensuring the right structure and detail is captured every time.
Microsoft 365 Copilot generating a structured IT incident report for a BitLocker recovery event inside Word. Incident summary, impact assessment, actions taken, root cause and follow-up actions all produced from a single prompt. The scenario connects directly to Section 8 where BitLocker recovery keys were escrowed to Entra ID and retrievable from Intune. Copilot handles the documentation. Intune provides the recovery key. Two capabilities working in the same operational workflow.
I asked Copilot inside Teams to draft an All Staff meeting invitation for 10am on the first Tuesday of October 2026. Copilot identified that date as 6 October 2026 correctly and produced three complete options covering different tones including professional, brief and direct, and friendly, each with a subject line, body and sign off ready to send without editing.
In a real organisation this is how Teams Copilot gets used most frequently. Drafting messages, summarising meeting notes, catching up on a channel after time away. The point is that Copilot is embedded inside Teams rather than being a separate application the user has to switch to. It is available where people already spend their working day
In the Business Premium tier Copilot operates as a generative assistant rather than a fully agentic one. Taking direct actions like booking meetings, sending emails or creating tasks requires either a higher tier Copilot licence with Copilot Actions enabled or a custom agent built in Microsoft Copilot Studio with specific action permissions granted.
Microsoft 365 Copilot generating a structured IT incident report for a BitLocker recovery event inside Word. Incident summary, impact assessment, actions taken, root cause and follow-up actions all produced from a single prompt. The scenario connects directly to Section 8 where BitLocker recovery keys were escrowed to Entra ID and retrievable from Intune. Copilot handles the documentation. Intune provides the recovery key. Two capabilities working in the same operational workflow.
Most of the work in this project up to this point has been about identity, devices and collaboration. Section 14 shifts focus to the data itself — how it is classified, what protections apply to it and how the organisation knows whether it is handling sensitive information correctly. Microsoft Purview is the platform that handles all of that. It was accessible through the Business Premium subscription and I wanted to demonstrate the core information protection capabilities rather than just acknowledge they exist.
The first thing I configured was sensitivity labels. Labels are the classification layer, they tell users and systems what kind of information a document or email contains and what protections should apply to it. Without labels there is no consistent way to distinguish between a public press release and a confidential HR document stored in the same SharePoint library.
I created three labels reflecting a realistic classification scheme for a small organisation:
Public: content approved for external distribution. No additional protections. Green colour in the user interface.
Internal: the default label for general business content. Applies to most day to day documents and emails. Yellow colour.
Confidential: sensitive content restricted to authorised personnel. Red colour with a watermark marking every document clearly. Full encryption enforcement requires Microsoft Purview Information Protection Plan 1 which is above the current subscription, the label structure and visual classification are in place and encryption can be added when the licence is upgraded.
The labels were created in priority order. Public at 0, Internal at 1, Confidential at 2. Priority matters because it determines which direction counts as a downgrade. Moving from Confidential to Internal is a downgrade and triggers a justification requirement. Moving from Internal to Confidential is an upgrade and happens without restriction.
Microsoft 365 Copilot generating a structured IT incident report for a BitLocker recovery event inside Word. Incident summary, impact assessment, actions taken, root cause and follow-up actions all produced from a single prompt. The scenario connects directly to Section 8 where BitLocker recovery keys were escrowed to Entra ID and retrievable from Intune. Copilot handles the documentation. Intune provides the recovery key. Two capabilities working in the same operational workflow.
Creating labels is not enough as they need to be published before users can see them. I created the emeka.cloud Sensitivity Label Policy and configured it with several important settings.
Internal was set as the default label for documents, emails and meetings. Every new document, every email composed and every meeting created starts with the Internal label applied automatically. Users can change it but they cannot leave content unlabelled.
Labels were made mandatory before saving documents or sending emails. A user cannot save a Word document without selecting a label and cannot send an email without one applied. This builds classification as a habit from the start rather than something people do occasionally when they remember.
Justification was required to remove a label or replace it with a lower priority one. Downgrading a Confidential document to Internal requires the user to explain why. That justification is recorded in the audit log and available for review through Activity Explorer.
Label inheritance was enabled for emails. If a user attaches a Confidential document to an Internal email the email label automatically upgrades to Confidential. Sensitive content cannot slip out under a lower classification because of how it was attached.
Sensitivity labels classify content. A DLP policy enforces what can be done with it. I created a policy called Protect Confidential Content covering Exchange email, SharePoint, OneDrive, Teams and Microsoft 365 Copilot.
The rule inside the policy, Block External Sharing of Confidential Content, detects when content matching the conditions is shared with people outside the emeka.cloud organisation. When triggered it blocks access, shows the user a policy tip explaining why the action was blocked and sends a high severity alert to the administrator.
One limitation encountered during configuration, the sensitivity label condition in DLP rules requires Microsoft Purview Information Protection Plan 1. On the current Business Premium licence the sensitivity label condition was not available in the DLP rule builder. The policy was created with the available conditions and the sensitivity label integration can be added when the licence is upgraded. The architecture is correct, label and DLP policy working together is the right approach and the framework is in place.
Microsoft Purview Data Loss Prevention policies page showing the Protect Confidential Content policy active and syncing across the emeka.cloud tenant. Policy covers Exchange email, SharePoint, OneDrive, Teams
The Compliance Manager page showed a posture score of 63%, 1702 out of 2674 points achieved. The majority of those points are Microsoft managed controls that Microsoft configures and maintains automatically as part of the service infrastructure. The 80 improvement actions not yet completed represent what the administrator can configure to improve the score further.
The improvement actions cover information governance, access control, device management, threat protection, audit configuration, insider risk management and AI security. Each action shows its point value and links to implementation guidance. Compliance Manager turns compliance from an abstract concept into a prioritised list of specific things to configure.
The score breakdown showed 0% across most categories including Govern information, Control access, Manage devices and Protect information, all of which reflect configurations that require higher licence tiers or additional setup beyond what Business Premium provides. The 63% overall score is driven almost entirely by the Microsoft managed controls rather than administrator actions. Addressing the improvement actions would require Microsoft Purview compliance add-ons or an E3 or E5 licence.
Microsoft Purview Compliance Manager showing a compliance posture score of 63% for the emeka.cloud tenant. 1702 out of 2674 points achieved
The identity and device controls configured across Sections 3 through 12 determine who can access Microsoft 365 resources and from which devices. Purview adds the data layer, controlling what happens to the content those users create and share. Sensitivity labels travel with documents wherever they go. A Confidential document emailed to an external recipient is blocked by the DLP policy even if the user has a fully compliant device and valid MFA session. The protection follows the data rather than relying solely on access controls at the perimeter.
Everything built in Section 8, including compliance policies, configuration profiles, update rings, LAPS, they all assumes a device is already enrolled in Intune before any of that applies. Autopilot is how devices get into that managed state in the first place, without IT needing to touch them.
The traditional approach to deploying a new Windows device involves IT receiving it, imaging it, installing software, configuring settings and only then handing it to the user. That process takes hours per device and does not scale. Autopilot replaces it. The device ships directly from the supplier to the user. The user turns it on, connects to WiFi and signs in with their Microsoft 365 credentials. Intune handles the rest automatically.
For this demonstration I used an old HP Pavilion that I wiped and reset to factory state. What happened after the reset is what this section documents.
Before Autopilot can do anything the device needs to be registered with the tenant. Registration involves capturing the hardware hash, which is a unique fingerprint of the device's hardware identifiers, and uploading it to Intune. Microsoft stores that hash against the tenant so when the device connects to the internet during first boot, Microsoft recognises it and knows which organisation it belongs to.
In a real enterprise deployment this registration happens at the manufacturer level. Dell, HP and Lenovo all offer services where every device ordered is registered with your Autopilot tenant before it ships. The hash never needs to be extracted manually. For this home lab demonstration I extracted it manually using PowerShell.
On the HP before the reset I ran the Get-WindowsAutopilotInfo script to capture the hardware hash and export it to a CSV file. Getting the hash uploaded to Intune took several attempts, the CSV file encoding caused import errors in the Intune portal and the Online upload method closed PowerShell before confirming completion. The fix was using the WindowsAutoPilotIntune PowerShell module with Microsoft Graph authentication to import the CSV directly rather than through the portal. Once connected the import completed successfully with serial number 5CD8110SQ3 confirmed and an import ID assigned.
This troubleshooting is documented in Section 16. The manual hash extraction process is not how it works in production — it exists here purely for demonstration purposes.
Windows Autopilot hardware hash successfully imported to the emeka.cloud Intune tenant using the WindowsAutoPilotIntune PowerShell module and Microsoft Graph. Import ID assigned, serial number 5CD******* confirmed and upload completed. The HP is now registered with Microsoft's Autopilot service and will be recognised by the emeka.cloud tenant when it connects to the internet during the out of box experience.
Windows Autopilot devices page in Microsoft Intune showing the HP Pavilion Laptop 15-cc5xx registered with serial number 5C********. Profile showing as Assigned confirming the deployment profile has been applied to this device. The device is now known to the emeka.cloud tenant and will receive the Autopilot configuration automatically on first boot after the reset.
The deployment profile defines what the out of box experience looks like when the device boots for the first time after registration. I created a profile called emeka.cloud Autopilot Profile with these settings:
Deployment mode set to User Driven. The user signs in with their Microsoft 365 credentials during setup rather than the device being pre-configured before delivery.
Join type set to Microsoft Entra joined. The device joins Entra ID directly as a cloud only device with no on premises domain join. This is the modern approach for devices that do not need access to on premises resources through Group Policy.
Licence terms, privacy settings and account change options all hidden to streamline the experience. The fewer screens a user has to click through the less chance of confusion or mistakes during setup.
User account type set to Standard. Users should not be local administrators on company devices. Local admin rights are managed through LAPS configured in Section 8.
Device name template set to EMEKA-%RAND:4%. Every device enrolled through this profile gets named automatically with EMEKA followed by four random characters. Consistent naming without IT manually naming each machine.
Assigned to All devices so any hardware hash uploaded to the tenant receives this profile automatically.
Windows Autopilot deployment profile review showing the complete configuration. User driven mode, Microsoft Entra joined, licence and privacy screens hidden, standard user account type and automatic device naming using EMEKA followed by 4 random characters. Assigned to All devices confirming any registered device will receive this profile during first boot.
With the hash registered and the profile assigned I reset the HP to factory state through Settings → Recovery → Reset this PC → Remove everything. The reset took a little over 30 minutes and returned the HP to the Windows out of box experience.
When it booted the setup experience did not look like a standard Windows setup. Instead of the usual consumer wizard asking for a Microsoft account or local account setup, it presented a work sign-in screen. Signing in with emeka@emeka.cloud triggered the Autopilot process. Windows contacted Microsoft, the hardware hash was recognised, the deployment profile was applied and the device configured itself automatically.
dsregcmd /status on the HP Pavilion after Windows Autopilot deployment confirming AzureADJoined: YES, DomainJoined: NO and Device Name: EMEKA-4696. The device named itself automatically using the EMEKA template from the deployment profile. TenantName confirming the device joined the emeka.cloud tenant. TpmProtected: YES and DeviceAuthStatus: SUCCESS confirming the device certificate is valid. The MDM URL confirming Intune enrolment initiated automatically. A device that went from factory reset to fully configured cloud managed endpoint without IT touching a single setting on the machine.
Microsoft Intune All Devices page showing EMEKA-4696 enrolled as a Corporate Windows device through Autopilot alongside the other managed devices. Primary user emeka@emeka.cloud. Showing Noncompliant because BitLocker and other compliance requirements have not yet been satisfied on the freshly reset machine, the compliance evaluation is working correctly and will update as the device is configured. The device name EMEKA-4696 generated automatically from the deployment profile template.
EMEKA-4696 device overview in Microsoft Intune. HP Pavilion Laptop 15-cc5xx, serial number 5CD8110SQ3 matching the Autopilot registration, Corporate ownership, primary user emeka@emeka.cloud. Six device configuration policies all succeeded confirming the Autopilot enrolled device received and applied the same Edge browser configuration, LAPS, update ring and security policies as DELL-XPS-LAPTOP. The device joined the tenant, enrolled in Intune and received its policies without any manual IT configuration.
EMEKA-4696 went from a wiped machine to a cloud managed corporate endpoint in under an hour. The device named itself, joined Entra ID, enrolled in Intune and received six configuration policies automatically. No IT engineer touched it after the reset. No imaging, no manual software installation, no manual domain join.
In a real organisation the process is even simpler because the hash extraction step is handled by the manufacturer. A new employee receives a laptop in the box, powers it on and signs in with their Microsoft 365 credentials. By the time they reach the desktop their policies are applying, their apps are installing and the device is under corporate management. The IT team configured it once in Intune and it scales to every device without additional effort.
The HP Pavilion running Windows 10 with TPM 1.2 had one limitation, BitLocker encryption could not enable automatically because BitLocker automatic enablement requires TPM 2.0. The compliance policy flagged this correctly as noncompliant. In a production environment all devices would have TPM 2.0 and Windows 11 Enterprise, resolving both the BitLocker and the Windows edition limitations encountered across Sections 8 and 15.
During the Microsoft Entra Connect installation the sign-in popup failed to load because Internet Explorer Enhanced Security Configuration was blocking the Microsoft login page. Windows Server enables this by default and it blocks external websites in the browser. The fix was adding login.microsoftonline.com and the Microsoft authentication CDN to the trusted sites list in IE. A simple fix once you know what is happening but it was not obvious at first because the error just showed a red blocked content warning without clearly explaining what to do.
Learning: Windows Server has IE Enhanced Security enabled by default. Any browser based authentication during server side application setup needs those URLs in the trusted sites list first.
Section 7 was the most frustrating part of the project. MDT boot image generation failed repeatedly with NullReferenceException errors, WIM file errors and drive mapping failures across multiple troubleshooting attempts. Downgrading from the latest ADK to version 2004, editing the Settings.xml file directly and trying both GUI and PowerShell update methods all failed to generate a working x64 boot image.
The root cause was a known compatibility issue between the current version of MDT and newer ADK releases. Microsoft has not released an MDT update to fix it and their own documentation now recommends moving to Windows Autopilot and Intune for modern device deployment. I made the decision to document what I built, the Deployment Share, Windows image import and task sequence, and move on rather than spending more time on a tool Microsoft is actively deprecating.
Section 15 demonstrates the modern replacement. Autopilot and Intune achieved in under an hour what MDT was supposed to do without any of the compatibility problems.
Learning: Always check compatibility between tools before investing significant time in troubleshooting. If Microsoft is steering away from a tool the compatibility issues are likely to get worse not better. Knowing when to move on is as important as knowing how to fix things.
The Intune auto enrolment Group Policy I created was not applying to DELL-XPS-LAPTOP. Running gpresult /r showed the MDM policy was not present at all in the applied policies list. The reason was that the Windows ADMX administrative templates on DC1 were outdated and did not include the MDM policy definition. The policy simply did not exist in Group Policy Editor.
The fix came from the Microsoft Learn article on enrolling Windows devices automatically using Group Policy. Downloading the latest Windows ADMX templates, installing them on DC1 and copying the PolicyDefinitions folder to SYSVOL made the MDM policy appear in Group Policy Editor and the existing GPO started applying correctly.
A second issue blocked enrolment even after the GPO was fixed. DELL-XPS-LAPTOP had the domain Administrator account logged in. Intune enrolment requires a licensed Entra ID user. The domain Administrator has no Microsoft 365 licence so Intune had nothing to associate the enrolment with. Logging in as tina.timothy resolved it immediately.
Learning: MDM Group Policy requires current ADMX templates on the Domain Controller. Intune enrolment requires a licensed user to be signed in, the domain Administrator account alone is not enough even with everything else configured correctly.
Onboarding DC1 to Azure Arc required three separate role assignments before the script would complete successfully. The initial Azure Connected Machine Onboarding role was not enough. Adding Azure Connected Machine Resource Administrator at the resource group level was not enough. The script kept returning error code 403 with the message that the service principal did not have permission to perform the Microsoft.HybridCompute/register/action over the subscription scope.
The fix was assigning the Contributor role at the subscription level to the ArcOnboarding service principal. Contributor was a broader permission than needed for ongoing Arc management so after DC1 was successfully onboarded the Contributor role was removed and only the two Arc specific roles were kept.
There was also an Object ID confusion, the app registration and the enterprise application for ArcOnboarding show different Object IDs. The error message references the enterprise application Object ID while the Azure portal role assignment UI surfaces the app registration. Understanding that these are two representations of the same identity but with different identifiers helped resolve the confusion.
Learning: Azure Arc onboarding requires the Microsoft.HybridCompute/register/action permission at the subscription scope not just the resource group. Role assignment propagation in Azure can take up to 10 minutes. Always wait after assigning roles before retrying a failed operation.
Using emeka.cloud as both the public website domain and the internal Active Directory domain name created a split-DNS conflict that surfaced in multiple places across the project. Domain joined machines resolved emeka.cloud to internal AD records rather than the public website. The Edge browser configuration profile set emeka.cloud as the homepage but domain joined machines could not browse to it because DC1 returned internal IP addresses for the domain.
The partial fix was adding public A records to the emeka.cloud zone in DC1's DNS Manager pointing to the Google CDN IP addresses serving the website. This allowed domain joined machines to reach the public website while internal AD name resolution continued working.
Microsoft recommends using a dedicated subdomain like corp.emeka.cloud or a separate non-routable domain for internal AD to avoid this conflict entirely. If I were building this environment again the AD domain would be corp.emeka.cloud and emeka.cloud would remain exclusively for public facing services.
Learning: Never use your public domain name as your internal Active Directory domain name. The split-DNS conflict it creates affects browser based tools, application authentication and any service that resolves the domain differently on premises versus externally.
At 11 hours remaining on the Windows Server evaluation licence on DC1 the desktop showed an activation watermark and the system threatened to shut down. Running slmgr /rearm reset the evaluation timer and gave another 180 days. The same was done on DC2.
Learning: Windows Server evaluation licences run for 180 days and can be rearmed up to three times using slmgr /rearm. In a home lab environment calendar reminders set at 150 days from installation date avoid hitting this unexpectedly. In production servers run on fully licenced copies through volume licensing or Azure hybrid benefit.
Getting the hardware hash from the HP into Intune Autopilot took far longer than expected. The Get-WindowsAutopilotInfo script exported the hash correctly but the CSV file had UTF-16 encoding with a BOM character that caused Intune to reject it with an incorrect headers error. Converting to UTF-8, adding the required optional column headers, fixing CRLF line endings and multiple portal upload attempts all failed before switching to the PowerShell module approach using Microsoft Graph.
The WindowsAutoPilotIntune module with Connect-MgGraph authentication uploaded the hash directly and successfully. The whole troubleshooting process took over an hour for what should have been a two minute task.
Learning: When uploading Autopilot hashes through the Intune portal the CSV must be UTF-8 encoded without BOM and must include all five column headers including the optional Group Tag and Assigned User columns even if those values are empty. Using the Get-WindowsAutopilotInfo script with the Online parameter or the WindowsAutoPilotIntune PowerShell module bypasses CSV formatting issues entirely.
Building a home lab and documenting it honestly is a completely different experience from following a tutorial. Tutorials show the happy path. Real environments hit compatibility issues, permission errors, licence limitations and unexpected interactions between systems that no tutorial covers.
Every error in this section represents something I now know how to diagnose and fix because I actually encountered it. The MDT compatibility issue taught me to check Microsoft's current recommendations before investing time in legacy tooling. The Azure Arc permission errors taught me how Azure RBAC propagation works in practice. The split-DNS conflict taught me a planning decision I will never make the same way again.
The project is not finished because everything worked. It is finished because everything that broke got fixed, documented and understood.
Two projects are complete. The ADDS home lab built the on premises foundation. This Microsoft 365 project extended that foundation into the cloud. What comes next is connecting everything into a single integrated environment where on premises infrastructure, cloud identity, Microsoft 365 services and ServiceNow all talk to each other.
ServiceNow Integration Project
The next project in this portfolio connects the environment built here to ServiceNow. The goal is a unified ITOM and identity integration covering everything from CMDB population to SSO to AI powered service management.
MID Server
The MID Server will be installed on ADCON-MID, connecting the on premises environment to the ServiceNow PDI. The MID Server is the bridge that makes everything else in the integration possible, without it nothing on premises can reach ServiceNow.
Active Directory Service Graph Connector
The AD Service Graph Connector will read computer and user objects from the emeka.cloud Active Directory through the MID Server and populate them as Configuration Items in the ServiceNow CMDB. DELL-XPS-LAPTOP, HP-PAVILION, EMEKA-4696, DC1, DC2 and ADCON-MID will all appear as managed CIs.
Microsoft Intune Service Graph Connector
The Intune connector will enrich those same CI records with compliance status, OS version, enrolled user and management state from Intune. One CI in ServiceNow will show both the on premises AD identity and the Intune management data together — a complete picture of each device from a single CMDB record.
AWS EC2 Integration
AWS EC2 instances will be connected to the same CMDB through the AWS Service Graph Connector, adding cloud infrastructure alongside on premises and Microsoft 365 resources. Three platforms, one CMDB.
CMDB Relationship Mapping
Once all connectors are running the focus shifts to CI relationships, service maps and dependency views. Demonstrating downstream impact analysis — what breaks if DC1 goes down, what services depend on ADCON-MID, what the blast radius of an AWS EC2 failure looks like — turns the CMDB from a list of assets into a live map of service dependencies.
Entra ID SSO with ServiceNow
SAML Single Sign-On will be configured between Microsoft Entra ID and the ServiceNow PDI. Users synced from on premises AD, authenticated through Microsoft 365 with MFA enforced by Conditional Access, will sign into ServiceNow automatically without a separate login. The Workspace Reservation Management app built on the PDI will be accessible through SSO from the default browser homepage — completing the identity chain from on premises Active Directory all the way through to a ServiceNow scoped application.
ServiceNow Email Integration via Microsoft Graph
The helpdesk@emeka.cloud shared mailbox configured in Section 6 will be connected to ServiceNow through the Microsoft Graph API. Emails sent to helpdesk@emeka.cloud will appear in ServiceNow automatically and trigger incident creation workflows. The integration uses an Entra ID app registration with Client Credentials authentication and an Application Access Policy scoping access to the helpdesk mailbox only. A scheduled job in ServiceNow will monitor the client secret expiry and create an automated incident task 30 days before it expires.
Microsoft Copilot and ServiceNow via Action Fabric
ServiceNow Action Fabric or MCP integration will allow Microsoft Copilot to query CMDB data directly. A user will be able to ask Copilot a question about a CI — dependencies, downstream impact, open related incidents — and receive the answer from ServiceNow without opening the ServiceNow interface. The post that inspired this section showed exactly this working in a real enterprise environment. Building it in a home lab and documenting it puts this portfolio in a very small group.
Windows Autopilot: Remaining Work
EMEKA-4696 enrolled successfully through Autopilot but is currently showing as noncompliant because BitLocker could not enable automatically on TPM 1.2. When a device with TPM 2.0 and Windows 11 is available it will replace the HP Pavilion as the primary Autopilot demonstration device, completing the full zero touch deployment story from hardware hash registration through to a fully compliant managed endpoint.
Always On VPN
A dedicated standalone project covering Always On VPN will demonstrate how remote workers maintain secure connectivity to on premises resources without a traditional VPN client that requires manual connection. Always On VPN connects automatically when the device is outside the corporate network, giving remote workers transparent access to on premises file shares, printers and internal applications. The on premises AD and ADCON-MID built in this project provide the infrastructure foundation for that deployment.
NinjaOne RMM
NinjaOne will be added as a standalone project demonstrating a third party Remote Monitoring and Management platform alongside the Microsoft native tooling covered here. Many organisations use RMM tools from vendors like NinjaOne, ConnectWise or Datto alongside or instead of Intune. Demonstrating familiarity with both the Microsoft native stack and a third party RMM platform broadens the range of environments the portfolio is relevant to.