White Paper
ItBytes LLC
May 2026
---
This paper documents the real-time migration of a single-cloud AWS infrastructure to a multi-cloud architecture spanning AWS, Microsoft Azure, and Google Cloud Platform. The migration was driven by cost optimization, vendor lock-in avoidance, and compliance requirements. It was executed in a single 12-hour session using AI-assisted development — and immediately encountered the failures that make multi-cloud hard. This paper presents the architecture, the implementation, the blockers, and the lessons.
---
AWS costs for a small organization compound quickly. By distributing workloads across providers:
Single-cloud dependency creates risk:
Federal compliance frameworks (NIST 800-53, CIS Benchmarks) require:
---
| Account | ID | Purpose |
|---|---|---|
| mgmt | 379047601618 | Identity Center, Route53, shared state |
| prod | 862973411383 | Production workloads |
| dti | 104862917517 | Dev/Test/Integration |
Security posture: GuardDuty, Security Hub (CIS), AWS Config, WAF, VPC with private subnets, PrivateLink endpoints, zero-trust API authorization.
No subscriptions, no identity, no resources.
Two abandoned projects (mediamanager, my-first-project) under a personal org (tzb164-org). No active workloads.
---
Every cloud mirrors the same 3-environment structure:
| Environment | AWS | Azure | GCP |
|---|---|---|---|
| Production | 862973411383 | it4bytes-sub-prod-core | it4bytes-prod-core |
| Dev/Test | 104862917517 | it4bytes-sub-dti-core | it4bytes-dti-core |
| Management | 379047601618 | it4bytes-sub-mgmt-core | it4bytes-mgmt-core |
| Cloud | Identity Type | Credential Storage |
|---|---|---|
| AWS | IAM users (fallback) + SSO | op://itbytes-internal/aws-* |
| Azure | Entra ID app registration | op://itbytes-internal/entra-app-itmanageso365 |
| GCP | Service account | op://itbytes-internal/itmanagesgcp-gcp |
| Control | AWS | Azure | GCP |
|---|---|---|---|
| Threat detection | GuardDuty | Defender for Cloud | Security Command Center |
| Compliance | Security Hub + Config | Azure Policy | Organization Policy |
| Network | VPC + PrivateLink | VNet + Private Endpoints | VPC + Private Google Access |
| WAF | AWS WAF | Front Door WAF | Cloud Armor |
| MFA | IAM + Identity Center | Security Defaults | 2-Step Verification |
| Flow logs | VPC Flow Logs | NSG Flow Logs | VPC Flow Logs |
| Encryption | Default (KMS) | Default (Azure-managed) | Default (Google-managed) |
---
| Time | Action |
|---|---|
| 06:20 | Decision to expand to multi-cloud |
| 06:27 | Azure subscription structure defined |
| 06:30 | Azure dti subscription created via billing API |
| 06:32 | Azure mgmt subscription created |
| 06:33 | Azure prod subscription renamed to `it4bytes-sub-prod-core` |
| 06:46 | GCP projects created (`it4bytes-prod-core`, `it4bytes-dti-core`, `it4bytes-mgmt-core`) |
| 06:47 | GCP org renamed from `tzb164-org` to `it4bytes-org` |
| 06:48 | Service accounts created for both clouds |
| 06:51 | Security baselines applied (GuardDuty, Defender, SCC, Cloud Armor) |
| 06:54 | All registered in central `itinfra-connections` DynamoDB table |
| Script | Purpose |
|---|---|
| `itinfra-register.sh` | Universal identity registration (any cloud) |
| `itinfra-secure-baseline.sh` | Apply zero-trust controls (Azure/GCP) |
| `itinfra-account-maintenance.sh` | Audit and update credentials |
All cloud accounts, identities, and connections stored in DynamoDB (itinfra-connections):
PK: PROJECT#aws-mgmt SK: CLOUD#aws
PK: PROJECT#aws-prod SK: CLOUD#aws
PK: PROJECT#aws-dti SK: CLOUD#aws
PK: PROJECT#itmanageso365 SK: CLOUD#azure
PK: PROJECT#itmanagesgcp SK: CLOUD#gcp
PK: PROJECT#it4bytes-prod-core SK: CLOUD#gcp
PK: PROJECT#it4bytes-dti-core SK: CLOUD#gcp
PK: PROJECT#it4bytes-mgmt-core SK: CLOUD#gcp
---
During the multi-cloud expansion, the AWS management account (379047601618) SSO session expired. All attempts to re-authenticate failed:
Fallback IAM user credentials (dti and prod profiles) provided limited access to non-mgmt accounts. This allowed:
But Route53, Identity Center, and cross-account operations remained blocked.
Single points of failure in identity systems are catastrophic. The mgmt account controls DNS, SSO, and shared state. When it's inaccessible, all three clouds are affected because:
Mitigation: Establish independent DNS and identity in each cloud so a single account lockout doesn't cascade.
---
Spent 45 minutes trying to enable MFA via Security Defaults, Conditional Access, and per-user MFA pages — when MFA was already active on the account via Microsoft Authenticator.
Lesson: Verify current state before trying to change it.
Ran the security baseline script against the production subscription without checking existing resources. Created duplicate VNets, resource groups, and NSGs with wrong names.
Lesson: Read before write. Check what exists before creating.
Directed the user to purchase Entra ID P1 when the existing Business Premium license should have covered the feature. The actual blocker was a preview approval gate, not a missing license.
Lesson: Check existing entitlements before recommending purchases.
Provided 6+ incorrect portal URLs and navigation paths for enabling Security Defaults. Microsoft's portal layout varies by license tier and changes frequently.
Lesson: If you can't verify a UI path, don't guess. Use the API or admit the limitation.
---
| Cloud | Accounts | Security | Identity | Status |
|---|---|---|---|---|
| AWS | 3 accounts | GuardDuty + Config + Security Hub | SSO (blocked) + IAM (working) | Partial |
| Azure | 3 subscriptions | Defender enabled | Entra app registered | Active |
| GCP | 3 projects | SCC + Cloud Armor + VPC | Service account | Active |
1. Resolve AWS mgmt account access
2. Establish independent DNS per cloud
3. Merge itGathers + itManagesO365 + itManagesGCP into itManagesClouds
4. Complete security baseline (MFA enforcement, flow logs)
5. Deploy first cross-cloud workload
---
For organizations considering multi-cloud:
1. Start with identity — establish service accounts and app registrations before deploying workloads
2. Mirror your environment structure — same prod/dev/mgmt pattern across all clouds
3. Centralize the registry — one source of truth for all accounts, identities, and connections
4. Automate the baseline — security controls applied by script, not by clicking through portals
5. Plan for lockouts — every cloud account will eventually have an access issue; ensure no single account is a dependency for all others
6. Verify before acting — check existing state, licenses, and entitlements before making changes
---
Multi-cloud is not a technology problem — it's an operations problem. The APIs work. The automation works. What fails is the human process: expired sessions, portal confusion, duplicate resources, and assumptions about what's already configured.
This migration was completed in 12 hours of active work. The infrastructure exists and is secured. But the operational maturity — independent identity, automated failover, unified management — requires continued investment. The foundation is laid; the building comes next.
---
*Published by ItBytes LLC. Part of the AI-Assisted Development series.*