[ CORRUPTED_GLITCH // TRANSMISSION_project-01-datacenter-exit ]

DATE ......

READ_TIME . 3 MIN

WORDS ..... 530

CHANNEL ... MIGRATIONS / INFRASTRUCTURE

REVISED ...

Project 01: Datacenter Exit & Identity Transformation

Full build log: migrating 100% of core on-prem infrastructure to cloud-native and collapsing 27 legacy apps onto a single IDP — with zero business interruption.

The mission: exit a physical datacenter completely, retire on-prem Active Directory, and land every workload and identity in a cloud-native model. Outcome: 20% opex reduction, 27 apps consolidated under SSO, zero business interruption.

[ MISSION PARAMS ]

SCOPE
100% of core on-prem infrastructure
IDENTITY
on-prem AD → Okta (sole IDP) + Entra ID
APPS
27 legacy apps → centralized SSO
DOWNTIME
0 business interruptions
RESULT
−20% annualized opex

#Target Architecture

Hub-and-spoke topology after migration: transit hub with firewall and Private Link, identity, prod, data, and endpoint spokes; on-prem DC decommissioned
Fig 1 — hub-and-spoke target state. The on-prem DC ends the project as a struck-through box.

#Phase 1 — Inventory Everything That Authenticates

Nothing moves until you know what talks to AD. Export every app, service account, and LDAP bind:

discovery/ad-inventory.ps1 POWERSHELL
1
2
3
4
5
6
7
8
9
# Every service principal + last logon — the honest app inventory
Get-ADUser -Filter {servicePrincipalName -like "*"} -Properties servicePrincipalName, lastLogonTimestamp |
  Select-Object Name, @{n="SPNs";e={$_.servicePrincipalName -join ";"}},
    @{n="LastLogon";e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} |
  Export-Csv ad-service-inventory.csv -NoTypeInformation

# LDAP binds hitting the DCs (enable 2889 auditing first)
Get-WinEvent -LogName "Directory Service" -FilterXPath "*[System[EventID=2889]]" -MaxEvents 5000 |
  Select-Object TimeCreated, Message | Export-Csv ldap-binders.csv -NoTypeInformation

#Phase 2 — Stand Up the Identity Plane First

Identity moves before workloads. Okta becomes the sole IDP, federated with Entra ID for the Microsoft estate:

  1. Deploy Okta org → configure Entra ID federation (Okta as IDP, Microsoft 365 as SP).
  2. Onboard apps in waves of 5, SAML/OIDC first, SWA last.
  3. Enforce Conditional Access + MFA at the Okta policy layer, not per-app.
okta/app-wave-check.sh BASH
1
2
3
4
5
6
7
8
9
#!/usr/bin/env bash
# Gate: no wave ships until every app in it passes an auth smoke test
for app in $(cat wave-3.txt); do
  status=$(curl -s -o /dev/null -w "%{http_code}" \
    "https://corp.okta.com/api/v1/apps?q=${app}" \
    -H "Authorization: SSWS ${OKTA_TOKEN}")
  [ "$status" = "200" ] || { echo "FAIL: ${app}"; exit 1; }
done
echo "WAVE CLEAR"

#Phase 3 — Workload Waves Behind a Health Gate

Every workload follows the same state machine:

DRAIN → SYNC_FINAL → FLIP → OBSERVE(15m) → COMMIT | ROLLBACK

The OBSERVE gate compares error rate, p99, saturation, and a business KPI against the same weekday one week prior. Breach → automatic rollback, no meeting required.

#Phase 4 — Decommission and Prove the Savings

Power down is not done. Done is: contracts terminated, circuits cancelled, hardware disposed with certificates, and the −20% opex visible in the GL. Track it like a burn-down:

MilestoneTargetActual
Workloads migrated100%100%
Apps on SSO2727
Business interruptions00
Opex reduction15%20%

[ RELATED_SIGNALS ]