{
  "projects": {
    "title": "Projects",
    "description": "All 13 published portfolio projects, with verified status, case studies, source documentation, and evidence.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Project directory / 13 complete</p><h1>Technical work.<br><span class=\"accent\">Traceable evidence.</span></h1><p class=\"lead\">Every project connects its implementation to retained validation. Completion refers to the documented scope; simulations and limitations stay explicit.</p></div><div class=\"toolbar\"><div class=\"field\"><label for=\"project-search\">Search projects or technologies</label><input id=\"project-search\" type=\"search\" placeholder=\"Try PowerShell, identity, Intune…\"></div><div class=\"result-count\" id=\"project-count\" role=\"status\">13 projects</div></div><div class=\"chips\" aria-label=\"Filter projects by category\"><button class=\"chip\" data-category-filter=\"All\" aria-pressed=\"true\">All</button><button class=\"chip\" data-category-filter=\"Identity &amp; security\" aria-pressed=\"false\">Identity &amp; security</button><button class=\"chip\" data-category-filter=\"Infrastructure\" aria-pressed=\"false\">Infrastructure</button><button class=\"chip\" data-category-filter=\"Virtualization\" aria-pressed=\"false\">Virtualization</button><button class=\"chip\" data-category-filter=\"Cloud administration\" aria-pressed=\"false\">Cloud administration</button><button class=\"chip\" data-category-filter=\"ITSM\" aria-pressed=\"false\">ITSM</button><button class=\"chip\" data-category-filter=\"Endpoint management\" aria-pressed=\"false\">Endpoint management</button><button class=\"chip\" data-category-filter=\"Automation\" aria-pressed=\"false\">Automation</button></div><div class=\"grid grid-3\" id=\"project-grid\"><article class=\"project-card\" data-project data-category=\"Identity &amp; security\" data-search=\"windows laps &amp; advanced group policy encrypted local administrator passwords, scoped group policy, delegated readers, and positive and negative access tests. windows laps active directory group policy powershell\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 01</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Windows LAPS &amp; Advanced Group Policy</a></h3><p>Encrypted local administrator passwords, scoped Group Policy, delegated readers, and positive and negative access tests.</p><div class=\"tags\"><span class=\"tag\">Windows LAPS</span><span class=\"tag\">Active Directory</span><span class=\"tag\">Group Policy</span><span class=\"tag\">PowerShell</span></div><div class=\"card-footer\"><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Identity &amp; security\" data-search=\"microsoft entra hybrid identity &amp; cloud sync scoped ad-to-entra provisioning with source-anchor correlation, password hash sync, and lifecycle validation. entra id cloud sync password hash sync ad ds\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 02</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Microsoft Entra Hybrid Identity &amp; Cloud Sync</a></h3><p>Scoped AD-to-Entra provisioning with source-anchor correlation, Password Hash Sync, and lifecycle validation.</p><div class=\"tags\"><span class=\"tag\">Entra ID</span><span class=\"tag\">Cloud Sync</span><span class=\"tag\">Password Hash Sync</span><span class=\"tag\">AD DS</span></div><div class=\"card-footer\"><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"on-premises microsoft home lab a microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests. proxmox windows server pfsense linux\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 03</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">On-Premises Microsoft Home Lab</a></h3><p>A Microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests.</p><div class=\"tags\"><span class=\"tag\">Proxmox</span><span class=\"tag\">Windows Server</span><span class=\"tag\">pfSense</span><span class=\"tag\">Linux</span></div><div class=\"card-footer\"><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"windows admin center lab management centralized windows administration backed by connectivity, authentication, and remote-management validation. windows admin center winrm powershell\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 04</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Windows Admin Center Lab Management</a></h3><p>Centralized Windows administration backed by connectivity, authentication, and remote-management validation.</p><div class=\"tags\"><span class=\"tag\">Windows Admin Center</span><span class=\"tag\">WinRM</span><span class=\"tag\">PowerShell</span></div><div class=\"card-footer\"><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Virtualization\" data-search=\"scvmm 2022 hyper-v management a managed nested hyper-v host, vmm logical networking, and validated app01 lifecycle operations. scvmm 2022 hyper-v logical networking\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 05</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/scvmm-2022\" data-route=\"projects/scvmm-2022\" class=\"\">SCVMM 2022 Hyper-V Management</a></h3><p>A managed nested Hyper-V host, VMM logical networking, and validated APP01 lifecycle operations.</p><div class=\"tags\"><span class=\"tag\">SCVMM 2022</span><span class=\"tag\">Hyper-V</span><span class=\"tag\">Logical networking</span></div><div class=\"card-footer\"><a href=\"#projects/scvmm-2022\" data-route=\"projects/scvmm-2022\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Cloud administration\" data-search=\"azure arc hybrid windows management two arc-connected windows server lab machines, agent validation, and one sql server developer instance. azure arc windows server sql server\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 06</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Azure Arc Hybrid Windows Management</a></h3><p>Two Arc-connected Windows Server lab machines, agent validation, and one SQL Server Developer instance.</p><div class=\"tags\"><span class=\"tag\">Azure Arc</span><span class=\"tag\">Windows Server</span><span class=\"tag\">SQL Server</span></div><div class=\"card-footer\"><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Virtualization\" data-search=\"app01 hyper-v storage expansion a scoped virtual-disk change with checkpoint handling, guest storage inspection, and final ntfs validation. hyper-v vhdx ntfs\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 07</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/app01-storage-expansion\" data-route=\"projects/app01-storage-expansion\" class=\"\">APP01 Hyper-V Storage Expansion</a></h3><p>A scoped virtual-disk change with checkpoint handling, guest storage inspection, and final NTFS validation.</p><div class=\"tags\"><span class=\"tag\">Hyper-V</span><span class=\"tag\">VHDX</span><span class=\"tag\">NTFS</span></div><div class=\"card-footer\"><a href=\"#projects/app01-storage-expansion\" data-route=\"projects/app01-storage-expansion\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"cross-platform administration &amp; support method a repeatable support method across windows, linux, macos, identity, and infrastructure. windows linux macos networking\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 08</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Cross-Platform Administration &amp; Support Method</a></h3><p>A repeatable support method across Windows, Linux, macOS, identity, and infrastructure.</p><div class=\"tags\"><span class=\"tag\">Windows</span><span class=\"tag\">Linux</span><span class=\"tag\">macOS</span><span class=\"tag\">Networking</span></div><div class=\"card-footer\"><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"ITSM\" data-search=\"servicenow request fulfillment &amp; procurement workflow an approved catalog request progressing through procurement and field services to automatic lifecycle completion. servicenow service catalog itil workflow\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 09</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/servicenow-request-fulfillment\" data-route=\"projects/servicenow-request-fulfillment\" class=\"\">ServiceNow Request Fulfillment &amp; Procurement Workflow</a></h3><p>An approved catalog request progressing through Procurement and Field Services to automatic lifecycle completion.</p><div class=\"tags\"><span class=\"tag\">ServiceNow</span><span class=\"tag\">Service Catalog</span><span class=\"tag\">ITIL</span><span class=\"tag\">Workflow</span></div><div class=\"card-footer\"><a href=\"#projects/servicenow-request-fulfillment\" data-route=\"projects/servicenow-request-fulfillment\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Cloud administration\" data-search=\"microsoft 365 messaging &amp; security administration mailbox delegation, message delivery, defender review, conditional access remediation, and bounded licensing evidence. exchange online defender conditional access\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 10</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/m365-messaging-security\" data-route=\"projects/m365-messaging-security\" class=\"\">Microsoft 365 Messaging &amp; Security Administration</a></h3><p>Mailbox delegation, message delivery, Defender review, Conditional Access remediation, and bounded licensing evidence.</p><div class=\"tags\"><span class=\"tag\">Exchange Online</span><span class=\"tag\">Defender</span><span class=\"tag\">Conditional Access</span></div><div class=\"card-footer\"><a href=\"#projects/m365-messaging-security\" data-route=\"projects/m365-messaging-security\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Endpoint management\" data-search=\"windows autopilot &amp; intune mdm provisioning physical-device provisioning through branded oobe, esp, entra join, security policy, and final intune compliance. autopilot intune entra join bitlocker\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 11</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-autopilot-intune\" data-route=\"projects/windows-autopilot-intune\" class=\"\">Windows Autopilot &amp; Intune MDM Provisioning</a></h3><p>Physical-device provisioning through branded OOBE, ESP, Entra join, security policy, and final Intune compliance.</p><div class=\"tags\"><span class=\"tag\">Autopilot</span><span class=\"tag\">Intune</span><span class=\"tag\">Entra join</span><span class=\"tag\">BitLocker</span></div><div class=\"card-footer\"><a href=\"#projects/windows-autopilot-intune\" data-route=\"projects/windows-autopilot-intune\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Endpoint management\" data-search=\"macos abm to intune enterprise runbook real microsoft-side configuration paired with explicitly simulated apple enrollment and endpoint workflows. intune apns filevault abm / ade simulation\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 12</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/macos-abm-intune-runbook\" data-route=\"projects/macos-abm-intune-runbook\" class=\"\">macOS ABM to Intune Enterprise Runbook</a></h3><p>Real Microsoft-side configuration paired with explicitly simulated Apple enrollment and endpoint workflows.</p><div class=\"tags\"><span class=\"tag\">Intune</span><span class=\"tag\">APNs</span><span class=\"tag\">FileVault</span><span class=\"tag\">ABM / ADE simulation</span></div><div class=\"card-footer\"><a href=\"#projects/macos-abm-intune-runbook\" data-route=\"projects/macos-abm-intune-runbook\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Automation\" data-search=\"microsoft 365 graph administration lab seven validated read-only scripts for tenant, user, group, license, role, stale-account, and intune reporting. microsoft graph powershell rest api csv\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 13</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Microsoft 365 Graph Administration Lab</a></h3><p>Seven validated read-only scripts for tenant, user, group, license, role, stale-account, and Intune reporting.</p><div class=\"tags\"><span class=\"tag\">Microsoft Graph</span><span class=\"tag\">PowerShell</span><span class=\"tag\">REST API</span><span class=\"tag\">CSV</span></div><div class=\"card-footer\"><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article></div><p class=\"empty\" id=\"project-empty\" hidden>No projects match these filters.</p><div class=\"note\">Supporting ServiceNow administration and Cloudflare work remain separate from the official 13-project count. <a href=\"#additional-labs\" data-route=\"additional-labs\" class=\"\">Review supporting labs →</a></div>",
    "active": "Projects"
  },
  "projects/windows-laps-gpo": {
    "title": "Windows LAPS & Advanced Group Policy",
    "description": "Encrypted local administrator passwords, scoped Group Policy, delegated readers, and positive and negative access tests.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Project 01 / Identity & security</p><h1>Windows LAPS &amp; Advanced Group Policy</h1><p class=\"lead\">Encrypted local administrator passwords, scoped Group Policy, delegated readers, and positive and negative access tests.</p><div class=\"tags\"><span class=\"status\">COMPLETE</span><span class=\"tag\">Validated lab work</span></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub documentation <span aria-hidden=\"true\">↗</span></a><a href=\"https://jeremyfontenot.online/windows-laps-gpo.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original portfolio <span aria-hidden=\"true\">↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"\">Evidence library</a></div></div><div class=\"case-layout\"><aside class=\"case-toc\"><p class=\"eyebrow\">Inside this case study</p><a href=\"#overview\" data-anchor=\"overview\">Overview</a><a href=\"#scenario\" data-anchor=\"scenario\">Operational scenario & objectives</a><a href=\"#environment\" data-anchor=\"environment\">Environment & technologies</a><a href=\"#architecture\" data-anchor=\"architecture\">Architecture</a><a href=\"#implementation\" data-anchor=\"implementation\">Implementation & administration</a><a href=\"#troubleshooting\" data-anchor=\"troubleshooting\">Troubleshooting</a><a href=\"#validation\" data-anchor=\"validation\">Validation & results</a><a href=\"#evidence\" data-anchor=\"evidence\">Evidence</a><a href=\"#skills\" data-anchor=\"skills\">Skills demonstrated</a><a href=\"#limitations\" data-anchor=\"limitations\">Limitations & claim boundaries</a><a href=\"#next\" data-anchor=\"next\">Next milestones</a></aside><article><section class=\"content-block\" id=\"overview\"><h2>Overview</h2><p>Encrypted local administrator passwords, scoped Group Policy, delegated readers, and positive and negative access tests.</p><p><strong>Classification:</strong> Validated lab work.</p></section><section class=\"content-block\" id=\"scenario\"><h2>Operational scenario & objectives</h2><p>Protect local administrator credentials with encrypted AD backup while proving that authorized readers can retrieve metadata and unauthorized users cannot.</p></section><section class=\"content-block\" id=\"environment\"><h2>Environment & technologies</h2><p>Personal AD lab: DC01 and the WS01 endpoint in a dedicated LAPS-Test OU; an enabled LocalAdmin account and a delegated reader group.</p><div class=\"tags\"><span class=\"tag\">Windows LAPS</span><span class=\"tag\">Active Directory</span><span class=\"tag\">Group Policy</span><span class=\"tag\">PowerShell</span></div></section><section class=\"content-block\" id=\"architecture\"><h2>Architecture</h2><p>Personal AD lab: DC01 and the WS01 endpoint in a dedicated LAPS-Test OU; an enabled LocalAdmin account and a delegated reader group.</p><div class=\"doc-grid\"><a href=\"#documentation/a090b3c23be8\" data-route=\"documentation/a090b3c23be8\" class=\"\">Architecture<small>projects/windows-laps-gpo/architecture.md</small></a></div></section><section class=\"content-block\" id=\"implementation\"><h2>Implementation & administration</h2><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Project 01 · COMPLETE</p><h2>Windows LAPS &amp; Advanced Group Policy</h2><p class=\"lead\">Enterprise-style local administrator password management with encrypted AD backup, delegated readers, policy validation, and documented troubleshooting.</p><div class=\"actions\"><a class=\"button primary\" data-route=\"projects\" href=\"#projects\">Back to projects</a><a class=\"button\" data-route=\"evidence\" href=\"#evidence\">Review proof index</a></div></div></section><section class=\"section\"><div class=\"wrap\"><div class=\"metric-strip\"><div class=\"metric\"><strong>WS01</strong><span>Managed endpoint</span></div><div class=\"metric\"><strong>14 chars</strong><span>Password length</span></div><div class=\"metric\"><strong>30 days</strong><span>Password age</span></div><div class=\"metric\"><strong>Encrypted</strong><span>AD backup</span></div></div></div></section><section class=\"section\"><div class=\"wrap case-layout\"><article><section class=\"content-block\" id=\"source-4d0da469-scope\"><p class=\"eyebrow\">Scope</p><h2>Windows LAPS on a controlled AD test scope</h2><p>Modern Windows LAPS was implemented against WS01 in a dedicated protected OU under the existing AD domain. The project intentionally reused working identity infrastructure and avoided unnecessary rebuilds.</p></section><section class=\"content-block\" id=\"source-4d0da469-design\"><p class=\"eyebrow\">Design</p><h2>Least privilege and encrypted AD backup</h2><p>The design uses modern Windows LAPS, encrypted Active Directory password storage, a dedicated reader group, OU-scoped permissions, and a managed local <strong>LocalAdmin</strong> account instead of enabling the built-in Administrator.</p></section><section class=\"content-block\" id=\"source-4d0da469-implementation\"><p class=\"eyebrow\">Implementation</p><h2>Schema, OU permissions, GPO, managed account</h2><p>The AD schema was extended for modern LAPS. WS01 was moved into the LAPS-Test OU. Computer self-permission and reader delegation were applied. A GPO configured AD backup, password complexity, 14-character passwords, 30-day age, encryption, authorized decryptors, and the managed account name.</p></section><section class=\"content-block\" id=\"source-4d0da469-validation\"><p class=\"eyebrow\">Validation</p><h2>Positive and negative access tests</h2><p>Validation included gpresult, RSOP, LAPS operational events, safe metadata retrieval, forced password rotation, encrypted AD attribute presence, delegated reader success, and an unauthorized-user test that returned no LAPS record.</p></section><section class=\"content-block\" id=\"source-4d0da469-troubleshooting\"><p class=\"eyebrow\">Troubleshooting</p><h2>RPC/WMI and client-side RDP issues</h2><p>RSOP initially failed because WS01 WMI firewall rules were disabled. Enabling only the required Domain-profile WMI rules restored remote WMI and Group Policy Results. A separate mstsc client hang was isolated to the administrative laptop, not DC01.</p></section><section class=\"content-block\" id=\"source-4d0da469-evidence\"><p class=\"eyebrow\">Evidence</p><h2>Sanitized validation</h2><ul class=\"evidence-list\"><li><a href=\"https://jeremyfontenot.online/projects/windows-laps-gpo/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence index<span>Recruiter-friendly Windows LAPS validation</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/01-schema-attributes.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Schema attributes<span>Modern msLAPS attributes present</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/11-laps-event-effective-policy.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Effective policy<span>Event 10021 sanitized policy state</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/12-laps-final-retrieval-success.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Final retrieval<span>Encrypted source and successful delegated decryption</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/13-laps-forced-rotation-events.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Forced rotation<span>Events 10014, 10020, 10018, 10004</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/14-laps-unauthorized-access-denied.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Negative access test<span>Unauthorized user returned no LAPS record</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/16-ad-laps-attribute-presence.txt\" rel=\"noopener noreferrer\" target=\"_blank\">AD attribute presence<span>Encrypted password attribute confirmed without exposing content</span></a></li></ul></section></article><aside class=\"case-nav panel\"><p class=\"eyebrow\">Case study</p><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Windows LAPS on a controlled AD test scope</a><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Least privilege and encrypted AD backup</a><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Schema, OU permissions, GPO, managed account</a><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Positive and negative access tests</a><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">RPC/WMI and client-side RDP issues</a><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Validation links</a></aside></div></section></div><details><summary>Windows LAPS &amp; Advanced Group Policy <small> / README.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/766e6fce41e2\" data-route=\"documentation/766e6fce41e2\" class=\"\">Open document page</a></div><h2>Windows LAPS &amp; Advanced Group Policy</h2>\n<h2>Status</h2>\n<p><strong>COMPLETE</strong></p>\n<p>This project demonstrates a validated deployment of modern Windows LAPS in the <code>ad.jeremyfontenot.online</code> Active Directory lab using a dedicated test OU, Group Policy, encrypted password storage, least-privilege delegation, event-log validation, and forced password rotation.</p>\n<h2>Environment</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Component</th>\n<th>Configuration</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>AD domain</td>\n<td><code>ad.jeremyfontenot.online</code></td>\n</tr>\n<tr>\n<td>NetBIOS</td>\n<td><code>JFAD</code></td>\n</tr>\n<tr>\n<td>Domain controller</td>\n<td><code>DC01</code> - Windows Server 2022</td>\n</tr>\n<tr>\n<td>Test endpoint</td>\n<td><code>WS01</code> - Windows 10 Pro 10.0.19045</td>\n</tr>\n<tr>\n<td>Test OU</td>\n<td><code>OU=LAPS-Test,OU=Workstations,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online</code></td>\n</tr>\n<tr>\n<td>LAPS GPO</td>\n<td><code>GPO - Workstations - Windows LAPS</code></td>\n</tr>\n<tr>\n<td>Managed account</td>\n<td><code>LocalAdmin</code></td>\n</tr>\n<tr>\n<td>Reader group</td>\n<td><code>JFAD\\GG-LAPS-Password-Readers</code></td>\n</tr>\n</tbody>\n</table></div>\n<h2>Validated controls</h2>\n<ul>\n<li>Modern Windows LAPS module present on DC01 and WS01</li>\n<li>AD schema inspected before modification</li>\n<li><code>Update-LapsADSchema</code> completed and six <code>msLAPS-*</code> attributes validated</li>\n<li>Dedicated <code>LAPS-Test</code> OU created and WS01 moved into scope</li>\n<li>Computer self-permission delegated with <code>Set-LapsADComputerSelfPermission</code></li>\n<li>Dedicated password-reader group created and delegated with <code>Set-LapsADReadPasswordPermission</code></li>\n<li>GPO configured for AD backup, 30-day age, 14-character complex passwords, encrypted storage, and an authorized decryptor group</li>\n<li><code>gpupdate</code>, <code>gpresult</code>, and GUI Group Policy Results/RSOP validated</li>\n<li>Windows LAPS Event IDs 10021, 10020, 10018, 10014, and 10004 validated</li>\n<li>Delegated non-admin retrieval succeeded</li>\n<li>Unauthorized standard-user retrieval returned no LAPS record</li>\n<li>Forced password rotation changed the password update and expiration timestamps</li>\n</ul>\n<h2>Security design</h2>\n<p>The built-in RID-500 <code>Administrator</code> account remains disabled. Windows LAPS manages the existing enabled <code>WS01\\LocalAdmin</code> account instead. Passwords are stored using encrypted Windows LAPS attributes in Active Directory. The actual password is intentionally excluded from all portfolio evidence.</p>\n<h2>Documentation</h2>\n<ul>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/architecture.md\" rel=\"noopener noreferrer\" target=\"_blank\">Architecture</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/implementation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Implementation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Validation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/troubleshooting.md\" rel=\"noopener noreferrer\" target=\"_blank\">Troubleshooting</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/lessons-learned.md\" rel=\"noopener noreferrer\" target=\"_blank\">Lessons learned</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/README.md\" rel=\"noopener noreferrer\" target=\"_blank\">Sanitized evidence</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/scripts/Validate-WindowsLAPS.ps1\" rel=\"noopener noreferrer\" target=\"_blank\">Validation script</a></li>\n</ul></div></details><details><summary>Architecture <small> / architecture.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/architecture.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/a090b3c23be8\" data-route=\"documentation/a090b3c23be8\" class=\"\">Open document page</a></div><h2>Architecture</h2>\n<h2>Objective</h2>\n<p>Deploy modern Windows LAPS in a controlled Active Directory test scope using Group Policy, encrypted password storage, and delegated least-privilege access.</p>\n<h2>Logical path</h2>\n<p><code>Administrative laptop -&gt; DC01 -&gt; LAPS-Test OU -&gt; WS01 -&gt; LocalAdmin</code></p>\n<p>The administrative laptop is not domain joined, so domain-integrated administration was performed through DC01 by PowerShell remoting and RDP.</p>\n<h2>AD and endpoint design</h2>\n<ul>\n<li>Domain: <code>ad.jeremyfontenot.online</code></li>\n<li>Domain controller / Schema Master: <code>DC01</code></li>\n<li>Domain functional level: Windows Server 2016</li>\n<li>Endpoint: <code>WS01</code></li>\n<li>Endpoint OS: Windows 10 Pro build 19045</li>\n<li>OU: <code>OU=LAPS-Test,OU=Workstations,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online</code></li>\n</ul>\n<h2>LAPS schema</h2>\n<p>The schema was first queried for <code>msLAPS-*</code> attributes. None were present. <code>Update-LapsADSchema</code> was then run with temporary Schema Admin membership, after which the membership was removed.</p>\n<p>Validated attributes:</p>\n<ul>\n<li><code>msLAPS-Password</code></li>\n<li><code>msLAPS-PasswordExpirationTime</code></li>\n<li><code>msLAPS-EncryptedPassword</code></li>\n<li><code>msLAPS-EncryptedPasswordHistory</code></li>\n<li><code>msLAPS-EncryptedDSRMPassword</code></li>\n<li><code>msLAPS-EncryptedDSRMPasswordHistory</code></li>\n</ul>\n<h2>Group Policy</h2>\n<p>GPO: <code>GPO - Workstations - Windows LAPS</code></p>\n<p>Settings:</p>\n<ul>\n<li>Backup directory: Active Directory</li>\n<li>Managed account: <code>LocalAdmin</code></li>\n<li>Password age: 30 days</li>\n<li>Password length: 14</li>\n<li>Complexity: uppercase + lowercase + numbers + special characters</li>\n<li>Password expiration protection: enabled</li>\n<li>Password encryption: enabled</li>\n<li>Authorized decryptor: <code>JFAD\\GG-LAPS-Password-Readers</code></li>\n</ul>\n<h2>Delegation</h2>\n<p><code>Set-LapsADComputerSelfPermission</code> grants managed computers permission to update their own LAPS attributes. <code>Set-LapsADReadPasswordPermission</code> delegates password-read rights to <code>JFAD\\GG-LAPS-Password-Readers</code>.</p>\n<p>The final test reader account <code>laps.reader01</code> belongs only to <code>Domain Users</code> and <code>GG-LAPS-Password-Readers</code>, demonstrating delegated access independent of Domain Admin privileges.</p></div></details><details><summary>Sanitized Evidence Index <small> / README.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/f31de6857df0\" data-route=\"documentation/f31de6857df0\" class=\"\">Open document page</a></div><h2>Sanitized Evidence Index</h2>\n<p>This folder contains portfolio-safe evidence reconstructed from the validated command output captured during the lab. Managed passwords and authentication secrets are intentionally excluded.</p>\n<h2>Core evidence</h2>\n<ul>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/validated-results.md\" rel=\"noopener noreferrer\" target=\"_blank\">Validated results</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/troubleshooting-evidence.md\" rel=\"noopener noreferrer\" target=\"_blank\">Troubleshooting evidence</a></li>\n</ul>\n<h2>Security handling</h2>\n<p>Never publish:</p>\n<ul>\n<li>Windows LAPS managed passwords</li>\n<li>domain passwords</li>\n<li>recovery secrets</li>\n<li>private keys</li>\n<li>tokens</li>\n<li>VPN credentials</li>\n</ul>\n<p>The repository intentionally records only non-secret metadata such as account name, timestamps, encryption source, decryption status, authorized decryptor, event IDs, and GPO configuration.</p></div></details><details><summary>Troubleshooting Evidence <small> / troubleshooting-evidence.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/troubleshooting-evidence.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/b2ce94f11b7f\" data-route=\"documentation/b2ce94f11b7f\" class=\"\">Open document page</a></div><h2>Troubleshooting Evidence</h2>\n<h2>RDP</h2>\n<ul>\n<li>TCP 3389 to DC01: reachable</li>\n<li>Local client failure: <code>mstsc.exe</code> AppHangB1 / Event ID 1002</li>\n<li>Working launch: <code>mstsc /public /admin /v:dc01.ad.jeremyfontenot.online</code></li>\n</ul>\n<h2>WMI / RSOP</h2>\n<p>Initial WMI result:</p>\n<pre><code class=\"language-text\">The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)\n</code></pre>\n<p>WMI firewall rule source:</p>\n<pre><code class=\"language-text\">PolicyStoreSourceType : Local\nPolicyStoreSource     : PersistentStore\nEnabled               : False\nProfile               : Domain\n</code></pre>\n<p>After enabling the Domain-profile PersistentStore WMI rules:</p>\n<pre><code class=\"language-text\">CSName  : WS01\nCaption : Microsoft Windows 10 Pro\nVersion : 10.0.19045\n</code></pre>\n<p>The Group Policy Results wizard then completed successfully.</p></div></details><details><summary>Windows LAPS Validated Results <small> / validated-results.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/validated-results.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/f9a626e4009a\" data-route=\"documentation/f9a626e4009a\" class=\"\">Open document page</a></div><h2>Windows LAPS Validated Results</h2>\n<h2>Schema extension</h2>\n<p>Post-extension query returned all required modern attributes:</p>\n<pre><code class=\"language-text\">msLAPS-EncryptedDSRMPassword\nmsLAPS-EncryptedDSRMPasswordHistory\nmsLAPS-EncryptedPassword\nmsLAPS-EncryptedPasswordHistory\nmsLAPS-Password\nmsLAPS-PasswordExpirationTime\n</code></pre>\n<h2>OU and delegation</h2>\n<p>WS01 final OU:</p>\n<pre><code class=\"language-text\">OU=LAPS-Test,OU=Workstations,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online\n</code></pre>\n<p>Extended-right holders:</p>\n<pre><code class=\"language-text\">NT AUTHORITY\\SYSTEM\nJFAD\\Domain Admins\nJFAD\\GG-LAPS-Password-Readers\n</code></pre>\n<p>Final reader group membership:</p>\n<pre><code class=\"language-text\">Name           : LAPS Reader Test\nSamAccountName : laps.reader01\nObjectClass    : user\n</code></pre>\n<p><code>laps.reader01</code> group memberships:</p>\n<pre><code class=\"language-text\">Domain Users\nGG-LAPS-Password-Readers\n</code></pre>\n<h2>GPO application</h2>\n<p><code>gpresult /r /scope computer</code> included:</p>\n<pre><code class=\"language-text\">GPO - Workstations - Windows LAPS\n</code></pre>\n<h2>Effective policy - Event 10021</h2>\n<pre><code class=\"language-text\">Policy source: GPO\nBackup directory: Active Directory\nLocal administrator account name: LocalAdmin\nPassword age in days: 30\nPassword complexity: 4\nPassword length: 14\nPassword expiration protection enabled: 1\nPassword encryption enabled: 1\nPassword encryption target principal: JFAD\\GG-LAPS-Password-Readers\n</code></pre>\n<h2>Final encrypted retrieval</h2>\n<pre><code class=\"language-text\">ComputerName        : WS01\nAccount             : LocalAdmin\nPasswordUpdateTime  : 9/11/2026 7:06:17 PM\nExpirationTimestamp : 10/11/2026 7:06:17 PM\nSource              : EncryptedPassword\nDecryptionStatus    : Success\nAuthorizedDecryptor : JFAD\\GG-LAPS-Password-Readers\n</code></pre>\n<h2>AD attribute presence</h2>\n<pre><code class=\"language-text\">Name                          : WS01\nmsLAPS-PasswordExpirationTime : 134362343115244738\nEncryptedPasswordPresent      : True\n</code></pre>\n<h2>Final rotation events</h2>\n<pre><code class=\"language-text\">10014 - Administrator-initiated password update\n10020 - LocalAdmin password successfully updated\n10018 - Active Directory successfully updated\n10004 - LAPS policy processing succeeded\n</code></pre>\n<h2>Negative access test</h2>\n<pre><code class=\"language-text\">ACCESS TEST RESULT: No LAPS record returned for unauthorized user.\n</code></pre>\n<p>No managed password value is present in this evidence.</p></div></details><details><summary>Implementation <small> / implementation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/implementation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/f0fb6888ddbb\" data-route=\"documentation/f0fb6888ddbb\" class=\"\">Open document page</a></div><h2>Implementation</h2>\n<ol>\n<li>Validated the modern <code>LAPS</code> PowerShell module on DC01 and WS01.</li>\n<li>Queried the AD schema for <code>msLAPS-*</code> attributes before making changes.</li>\n<li>Temporarily added <code>jeremy.fontenot</code> to <code>Schema Admins</code>, refreshed the logon token, and ran <code>Update-LapsADSchema -Verbose</code>.</li>\n<li>Verified all six modern Windows LAPS schema attributes and removed the temporary Schema Admin membership.</li>\n<li>Created <code>OU=LAPS-Test</code> under <code>OU=Workstations</code> with accidental-deletion protection.</li>\n<li>Moved WS01 from the existing Windows 10 OU into <code>LAPS-Test</code>.</li>\n<li>Delegated computer self-permission with <code>Set-LapsADComputerSelfPermission</code>.</li>\n<li>Created <code>GG-LAPS-Password-Readers</code> and delegated read permission with <code>Set-LapsADReadPasswordPermission</code>.</li>\n<li>Created and linked <code>GPO - Workstations - Windows LAPS</code> to the LAPS-Test OU.</li>\n<li>Configured AD backup, 30-day age, 14-character complex passwords, encryption, and <code>GG-LAPS-Password-Readers</code> as the authorized decryptor.</li>\n<li>Initially allowed LAPS to target the built-in Administrator account. Event ID 10067 showed that the account was disabled.</li>\n<li>Reviewed WS01 local Administrators and found the existing enabled <code>LocalAdmin</code> account.</li>\n<li>Updated the GPO to manage <code>LocalAdmin</code> rather than enabling the built-in Administrator account.</li>\n<li>Forced Group Policy processing and validated the effective policy through Event ID 10021.</li>\n<li>Created non-admin reader account <code>laps.reader01</code>, added it to the reader group, and validated encrypted retrieval.</li>\n<li>Created a temporary unauthorized standard user and confirmed it could not retrieve the LAPS record; the account was then deleted.</li>\n<li>Forced a final <code>Reset-LapsPassword</code> and validated the new timestamps and Event IDs 10014, 10020, 10018, and 10004.</li>\n</ol></div></details><details><summary>Lessons Learned <small> / lessons-learned.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/lessons-learned.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/cf8e9d648157\" data-route=\"documentation/cf8e9d648157\" class=\"\">Open document page</a></div><h2>Lessons Learned</h2>\n<ul>\n<li>Verify <code>msLAPS-*</code> schema state before running <code>Update-LapsADSchema</code>.</li>\n<li>Use temporary privilege for schema changes and remove it immediately afterward.</li>\n<li>Scope testing to a dedicated OU rather than broad workstation containers.</li>\n<li>Separate LAPS password-read rights from Domain Admin privileges.</li>\n<li>Prefer encrypted password storage and an explicit decryptor group.</li>\n<li>Select the managed account intentionally; LAPS can rotate a disabled account, but that does not make the account usable for recovery.</li>\n<li>Event IDs 10021, 10020, 10018, 10014, and 10004 provide strong operational evidence.</li>\n<li><code>gpresult</code> and GUI RSOP validate complementary layers of Group Policy application.</li>\n<li>Troubleshoot the failing layer from evidence: transport, WMI/RPC, firewall policy source, policy application, and finally LAPS processing.</li>\n<li>Portfolio evidence should show timestamps, source, account, decryption status, and authorization metadata while excluding the password itself.</li>\n</ul></div></details><details><summary>Troubleshooting <small> / troubleshooting.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/troubleshooting.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/c3c22f68fe5b\" data-route=\"documentation/c3c22f68fe5b\" class=\"\">Open document page</a></div><h2>Troubleshooting</h2>\n<h2>RDP client hang</h2>\n<p>TCP 3389 to DC01 was reachable, but the local Remote Desktop Connection client hung or closed. Windows Error Reporting showed <code>mstsc.exe</code> <code>AppHangB1</code> / Application Hang Event ID 1002.</p>\n<p>Resolution:</p>\n<pre><code class=\"language-text\">mstsc /public /admin /v:dc01.ad.jeremyfontenot.online\n</code></pre>\n<p>The administrative RDP session then opened successfully.</p>\n<h2>RSOP / WMI RPC failure</h2>\n<p>The Group Policy Results wizard initially failed to query WS01. A direct WMI test returned <code>0x800706BA - The RPC server is unavailable</code>.</p>\n<p>Inspection showed all <code>Windows Management Instrumentation (WMI)</code> firewall rules were disabled and originated from the local <code>PersistentStore</code>.</p>\n<p>The Domain-profile WMI rules were enabled in <code>PersistentStore</code>. A subsequent <code>Get-WmiObject Win32_OperatingSystem -ComputerName WS01</code> succeeded and the GUI Group Policy Results report generated correctly.</p>\n<h2>Disabled built-in Administrator</h2>\n<p>LAPS Event ID 10067 reported that the built-in <code>Administrator</code> account was disabled. WS01 already had an enabled custom <code>LocalAdmin</code> account in the local Administrators group.</p>\n<p>The LAPS GPO was updated to manage <code>LocalAdmin</code>. Event IDs 10021 and 10020 then confirmed the intended account and successful password update.</p>\n<h2>Reader account could not WinRM to DC01</h2>\n<p><code>laps.reader01</code> intentionally lacked administrative/WinRM rights on DC01. Rather than granting unnecessary remote-administration permission, <code>Get-LapsADPassword -Credential</code> and <code>-DecryptionCredential</code> were used inside the existing administrative remoting session to validate the delegated reader credentials.</p></div></details><details><summary>Validation <small> / validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/2044a931d6f0\" data-route=\"documentation/2044a931d6f0\" class=\"\">Open document page</a></div><h2>Validation</h2>\n<h2>Group Policy</h2>\n<p><code>gpupdate /force</code> completed successfully on WS01. <code>gpresult /r /scope computer</code> listed <code>GPO - Workstations - Windows LAPS</code> under Applied Group Policy Objects. The Group Policy Results wizard was also generated after WMI/RPC remediation.</p>\n<h2>Effective policy</h2>\n<p>Event ID 10021 reported:</p>\n<pre><code class=\"language-text\">Policy source: GPO\nBackup directory: Active Directory\nLocal administrator account name: LocalAdmin\nPassword age in days: 30\nPassword complexity: 4\nPassword length: 14\nPassword expiration protection enabled: 1\nPassword encryption enabled: 1\nPassword encryption target principal: JFAD\\GG-LAPS-Password-Readers\n</code></pre>\n<h2>AD backup and retrieval</h2>\n<p>Sanitized final retrieval:</p>\n<pre><code class=\"language-text\">ComputerName        : WS01\nAccount             : LocalAdmin\nPasswordUpdateTime  : 9/11/2026 7:06:17 PM\nExpirationTimestamp : 10/11/2026 7:06:17 PM\nSource              : EncryptedPassword\nDecryptionStatus    : Success\nAuthorizedDecryptor : JFAD\\GG-LAPS-Password-Readers\n</code></pre>\n<p>The <code>Password</code> property was deliberately excluded.</p>\n<h2>Forced rotation</h2>\n<p>Event sequence:</p>\n<ul>\n<li>10014 - administrator-initiated password update</li>\n<li>10020 - <code>LocalAdmin</code> password updated</li>\n<li>10018 - Active Directory updated with the new password</li>\n<li>10004 - LAPS policy processing succeeded</li>\n</ul>\n<h2>Least privilege</h2>\n<p><code>laps.reader01</code> was validated with only <code>Domain Users</code> and <code>GG-LAPS-Password-Readers</code> memberships and successfully decrypted the encrypted LAPS record.</p>\n<p>A standard user outside the reader group produced:</p>\n<pre><code class=\"language-text\">ACCESS TEST RESULT: No LAPS record returned for unauthorized user.\n</code></pre>\n<h2>AD attribute presence</h2>\n<pre><code class=\"language-text\">Name                          : WS01\nmsLAPS-PasswordExpirationTime : 134362343115244738\nEncryptedPasswordPresent      : True\n</code></pre></div></details></section><section class=\"content-block\" id=\"troubleshooting\"><h2>Troubleshooting</h2><p>RSOP failed with RPC error 0x800706BA because WS01 WMI firewall rules were disabled. Enabling the required Domain-profile rules restored WMI and Group Policy Results. Event 10067 also led to targeting the existing LocalAdmin account instead of the disabled built-in Administrator.</p><div class=\"doc-grid\"><a href=\"#documentation/b2ce94f11b7f\" data-route=\"documentation/b2ce94f11b7f\" class=\"\">Troubleshooting Evidence<small>projects/windows-laps-gpo/evidence/troubleshooting-evidence.md</small></a><a href=\"#documentation/c3c22f68fe5b\" data-route=\"documentation/c3c22f68fe5b\" class=\"\">Troubleshooting<small>projects/windows-laps-gpo/troubleshooting.md</small></a></div></section><section class=\"content-block\" id=\"validation\"><h2>Validation & results</h2><p>Encrypted attribute presence, delegated retrieval, unauthorized-access denial, effective policy, and forced-rotation events support the completed Windows LAPS scope.</p><div class=\"doc-grid\"><a href=\"#documentation/2044a931d6f0\" data-route=\"documentation/2044a931d6f0\" class=\"\">Validation<small>projects/windows-laps-gpo/validation.md</small></a></div></section><section class=\"content-block\" id=\"evidence\"><h2>Evidence</h2><p>STRONG — implementation, validation, troubleshooting, sanitized evidence, and a reusable validation script are documented.</p><div class=\"doc-grid\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">README.md<small>Retained documentation supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/architecture.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">architecture.md<small>Retained documentation supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/01-schema-attributes.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">01-schema-attributes.txt<small>Retained validation records supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/11-laps-event-effective-policy.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">11-laps-event-effective-policy.txt<small>Retained validation records supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/12-laps-final-retrieval-success.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">12-laps-final-retrieval-success.txt<small>Retained validation records supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/13-laps-forced-rotation-events.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">13-laps-forced-rotation-events.txt<small>Retained validation records supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/14-laps-unauthorized-access-denied.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">14-laps-unauthorized-access-denied.txt<small>Retained validation records supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/16-ad-laps-attribute-presence.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">16-ad-laps-attribute-presence.txt<small>Retained validation records supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">README.md<small>Retained documentation supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/evidence/index.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">index.html<small>Retained documentation supporting Windows LAPS &amp; Advanced Group Policy.</small> <span aria-hidden=\"true\">↗</span></a></div><div class=\"source-links\"><a href=\"#evidence\" data-route=\"evidence\" class=\"\">Browse and filter the complete evidence library</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub project source <span aria-hidden=\"true\">↗</span></a></div></section><section class=\"content-block\" id=\"skills\"><h2>Skills demonstrated</h2><div class=\"tags\"><span class=\"tag\">Windows LAPS</span><span class=\"tag\">Active Directory</span><span class=\"tag\">Group Policy</span><span class=\"tag\">PowerShell</span></div><a href=\"#skills\" data-route=\"skills\" class=\"\">View the complete capability map →</a></section><section class=\"content-block\" id=\"limitations\"><h2>Limitations & claim boundaries</h2><div class=\"note\">Personal Active Directory lab. Evidence supports modern Windows LAPS schema extension, OU scoping, GPO configuration, encrypted AD password storage, least-privilege retrieval, negative access testing, RSOP/event validation, and forced rotation. Actual passwords are excluded.</div></section><section class=\"content-block\" id=\"next\"><h2>Next milestones</h2><p>Maintenance-only unless the lab changes; revalidate after material AD/GPO/LAPS changes.</p></section></article></div><section class=\"section\"><p class=\"eyebrow\">Continue exploring</p><h2>Related projects</h2><div class=\"grid grid-2\"><article class=\"project-card\" data-project data-category=\"Identity &amp; security\" data-search=\"microsoft entra hybrid identity &amp; cloud sync scoped ad-to-entra provisioning with source-anchor correlation, password hash sync, and lifecycle validation. entra id cloud sync password hash sync ad ds\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 02</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Microsoft Entra Hybrid Identity &amp; Cloud Sync</a></h3><p>Scoped AD-to-Entra provisioning with source-anchor correlation, Password Hash Sync, and lifecycle validation.</p><div class=\"tags\"><span class=\"tag\">Entra ID</span><span class=\"tag\">Cloud Sync</span><span class=\"tag\">Password Hash Sync</span><span class=\"tag\">AD DS</span></div><div class=\"card-footer\"><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"windows admin center lab management centralized windows administration backed by connectivity, authentication, and remote-management validation. windows admin center winrm powershell\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 04</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Windows Admin Center Lab Management</a></h3><p>Centralized Windows administration backed by connectivity, authentication, and remote-management validation.</p><div class=\"tags\"><span class=\"tag\">Windows Admin Center</span><span class=\"tag\">WinRM</span><span class=\"tag\">PowerShell</span></div><div class=\"card-footer\"><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article></div></section>",
    "active": "Projects"
  },
  "projects/entra-cloud-sync": {
    "title": "Microsoft Entra Hybrid Identity & Cloud Sync",
    "description": "Scoped AD-to-Entra provisioning with source-anchor correlation, Password Hash Sync, and lifecycle validation.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Project 02 / Identity & security</p><h1>Microsoft Entra Hybrid Identity &amp; Cloud Sync</h1><p class=\"lead\">Scoped AD-to-Entra provisioning with source-anchor correlation, Password Hash Sync, and lifecycle validation.</p><div class=\"tags\"><span class=\"status\">COMPLETE</span><span class=\"tag\">Validated lab work</span></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub documentation <span aria-hidden=\"true\">↗</span></a><a href=\"https://jeremyfontenot.online/entra-cloud-sync.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original portfolio <span aria-hidden=\"true\">↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"\">Evidence library</a></div></div><div class=\"case-layout\"><aside class=\"case-toc\"><p class=\"eyebrow\">Inside this case study</p><a href=\"#overview\" data-anchor=\"overview\">Overview</a><a href=\"#scenario\" data-anchor=\"scenario\">Operational scenario & objectives</a><a href=\"#environment\" data-anchor=\"environment\">Environment & technologies</a><a href=\"#architecture\" data-anchor=\"architecture\">Architecture</a><a href=\"#implementation\" data-anchor=\"implementation\">Implementation & administration</a><a href=\"#troubleshooting\" data-anchor=\"troubleshooting\">Troubleshooting</a><a href=\"#validation\" data-anchor=\"validation\">Validation & results</a><a href=\"#evidence\" data-anchor=\"evidence\">Evidence</a><a href=\"#skills\" data-anchor=\"skills\">Skills demonstrated</a><a href=\"#limitations\" data-anchor=\"limitations\">Limitations & claim boundaries</a><a href=\"#next\" data-anchor=\"next\">Next milestones</a></aside><article><section class=\"content-block\" id=\"overview\"><h2>Overview</h2><p>Scoped AD-to-Entra provisioning with source-anchor correlation, Password Hash Sync, and lifecycle validation.</p><p><strong>Classification:</strong> Validated lab work.</p></section><section class=\"content-block\" id=\"scenario\"><h2>Operational scenario & objectives</h2><p>Synchronize only the intended identities, retain AD source authority, and validate provisioning and password synchronization without introducing an unnecessary second sync engine.</p></section><section class=\"content-block\" id=\"environment\"><h2>Environment & technologies</h2><p>Retained project architecture: DC01 supplies AD DS; SYNC01 hosts the provisioning agent. The tested dedicated OU limits synchronization to selected users and groups.</p><div class=\"tags\"><span class=\"tag\">Entra ID</span><span class=\"tag\">Cloud Sync</span><span class=\"tag\">Password Hash Sync</span><span class=\"tag\">AD DS</span></div></section><section class=\"content-block\" id=\"architecture\"><h2>Architecture</h2><p>Retained project architecture: DC01 supplies AD DS; SYNC01 hosts the provisioning agent. The tested dedicated OU limits synchronization to selected users and groups.</p><div class=\"doc-grid\"><a href=\"#documentation/4fb28c09432c\" data-route=\"documentation/4fb28c09432c\" class=\"\">Architecture<small>projects/entra-cloud-sync/architecture.md</small></a></div></section><section class=\"content-block\" id=\"implementation\"><h2>Implementation & administration</h2><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Project 02 · COMPLETE</p><h2>Microsoft Entra Hybrid Identity &amp; Cloud Sync</h2><p class=\"lead\">Hybrid identity provisioning from on-premises Active Directory to Microsoft Entra ID with scoped users, groups, Password Hash Sync, and troubleshooting evidence.</p><div class=\"actions\"><a class=\"button primary\" data-route=\"projects\" href=\"#projects\">Back to projects</a><a class=\"button\" data-route=\"evidence\" href=\"#evidence\">Review proof index</a></div></div></section><section class=\"section\"><div class=\"wrap\"><div class=\"metric-strip\"><div class=\"metric\"><strong>AD → Entra</strong><span>Provisioning</span></div><div class=\"metric\"><strong>20 min</strong><span>Cloud Sync cycle</span></div><div class=\"metric\"><strong>PHS</strong><span>Password sync</span></div><div class=\"metric\"><strong>Validated</strong><span>Agent health</span></div></div></div></section><section class=\"section\"><div class=\"wrap case-layout\"><article><section class=\"content-block\" id=\"source-b29b31fd-scope\"><p class=\"eyebrow\">Scope</p><h2>Controlled AD-to-Entra provisioning</h2><p>Microsoft Entra Cloud Sync is already working in the lab. The project focuses on scoped provisioning, source authority, password synchronization, agent health, and evidence-driven troubleshooting without rebuilding the working sync service.</p></section><section class=\"content-block\" id=\"source-b29b31fd-design\"><p class=\"eyebrow\">Design</p><h2>Dedicated synchronization scope</h2><p>Cloud-bound identities are organized in a dedicated AD OU and use the verified <strong>jeremyfontenot.online</strong> UPN domain. Test users and groups are separated from unrelated directory objects.</p></section><section class=\"content-block\" id=\"source-b29b31fd-validation\"><p class=\"eyebrow\">Validation</p><h2>Provisioning behavior and source authority</h2><p>Validation covers users, groups, AD source authority, Cloud Sync agent state, and the expected fixed provisioning interval. Password Hash Sync is treated as a separate flow with different timing.</p></section><section class=\"content-block\" id=\"source-b29b31fd-troubleshooting\"><p class=\"eyebrow\">Troubleshooting</p><h2>Logs before resets</h2><p>Provisioning-agent trace logs and directory state are used before any restart or rebuild. The 20-minute Cloud Sync provisioning interval is accounted for before treating changes as failures.</p></section><section class=\"content-block\" id=\"source-b29b31fd-evidence\"><p class=\"eyebrow\">Evidence</p><h2>Sanitized validation</h2><ul class=\"evidence-list\"><li><a href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence index<span>Hybrid identity validation artifacts</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/microsoft-365/evidence-catalog.html\" rel=\"noopener noreferrer\" target=\"_blank\">Microsoft 365 evidence catalog<span>Preserved identity and tenant evidence</span></a></li></ul></section></article><aside class=\"case-nav panel\"><p class=\"eyebrow\">Case study</p><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Controlled AD-to-Entra provisioning</a><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Dedicated synchronization scope</a><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Provisioning behavior and source authority</a><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Logs before resets</a><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Validation links</a></aside></div></section></div><details><summary>Microsoft Entra Hybrid Identity &amp; Cloud Sync <small> / README.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/175635baeeb5\" data-route=\"documentation/175635baeeb5\" class=\"\">Open document page</a></div><h2>Microsoft Entra Hybrid Identity &amp; Cloud Sync</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<h2>Overview</h2>\n<p>This project demonstrates a validated hybrid identity implementation using Microsoft Entra Cloud Sync to synchronize selected Active Directory users and groups from an on-premises Windows Server environment to Microsoft Entra ID.</p>\n<p>The project focuses on controlled identity lifecycle validation, source-of-authority verification, Password Hash Synchronization, security-group synchronization, provisioning-log analysis, and troubleshooting without rebuilding the existing working Cloud Sync deployment.</p>\n<h2>Environment</h2>\n<h3>On-Premises</h3>\n<ul>\n<li>Active Directory domain: <code>ad.jeremyfontenot.online</code></li>\n<li>NetBIOS domain: <code>JFAD</code></li>\n<li>Domain Controller: <code>DC01</code></li>\n<li>DC01 IP: <code>10.10.20.10</code></li>\n<li>Operating System: Windows Server 2022</li>\n<li>Domain functional level: Windows Server 2016</li>\n</ul>\n<h3>Cloud Sync</h3>\n<ul>\n<li>Cloud Sync server: <code>SYNC01</code></li>\n<li>SYNC01 IP: <code>10.10.20.105</code></li>\n<li>Operating System: Windows Server 2022</li>\n<li>Synchronization technology: Microsoft Entra Cloud Sync</li>\n<li>Password Hash Synchronization: Enabled</li>\n</ul>\n<h3>Microsoft Entra</h3>\n<ul>\n<li>Verified domain: <code>jeremyfontenot.online</code></li>\n<li>Synchronization direction: Active Directory → Microsoft Entra ID</li>\n</ul>\n<h2>Cloud Sync Scope</h2>\n<p>Synchronization is intentionally limited to:</p>\n<p><code>OU=Cloud Sync,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online</code></p>\n<p>This provides a controlled boundary for hybrid identity testing without synchronizing unrelated Active Directory objects.</p>\n<h2>Validated Capabilities</h2>\n<p>The project successfully validated:</p>\n<ul>\n<li>Cloud Sync provisioning-agent health</li>\n<li>Dedicated OU scoping</li>\n<li>New user provisioning from Active Directory to Microsoft Entra ID</li>\n<li>On-premises attribute synchronization</li>\n<li>Password Hash Synchronization</li>\n<li>Cloud authentication after an on-premises password change</li>\n<li>Security-group synchronization</li>\n<li>Group-membership synchronization</li>\n<li>Provisioning logs</li>\n<li>Source-anchor correlation</li>\n<li>Source-of-authority behavior</li>\n<li>Provisioning-failure review</li>\n<li>Cloud Sync troubleshooting</li>\n</ul>\n<h2>Controlled Lifecycle Test</h2>\n<p>The primary test identity was:</p>\n<p><code>cloudsync.test01@jeremyfontenot.online</code></p>\n<p>The lifecycle test validated:</p>\n<ol>\n<li>Creation in on-premises Active Directory</li>\n<li>Placement in the dedicated Cloud Sync OU</li>\n<li>Provisioning to Microsoft Entra ID</li>\n<li>Synchronization of the <code>Department</code> attribute</li>\n<li>Password change on-premises</li>\n<li>Successful Microsoft Entra authentication with the updated password</li>\n<li>Membership in <code>GG-CloudSync-Test</code></li>\n<li>Security-group and membership synchronization</li>\n<li>Provisioning-log confirmation</li>\n<li>Source-anchor and immutable-ID correlation</li>\n</ol>\n<h2>Source of Authority</h2>\n<p>For the synchronized objects tested in this project, on-premises Active Directory remained the authoritative identity source.</p>\n<p>The identity relationship was validated by correlating:</p>\n<ul>\n<li>Active Directory <code>objectGUID</code></li>\n<li>Cloud Sync <code>SourceAnchor</code></li>\n<li>Microsoft Entra on-premises immutable ID</li>\n<li>Provisioning-log source and target identifiers</li>\n</ul>\n<h2>Synchronization Timing</h2>\n<p>Observed Cloud Sync intervals:</p>\n<ul>\n<li>Users and Groups provisioning: 20 minutes</li>\n<li>Password Hash Synchronization: 5 minutes</li>\n</ul>\n<p>These separate intervals were accounted for during validation and troubleshooting.</p>\n<h2>Troubleshooting Highlights</h2>\n<p>During validation, the Cloud Sync agent reported a permissions-related metrics error involving access to the registry key <code>Global</code>.</p>\n<p>The provisioning agent gMSA was added to the local <code>Performance Log Users</code> group on <code>SYNC01</code>.</p>\n<p>After the agent service restarted:</p>\n<ul>\n<li>the registry-access error did not recur</li>\n<li>the metrics agent initialized successfully</li>\n<li>Cloud Sync remained active</li>\n<li>user synchronization succeeded</li>\n<li>group synchronization succeeded</li>\n<li>Password Hash Synchronization succeeded</li>\n</ul>\n<p>The existing Cloud Sync installation was preserved.</p>\n<h2>Project Documentation</h2>\n<ul>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/architecture.md\" rel=\"noopener noreferrer\" target=\"_blank\">Architecture</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/implementation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Implementation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Validation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/troubleshooting.md\" rel=\"noopener noreferrer\" target=\"_blank\">Troubleshooting</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/lessons-learned.md\" rel=\"noopener noreferrer\" target=\"_blank\">Lessons Learned</a></li>\n</ul>\n<h2>Security and Evidence Handling</h2>\n<p>Portfolio evidence is sanitized.</p>\n<p>The project does not publish:</p>\n<ul>\n<li>passwords</li>\n<li>authentication tokens</li>\n<li>session cookies</li>\n<li>private keys</li>\n<li>VPN credentials</li>\n<li>other authentication secrets</li>\n</ul>\n<h2>Technologies Demonstrated</h2>\n<ul>\n<li>Windows Server 2022</li>\n<li>Active Directory Domain Services</li>\n<li>Microsoft Entra ID</li>\n<li>Microsoft Entra Cloud Sync</li>\n<li>Password Hash Synchronization</li>\n<li>Group Managed Service Accounts</li>\n<li>PowerShell</li>\n<li>PowerShell Remoting</li>\n<li>Microsoft Entra provisioning logs</li>\n<li>Hybrid identity troubleshooting</li>\n</ul>\n<h2>Validation Script</h2>\n<p>A reusable PowerShell validation script is included at:</p>\n<p><code>scripts/Test-CloudSyncADState.ps1</code></p>\n<p>The script validates the current on-premises source state for:</p>\n<ul>\n<li><code>cloudsync.test01</code></li>\n<li><code>GG-CloudSync-Test</code></li>\n<li>Direct group membership</li>\n<li>Objects located in the dedicated Cloud Sync OU</li>\n</ul>\n<p>The script is designed to be executed against a domain controller with the Active Directory PowerShell module available.</p>\n<p>Example execution from the administrative workstation:</p>\n<pre><code class=\"language-powershell\">Invoke-Command -Session $dc -FilePath \".\\scripts\\Test-CloudSyncADState.ps1\"\n</code></pre>\n<p>The script provides repeatable evidence of the Active Directory state without modifying directory objects.</p>\n<h2>Interview Explanation</h2>\n<p>I built and validated a hybrid identity lab using Microsoft Entra Cloud Sync between an on-premises Active Directory environment and Microsoft Entra ID.</p>\n<p>The environment uses Windows Server 2022 with a dedicated Cloud Sync server and a scoped synchronization OU. I preserved the existing working Cloud Sync deployment rather than rebuilding it.</p>\n<p>For the validation, I created a controlled Active Directory user and confirmed that it provisioned to Microsoft Entra. I then changed a supported on-premises attribute, verified the cloud update, changed the user password on-premises, and validated Password Hash Synchronization by successfully authenticating to Microsoft Entra with the new password.</p>\n<p>I also created a security group, synchronized the group and its membership, reviewed provisioning logs, and correlated the Active Directory objectGUID with the Cloud Sync source anchor and the Microsoft Entra immutable ID.</p>\n<p>During troubleshooting, I identified a permissions issue affecting Cloud Sync metrics, corrected the gMSA permissions on SYNC01, and validated that the agent remained healthy. I also documented the difference between the 20-minute Users and Groups provisioning interval and the 5-minute Password Hash Sync interval so that normal propagation delay is not mistaken for a failure.</p>\n<p>The project demonstrates hybrid identity administration, Active Directory, Microsoft Entra ID, Cloud Sync, Password Hash Synchronization, group synchronization, PowerShell remoting, provisioning-log analysis, and evidence-based troubleshooting.</p>\n<h2>Resume Bullet</h2>\n<ul>\n<li>Built and validated a Microsoft Entra hybrid identity lab using Windows Server 2022 Active Directory and Microsoft Entra Cloud Sync, including scoped user and security-group synchronization, Password Hash Synchronization, attribute lifecycle testing, source-anchor correlation, provisioning-log analysis, gMSA troubleshooting, and PowerShell-based remote administration.</li>\n</ul>\n<h2>LinkedIn Project Description</h2>\n<p>Built and validated a Microsoft Entra hybrid identity lab integrating Windows Server 2022 Active Directory with Microsoft Entra ID through Microsoft Entra Cloud Sync.</p>\n<p>The project included controlled user provisioning, attribute synchronization, Password Hash Synchronization, security-group and group-membership synchronization, source-anchor correlation, provisioning-log analysis, and PowerShell-based remote administration.</p>\n<p>I also troubleshot Cloud Sync agent permissions using event logs, validated the provisioning agent gMSA configuration, and confirmed the difference between the 20-minute Users and Groups provisioning cycle and the separate 5-minute Password Hash Sync cycle.</p>\n<p>Technologies used: Windows Server 2022, Active Directory Domain Services, Microsoft Entra ID, Microsoft Entra Cloud Sync, Password Hash Synchronization, gMSA, PowerShell, PowerShell Remoting, and Entra provisioning logs.</p></div></details><details><summary>Architecture <small> / architecture.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/architecture.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/4fb28c09432c\" data-route=\"documentation/4fb28c09432c\" class=\"\">Open document page</a></div><h2>Architecture</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<h2>Hybrid Identity Architecture</h2>\n<p>This project uses Microsoft Entra Cloud Sync to synchronize selected identities from on-premises Active Directory to Microsoft Entra ID.</p>\n<h2>Core Components</h2>\n<h3>On-Premises Active Directory</h3>\n<ul>\n<li>Domain: <code>ad.jeremyfontenot.online</code></li>\n<li>NetBIOS: <code>JFAD</code></li>\n<li>Domain Controller: <code>DC01</code></li>\n<li>IP address: <code>10.10.20.10</code></li>\n<li>Operating System: Windows Server 2022</li>\n<li>Domain functional level: Windows Server 2016</li>\n</ul>\n<p>Directory services provided by DC01 include:</p>\n<ul>\n<li>Active Directory Domain Services</li>\n<li>DNS</li>\n<li>DHCP</li>\n<li>Kerberos</li>\n<li>Global Catalog</li>\n<li>Active Directory Web Services</li>\n</ul>\n<h3>Cloud Sync Server</h3>\n<ul>\n<li>Server: <code>SYNC01</code></li>\n<li>IP address: <code>10.10.20.105</code></li>\n<li>Operating System: Windows Server 2022</li>\n<li>Role: Microsoft Entra Cloud Sync provisioning agent host</li>\n</ul>\n<p>The Cloud Sync agent runs under an existing group Managed Service Account.</p>\n<h3>Microsoft Entra ID</h3>\n<ul>\n<li>Verified domain: <code>jeremyfontenot.online</code></li>\n<li>Synchronization direction: Active Directory to Microsoft Entra ID</li>\n<li>Synchronization technology: Microsoft Entra Cloud Sync</li>\n<li>Password Hash Synchronization: Enabled</li>\n</ul>\n<h2>Synchronization Scope</h2>\n<p>Cloud Sync is intentionally limited to:</p>\n<p><code>OU=Cloud Sync,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online</code></p>\n<p>This dedicated OU provides a controlled boundary for synchronized users and groups without broadly synchronizing unrelated Active Directory objects.</p>\n<h2>Identity Flow</h2>\n<p>The validated identity path is:</p>\n<p><code>DC01 Active Directory</code>\n→ <code>Dedicated Cloud Sync OU</code>\n→ <code>SYNC01 Microsoft Entra Cloud Sync Agent</code>\n→ <code>Microsoft Entra ID</code></p>\n<p>Password changes follow a separate Password Hash Synchronization process through the same Cloud Sync deployment.</p>\n<h2>Validated Object Types</h2>\n<p>The project validated synchronization of:</p>\n<ul>\n<li>User objects</li>\n<li>User attributes</li>\n<li>Security groups</li>\n<li>Group membership</li>\n<li>Password hashes</li>\n</ul>\n<h2>Source of Authority</h2>\n<p>For the identities tested in this project, on-premises Active Directory is the authoritative source.</p>\n<p>Microsoft Entra receives synchronized identity data through Cloud Sync.</p>\n<p>The identity relationship was validated through:</p>\n<ul>\n<li>Active Directory <code>objectGUID</code></li>\n<li>Cloud Sync <code>SourceAnchor</code></li>\n<li>Microsoft Entra on-premises immutable ID</li>\n<li>Provisioning-log source and target identifiers</li>\n</ul>\n<h2>Synchronization Timing</h2>\n<p>Observed configuration intervals:</p>\n<ul>\n<li>Users and Groups provisioning: 20 minutes</li>\n<li>Password Hash Synchronization: 5 minutes</li>\n</ul>\n<p>These are separate processing cycles and should be considered during troubleshooting.</p>\n<h2>Administrative Access Model</h2>\n<p>The administrative laptop is not domain joined.</p>\n<p>Administration is therefore performed primarily through:</p>\n<ul>\n<li>PowerShell Remoting to <code>DC01</code></li>\n<li>PowerShell Remoting to <code>SYNC01</code></li>\n<li>Microsoft Entra admin center</li>\n</ul>\n<p>This avoids relying on laptop Kerberos or domain-integrated RSAT functionality.</p>\n<h2>Design Principle</h2>\n<p>The architecture preserves the existing working Cloud Sync deployment.</p>\n<p>No additional synchronization engine was introduced, and Microsoft Entra Connect Sync was not installed simply to obtain manual delta-sync capability.</p>\n<h2>Cloud Sync vs. Microsoft Entra Connect Sync</h2>\n<p>This lab uses Microsoft Entra Cloud Sync rather than Microsoft Entra Connect Sync.</p>\n<h3>Microsoft Entra Cloud Sync</h3>\n<p>Cloud Sync uses a lightweight provisioning agent installed on <code>SYNC01</code>.</p>\n<p>In this lab it provides:</p>\n<ul>\n<li>Active Directory to Microsoft Entra ID user synchronization</li>\n<li>Security-group synchronization</li>\n<li>Group-membership synchronization</li>\n<li>Password Hash Synchronization</li>\n<li>OU-based scoping</li>\n<li>Cloud-managed provisioning configuration</li>\n<li>Provisioning-log visibility in Microsoft Entra</li>\n</ul>\n<p>The observed Users and Groups provisioning interval is 20 minutes.</p>\n<h3>Microsoft Entra Connect Sync</h3>\n<p>Microsoft Entra Connect Sync uses the traditional synchronization engine installed on a Windows Server.</p>\n<p>A key operational difference relevant to this lab is that Connect Sync supports administrator-triggered synchronization cycles, such as a delta synchronization, whereas the Cloud Sync Users and Groups provisioning job operates on its service-managed schedule.</p>\n<p>Connect Sync was not installed in this project because the existing Cloud Sync deployment was already functioning and introducing another synchronization engine was unnecessary for the project objectives.</p>\n<h3>Design Decision</h3>\n<p>Cloud Sync was retained because it already met the requirements of this controlled hybrid identity implementation.</p>\n<p>The architecture therefore remained:</p>\n<p><code>Active Directory</code>\n→ <code>Microsoft Entra Cloud Sync</code>\n→ <code>Microsoft Entra ID</code></p>\n<p>rather than adding Microsoft Entra Connect Sync solely to obtain manually triggered synchronization cycles.</p>\n<p>This preserves the existing working infrastructure and avoids overlapping synchronization engines for the same test objects.</p></div></details><details><summary>Evidence Manifest <small> / README.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/824e99df914f\" data-route=\"documentation/824e99df914f\" class=\"\">Open document page</a></div><h2>Evidence Manifest</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<p>This folder contains sanitized evidence and supporting visuals for the Microsoft Entra Hybrid Identity &amp; Cloud Sync project.</p>\n<h2>Captured Evidence</h2>\n<ol>\n<li><code>02-cloudsync-test01-initial-provisioning.png</code></li>\n<li>\n<p>Initial synchronized user in Microsoft Entra</p>\n</li>\n<li>\n<p><code>03-cloudsync-test01-attribute-sync.png</code></p>\n</li>\n<li>\n<p>Department attribute synchronized to <code>Hybrid Identity Lab</code></p>\n</li>\n<li>\n<p><code>04-cloudsync-test01-password-hash-sync.png</code></p>\n</li>\n<li>\n<p>Successful Microsoft Entra authentication after on-premises password change</p>\n</li>\n<li>\n<p><code>05-cloudsync-group-membership.png</code></p>\n</li>\n<li>\n<p><code>Cloud Sync Test 01</code> synchronized as a member of <code>GG-CloudSync-Test</code></p>\n</li>\n<li>\n<p><code>06-cloudsync-user-provisioning-log.png</code></p>\n</li>\n<li>\n<p>Successful user import, scope evaluation, and provisioning</p>\n</li>\n<li>\n<p><code>07-cloudsync-user-modified-properties.png</code></p>\n</li>\n<li>\n<p>User attribute and source-anchor processing</p>\n</li>\n<li>\n<p><code>08-cloudsync-source-authority.png</code></p>\n</li>\n<li>\n<p>On-premises synchronization and immutable-ID evidence</p>\n</li>\n<li>\n<p><code>09-cloudsync-overview-health.png</code></p>\n</li>\n<li>\n<p>Healthy Cloud Sync configuration and synchronization counts</p>\n</li>\n<li>\n<p><code>10-cloudsync-no-failures.png</code></p>\n</li>\n<li>\n<p>Final provisioning-log failure review with no results</p>\n</li>\n<li>\n<p><code>11-cloudsync-group-provisioning-log.png</code></p>\n<ul>\n<li>Successful group provisioning event</li>\n</ul>\n</li>\n<li>\n<p><code>12-cloudsync-group-modified-properties.png</code></p>\n<ul>\n<li>Group membership/source-anchor processing</li>\n</ul>\n</li>\n<li>\n<p><code>13-cloudsync-group-summary.png</code></p>\n<ul>\n<li>AD-to-Entra group provisioning summary</li>\n</ul>\n</li>\n<li>\n<p><code>14-cloudsync-agent-status.png</code></p>\n<ul>\n<li>SYNC01 Cloud Sync agent shown as Active</li>\n</ul>\n</li>\n<li>\n<p><code>15-cloudsync-ou-scope.png</code></p>\n<ul>\n<li>Dedicated Cloud Sync OU scope</li>\n</ul>\n</li>\n<li>\n<p><code>16-cloudsync-group-attribute-mapping.png</code></p>\n<ul>\n<li>Group attribute mappings</li>\n</ul>\n</li>\n</ol>\n<h2>Supporting Visuals</h2>\n<ul>\n<li><code>01-cloudsync-architecture.png</code></li>\n<li><code>02-identity-lifecycle.png</code></li>\n<li><code>03-source-anchor-correlation.png</code></li>\n<li><code>04-sync-timing.png</code></li>\n<li><code>05-troubleshooting-flow.png</code></li>\n<li><code>06-validation-summary.png</code></li>\n<li><code>07-cloudsync-vs-connect-sync.png</code></li>\n</ul>\n<p>These visuals summarize only validated Project 2 lab architecture, workflow, timing, troubleshooting, and validation results.</p>\n<h2>Evidence Note</h2>\n<p>The original pre-test OU baseline was captured as PowerShell output rather than as a screenshot. No screenshot was fabricated for that step.</p>\n<h2>Sanitization Requirements</h2>\n<p>Before publishing evidence, verify screenshots do not expose:</p>\n<ul>\n<li>passwords</li>\n<li>authentication tokens</li>\n<li>session cookies</li>\n<li>bearer tokens</li>\n<li>private keys</li>\n<li>VPN credentials</li>\n<li>recovery secrets</li>\n<li>other authentication secrets</li>\n</ul>\n<p>Directory object GUIDs, source anchors, lab UPNs, server names, and lab IP addresses may remain where intentionally used as technical evidence.</p></div></details><details><summary>Implementation <small> / implementation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/implementation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/23159e4114b3\" data-route=\"documentation/23159e4114b3\" class=\"\">Open document page</a></div><h2>Implementation</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<h2>Existing Hybrid Identity Architecture</h2>\n<p>This project uses an existing Microsoft Entra Cloud Sync deployment. The synchronization infrastructure was already operational before this validation project and was not rebuilt.</p>\n<h3>On-Premises Active Directory</h3>\n<ul>\n<li>Domain: <code>ad.jeremyfontenot.online</code></li>\n<li>NetBIOS domain: <code>JFAD</code></li>\n<li>Domain Controller: <code>DC01</code></li>\n<li>Domain Controller IP: <code>10.10.20.10</code></li>\n<li>Operating System: Windows Server 2022</li>\n<li>Domain functional level: Windows Server 2016</li>\n</ul>\n<p>DC01 provides:</p>\n<ul>\n<li>Active Directory Domain Services</li>\n<li>DNS</li>\n<li>DHCP</li>\n<li>Kerberos</li>\n<li>Global Catalog</li>\n<li>Active Directory Web Services</li>\n</ul>\n<h3>Microsoft Entra</h3>\n<ul>\n<li>Verified domain: <code>jeremyfontenot.online</code></li>\n<li>Synchronization technology: Microsoft Entra Cloud Sync</li>\n<li>Cloud Sync server: <code>SYNC01</code></li>\n<li>SYNC01 IP: <code>10.10.20.105</code></li>\n<li>Operating System: Windows Server 2022</li>\n</ul>\n<h2>Cloud Sync Scope</h2>\n<p>Synchronization is intentionally limited to the dedicated organizational unit:</p>\n<p><code>OU=Cloud Sync,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online</code></p>\n<p>The scope was validated in the Microsoft Entra admin center before performing the controlled identity lifecycle test.</p>\n<h2>Controlled Test User</h2>\n<p>A dedicated test identity was created in the Cloud Sync OU:</p>\n<ul>\n<li>Display name: <code>Cloud Sync Test 01</code></li>\n<li>SAM account name: <code>cloudsync.test01</code></li>\n<li>UPN: <code>cloudsync.test01@jeremyfontenot.online</code></li>\n<li>Enabled: Yes</li>\n<li>Password expiration: Disabled for the controlled lab account</li>\n</ul>\n<p>The account was created on-premises and allowed to synchronize through the existing Cloud Sync configuration.</p>\n<h2>Attribute Synchronization Test</h2>\n<p>The on-premises <code>Department</code> attribute was changed to:</p>\n<p><code>Hybrid Identity Lab</code></p>\n<p>The value was first validated in Active Directory and subsequently verified in Microsoft Entra.</p>\n<h2>Password Hash Synchronization Test</h2>\n<p>The controlled user's password was changed on-premises.</p>\n<p>The change was validated by:</p>\n<ol>\n<li>Confirming a new <code>PasswordLastSet</code> timestamp in Active Directory.</li>\n<li>Authenticating successfully to Microsoft Entra using the updated password.</li>\n</ol>\n<p>No password value was recorded in project evidence.</p>\n<h2>Security Group Synchronization Test</h2>\n<p>A controlled Active Directory security group was created:</p>\n<ul>\n<li>Group: <code>GG-CloudSync-Test</code></li>\n<li>Category: Security</li>\n<li>Scope: Global</li>\n<li>Location: Dedicated Cloud Sync OU</li>\n</ul>\n<p><code>cloudsync.test01</code> was added as a direct member.</p>\n<p>After the normal Cloud Sync provisioning cycle, Microsoft Entra showed:</p>\n<ul>\n<li>Source: Windows Server AD</li>\n<li>Type: Security</li>\n<li>One synchronized direct user member</li>\n</ul>\n<h2>Synchronization Intervals Observed</h2>\n<p>The Cloud Sync configuration reports:</p>\n<ul>\n<li>Users and Groups provisioning interval: 20 minutes</li>\n<li>Password Hash Sync interval: 5 minutes</li>\n</ul>\n<p>These separate synchronization schedules were accounted for during validation to distinguish expected propagation delay from actual synchronization failures.</p>\n<h2>Provisioning Agent</h2>\n<p>The existing agent on <code>SYNC01</code> was retained.</p>\n<p>Agent validation confirmed:</p>\n<ul>\n<li>Service: <code>AADConnectProvisioningAgent</code></li>\n<li>Service state: Running</li>\n<li>Startup mode: Automatic</li>\n<li>Microsoft Entra agent status: Active</li>\n</ul>\n<p>The agent runs under its existing group Managed Service Account and was not reinstalled or replaced.</p>\n<h2>Implementation Principle</h2>\n<p>All lifecycle changes originated in on-premises Active Directory. Microsoft Entra was treated as the synchronized target for the tested identities and attributes.</p>\n<p>Existing Cloud Sync infrastructure was preserved throughout the project.</p></div></details><details><summary>Lessons Learned <small> / lessons-learned.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/lessons-learned.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/8d050c4af940\" data-route=\"documentation/8d050c4af940\" class=\"\">Open document page</a></div><h2>Lessons Learned</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<h2>Preserve Working Infrastructure</h2>\n<p>The existing Microsoft Entra Cloud Sync deployment was already functioning and did not need to be rebuilt.</p>\n<p>A key operational lesson from this project was to validate the current state before making changes. The working agent, OU scope, Password Hash Synchronization, and existing synchronized users provided a known-good baseline.</p>\n<h2>Understand Cloud Sync Timing</h2>\n<p>Microsoft Entra Cloud Sync uses separate synchronization intervals for different functions.</p>\n<p>Observed in this lab:</p>\n<ul>\n<li>Users and Groups provisioning: 20 minutes</li>\n<li>Password Hash Synchronization: 5 minutes</li>\n</ul>\n<p>A newly created or modified directory object should not be treated as failed until the expected provisioning interval has been considered.</p>\n<p>This distinction prevents unnecessary troubleshooting, restarts, or configuration changes.</p>\n<h2>Source of Authority Matters</h2>\n<p>For synchronized identities, on-premises Active Directory remained the authoritative source for the tested attributes.</p>\n<p>Changes were made in Active Directory first and then validated in Microsoft Entra.</p>\n<p>The source relationship was verified using:</p>\n<ul>\n<li>Active Directory <code>objectGUID</code></li>\n<li>Base64 source-anchor conversion</li>\n<li>Microsoft Entra on-premises immutable ID</li>\n<li>Provisioning log source and target identifiers</li>\n</ul>\n<h2>Source Anchors Provide Strong Identity Correlation</h2>\n<p>The controlled user's Active Directory <code>objectGUID</code> was converted to its Base64 source-anchor representation.</p>\n<p>That value matched the Microsoft Entra on-premises immutable ID and the provisioning-log source anchor.</p>\n<p>This provided direct evidence that the cloud identity was linked to the intended on-premises AD object.</p>\n<h2>Password Hash Synchronization Is Independent of User Provisioning Timing</h2>\n<p>Password Hash Synchronization completed on a shorter cycle than Users and Groups provisioning.</p>\n<p>Successful Microsoft Entra authentication after an on-premises password change provided practical proof that Password Hash Synchronization was functioning.</p>\n<h2>Group Synchronization Includes Membership Relationships</h2>\n<p>Creating a synchronized group is only part of group lifecycle validation.</p>\n<p>This project also confirmed that:</p>\n<ul>\n<li>The security group synchronized to Microsoft Entra</li>\n<li>The user membership synchronized</li>\n<li>Provisioning logs processed the membership relationship</li>\n<li>The group <code>Member</code> property referenced the synchronized user's source anchor</li>\n</ul>\n<h2>Provisioning Logs Are Essential Troubleshooting Evidence</h2>\n<p>Provisioning logs provided visibility into:</p>\n<ul>\n<li>Import from Active Directory</li>\n<li>Scope evaluation</li>\n<li>Provisioning into Microsoft Entra ID</li>\n<li>Modified properties</li>\n<li>Source IDs</li>\n<li>Target IDs</li>\n<li>Success or failure status</li>\n</ul>\n<p>They were more useful for determining actual synchronization behavior than relying only on portal object visibility.</p>\n<h2>Service Running Does Not Mean Every Component Is Healthy</h2>\n<p>The provisioning agent service was Running while the event log still contained performance-counter errors.</p>\n<p>Reviewing the agent event log identified a permissions issue affecting the metrics collector.</p>\n<p>Adding the provisioning gMSA to the local <code>Performance Log Users</code> group resolved the registry-access error without reinstalling Cloud Sync.</p>\n<h2>Validate Commands in Their Correct Context</h2>\n<p><code>Test-ADServiceAccount</code> returned <code>False</code> when executed on DC01 because the Cloud Sync gMSA was assigned for use by SYNC01.</p>\n<p>The result demonstrated the importance of understanding what a validation command actually tests before interpreting its output as a failure.</p>\n<h2>Do Not Troubleshoot Normal Delay as an Outage</h2>\n<p>The group initially appeared missing from Microsoft Entra because a Users and Groups provisioning cycle had not yet completed.</p>\n<p>The object eventually synchronized successfully after the expected Cloud Sync interval.</p>\n<p>The main operational lesson is:</p>\n<blockquote>\n<p>Confirm the synchronization schedule before escalating normal propagation delay into troubleshooting.</p>\n</blockquote>\n<h2>Portfolio Evidence Should Be Sanitized</h2>\n<p>Useful evidence includes:</p>\n<ul>\n<li>AD object properties</li>\n<li>OU scope</li>\n<li>provisioning status</li>\n<li>group membership</li>\n<li>provisioning logs</li>\n<li>source-anchor correlation</li>\n<li>synchronization timestamps</li>\n<li>agent health</li>\n</ul>\n<p>Passwords, tokens, authentication secrets, private keys, and other credentials should never be included in portfolio evidence.</p></div></details><details><summary>Troubleshooting <small> / troubleshooting.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/troubleshooting.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/649e173ee41c\" data-route=\"documentation/649e173ee41c\" class=\"\">Open document page</a></div><h2>Troubleshooting</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<h2>Cloud Sync Agent Validation</h2>\n<p>The existing Microsoft Entra Cloud Sync agent on <code>SYNC01</code> was preserved and not reinstalled.</p>\n<p>Validation confirmed:</p>\n<ul>\n<li>Service name: <code>AADConnectProvisioningAgent</code></li>\n<li>Service state: Running</li>\n<li>Startup mode: Automatic</li>\n<li>Service account: existing gMSA</li>\n<li>Entra agent status: Active</li>\n<li>Outbound TCP 443 connectivity to the Cloud Sync bootstrap endpoint: Successful</li>\n</ul>\n<h2>gMSA Validation</h2>\n<p>The provisioning agent runs under:</p>\n<p><code>JFAD\\pGMSA_126bbe50$</code></p>\n<p>Active Directory validation confirmed that <code>SYNC01</code> is authorized to retrieve the gMSA managed password.</p>\n<p>A <code>Test-ADServiceAccount</code> command executed from <code>DC01</code> returned <code>False</code>.</p>\n<p>This result was not treated as evidence that the gMSA was broken because <code>Test-ADServiceAccount</code> validates whether the computer executing the command can use the account. The Cloud Sync gMSA is assigned to <code>SYNC01</code>, not <code>DC01</code>.</p>\n<h2>Performance Counter Permission Issue</h2>\n<p>The Cloud Sync agent event log initially contained:</p>\n<ul>\n<li>Event ID <code>12033</code></li>\n<li>Error indicating access to the registry key <code>Global</code> was denied</li>\n</ul>\n<p>The local <code>Performance Log Users</code> group on <code>SYNC01</code> contained no members.</p>\n<p>The Cloud Sync gMSA was added to the local:</p>\n<p><code>Performance Log Users</code></p>\n<p>group.</p>\n<p>After the agent service was restarted, the previous registry-access error did not recur and the event log reported:</p>\n<ul>\n<li>Event ID <code>14013</code></li>\n<li><code>Metrics Agent was initialized successfully.</code></li>\n</ul>\n<h2>Remaining Performance Counter Event</h2>\n<p>The agent also logged Event ID <code>12009</code> indicating failure to initialize performance counters.</p>\n<p>Because:</p>\n<ul>\n<li>the provisioning agent remained Running</li>\n<li>Microsoft Entra reported the agent as Active</li>\n<li>the metrics agent initialized successfully</li>\n<li>user synchronization succeeded</li>\n<li>Password Hash Synchronization succeeded</li>\n<li>group synchronization succeeded</li>\n<li>provisioning logs showed successful processing</li>\n</ul>\n<p>the agent was not reinstalled based solely on this event.</p>\n<h2>Cloud Sync Provisioning Delay</h2>\n<p>During group synchronization testing, the newly created <code>GG-CloudSync-Test</code> group did not immediately appear in Microsoft Entra.</p>\n<p>Initial troubleshooting verified:</p>\n<ul>\n<li>The group existed in Active Directory</li>\n<li>ObjectClass was <code>group</code></li>\n<li>The group was located inside the configured Cloud Sync OU</li>\n<li>The Cloud Sync job contained a Groups attribute mapping</li>\n<li>OU scope was correct</li>\n<li>The provisioning agent was active</li>\n<li>Outbound connectivity was successful</li>\n</ul>\n<p>The Cloud Sync Overview later confirmed that Users and Groups provisioning uses a fixed:</p>\n<p><code>20 minute</code></p>\n<p>interval.</p>\n<p>After the expected provisioning cycle completed, the group appeared successfully in Microsoft Entra with its synchronized member.</p>\n<p>This behavior was documented as normal propagation delay rather than a synchronization failure.</p>\n<h2>Provision on Demand Limitation Encountered</h2>\n<p>A group was tested through the AD-to-Entra <code>Provision on demand</code> interface.</p>\n<p>The request returned:</p>\n<p><code>ResourceNotFound</code></p>\n<p>with a message indicating the input entry was not found or was out of scope.</p>\n<p>Further inspection of the interface showed that this AD-to-Entra provisioning workflow was operating on user objects.</p>\n<p>The group test result was therefore not used as evidence of a failed group synchronization.</p>\n<h2>Final Health Validation</h2>\n<p>At the end of testing:</p>\n<ul>\n<li>Cloud Sync configuration: Healthy</li>\n<li>Cloud Sync agent: Active</li>\n<li>Users synchronized: 4</li>\n<li>Groups synchronized: 1</li>\n<li>Password Hash Sync: Enabled</li>\n<li>Provisioning failure filter for the final validation window: No results</li>\n</ul>\n<h2>Troubleshooting Principle</h2>\n<p>The environment was troubleshot from observed evidence rather than by reinstalling Cloud Sync or changing scope without cause.</p>\n<p>The working synchronization infrastructure was preserved throughout the project.</p></div></details><details><summary>Validation <small> / validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/c16a404bc237\" data-route=\"documentation/c16a404bc237\" class=\"\">Open document page</a></div><h2>Validation</h2>\n<h2>Project Status</h2>\n<p>COMPLETE</p>\n<h2>Controlled Identity Lifecycle Test</h2>\n<h3>User Provisioning</h3>\n<ul>\n<li>Source user: <code>cloudsync.test01</code></li>\n<li>Source UPN: <code>cloudsync.test01@jeremyfontenot.online</code></li>\n<li>Source OU: <code>OU=Cloud Sync,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online</code></li>\n<li>Microsoft Entra provisioning: Validated</li>\n<li>On-premises sync enabled: Yes</li>\n</ul>\n<h3>Attribute Synchronization</h3>\n<ul>\n<li>Attribute tested: <code>Department</code></li>\n<li>On-premises value: <code>Hybrid Identity Lab</code></li>\n<li>Microsoft Entra value: <code>Hybrid Identity Lab</code></li>\n<li>Result: Validated</li>\n</ul>\n<h3>Password Hash Synchronization</h3>\n<ul>\n<li>Password changed on-premises</li>\n<li>Microsoft Entra authentication succeeded using the updated password</li>\n<li>Result: Validated</li>\n</ul>\n<h3>Group Synchronization</h3>\n<ul>\n<li>Source group: <code>GG-CloudSync-Test</code></li>\n<li>Group type: Global Security</li>\n<li>Source: Windows Server Active Directory</li>\n<li>Microsoft Entra provisioning: Validated</li>\n<li>Direct synchronized members: 1</li>\n<li>Member: <code>Cloud Sync Test 01</code></li>\n</ul>\n<h3>Source Anchor Correlation</h3>\n<ul>\n<li>AD ObjectGUID: <code>1e49a065-aa0d-4415-87d2-ee0ad0f4f1d2</code></li>\n<li>Calculated source anchor: <code>ZaBJHg2qFUSH0u4K0PTx0g==</code></li>\n<li>Microsoft Entra on-premises immutable ID matched the calculated source anchor</li>\n<li>Result: Validated</li>\n</ul>\n<h3>Cloud Sync Health</h3>\n<ul>\n<li>Configuration status: Healthy</li>\n<li>Provisioning agent: Active</li>\n<li>Users synchronized: 4</li>\n<li>Groups synchronized: 1</li>\n<li>Users/groups provisioning interval: 20 minutes</li>\n<li>Password Hash Sync interval: 5 minutes</li>\n<li>Provisioning failures in final validation window: None</li>\n</ul>\n<h2>Overall Result</h2>\n<p>The controlled hybrid identity lifecycle test successfully validated Active Directory to Microsoft Entra provisioning, attribute synchronization, Password Hash Synchronization, security-group synchronization, membership synchronization, provisioning logs, and source-anchor correlation.</p>\n<h2>Validation Matrix</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Validation Area</th>\n<th>Source / Test</th>\n<th>Expected Result</th>\n<th>Actual Result</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Cloud Sync agent service</td>\n<td><code>SYNC01</code> service state</td>\n<td>Running / Automatic</td>\n<td>Running / Automatic</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Cloud Sync agent in Entra</td>\n<td>Cloud Sync Agents page</td>\n<td>Active</td>\n<td>Active</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>OU scope</td>\n<td>Dedicated Cloud Sync OU</td>\n<td>Correct OU selected</td>\n<td>Correct OU selected</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>New user creation</td>\n<td><code>cloudsync.test01</code></td>\n<td>Enabled in scoped OU</td>\n<td>Enabled in scoped OU</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>User provisioning</td>\n<td>AD → Microsoft Entra</td>\n<td>User appears in Entra</td>\n<td>User synchronized successfully</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Attribute synchronization</td>\n<td><code>Department</code></td>\n<td><code>Hybrid Identity Lab</code> in Entra</td>\n<td>Value synchronized</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Password Hash Sync</td>\n<td>On-prem password change</td>\n<td>New password authenticates to Entra</td>\n<td>Authentication successful</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Security group sync</td>\n<td><code>GG-CloudSync-Test</code></td>\n<td>Group appears in Entra</td>\n<td>Group synchronized</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Group membership sync</td>\n<td><code>cloudsync.test01</code> membership</td>\n<td>Member appears in Entra group</td>\n<td>Membership synchronized</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Source anchor correlation</td>\n<td>AD <code>objectGUID</code> → Base64</td>\n<td>Matches Entra immutable ID</td>\n<td>Exact match confirmed</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Provisioning logs</td>\n<td>User provisioning event</td>\n<td>Successful processing</td>\n<td>Success</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Group provisioning logs</td>\n<td>Group provisioning event</td>\n<td>Successful processing</td>\n<td>Success</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Provisioning failures</td>\n<td>Final failure review</td>\n<td>No current failures</td>\n<td>No results</td>\n<td>COMPLETE</td>\n</tr>\n<tr>\n<td>Agent outbound connectivity</td>\n<td>Microsoft bootstrap endpoint TCP 443</td>\n<td>Connection succeeds</td>\n<td><code>TcpTestSucceeded = True</code></td>\n<td>COMPLETE</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Lifecycle Validation Result</h2>\n<p>The controlled identity lifecycle test is COMPLETE.</p>\n<p>The broader portfolio project remains IN PROGRESS until final portfolio presentation material and evidence files are organized and committed.</p></div></details></section><section class=\"content-block\" id=\"troubleshooting\"><h2>Troubleshooting</h2><p>Provisioning logs, source-anchor correlation, OU scope, and agent traces were inspected before resets. The retained implementation distinguishes the 20-minute user/group interval from the separate Password Hash Sync process.</p><div class=\"doc-grid\"><a href=\"#documentation/649e173ee41c\" data-route=\"documentation/649e173ee41c\" class=\"\">Troubleshooting<small>projects/entra-cloud-sync/troubleshooting.md</small></a></div></section><section class=\"content-block\" id=\"validation\"><h2>Validation & results</h2><p>User and group synchronization, Password Hash Sync, source authority, provisioning logs, and agent health are documented as validated.</p><div class=\"doc-grid\"><a href=\"#documentation/c16a404bc237\" data-route=\"documentation/c16a404bc237\" class=\"\">Validation<small>projects/entra-cloud-sync/validation.md</small></a></div></section><section class=\"content-block\" id=\"evidence\"><h2>Evidence</h2><p>STRONG — lifecycle validation, provisioning logs, source-anchor correlation, Password Hash Sync, group sync, troubleshooting, and a validation script are documented.</p><div class=\"doc-grid\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">README.md<small>Retained documentation supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/architecture.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">architecture.md<small>Retained documentation supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/01-cloudsync-architecture.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">01-cloudsync-architecture.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/02-cloudsync-test01-initial-provisioning.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">02-cloudsync-test01-initial-provisioning.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/02-identity-lifecycle.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">02-identity-lifecycle.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/03-cloudsync-test01-attribute-sync.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">03-cloudsync-test01-attribute-sync.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/03-source-anchor-correlation.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">03-source-anchor-correlation.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/04-cloudsync-test01-password-hash-sync.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">04-cloudsync-test01-password-hash-sync.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/04-sync-timing.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">04-sync-timing.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/evidence/05-cloudsync-group-membership.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">05-cloudsync-group-membership.png<small>Retained screenshots supporting Microsoft Entra Hybrid Identity &amp; Cloud Sync.</small> <span aria-hidden=\"true\">↗</span></a></div><div class=\"source-links\"><a href=\"#evidence\" data-route=\"evidence\" class=\"\">Browse and filter the complete evidence library</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub project source <span aria-hidden=\"true\">↗</span></a></div></section><section class=\"content-block\" id=\"skills\"><h2>Skills demonstrated</h2><div class=\"tags\"><span class=\"tag\">Entra ID</span><span class=\"tag\">Cloud Sync</span><span class=\"tag\">Password Hash Sync</span><span class=\"tag\">AD DS</span></div><a href=\"#skills\" data-route=\"skills\" class=\"\">View the complete capability map →</a></section><section class=\"content-block\" id=\"limitations\"><h2>Limitations & claim boundaries</h2><div class=\"note\">Personal hybrid-identity lab. On-premises AD remains the source of authority for the tested synchronized objects. Scope is intentionally limited to the documented Cloud Sync OU.</div></section><section class=\"content-block\" id=\"next\"><h2>Next milestones</h2><p>Maintenance-only unless Cloud Sync scope, agent placement, or tenant configuration changes.</p></section></article></div><section class=\"section\"><p class=\"eyebrow\">Continue exploring</p><h2>Related projects</h2><div class=\"grid grid-2\"><article class=\"project-card\" data-project data-category=\"Identity &amp; security\" data-search=\"windows laps &amp; advanced group policy encrypted local administrator passwords, scoped group policy, delegated readers, and positive and negative access tests. windows laps active directory group policy powershell\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 01</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Windows LAPS &amp; Advanced Group Policy</a></h3><p>Encrypted local administrator passwords, scoped Group Policy, delegated readers, and positive and negative access tests.</p><div class=\"tags\"><span class=\"tag\">Windows LAPS</span><span class=\"tag\">Active Directory</span><span class=\"tag\">Group Policy</span><span class=\"tag\">PowerShell</span></div><div class=\"card-footer\"><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article></div></section>",
    "active": "Projects"
  },
  "projects/on-prem-home-lab": {
    "title": "On-Premises Microsoft Home Lab",
    "description": "A Microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Project 03 / Infrastructure</p><h1>On-Premises Microsoft Home Lab</h1><p class=\"lead\">A Microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests.</p><div class=\"tags\"><span class=\"status\">COMPLETE</span><span class=\"tag\">Validated lab work</span></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub documentation <span aria-hidden=\"true\">↗</span></a><a href=\"https://jeremyfontenot.online/on-prem-home-lab.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original portfolio <span aria-hidden=\"true\">↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"\">Evidence library</a></div></div><div class=\"case-layout\"><aside class=\"case-toc\"><p class=\"eyebrow\">Inside this case study</p><a href=\"#overview\" data-anchor=\"overview\">Overview</a><a href=\"#scenario\" data-anchor=\"scenario\">Operational scenario & objectives</a><a href=\"#environment\" data-anchor=\"environment\">Environment & technologies</a><a href=\"#architecture\" data-anchor=\"architecture\">Architecture</a><a href=\"#implementation\" data-anchor=\"implementation\">Implementation & administration</a><a href=\"#troubleshooting\" data-anchor=\"troubleshooting\">Troubleshooting</a><a href=\"#validation\" data-anchor=\"validation\">Validation & results</a><a href=\"#evidence\" data-anchor=\"evidence\">Evidence</a><a href=\"#skills\" data-anchor=\"skills\">Skills demonstrated</a><a href=\"#limitations\" data-anchor=\"limitations\">Limitations & claim boundaries</a><a href=\"#next\" data-anchor=\"next\">Next milestones</a></aside><article><section class=\"content-block\" id=\"overview\"><h2>Overview</h2><p>A Microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests.</p><p><strong>Classification:</strong> Validated lab work.</p></section><section class=\"content-block\" id=\"scenario\"><h2>Operational scenario & objectives</h2><p>Build and validate a repeatable environment for systems administration while keeping backup inventory, service health, and restore assurance as distinct claims.</p></section><section class=\"content-block\" id=\"environment\"><h2>Environment & technologies</h2><p>Dell PowerEdge R710 with Proxmox VE. The retained platform inventory documents pfSense, DC01, WS01, and Linux01; subsystem records cover nested Hyper-V and management servers.</p><div class=\"tags\"><span class=\"tag\">Proxmox</span><span class=\"tag\">Windows Server</span><span class=\"tag\">pfSense</span><span class=\"tag\">Linux</span></div></section><section class=\"content-block\" id=\"architecture\"><h2>Architecture</h2><p>Dell PowerEdge R710 with Proxmox VE. The retained platform inventory documents pfSense, DC01, WS01, and Linux01; subsystem records cover nested Hyper-V and management servers.</p><div class=\"doc-grid\"></div><a href=\"#architecture\" data-route=\"architecture\" class=\"\">Explore infrastructure architecture →</a></section><section class=\"content-block\" id=\"implementation\"><h2>Implementation & administration</h2><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Project 03 · COMPLETE · validated scope</p><h2>On-Premises Microsoft Home Lab</h2><p class=\"lead\">A Microsoft-centered home lab for Windows, identity, networking, virtualization, hybrid management, Linux, macOS, backup, and restore practice.</p><div class=\"actions\"><a class=\"button primary\" data-route=\"projects\" href=\"#projects\">Back to projects</a><a class=\"button\" data-route=\"evidence\" href=\"#evidence\">Review proof index</a></div></div></section><section class=\"section\"><div class=\"wrap\"><div class=\"metric-strip\"><div class=\"metric\"><strong>AD DS</strong><span>Identity</span></div><div class=\"metric\"><strong>Hyper-V</strong><span>Virtualization</span></div><div class=\"metric\"><strong>pfSense</strong><span>Network edge</span></div><div class=\"metric\"><strong>Restore</strong><span>Validated</span></div></div></div></section><section class=\"section\"><div class=\"wrap case-layout\"><article><section class=\"content-block\" id=\"source-d28cc488-architecture\"><p class=\"eyebrow\">Architecture</p><h2 id=\"source-d28cc488-overview\">One lab, multiple operating systems and Microsoft management layers</h2><p>The environment centers on pfSense networking, Windows Server Active Directory, Hyper-V, SCVMM, Windows Admin Center, Azure Arc, Linux, macOS, backup, and restore assurance. Proxmox provides the underlying virtualization platform for several lab systems.</p></section><section class=\"content-block\" id=\"source-d28cc488-systems\"><p class=\"eyebrow\">Systems</p><h2>Cross-platform systems supporting Microsoft administration</h2><p>Core systems include DC01, WS01, HVHOST01, VMM01, APP01, Linux01, macOS, and pfSense. Each system has a defined role and is documented as lab infrastructure, not production enterprise ownership.</p></section><section class=\"content-block\" id=\"source-d28cc488-operations\"><p class=\"eyebrow\">Operations</p><h2 id=\"source-d28cc488-skills\">Identity, networking, remote administration, backup</h2><p>Operational work includes AD DS, DNS, DHCP, WinRM, RDP, Windows Admin Center, virtualization networking, pfSense rules, OpenVPN access, backup schedules, and restore validation.</p></section><section class=\"content-block\" id=\"source-d28cc488-restore\"><p class=\"eyebrow\">Restore validation</p><h2 id=\"source-d28cc488-restore-validation\">Backup archives were exercised, not just created</h2><p>Restore assurance is treated as an operational control. Validation focuses on recoverability, isolated testing, service checks, and documented evidence.</p></section><section class=\"content-block\" id=\"source-d28cc488-limits\"><p class=\"eyebrow\">Scope and limitations</p><h2>Personal-lab validation, not production ownership</h2><p>The evidence documents a bounded lab. Restore results include both narrow PASS and INCONCLUSIVE outcomes; no disaster-recovery readiness, RTO, RPO, clustering, or high-availability claim is made.</p></section><section class=\"content-block\" id=\"source-d28cc488-evidence\"><p class=\"eyebrow\">Evidence</p><h2 id=\"source-d28cc488-artifacts\">Sanitized validation</h2><ul class=\"evidence-list\"><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/README.html\" rel=\"noopener noreferrer\" target=\"_blank\">Current validated state<span>Supported claims and direct evidence links</span></a></li><li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/home-lab/evidence-catalog.html\" rel=\"noopener noreferrer\" target=\"_blank\">Home-lab evidence catalog<span>Curated infrastructure evidence</span></a></li><li><a data-route=\"evidence\" href=\"#evidence\">Proof summary<span>Recruiter-facing claim summary</span></a></li></ul></section></article><aside class=\"case-nav panel\"><p class=\"eyebrow\">Case study</p><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">One lab, multiple operating systems and Microsoft management layers</a><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Cross-platform systems supporting Microsoft administration</a><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Identity, networking, remote administration, backup</a><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Backup archives were exercised, not just created</a><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Validation links</a></aside></div></section></div><details><summary>Current Validated State <small> / README.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/README.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/85e602a93ca1\" data-route=\"documentation/85e602a93ca1\" class=\"\">Open document page</a></div><h2>Current Validated State</h2>\n<p>This public evidence folder summarizes reviewer-safe records from the private home-lab operations repository without exposing private repository links. Public claims use stable classifications instead of date-based proof labels. The <code>direct-evidence/</code> folder contains sanitized direct artifacts for the current infrastructure claims.</p>\n<h2>Document</h2>\n<ul>\n<li>Title: Jeremy Fontenot’s On-Premises Home Lab Documentation</li>\n<li>Filename: <code>Jeremy-Fontenot-On-Premises-Home-Lab-Documentation.docx</code></li>\n<li>Download description: Download the Professional Home Lab Documentation (.docx)</li>\n<li>SHA-256: <code>D7E81A06DCFBD2E91EB8F52A02BDC795AC5B7084A70F343233F1104CCD297BDB</code></li>\n</ul>\n<h2>Source Commits</h2>\n<ul>\n<li>Website source commit at generation: <code>effdbeb0ed8d632a0b0c93328cd593cf85c3eb46</code></li>\n<li>Home-lab source commit for direct evidence: <code>fb6c286873285778d88d6d5cfde0b9bd00b96f36</code></li>\n</ul>\n<h2>Supported Public Claims</h2>\n<ul>\n<li>Personal nonproduction lab hosted on Dell PowerEdge R710 with Proxmox VE 9.2.3.</li>\n<li>pfSense, DC01, WS01, and Linux01 are the primary lab VMs described by current records.</li>\n<li>Linux01 current supported placement is VLAN 30 at <code>10.10.30.20/24</code>; older <code>10.10.20.x</code> Linux01 evidence is historical.</li>\n<li>DC01 direct evidence supports Windows Server 2022, AD DS, DNS, DHCP, Group Policy Management, Global Catalog status, FSMO ownership, and DC01 IP.</li>\n<li>WS01 direct evidence supports Windows 10 Pro, domain membership, secure channel, and current network state.</li>\n<li>Linux01 direct evidence supports Ubuntu 26.04 LTS, kernel, VLAN 30, current IP/gateway/DNS, current-versus-historical address boundary, and directly proven domain integration indicators.</li>\n<li>Linux01 SSSD remediation is documented as remediated and validated for Linux01 only.</li>\n<li>Backup job configuration and retained backup counts are supported; all-recent-backups-succeeded, recurring disaster-recovery assurance, RTO, and RPO are not claimed.</li>\n<li>One isolated Linux01 restore drill is supported; it does not prove recurring restore assurance.</li>\n</ul>\n<h2>Direct Evidence Links</h2>\n<ul>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-platform-inventory.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct Proxmox inventory</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-configuration.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct backup configuration</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-inventory.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct backup inventory</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-restore-validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct restore validation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/dc01-system-and-role-validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct DC01 validation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/ws01-system-and-domain-validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct WS01 validation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-system-network-domain-validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct Linux01 validation</a></li>\n<li><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-sssd-remediation-validation.md\" rel=\"noopener noreferrer\" target=\"_blank\">Open direct SSSD remediation validation</a></li>\n</ul>\n<h2>Limitations</h2>\n<p>Personal lab evidence does not represent employer production administration, client infrastructure ownership, enterprise scale, guaranteed uptime, full firewall assurance, or full security assurance. Timeout observations remain timeout observations. The restore evidence is one isolated Linux01 restore drill only and does not establish recurring restore assurance, RTO, RPO, SLA, or disaster-recovery readiness.</p></div></details><details><summary>DC01 System and Role Validation <small> / dc01-system-and-role-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/dc01-system-and-role-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/313d07c59108\" data-route=\"documentation/313d07c59108\" class=\"\">Open document page</a></div><h2>DC01 System and Role Validation</h2>\n<h2>Claim supported</h2>\n<p>Direct DC01 inventory supports Windows Server, installed role, domain, Global Catalog, FSMO, and DC01 IP claims for the personal nonproduction lab.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Operating system: Microsoft Windows Server 2022 Standard Evaluation.</li>\n<li>Version: 10.0.20348.</li>\n<li>Build number: 20348.</li>\n<li>Active Directory Domain Services installed: AD-Domain-Services, InstallState 1.</li>\n<li>DNS Server installed: DNS, InstallState 1.</li>\n<li>DHCP Server installed: DHCP, InstallState 1.</li>\n<li>Group Policy Management installed: GPMC, InstallState 1.</li>\n<li>Domain DNS root: ad.jeremyfontenot.online.</li>\n<li>NetBIOS domain: JFAD.</li>\n<li>Domain controller host: DC01.ad.jeremyfontenot.online.</li>\n<li>DC01 IPv4 address: 10.10.20.10.</li>\n<li>Global Catalog: true.</li>\n<li>FSMO roles on DC01: PDC Emulator, RID Master, Infrastructure Master, Schema Master, and Domain Naming Master.</li>\n</ul>\n<h2>Source command or source object</h2>\n<p>Authenticated DC01 target-local inventory result objects: OperatingSystem, InstalledRolesFeatures, Domain, Forest, and DomainControllers.</p>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<p><code>inventories/dc01-inventory-20260626-022543.json</code></p>\n<h2>Source file SHA-256</h2>\n<p><code>inventories/dc01-inventory-20260626-022543.json</code>: F60A6DD8C9EE42E90B02B210B1B1A775F89E5C3DED26618B593DEE1362C6DE42</p>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed executing account, privileged group details, SIDs, object GUIDs, GPO GUIDs, unrelated installed features, event details, raw time values not needed for the claim, and unrelated command output. Retained DC01 IP because it is already part of the current public home-lab evidence boundary.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only.</li>\n<li>This artifact validates collected DC01 inventory values only.</li>\n<li>It does not prove ongoing Active Directory health, production readiness, security assurance, employer-system administration, or service availability beyond the captured inventory.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Validated</p></div></details><details><summary>Linux01 SSSD Remediation Validation <small> / linux01-sssd-remediation-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-sssd-remediation-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/bb9fe57b6085\" data-route=\"documentation/bb9fe57b6085\" class=\"\">Open document page</a></div><h2>Linux01 SSSD Remediation Validation</h2>\n<h2>Claim supported</h2>\n<p>Direct Linux01 remediation evidence supports a narrow Linux01-only SSSD responder/socket conflict remediation and post-remediation validation.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Initial condition: SSSD NSS, PAM, and PAC sockets were enabled and failed.</li>\n<li>Initial condition: SSSD was configured for direct responder activation through <code>services = nss, pam</code>.</li>\n<li>Initial condition: <code>config_file_version = 2</code> was rejected by SSSD 2.12 config validation.</li>\n<li>Remediation action: removed only the rejected <code>config_file_version = 2</code> directive.</li>\n<li>Remediation action: disabled conflicting NSS, PAM, and PAC sockets.</li>\n<li>Remediation action: restarted sssd.service.</li>\n<li>Remediation action: cleared failed-unit state.</li>\n<li>Post-remediation service state: sssd.service enabled and active/running.</li>\n<li>Post-remediation failed-unit state: zero failed units.</li>\n<li>SSSD configuration validation: passed.</li>\n<li>AD identity lookup: passed.</li>\n<li>New AD-authenticated SSH session: passed.</li>\n<li>Initial diagnostic SHA-256: 3CAD0FB73202D777D41DEE40D6F4D19D4019B9AD30552B37970B55A5CA5AB3BB.</li>\n<li>Original/backup configuration SHA-256: 23ACE1BECA5FF6F7D58200EFE054EA8E5A938E02F37FCE25B1CA1B5D2F05BD14.</li>\n<li>Post-remediation diagnostic SHA-256: FD55604BFB94487B86FBF631703FA995B9726471689385CCB2D277492AA7CBEE.</li>\n</ul>\n<h2>Source command or source object</h2>\n<p>Linux01 SSSD remediation evidence record.</p>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<p><code>evidence/linux01-sssd-remediation-20260626-110159.md</code></p>\n<h2>Source file SHA-256</h2>\n<p><code>evidence/linux01-sssd-remediation-20260626-110159.md</code>: 04773570FBE305353F5EB370B8F9629AC335E35A7BEF7151A2CBB98D7371CC49</p>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed diagnostic artifact paths, backup filesystem path, account context, raw command history, and implementation details not needed to support the remediation claim. Retained hashes because they are part of the validation evidence.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only.</li>\n<li>Linux01 only.</li>\n<li>This does not claim that all Linux domain-authentication paths were tested.</li>\n<li>This does not prove production readiness, employer-system administration, or recurring assurance.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Validated</p></div></details><details><summary>Linux01 System, Network, and Domain Validation <small> / linux01-system-network-domain-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-system-network-domain-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/f442266b3082\" data-route=\"documentation/f442266b3082\" class=\"\">Open document page</a></div><h2>Linux01 System, Network, and Domain Validation</h2>\n<h2>Claim supported</h2>\n<p>Direct Linux01 inventory, Proxmox inventory, and source reconciliation evidence support Linux01 VM association, Ubuntu version, kernel, VLAN, IP addressing, DNS, gateway, current-versus-historical address boundary, and directly proven domain integration state.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Proxmox VM association: VM 400 name linux01, running.</li>\n<li>Operating system: Ubuntu 26.04 LTS.</li>\n<li>Kernel: Linux 7.0.0-22-generic.</li>\n<li>Architecture: x86_64.</li>\n<li>VLAN: 30, from current source reconciliation.</li>\n<li>Interface state: ens18 UP.</li>\n<li>Current IPv4 address: 10.10.30.20/24.</li>\n<li>Default gateway: 10.10.30.1.</li>\n<li>DNS server: 10.10.20.10.</li>\n<li>DNS domain: ad.jeremyfontenot.online.</li>\n<li>Current-versus-historical boundary: current Linux01 address is 10.10.30.20/24; older Linux01 10.10.20.x evidence is historical.</li>\n<li>Domain integration state: realmd reports ad.jeremyfontenot.online configured as a Kerberos member, server software active-directory, client software SSSD, and domain identity resolution returned <code>resolved</code>.</li>\n<li>Kerberos configuration: present.</li>\n</ul>\n<h2>Source command or source object</h2>\n<ul>\n<li>Authenticated Linux01 target-local inventory result objects: Distribution, Kernel, IP addresses, Routes, DNS, realmd, Domain identity resolution, and Kerberos config.</li>\n<li>Proxmox read-only inventory object: <code>virtualMachines[]</code> entry for VM 400.</li>\n<li>Source reconciliation table for Linux01 VLAN and current-versus-historical address boundary.</li>\n</ul>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<ul>\n<li><code>inventories/linux01-inventory-20260626-084312.json</code></li>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code></li>\n<li><code>evidence/home-lab-source-reconciliation-20260626-012606.md</code></li>\n</ul>\n<h2>Source file SHA-256</h2>\n<ul>\n<li><code>inventories/linux01-inventory-20260626-084312.json</code>: 75F82AF4882FA9C869C78C1AC127C5D4F37C5CB62F4E8894361A352695EFC40D</li>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code>: D652D1EF753E14242C07F84F19FBF09F642F07C3B09CFE2E98AA7F2B176ADE3D</li>\n<li><code>evidence/home-lab-source-reconciliation-20260626-012606.md</code>: 2D377A7A6703F8C3C5FBB77AA093569806DDB7939CFA88FD6A0ECF801484C3EE</li>\n</ul>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed executing account, machine identifiers, link-local IPv6 address, raw boot/session identifiers, unrelated package/service details, unnecessary filesystem paths, and distro metadata not needed for the public claim.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only.</li>\n<li>Domain integration is limited to the directly observed realmd, SSSD client, Kerberos config, and identity-resolution indicators.</li>\n<li>This artifact does not claim that all Linux domain-authentication paths were tested.</li>\n<li>Timeout or listener observations are not complete firewall validation.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Validated</p></div></details><details><summary>Proxmox Backup Configuration <small> / proxmox-backup-configuration.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-configuration.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/fa0beca36156\" data-route=\"documentation/fa0beca36156\" class=\"\">Open document page</a></div><h2>Proxmox Backup Configuration</h2>\n<h2>Claim supported</h2>\n<p>Direct Proxmox backup configuration evidence supports the configured weekly snapshot job for primary lab VMs.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Backup job ID: backup-critical-lab-vms.</li>\n<li>Enabled state: enabled.</li>\n<li>Schedule: Sunday 02:00 (<code>sun 02:00</code>).</li>\n<li>Mode: snapshot.</li>\n<li>Compression: zstd.</li>\n<li>Retention: keep-last=4.</li>\n<li>Storage target: backup-hdd.</li>\n<li>Target VMs: 100, 200, 300, and 400.</li>\n</ul>\n<h2>Source command or source object</h2>\n<ul>\n<li>Proxmox read-only inventory object: <code>backupJobs[]</code>.</li>\n<li>Backup and restore validation text: backup job block with prune/retention details.</li>\n</ul>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<ul>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code></li>\n<li><code>evidence/home-lab-backup-restore-validation-20260629.txt</code></li>\n</ul>\n<h2>Source file SHA-256</h2>\n<ul>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code>: D652D1EF753E14242C07F84F19FBF09F642F07C3B09CFE2E98AA7F2B176ADE3D</li>\n<li><code>evidence/home-lab-backup-restore-validation-20260629.txt</code>: 4637E848C9B318B8C74BB9C6E4569B3CC03E6686CE64FA367CF6DEC05FA52E13</li>\n</ul>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed scheduling metadata not needed for the claim, command context, host details, and any unrelated storage, VM, or task information.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Configuration presence does not prove that every recent backup task succeeded.</li>\n<li>This artifact does not claim successful recent backups for VMs 200 or 300 because no direct recent OK task output is published here.</li>\n<li>This artifact does not prove restore integrity, RTO, RPO, recurring restore assurance, or disaster-recovery readiness.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Configured</p></div></details><details><summary>Proxmox Backup Inventory <small> / proxmox-backup-inventory.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-inventory.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/39f7bbaf9ecb\" data-route=\"documentation/39f7bbaf9ecb\" class=\"\">Open document page</a></div><h2>Proxmox Backup Inventory</h2>\n<h2>Claim supported</h2>\n<p>Direct backup inventory evidence supports active backup-hdd storage, retained archive presence by VM count, and the boundary that archive presence is not the same as recurring restore assurance.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Storage: backup-hdd.</li>\n<li>Storage path retained as claim-relevant evidence: <code>/mnt/pve/backup-hdd</code>.</li>\n<li>Storage status from current inventory: type <code>dir</code>, content <code>backup</code>, total 982,809,350,144 bytes, used 172,812,951,552 bytes, available 759,996,993,536 bytes.</li>\n<li>Backup validation storage view: 916 GB size, 127 GB used, 743 GB available, 15 percent used.</li>\n<li>Retained backup counts: VM 100 count 4, VM 200 count 4, VM 300 count 4, VM 400 count 4.</li>\n<li>No successful recent per-VM vzdump task status is claimed from this artifact.</li>\n<li>Operational limitation retained: Proxmox thin-pool risk is visible. The retained storage source directly shows a 428 GB thin pool and provisioned VM/snapshot thin volumes that exceed that physical thin-pool size. The requested auto-extension warning is retained as a limitation boundary; the retained source set inspected for this publication does not include a separate thin-pool auto-extension configuration dump.</li>\n</ul>\n<h2>Source command or source object</h2>\n<ul>\n<li>Proxmox read-only inventory object: <code>storage[]</code>.</li>\n<li>Backup and restore validation text: backup counts and storage block.</li>\n<li>Retained public storage evidence: Proxmox storage status, logical volume, and thin-pool usage sections.</li>\n</ul>\n<h2>Source repository</h2>\n<ul>\n<li>fontenotjeremy71-hub/jeremy-homelab-ops</li>\n<li>fontenotjeremy71-hub/jeremyfontenot, for the retained older public storage limitation artifact</li>\n</ul>\n<h2>Source commit</h2>\n<ul>\n<li>Operations source: fb6c286873285778d88d6d5cfde0b9bd00b96f36</li>\n<li>Website retained public evidence source: 5813445f3cc828e2146773299c47967292da7fd5</li>\n</ul>\n<h2>Source path</h2>\n<ul>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code></li>\n<li><code>evidence/home-lab-backup-restore-validation-20260629.txt</code></li>\n<li><code>evidence-library/projects/on-prem-home-lab/validated-2026-06-21/text/proxmox-storage-validation.txt</code></li>\n</ul>\n<h2>Source file SHA-256</h2>\n<ul>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code>: D652D1EF753E14242C07F84F19FBF09F642F07C3B09CFE2E98AA7F2B176ADE3D</li>\n<li><code>evidence/home-lab-backup-restore-validation-20260629.txt</code>: 4637E848C9B318B8C74BB9C6E4569B3CC03E6686CE64FA367CF6DEC05FA52E13</li>\n<li><code>evidence-library/projects/on-prem-home-lab/validated-2026-06-21/text/proxmox-storage-validation.txt</code>: 7F069AA31390D90D99F0000D6F6236A2B60F5D28F061668C0BBD5054FA93741F</li>\n</ul>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed PIDs, unrelated filesystems, device identifiers not needed for the claim, snapshot parent names, raw command history, and backup archive filenames. Retained the backup storage path because it is the public claim being validated.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only.</li>\n<li>Backup archive count does not prove backup integrity.</li>\n<li>No claim is made that all recent backup tasks succeeded.</li>\n<li>The thin-pool warning is an operational limitation and is not framed as a failed backup or failed restore.</li>\n<li>No RTO, RPO, production disaster-recovery readiness, or recurring restore assurance is claimed.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Documented / Limitation</p></div></details><details><summary>Proxmox Platform Inventory <small> / proxmox-platform-inventory.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-platform-inventory.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/05a0e7fbeefa\" data-route=\"documentation/05a0e7fbeefa\" class=\"\">Open document page</a></div><h2>Proxmox Platform Inventory</h2>\n<h2>Claim supported</h2>\n<p>Direct Proxmox inventory supports the personal nonproduction lab platform claim for Proxmox VE, primary VM IDs, VM names, running state, allocated vCPU, memory, disk, bridge placement, guest-agent state, and Linux01 VLAN tag where captured.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Proxmox VE version: 9.2.3.</li>\n<li>Proxmox kernel: Linux 7.0.12-1-pve.</li>\n<li>VM 100: pfsense-fw, running, 2 vCPU, 4 GB memory, 32 GB disk, bridges vmbr0 and vmbr1, guest agent not configured and not responding.</li>\n<li>VM 200: dc01, running, 2 vCPU, 4 GB memory, 80 GB disk, bridge vmbr1, guest agent not configured and not responding.</li>\n<li>VM 300: ws01, running, 2 vCPU, 4 GB memory, 80 GB disk, bridge vmbr1, guest agent not configured and not responding.</li>\n<li>VM 400: linux01, running, 2 vCPU, 2 GB memory, 40 GB disk, bridge vmbr1, guest agent configured and responding.</li>\n<li>Linux01 VLAN tag: 30, from the retained source reconciliation record.</li>\n</ul>\n<h2>Source command or source object</h2>\n<ul>\n<li>Proxmox read-only inventory object: <code>version</code>, <code>node.kernel</code>, <code>virtualMachines[]</code>, and <code>storage[]</code>.</li>\n<li>Source reconciliation object: current command/API evidence row for Linux01 Proxmox VM tag.</li>\n</ul>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<ul>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code></li>\n<li><code>evidence/home-lab-source-reconciliation-20260626-012606.md</code></li>\n</ul>\n<h2>Source file SHA-256</h2>\n<ul>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code>: D652D1EF753E14242C07F84F19FBF09F642F07C3B09CFE2E98AA7F2B176ADE3D</li>\n<li><code>evidence/home-lab-source-reconciliation-20260626-012606.md</code>: 2D377A7A6703F8C3C5FBB77AA093569806DDB7939CFA88FD6A0ECF801484C3EE</li>\n</ul>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed node uptime, repository ID, host resource details not needed for the public claim, snapshot parent names, raw paths unrelated to the platform claim, and any fields not required to prove the listed inventory values.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only; this does not prove ongoing availability.</li>\n<li>Proxmox inventory does not prove guest operating-system health, pfSense firewall policy, Active Directory health, backup restore integrity, or Windows service state.</li>\n<li>Linux01 VLAN tag is supported by the reconciliation source, not by the VM list object alone.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Validated</p></div></details><details><summary>Proxmox Restore Validation <small> / proxmox-restore-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-restore-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/9f8e98caeacd\" data-route=\"documentation/9f8e98caeacd\" class=\"\">Open document page</a></div><h2>Proxmox Restore Validation</h2>\n<h2>Claim supported</h2>\n<p>Direct restore validation evidence supports one isolated Linux01 restore drill from source VM 400 to temporary VM 401.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Source VM: 400.</li>\n<li>Temporary restore VM: 401.</li>\n<li>Restored disk size boundary: VM 400 boot disk shown as 40 GB in the retained restore validation source.</li>\n<li>Temporary VM network isolation: temporary VM network isolated before boot.</li>\n<li>Guest validation: Ubuntu 26.04 LTS boot and QEMU Guest Agent response were validated in the retained restore evidence.</li>\n<li>Cleanup: temporary VM 401 was shut down and purged successfully.</li>\n<li>The source set inspected for this publication does not include a retained per-command restore transcript with archive filename, progress percentage, or literal final <code>TASK OK</code> line; those details are therefore not claimed here.</li>\n<li>Operational limitation retained: Proxmox thin-pool risk remains visible and is not framed as a failed restore.</li>\n</ul>\n<h2>Source command or source object</h2>\n<p>Backup and restore validation text: VM state and restore drill sections.</p>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<p><code>evidence/home-lab-backup-restore-validation-20260629.txt</code></p>\n<h2>Source file SHA-256</h2>\n<p><code>evidence/home-lab-backup-restore-validation-20260629.txt</code>: 4637E848C9B318B8C74BB9C6E4569B3CC03E6686CE64FA367CF6DEC05FA52E13</p>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed PIDs and retained only the VM IDs, restore scope, network isolation, guest identity, guest-agent response, and cleanup outcome needed to support the public claim.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only.</li>\n<li>One isolated Linux01 restore drill only.</li>\n<li>No recurring restore assurance.</li>\n<li>No RTO or RPO claim.</li>\n<li>No disaster-recovery readiness, SLA, production, or employer-system claim.</li>\n<li>Thin-pool warnings are operational limitations and are not evidence of a failed restore.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Tested</p></div></details><details><summary>WS01 System and Domain Validation <small> / ws01-system-and-domain-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/ws01-system-and-domain-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/34b581f1eabe\" data-route=\"documentation/34b581f1eabe\" class=\"\">Open document page</a></div><h2>WS01 System and Domain Validation</h2>\n<h2>Claim supported</h2>\n<p>Direct WS01 inventory and Proxmox inventory support the WS01 system, VM association, domain membership, and network-state claims for the personal nonproduction lab.</p>\n<h2>Directly observed values</h2>\n<ul>\n<li>Proxmox VM association: VM 300 name ws01, running.</li>\n<li>Windows edition: Microsoft Windows 10 Pro.</li>\n<li>Windows version: 10.0.19045.</li>\n<li>Windows build: 19045.</li>\n<li>Domain membership: WS01 is part of domain ad.jeremyfontenot.online.</li>\n<li>Secure channel result: true.</li>\n<li>Network interface: Ethernet.</li>\n<li>IPv4 address: 10.10.20.100.</li>\n<li>Default gateway: 10.10.20.1.</li>\n<li>DNS server: 10.10.20.10.</li>\n<li>DHCP enabled: true.</li>\n<li>DHCP server: 10.10.20.10.</li>\n<li>Current supported OS reconciliation: Windows 10 Pro 10.0.19045 is the supported current value in the retained WS01 inventory.</li>\n</ul>\n<h2>Source command or source object</h2>\n<ul>\n<li>Authenticated WS01 target-local inventory result objects: OperatingSystem, NetworkConfiguration, DomainMembership, and SecureChannel.</li>\n<li>Proxmox read-only inventory object: <code>virtualMachines[]</code> entry for VM 300.</li>\n</ul>\n<h2>Source repository</h2>\n<p>fontenotjeremy71-hub/jeremy-homelab-ops</p>\n<h2>Source commit</h2>\n<p>fb6c286873285778d88d6d5cfde0b9bd00b96f36</p>\n<h2>Source path</h2>\n<ul>\n<li><code>inventories/ws01-inventory-20260626-012952.json</code></li>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code></li>\n</ul>\n<h2>Source file SHA-256</h2>\n<ul>\n<li><code>inventories/ws01-inventory-20260626-012952.json</code>: 1438FA0F72F241E2613C5D35B797492FFC754B0E818A74154DE38DD74082A6B1</li>\n<li><code>inventories/proxmox-inventory-20260626-010601.json</code>: D652D1EF753E14242C07F84F19FBF09F642F07C3B09CFE2E98AA7F2B176ADE3D</li>\n</ul>\n<h2>Public artifact SHA-256</h2>\n<p>Recorded in <code>evidence-library/integrity/evidence-hashes.json</code> for this artifact path. The self-hash is recorded outside this file so the digest does not invalidate itself.</p>\n<h2>Sanitization performed</h2>\n<p>Removed executing account, local administrator membership, SIDs, GUIDs, group policy raw details, software inventory, unrelated services, event data, and local profile or path information.</p>\n<h2>Limitations</h2>\n<ul>\n<li>Personal nonproduction home lab only.</li>\n<li>Captured-state evidence only.</li>\n<li>This artifact validates WS01 inventory values and domain membership state only.</li>\n<li>It does not claim production support, employer-system administration, complete endpoint hardening, or complete application/service validation.</li>\n</ul>\n<h2>Validation date</h2>\n<p>2026-06-30</p>\n<h2>Classification</h2>\n<p>Validated</p></div></details><details><summary>Redaction Log <small> / redaction-log.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/redaction-log.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/78e82a05f0f8\" data-route=\"documentation/78e82a05f0f8\" class=\"\">Open document page</a></div><h2>Redaction Log</h2>\n<p>No credentials, private keys, tokens, cookies, or secrets were copied. Public summaries avoid private repository links and retain only reviewer-safe claim context.</p>\n<p>For the direct evidence artifacts, usernames, executing accounts, MAC addresses, UUIDs, VM generation IDs, UPIDs, PIDs, SIDs, internal object GUIDs, absolute local Windows user paths, unnecessary root paths, unrelated installed features, unrelated command history, unnecessary timestamps, and snapshot parent names were removed or omitted where they were not required to support the stated public claim.</p>\n<p>The Proxmox thin-pool warning is retained as an operational limitation. It is not framed as a failed restore or infrastructure failure.</p></div></details><details><summary>Backup and Restore Validation <small> / backup-and-restore-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/backup-and-restore-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/5b8e4cc34ba2\" data-route=\"documentation/5b8e4cc34ba2\" class=\"\">Open document page</a></div><h2>Backup and Restore Validation</h2>\n<h2>Status</h2>\n<p>Partially validated by retained June 24 documentation. No restore test was repeated during the 2026-06-26 read-only operations run.</p>\n<h2>Current Evidence</h2>\n<p>Read-only Proxmox inventory observed an enabled scheduled backup job:</p>\n<ul>\n<li>Job ID: <code>backup-critical-lab-vms</code></li>\n<li>VMs: <code>100,200,300,400</code></li>\n<li>Storage: <code>backup-hdd</code></li>\n<li>Schedule: <code>sun 02:00</code></li>\n<li>Mode: <code>snapshot</code></li>\n<li>Compression: <code>zstd</code></li>\n</ul>\n<p>Storage inventory observed backup storage named <code>backup-hdd</code> at <code>/mnt/pve/backup-hdd</code>.</p>\n<p>The June 24 IP-address-documented portfolio documentation records isolated startup restore checks for:</p>\n<ul>\n<li>WS01 restored temporarily as VM 500, with the NIC link down before startup.</li>\n<li>Linux01 restored temporarily as VM 600, with the NIC link down before startup.</li>\n</ul>\n<p>The current Proxmox inventory no longer shows VM 500 or VM 600, which is consistent with the documentation stating both temporary restore VMs were removed after validation.</p>\n<h2>Required Future Validation</h2>\n<p>Before claiming recurring restore assurance, perform an approved fresh restore validation that documents:</p>\n<ul>\n<li>Exact VM or test restore target</li>\n<li>Backup file selected</li>\n<li>Restore command or UI action</li>\n<li>Network isolation approach</li>\n<li>Validation checks</li>\n<li>Cleanup steps</li>\n<li>Rollback procedure</li>\n<li>Evidence proving successful boot or file-level recovery</li>\n</ul>\n<h2>Claim Boundary</h2>\n<p>The current operations repository validates backup job configuration visibility and retains documentation of June 24 isolated startup restore checks. It does not validate current backup archive integrity, recurring restore success, RTO, RPO, or disaster-recovery readiness.</p></div></details><details><summary>Centralized Logging Expansion Change Plan <small> / centralized-logging-expansion.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/centralized-logging-expansion.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/f9d38f44ed30\" data-route=\"documentation/f9d38f44ed30\" class=\"\">Open document page</a></div><h2>Centralized Logging Expansion Change Plan</h2>\n<h2>Status</h2>\n<p>Planned. Approval required before implementation.</p>\n<h2>Current State</h2>\n<p>June 24 documentation records pfSense forwarding selected system, firewall, authentication, VPN, and gateway events to Linux01 at <code>10.10.30.20:514</code>, with Linux01 rsyslog listeners and alert-match logging. Current Proxmox metadata validates Linux01 is running on VLAN 30 and QEMU guest agent is responding.</p>\n<p>The June 26 authenticated Linux01 target-local inventory validates rsyslog runtime state from inside the guest. Linux01 reports rsyslog active, TCP and UDP 514 listening on <code>10.10.30.20</code>, remote collector configuration under <code>/etc/rsyslog.d/10-remote-collector.conf</code>, pfSense alert file configuration under <code>/etc/rsyslog.d/05-pfsense-alerts.conf</code>, and rsyslog logrotate configuration under <code>/etc/logrotate.d/rsyslog</code>.</p>\n<h2>Evidence</h2>\n<ul>\n<li>Proxmox current API: Linux01 VM 400 running, <code>tag=30</code>, guest agent responding.</li>\n<li>DNS current command: <code>linux01.ad.jeremyfontenot.online</code> resolves to <code>10.10.30.20</code>.</li>\n<li>June 24 IP-address-documented documentation: pfSense-to-Linux01 rsyslog forwarding and alert logging documented.</li>\n<li>Current reachability check: TCP 514 from the current client path timed out and is not treated as rsyslog service failure.</li>\n<li><code>inventories/linux01-inventory-20260626-020257.json</code>: SSH from the management execution path timed out; guest-side rsyslog state was <code>NOT TESTED</code>.</li>\n<li><code>inventories/linux01-inventory-20260626-084312.json</code>: authenticated target-local Linux01 inventory validates rsyslog service/listener state, route/DNS state, AD integration indicators, disk capacity, and logrotate summary.</li>\n<li><code>evidence/linux01-local-inventory-validation-20260626-035220.md</code>: sanitized evidence for Linux01 target-local inventory import and validation.</li>\n</ul>\n<h2>Target State</h2>\n<p>Expand centralized logging beyond pfSense by adding documented, least-privilege log forwarding or collection for Windows and Proxmox sources without weakening existing firewall policy.</p>\n<p>Candidate target design, pending implementation approval:</p>\n<ul>\n<li>Keep Linux01 as the primary syslog receiver because target-local evidence now confirms available root filesystem capacity, active rsyslog listeners on <code>10.10.30.20:514</code> for TCP and UDP, and rsyslog log rotation. UFW source restrictions still require a clearer privileged summary before any new source is added.</li>\n<li>Evaluate Windows Event Forwarding for DC01 and WS01 with DC01 as the likely Windows Event Collector only if existing domain policy and firewall posture support it safely. Do not make DC01 a collector until a separate change plan covers subscription type, source computers, event channels, retention, and rollback.</li>\n<li>Evaluate Proxmox remote syslog forwarding to Linux01 or another approved receiver only after documenting source IP, destination IP, protocol, port, and retention.</li>\n<li>Keep Linux local logs on Linux01 in local journald/rsyslog paths unless an approved monitoring platform is introduced.</li>\n</ul>\n<h2>Exact Systems</h2>\n<ul>\n<li>Linux01 VM 400</li>\n<li>DC01 VM 200</li>\n<li>WS01 VM 300</li>\n<li>Proxmox host <code>192.168.0.242</code></li>\n<li>pfSense VM 100</li>\n</ul>\n<h2>Exact Commands</h2>\n<p>Discovery and planning only until approved:</p>\n<pre><code class=\"language-powershell\">pwsh -NoProfile -File .\\scripts\\linux\\Get-LinuxReadOnlyInventory.ps1\npwsh -NoProfile -File .\\scripts\\active-directory\\Invoke-DC01LocalReadOnlyCollection.ps1\npwsh -NoProfile -File .\\scripts\\windows-server\\Invoke-WS01LocalReadOnlyCollection.ps1\n</code></pre>\n<p>Implementation commands are intentionally not authorized in this change plan. Linux01 rsyslog state has been validated, but Windows Event Forwarding, Proxmox logging state, pfSense sender configuration, and any firewall or GPO requirements still need a dedicated approved implementation plan.</p>\n<p>Target-local validation commands prepared for the next inventory pass:</p>\n<pre><code class=\"language-bash\">run_id=\"$(date -u +%Y%m%d-%H%M%S)\"\nbash ./Invoke-Linux01LocalReadOnlyCollection.sh \"/tmp/linux01-inventory-${run_id}.json\"\n</code></pre>\n<h2>Required Privileges</h2>\n<ul>\n<li>Read-only collection: existing approved sessions.</li>\n<li>Any logging configuration change: administrative privileges on the target system and explicit approval.</li>\n</ul>\n<h2>Network Requirements</h2>\n<p>No firewall openings are approved by this plan. Any proposed log path must identify source, destination, protocol, port, and existing firewall state before implementation.</p>\n<p>Expected network review before implementation:</p>\n<ul>\n<li>pfSense to Linux01 syslog path: verify existing source restriction, protocol, and port from configuration evidence before changing anything.</li>\n<li>DC01 and WS01 to collector: identify whether Windows Event Forwarding uses existing domain/Kerberos paths or requires new firewall scope. Any firewall or GPO change requires a dedicated approved plan.</li>\n<li>Proxmox to Linux01 syslog: document management-network source, Linux VLAN destination, routing path, and firewall requirements before implementation.</li>\n</ul>\n<h2>Security Impact</h2>\n<p>Positive if implemented carefully: stronger audit trail and troubleshooting visibility. Risk if overbroad: excessive log exposure, sensitive log retention, or unnecessary inter-network access.</p>\n<p>Security controls required in the implementation plan:</p>\n<ul>\n<li>Exclude credentials, private keys, Kerberos tickets, certificate private material, and sensitive raw log excerpts from repository evidence.</li>\n<li>Prefer source-restricted firewall rules over broad subnet acceptance if any new rules are approved.</li>\n<li>Document whether logs are unauthenticated syslog, authenticated Windows Event Forwarding, or locally collected files.</li>\n<li>Define integrity expectations honestly; plain syslog improves visibility but does not provide strong transport integrity by itself.</li>\n</ul>\n<h2>Service-Impact Risk</h2>\n<p>Low for discovery. Medium for configuration changes because logging service reloads or firewall changes could disrupt visibility or access if done incorrectly.</p>\n<p>Implementation must avoid service restarts unless the approved plan explicitly requires them. Prefer configuration validation and reload-only workflows where technically appropriate.</p>\n<h2>Retention, Rotation, and Capacity</h2>\n<p>Linux01 authenticated inventory currently supports:</p>\n<ul>\n<li>Root filesystem capacity: 19 GiB total, 13 GiB available, 29 percent used.</li>\n<li>Current rsyslog listener state: TCP and UDP 514 listening on <code>10.10.30.20</code>.</li>\n<li>Current rsyslog destination templates/configuration: <code>/var/log/remote/%FROMHOST-IP%/messages.log</code> and <code>/var/log/remote/pfsense-alerts.log</code> are configured.</li>\n<li>Current logrotate policy for rsyslog-managed files: weekly rotation, four rotations, compression, missing files tolerated, empty files skipped.</li>\n<li>Disk-use alert threshold. Initial planning threshold: warning at 80 percent used, critical at 90 percent used, pending Jeremy approval.</li>\n<li>Failure behavior if Linux01 is unavailable: sources should continue local logging and must not block authentication, DNS, DHCP, routing, or VM operation.</li>\n</ul>\n<h2>Alerting</h2>\n<p>Alerting remains planned. Candidate non-invasive alerts after receiver validation:</p>\n<ul>\n<li>Linux01 log filesystem above threshold.</li>\n<li>rsyslog service inactive.</li>\n<li>No pfSense log receipt within an expected interval.</li>\n<li>Proxmox backup job failure or missing latest backup.</li>\n<li>Windows Event Forwarding subscription source inactive, if WEF is later approved.</li>\n</ul>\n<h2>Validation</h2>\n<ul>\n<li>Confirm log sender service state.</li>\n<li>Confirm listener state on Linux01.</li>\n<li>Send one controlled non-sensitive test event.</li>\n<li>Confirm event arrives in the expected file or index.</li>\n<li>Confirm no credentials or private data are written to repository evidence.</li>\n</ul>\n<h2>Rollback</h2>\n<ul>\n<li>Revert only the logging configuration added by the approved implementation.</li>\n<li>Restore any exported pre-change configuration where applicable.</li>\n<li>Restart/reload only affected logging services if required and approved.</li>\n</ul>\n<h2>Evidence Capture</h2>\n<ul>\n<li>Timestamped pre-change inventory.</li>\n<li>Sanitized configuration diff or export.</li>\n<li>Exact command transcript with secrets omitted.</li>\n<li>Controlled test-event result.</li>\n<li>Rollback verification.</li>\n</ul>\n<h2>Approval Requirement</h2>\n<p>Explicit Jeremy approval is required before any logging configuration, firewall, service, package, or scheduled-task change.</p>\n<h2>Claim Boundary</h2>\n<p>This plan is implementation-ready documentation only. It does not implement centralized logging expansion, change firewall policy, install software, restart services, or modify any infrastructure system. Linux01 rsyslog receiver state is now validated by target-local inventory; additional sources and alerting remain planned until separately approved and implemented.</p></div></details><details><summary>Home Lab Inventory and Validation Evidence <small> / home-lab-inventory-validation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/home-lab-inventory-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/509dde796a34\" data-route=\"documentation/509dde796a34\" class=\"\">Open document page</a></div><h2>Home Lab Inventory and Validation Evidence</h2>\n<ul>\n<li>Timestamp: <code>2026-06-26T01:06:01.2273166-05:00</code></li>\n<li>Source workstation: <code>DESKTOP-MR3F9A1</code></li>\n<li>Repository: <code>C:\\Users\\jeremy\\Documents\\projects\\jeremy-homelab-ops</code></li>\n<li>Execution mode: read-only discovery, inventory, and validation</li>\n<li>Infrastructure configuration changes: <code>0</code></li>\n</ul>\n<h2>Commands and Access Paths</h2>\n<ul>\n<li>Proxmox inventory: <code>mcp__home_lab</code> read-only Proxmox tools.</li>\n<li>Repository validation: <code>pwsh -NoProfile -File .\\tests\\Test-RepositoryStructure.ps1 -WriteEvidence</code></li>\n<li>Connectivity validation: <code>pwsh -NoProfile -File .\\scripts\\monitoring\\Test-HomeLabConnectivity.ps1 -TimeoutMilliseconds 1000</code></li>\n<li>DNS validation: <code>Resolve-DnsName ad.jeremyfontenot.online -Server 10.10.20.10</code></li>\n<li>Route validation: <code>route.exe print -4</code></li>\n<li>Domain discovery: <code>nltest /dsgetdc:ad.jeremyfontenot.online</code>, <code>nltest /dclist:ad.jeremyfontenot.online</code>, <code>nltest /sc_query:JFAD</code></li>\n<li>Module availability: <code>Get-Command Get-ADDomain</code>, <code>Get-Command Get-GPO</code>, <code>Get-Command Get-DhcpServerv4Scope</code>, <code>Get-Command Get-DnsServerZone</code></li>\n</ul>\n<h2>Validated Results</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Check</th>\n<th>Status</th>\n<th>Observed result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Proxmox API inventory</td>\n<td>PASS</td>\n<td>Version <code>9.2.3</code>, node <code>proxmox</code> online, VMs <code>100</code>, <code>200</code>, <code>300</code>, and <code>400</code> running.</td>\n</tr>\n<tr>\n<td>Proxmox storage inventory</td>\n<td>PASS</td>\n<td><code>local-lvm</code>, <code>backup-hdd</code>, and <code>local</code> reported capacity and usage.</td>\n</tr>\n<tr>\n<td>Proxmox backup job inventory</td>\n<td>PASS</td>\n<td>Job <code>backup-critical-lab-vms</code> enabled for VMs <code>100,200,300,400</code>, storage <code>backup-hdd</code>, schedule <code>sun 02:00</code>.</td>\n</tr>\n<tr>\n<td>Proxmox management TCP</td>\n<td>PASS</td>\n<td><code>192.168.0.242:8006</code> connected in <code>67 ms</code>.</td>\n</tr>\n<tr>\n<td>DC01 DNS TCP</td>\n<td>PASS</td>\n<td><code>10.10.20.10:53</code> connected in <code>6 ms</code>.</td>\n</tr>\n<tr>\n<td>Domain DNS resolution</td>\n<td>PASS</td>\n<td><code>ad.jeremyfontenot.online</code> resolved to <code>10.10.20.10</code> using server <code>10.10.20.10</code>.</td>\n</tr>\n<tr>\n<td>VPN route</td>\n<td>PASS</td>\n<td>Route table includes <code>10.10.20.0/24</code> via <code>10.10.40.1</code> from <code>10.10.40.2</code>.</td>\n</tr>\n<tr>\n<td>Repository validation</td>\n<td>PASS</td>\n<td>Repository validation completed with no failing checks.</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Warnings and Inconclusive Results</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Check</th>\n<th>Status</th>\n<th>Observed result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>pfSense LAN HTTPS TCP</td>\n<td>WARNING</td>\n<td><code>10.10.20.1:443</code> timed out after <code>1000 ms</code>.</td>\n</tr>\n<tr>\n<td>DC01 Kerberos TCP</td>\n<td>WARNING</td>\n<td><code>10.10.20.10:88</code> timed out after <code>1000 ms</code>.</td>\n</tr>\n<tr>\n<td>DC01 LDAP TCP</td>\n<td>WARNING</td>\n<td><code>10.10.20.10:389</code> timed out after <code>1000 ms</code>.</td>\n</tr>\n<tr>\n<td>DC01 SMB TCP</td>\n<td>WARNING</td>\n<td><code>10.10.20.10:445</code> timed out after <code>1000 ms</code>.</td>\n</tr>\n<tr>\n<td>DC01 WinRM TCP</td>\n<td>WARNING</td>\n<td><code>10.10.20.10:5985</code> timed out after <code>1000 ms</code>.</td>\n</tr>\n<tr>\n<td>Domain controller discovery</td>\n<td>INCONCLUSIVE</td>\n<td><code>nltest /dsgetdc:ad.jeremyfontenot.online</code> returned <code>ERROR_NO_SUCH_DOMAIN</code> from the current workstation context.</td>\n</tr>\n<tr>\n<td>Secure channel query</td>\n<td>INCONCLUSIVE</td>\n<td><code>nltest /sc_query:JFAD</code> returned <code>RPC_S_SERVER_UNAVAILABLE</code> from the current workstation context.</td>\n</tr>\n<tr>\n<td>DNS Server module inventory</td>\n<td>NOT TESTED</td>\n<td><code>Get-DnsServerZone</code> is not installed on the management workstation.</td>\n</tr>\n<tr>\n<td>DHCP Server module inventory</td>\n<td>NOT TESTED</td>\n<td><code>Get-DhcpServerv4Scope</code> is not installed on the management workstation.</td>\n</tr>\n<tr>\n<td>Group Policy inventory</td>\n<td>NOT TESTED</td>\n<td><code>Get-GPO</code> is not installed on the management workstation.</td>\n</tr>\n<tr>\n<td>WS01 guest inventory</td>\n<td>NOT TESTED</td>\n<td>No verified WS01 management IP or guest-agent response was available in this run.</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Claim Boundary</h2>\n<p>This evidence records read-only repository validation, Proxmox connector inventory, local route inspection, DNS resolution, and bounded TCP reachability checks. It does not validate pfSense configuration, firewall policy, NAT policy, VPN configuration correctness, Active Directory health, DNS zone health, DHCP scope health, Group Policy processing, WS01 domain relationship, backup restore integrity, or administrative access to Windows guests.</p>\n<p>Timeouts, module absence, and <code>nltest</code> failures are recorded observations only. They are not proof that the corresponding infrastructure components are offline, misconfigured, or unavailable.</p></div></details><details><summary>Home Lab Source of Truth <small> / home-lab-source-of-truth.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/home-lab-source-of-truth.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/d4b3c3e6c035\" data-route=\"documentation/d4b3c3e6c035\" class=\"\">Open document page</a></div><h2>Home Lab Source of Truth</h2>\n<h2>Status</h2>\n<p>Current as of the 2026-06-26 read-only reconciliation run.</p>\n<h2>Source Precedence</h2>\n<ol>\n<li>Current command output, API output, guest-agent output, or authenticated system query.</li>\n<li>New timestamped evidence collected during this run.</li>\n<li>Current <code>jeremy-homelab-ops</code> inventories and evidence.</li>\n<li>Current <code>main</code> branch of <code>fontenotjeremy71-hub/jeremyfontenot</code>.</li>\n<li>June 24, 2026 IP-address-documented portfolio documentation.</li>\n<li>June 21, 2026 curated historical evidence.</li>\n<li>Currently deployed website content.</li>\n<li>Old prompts, summaries, assumptions, or undocumented memory.</li>\n</ol>\n<h2>Current Supported Architecture</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Component</th>\n<th>Current supported value</th>\n<th>Classification</th>\n<th>Evidence</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Physical host</td>\n<td>Dell PowerEdge R710</td>\n<td>Current documentation</td>\n<td>Portfolio and operations docs</td>\n</tr>\n<tr>\n<td>Hypervisor</td>\n<td>Proxmox VE <code>9.2.3</code></td>\n<td>Current</td>\n<td>Proxmox API</td>\n</tr>\n<tr>\n<td>Proxmox management</td>\n<td><code>192.168.0.242/24</code>, gateway <code>192.168.0.1</code></td>\n<td>Current</td>\n<td>Proxmox API and TCP validation</td>\n</tr>\n<tr>\n<td>pfSense</td>\n<td>VM 100 <code>pfsense-fw</code></td>\n<td>Current</td>\n<td>Proxmox API</td>\n</tr>\n<tr>\n<td>pfSense WAN</td>\n<td><code>192.168.0.205/24</code></td>\n<td>Current documentation, not re-queried from pfSense</td>\n<td>June 24 DOCX</td>\n</tr>\n<tr>\n<td>pfSense LAN</td>\n<td><code>10.10.20.1/24</code></td>\n<td>Current documentation</td>\n<td>June 24 DOCX and topology</td>\n</tr>\n<tr>\n<td>Linux VLAN gateway</td>\n<td><code>10.10.30.1/24</code></td>\n<td>Current documentation</td>\n<td>June 24 DOCX</td>\n</tr>\n<tr>\n<td>OpenVPN network</td>\n<td><code>10.10.40.0/24</code></td>\n<td>Current documentation plus route evidence</td>\n<td>June 24 DOCX and local route</td>\n</tr>\n<tr>\n<td>DC01</td>\n<td>VM 200, <code>10.10.20.10/24</code>, Windows Server 2022 domain controller</td>\n<td>Current authenticated guest inventory</td>\n<td>Proxmox API, DNS/RDP validation, <code>inventories/dc01-inventory-20260626-022543.json</code></td>\n</tr>\n<tr>\n<td>WS01</td>\n<td>VM 300, <code>10.10.20.100/24</code>, Windows domain workstation</td>\n<td>Current authenticated guest inventory</td>\n<td>Proxmox API, <code>inventories/ws01-inventory-20260626-012952.json</code></td>\n</tr>\n<tr>\n<td>Linux01</td>\n<td>VM 400, <code>10.10.30.20/24</code>, VLAN 30, Ubuntu 26.04 LTS domain member</td>\n<td>Current authenticated guest inventory</td>\n<td>Proxmox API, DNS validation, <code>inventories/linux01-inventory-20260626-084312.json</code></td>\n</tr>\n<tr>\n<td>AD domain</td>\n<td><code>ad.jeremyfontenot.online</code></td>\n<td>Current authenticated guest inventory</td>\n<td>DC01 target-local inventory, 2026-06-26</td>\n</tr>\n<tr>\n<td>NetBIOS domain</td>\n<td><code>JFAD</code></td>\n<td>Current authenticated guest inventory</td>\n<td>DC01 target-local inventory, 2026-06-26</td>\n</tr>\n<tr>\n<td>Backup storage</td>\n<td><code>backup-hdd</code> at <code>/mnt/pve/backup-hdd</code></td>\n<td>Current</td>\n<td>Proxmox API</td>\n</tr>\n<tr>\n<td>Backup job</td>\n<td><code>backup-critical-lab-vms</code>, Sunday 02:00, snapshot, zstd, VMs 100/200/300/400</td>\n<td>Current</td>\n<td>Proxmox API</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Historical or Stale Values</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Value</th>\n<th>Classification</th>\n<th>Current handling</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Linux01 <code>10.10.20.20/24</code></td>\n<td>Historical</td>\n<td>Retained as pre-VLAN 30 address only</td>\n</tr>\n<tr>\n<td>Linux01 DHCP <code>10.10.20.101</code></td>\n<td>Historical</td>\n<td>Retained as initial setup address only</td>\n</tr>\n<tr>\n<td><code>backup-nvme</code> or <code>/mnt/pve/backup-nvme</code></td>\n<td>Stale or inconclusive</td>\n<td>Not current unless future evidence proves rename/replacement</td>\n</tr>\n<tr>\n<td>Direct WAN-side RDP forwarding</td>\n<td>Historical</td>\n<td>Current design uses OpenVPN-only RDP path</td>\n</tr>\n<tr>\n<td>June 21 restore outstanding limitation</td>\n<td>Historical</td>\n<td>Superseded by June 24 isolated restore documentation, not re-run during this ops pass</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Claim Boundary</h2>\n<p>This file corrects explanatory documentation using current evidence. It does not modify historical evidence and does not claim live guest OS internals unless current command output or explicitly cited retained evidence supports the claim.</p>\n<p>The June 26 target-local workflow imported authenticated DC01 evidence in <code>inventories/dc01-inventory-20260626-022543.json</code> and <code>evidence/dc01-local-inventory-validation-20260626-022811.md</code>. It imported authenticated WS01 evidence in <code>inventories/ws01-inventory-20260626-012952.json</code> and <code>evidence/ws01-local-inventory-validation-20260626-033405.md</code>. It also imported authenticated Linux01 evidence in <code>inventories/linux01-inventory-20260626-084312.json</code> and <code>evidence/linux01-local-inventory-validation-20260626-035220.md</code>.</p></div></details><details><summary>Home Lab Source Reconciliation Evidence <small> / home-lab-source-reconciliation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/home-lab-source-reconciliation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/759c75076daf\" data-route=\"documentation/759c75076daf\" class=\"\">Open document page</a></div><h2>Home Lab Source Reconciliation Evidence</h2>\n<ul>\n<li>Timestamp: <code>2026-06-26T01:26:06.6980689-05:00</code></li>\n<li>Source workstation: <code>DESKTOP-MR3F9A1</code></li>\n<li>Operations repository: <code>C:\\Users\\jeremy\\Documents\\projects\\jeremy-homelab-ops</code></li>\n<li>Portfolio repository: <code>C:\\Users\\jeremy\\Documents\\projects\\jeremyfontenot</code></li>\n<li>Deployed page inspected: <code>https://jeremyfontenot.online/on-prem-home-lab.html</code></li>\n<li>Infrastructure changes made: <code>0</code></li>\n</ul>\n<h2>Current Command/API Evidence</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Component</th>\n<th>Result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Proxmox version</td>\n<td><code>9.2.3</code></td>\n</tr>\n<tr>\n<td>VM 100</td>\n<td><code>pfsense-fw</code>, running, vmbr0 and vmbr1</td>\n</tr>\n<tr>\n<td>VM 200</td>\n<td><code>dc01</code>, running, vmbr1</td>\n</tr>\n<tr>\n<td>VM 300</td>\n<td><code>ws01</code>, running, vmbr1, guest agent disabled</td>\n</tr>\n<tr>\n<td>VM 400</td>\n<td><code>linux01</code>, running, vmbr1, <code>tag=30</code>, QEMU guest agent responding</td>\n</tr>\n<tr>\n<td>Backup storage</td>\n<td><code>backup-hdd</code>, path <code>/mnt/pve/backup-hdd</code>, active</td>\n</tr>\n<tr>\n<td>Backup job</td>\n<td><code>backup-critical-lab-vms</code>, enabled, <code>sun 02:00</code>, snapshot, zstd, VMs <code>100,200,300,400</code></td>\n</tr>\n<tr>\n<td>Linux01 DNS</td>\n<td><code>linux01.ad.jeremyfontenot.online</code> resolves to <code>10.10.30.20</code></td>\n</tr>\n<tr>\n<td>Linux01 PTR</td>\n<td><code>10.10.30.20</code> resolves to <code>linux01.ad.jeremyfontenot.online</code></td>\n</tr>\n<tr>\n<td>VPN path</td>\n<td>DC01 DNS TCP 53 and RDP TCP 3389 reachable</td>\n</tr>\n<tr>\n<td>Expected block</td>\n<td>DC01 SMB TCP 445 and pfSense WAN direct RDP TCP 3389 timed out</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Conflicts</h2>\n<div class=\"table-scroll\"><table>\n<thead>\n<tr>\n<th>Component</th>\n<th>Higher-precedence current value</th>\n<th>Lower-precedence conflicting value</th>\n<th>Classification</th>\n<th>Action</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Linux01 IP</td>\n<td><code>10.10.30.20/24</code></td>\n<td>Deployed website and June 21 evidence show <code>10.10.20.20/24</code></td>\n<td>Stale deployed/historical value</td>\n<td>Operations docs now treat <code>10.10.20.20</code> as historical</td>\n</tr>\n<tr>\n<td>Linux01 VLAN</td>\n<td>Proxmox config has <code>tag=30</code></td>\n<td>Deployed website omits VLAN 30 current state</td>\n<td>Stale deployed value</td>\n<td>Operations docs use current Proxmox metadata</td>\n</tr>\n<tr>\n<td>Restore status</td>\n<td>June 24 DOCX records isolated restore checks for VM 500 and 600</td>\n<td>June 21 redaction log says restore outstanding</td>\n<td>Historical difference</td>\n<td>Recovery docs distinguish June 21 historical limitation from June 24 documentation</td>\n</tr>\n<tr>\n<td>Backup storage</td>\n<td>Proxmox API shows <code>backup-hdd</code> at <code>/mnt/pve/backup-hdd</code></td>\n<td>Older prompt/doc values mention <code>backup-nvme</code></td>\n<td>Stale or inconclusive historical value</td>\n<td>Operations docs use <code>backup-hdd</code> and flag <code>backup-nvme</code> as stale unless rename evidence is found</td>\n</tr>\n</tbody>\n</table></div>\n<h2>Claim Boundary</h2>\n<p>Current Proxmox API output and current DNS/RDP checks are treated as current observed state. Portfolio and DOCX records are retained as documentation evidence where live command output cannot validate guest internals from this client path. Historical evidence is not rewritten.</p></div></details><details><summary>Linux01 SSSD Remediation <small> / linux01-sssd-remediation.md</small></summary><div class=\"document\"><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/linux01-sssd-remediation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a><a href=\"#documentation/8f2473febe02\" data-route=\"documentation/8f2473febe02\" class=\"\">Open document page</a></div><h2>Linux01 SSSD Remediation</h2>\n<h2>Summary</h2>\n<ul>\n<li>Target: Linux01</li>\n<li>Date: June 26, 2026</li>\n<li>Domain: ad.jeremyfontenot.online</li>\n<li>Classification: SSSD responder activation conflict</li>\n<li>Result: Remediated and validated</li>\n</ul>\n<h2>Initial Condition</h2>\n<ul>\n<li>sssd-nss.socket, sssd-pam.socket, and sssd-pac.socket were enabled and failed.</li>\n<li>/etc/sssd/sssd.conf used direct responder activation with services = nss, pam.</li>\n<li>config_file_version = 2 was rejected by SSSD 2.12 configuration validation.</li>\n<li>Initial diagnostic: artifacts/target-local-collection/Linux01/linux01-sssd-diagnostic-20260626-094322.json</li>\n<li>Initial SHA-256: 3CAD0FB73202D777D41DEE40D6F4D19D4019B9AD30552B37970B55A5CA5AB3BB</li>\n</ul>\n<h2>Backup</h2>\n<ul>\n<li>Backup: /root/sssd.conf.pre-remediation-20260626-095429.bak</li>\n<li>Original and backup SHA-256: 23ace1beca5ff6f7d58200efe054ea8e5a938e02f37fce25b1ca1b5d2f05bd14</li>\n</ul>\n<h2>Remediation</h2>\n<ol>\n<li>Removed the rejected config_file_version directive.</li>\n<li>Confirmed sssctl config-check completed with zero issues.</li>\n<li>Disabled the NSS, PAM, and PAC SSSD socket units.</li>\n<li>Restarted sssd.service.</li>\n<li>Cleared the historical failed-unit state.</li>\n</ol>\n<h2>Validation</h2>\n<ul>\n<li>sssd.service is enabled, active, and running.</li>\n<li>No failed systemd units remain.</li>\n<li>All three responder sockets report disabled.</li>\n<li>AD identity lookup succeeded.</li>\n<li>A new AD-authenticated SSH session succeeded.</li>\n<li>Post-remediation diagnostic: artifacts/target-local-collection/Linux01/linux01-sssd-diagnostic-20260626-110159.json</li>\n<li>Post-remediation SHA-256: FD55604BFB94487B86FBF631703FA995B9726471689385CCB2D277492AA7CBEE</li>\n</ul>\n<h2>Final Status</h2>\n<p>Linux01 is operating normally using direct SSSD responder activation.</p></div></details></section><section class=\"content-block\" id=\"troubleshooting\"><h2>Troubleshooting</h2><p>The records distinguish Linux01 SSSD remediation, networking state, backup configuration, and mixed restore outcomes. A platform inventory or a successful backup listing is not treated as proof of guest health or recoverability.</p><div class=\"doc-grid\"></div></section><section class=\"content-block\" id=\"validation\"><h2>Validation & results</h2><p>Validated infrastructure scope is complete. Recovery records retain narrow PASS and INCONCLUSIVE outcomes; they do not establish production DR readiness.</p><div class=\"doc-grid\"><a href=\"#documentation/313d07c59108\" data-route=\"documentation/313d07c59108\" class=\"\">DC01 System and Role Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/dc01-system-and-role-validation.md</small></a><a href=\"#documentation/bb9fe57b6085\" data-route=\"documentation/bb9fe57b6085\" class=\"\">Linux01 SSSD Remediation Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-sssd-remediation-validation.md</small></a><a href=\"#documentation/f442266b3082\" data-route=\"documentation/f442266b3082\" class=\"\">Linux01 System, Network, and Domain Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-system-network-domain-validation.md</small></a><a href=\"#documentation/9f8e98caeacd\" data-route=\"documentation/9f8e98caeacd\" class=\"\">Proxmox Restore Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-restore-validation.md</small></a><a href=\"#documentation/34b581f1eabe\" data-route=\"documentation/34b581f1eabe\" class=\"\">WS01 System and Domain Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/ws01-system-and-domain-validation.md</small></a><a href=\"#documentation/5b8e4cc34ba2\" data-route=\"documentation/5b8e4cc34ba2\" class=\"\">Backup and Restore Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/backup-and-restore-validation.md</small></a><a href=\"#documentation/509dde796a34\" data-route=\"documentation/509dde796a34\" class=\"\">Home Lab Inventory and Validation Evidence<small>evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/home-lab-inventory-validation.md</small></a></div></section><section class=\"content-block\" id=\"evidence\"><h2>Evidence</h2><p>VERY STRONG — current-state records, dated validation folders, subsystem case studies, screenshots, restore evidence, and bounded results are preserved.</p><div class=\"doc-grid\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-configuration.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">proxmox-backup-configuration.md<small>Reviewed backup coverage, archive state, network isolation, temporary restore VMs, validation checkpoints, cleanup, and result boundaries.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-platform-inventory.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">proxmox-platform-inventory.md<small>Reviewed node, VM, storage, bridge, VLAN, guest-agent, snapshot, backup, and lifecycle state.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/home-lab-source-reconciliation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">home-lab-source-reconciliation.md<small>Maintained a documented nonproduction environment spanning virtualization, firewalling, Windows, Linux, networking, and backup services.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/home-lab-source-of-truth.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">home-lab-source-of-truth.md<small>Maintained a documented nonproduction environment spanning virtualization, firewalling, Windows, Linux, networking, and backup services.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/linux01-sssd-remediation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">linux01-sssd-remediation.md<small>Reviewed Ubuntu networking, SSH, time synchronization, logging, updates, security controls, guest integration, Kerberos, realmd, and SSSD.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/provenance.json\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">provenance.json<small>Maintained a documented nonproduction environment spanning virtualization, firewalling, Windows, Linux, networking, and backup services.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/infrastructure-validation-2026-07/checksums.sha256\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">checksums.sha256<small>Used read-only collection, sanitization, secret review, network isolation, integrity records, and bounded result classification.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/backup-and-restore-validation.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">backup-and-restore-validation.md<small>Reviewed backup coverage, archive state, network isolation, temporary restore VMs, validation checkpoints, cleanup, and result boundaries.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/provenance.csv\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">provenance.csv<small>Maintained a documented nonproduction environment spanning virtualization, firewalling, Windows, Linux, networking, and backup services.</small> <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/infrastructure-validation-2026-07/evidence-manifest.csv\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">evidence-manifest.csv<small>Maintained a documented nonproduction environment spanning virtualization, firewalling, Windows, Linux, networking, and backup services.</small> <span aria-hidden=\"true\">↗</span></a></div><div class=\"source-links\"><a href=\"#evidence\" data-route=\"evidence\" class=\"\">Browse and filter the complete evidence library</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub project source <span aria-hidden=\"true\">↗</span></a></div></section><section class=\"content-block\" id=\"skills\"><h2>Skills demonstrated</h2><div class=\"tags\"><span class=\"tag\">Proxmox</span><span class=\"tag\">Windows Server</span><span class=\"tag\">pfSense</span><span class=\"tag\">Linux</span></div><a href=\"#skills\" data-route=\"skills\" class=\"\">View the complete capability map →</a></section><section class=\"content-block\" id=\"limitations\"><h2>Limitations & claim boundaries</h2><div class=\"note\">Personal nonproduction lab. Does not prove enterprise production ownership, HA, clustering, S2D, production DR readiness, RTO/RPO, SLA performance, or continuous availability. Restore testing contains PASS, narrow PASS, and INCONCLUSIVE results and must remain represented as such.</div></section><section class=\"content-block\" id=\"next\"><h2>Next milestones</h2><p>Continue operational maintenance and add new subsystem evidence only when meaningful; preserve explicit restore-result boundaries.</p></section></article></div><section class=\"section\"><p class=\"eyebrow\">Continue exploring</p><h2>Related projects</h2><div class=\"grid grid-2\"><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"windows admin center lab management centralized windows administration backed by connectivity, authentication, and remote-management validation. windows admin center winrm powershell\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 04</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Windows Admin Center Lab Management</a></h3><p>Centralized Windows administration backed by connectivity, authentication, and remote-management validation.</p><div class=\"tags\"><span class=\"tag\">Windows Admin Center</span><span class=\"tag\">WinRM</span><span class=\"tag\">PowerShell</span></div><div class=\"card-footer\"><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Cloud administration\" data-search=\"azure arc hybrid windows management two arc-connected windows server lab machines, agent validation, and one sql server developer instance. azure arc windows server sql server\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 06</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Azure Arc Hybrid Windows Management</a></h3><p>Two Arc-connected Windows Server lab machines, agent validation, and one SQL Server Developer instance.</p><div class=\"tags\"><span class=\"tag\">Azure Arc</span><span class=\"tag\">Windows Server</span><span class=\"tag\">SQL Server</span></div><div class=\"card-footer\"><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article></div></section>",
    "active": "Projects"
  }
}
