ProficientNowTechRFCs
Platform RFCs/Secret ops interim

5. Migration Path

RFC-SECOPS-0002                                                   Section 5
Category: Standards Track                                  Migration Path

This section defines the migration path from the interim architecture to the target architecture defined in RFC-SECOPS-0001. The migration proceeds through three phases, each corresponding to infrastructure milestones.


5.1 Migration Phases Overview

PhaseNameSecret StoreConsumption MechanismRuntime
0Interim (this RFC)AWS Secrets ManagerAWS SDK via Secret Config ModuleOn-premises virtual machines
1Kubernetes AdoptionAWS Secrets ManagerExternal Secrets Operator (ESO)Kubernetes pods
2Target StateHashiCorp VaultExternal Secrets Operator (ESO)Kubernetes pods

Each phase transition has explicit prerequisites and completion criteria. No phase transition MAY occur until all prerequisites are satisfied.


5.2 Phase 0 — Current State (Secrets Manager + SDK)

This is the architecture defined by this RFC.

5.2.1 Characteristics

AspectValue
Secret StoreAWS Secrets Manager
ConsumptionAWS SDK via centralized Secret Config Module
RuntimeOn-premises virtual machines
PopulationManual (AWS Console/CLI)
RotationManual
Inventorysecrets-inventory.yaml in Git

5.2.2 Exit Criteria

Phase 0 is complete when all of the following conditions are met:

CriterionDescription
All secrets centralizedNo application secret resides solely in .env files or environment variables
Inventory completesecrets-inventory.yaml reflects all secrets in Secrets Manager
Naming conventions appliedAll secret names follow platform-data/ and platform-config/ naming patterns
SDK centralizedEach application accesses secrets through a single module

5.3 Phase 1 — Kubernetes Adoption (Secrets Manager + ESO)

Phase 1 begins when Kubernetes becomes available and applications migrate from on-premises infrastructure to Kubernetes pods.

5.3.1 Prerequisites

PrerequisiteDescription
Kubernetes clusterOperational cluster (EKS or self-hosted)
External Secrets OperatorESO deployed and configured
Secrets Manager SecretStoreESO SecretStore resource configured for AWS Secrets Manager
Application containerizationApplications migrated from VMs and packaged as container images

5.3.2 Migration Actions

ActionDescription
Deploy ESO SecretStoreConfigure ESO to connect to AWS Secrets Manager
Create ExternalSecret resourcesOne per secret, mapping Secrets Manager secret names to Kubernetes Secrets
Replace Secret Config ModuleRemove AWS SDK calls; consume Kubernetes Secrets (env vars or volume mounts)
Retire IAM credentialsReplace per-server IAM users with IRSA or pod identity

5.3.3 What Changes

AspectPhase 0Phase 1
Secret retrievalAWS SDK call at runtimeKubernetes Secret mounted or injected
AuthenticationIAM credentialsIRSA / pod identity
Application dependencyAWS SDKNone (secrets appear as env vars or files)
Secret refreshApplication restartESO refresh interval

5.3.4 What Does Not Change

AspectReason
Secret store (Secrets Manager)Vault is not yet available
Secret namesNaming convention is store-agnostic
Secret valuesNo re-creation needed; same values in same store
Inventory manifestSame metadata; consumption mechanism column updates

5.3.5 Completion Criteria

CriterionDescription
All applications on KubernetesNo application retrieves secrets via AWS SDK
All ExternalSecrets operationalESO syncs all secrets from Secrets Manager to Kubernetes
IAM credentials retiredNo long-lived IAM credentials on servers
Secret Config Modules removedAWS SDK no longer a dependency for secret access

5.4 Phase 2 — Target State (Vault + ESO)

Phase 2 begins when HashiCorp Vault becomes available. This phase implements the architecture defined in RFC-SECOPS-0001.

5.4.1 Prerequisites

PrerequisiteDescription
Phase 1 completeAll applications consume secrets via ESO + Kubernetes Secrets
HashiCorp VaultDeployed, initialized, unsealed, and configured
Vault SecretStoreESO SecretStore resource configured for Vault
Vault policiesAccess policies defined per RFC-SECOPS-0001

5.4.2 Migration Actions

ActionDescription
Copy secrets to VaultMigrate all secret values from Secrets Manager to Vault using the same names
Switch ESO SecretStorePoint ExternalSecret resources from Secrets Manager SecretStore to Vault SecretStore
Configure Vault pathsSecrets Manager names already match Vault path conventions; no remapping needed
Enable Vault featuresRotation automation, audit logging, dynamic secrets (as defined in SECOPS-0001)
Decommission Secrets ManagerRemove secrets from Secrets Manager after migration validation

5.4.3 What Changes

AspectPhase 1Phase 2
Secret storeAWS Secrets ManagerHashiCorp Vault
ESO backendSecrets Manager SecretStoreVault SecretStore
RotationManualAutomated (Vault)
AuditAWS CloudTrailVault audit log
PolicyAWS IAM policies / resource-based policiesVault policies

5.4.4 What Does Not Change

AspectReason
Application codeApplications consume Kubernetes Secrets; backend is transparent
Secret namesNaming convention carries forward from Phase 0
ExternalSecret resourcesOnly the SecretStore reference changes
Inventory manifestMetadata remains valid; store column updates

5.4.5 Completion Criteria

CriterionDescription
All secrets in VaultEvery platform secret resides in Vault
ESO points to VaultAll ExternalSecret resources reference the Vault SecretStore
Secrets Manager decommissionedNo secrets remain in AWS Secrets Manager
RFC-SECOPS-0001 operationalFull Vault-first architecture is active
RFC-SECOPS-0002 supersededThis RFC transitions to Superseded status

5.5 Naming Convention Continuity

The naming convention established in this RFC persists across all three phases:

PhaseStoreSecret Name / Path
0Secrets Managerplatform-data/postgres/my-app
1Secrets Manager (via ESO)platform-data/postgres/my-app
2Vaultplatform-data/postgres/my-app

The segment structure is identical across all phases. AWS Secrets Manager supports / as a path separator, so the naming convention is identical to Vault from Phase 0 onward and no separator remapping is required. This continuity is intentional and is enforced by Invariant 2. The naming convention is defined by RFC-SECOPS-0001 Section 5a.5 and adopted by this interim architecture to eliminate naming migration as a migration cost.


5.6 Migration Risks

RiskPhaseLikelihoodImpactMitigation
Secret value mismatch during store migration2LowHighAutomated copy verification; dual-read validation period
Application downtime during ESO switchover1, 2MediumMediumBlue-green ExternalSecret deployment; verify sync before cutover
IAM credential leakage during Phase 00MediumHighLeast-privilege IAM policies; regular credential rotation
Inventory drift obscures missing secrets0, 1MediumLowPeriodic automated reconciliation
Extended Phase 0 duration due to infrastructure delays0HighMediumAccept risk; this RFC exists precisely for this scenario