Data Migration Risks When Moving Between Cloud Storage Providers
Incomplete planning and hidden data turn migrations into data loss and compliance disasters.
Sponsored by Archil

Moving between cloud storage providers exposes data, services and budgets to risks that compound when planning is thin. Each risk needs an audit before cutover. Where data can stay put, mounting it where it already lives can avoid the move entirely. Where a transfer is necessary, protecting data and services requires prioritising verification, access controls and a tested exit path over transfer speed.
Why cloud storage migrations fail before a single byte moves
Most failed migrations begin with an incomplete picture of what needs to move. Teams underestimate data volume and schema diversity, skip validation checkpoints, or miss dependencies between systems. Source systems accumulate undocumented type coercions, implicit transformations and legacy workarounds. Without a catalogue of those exceptions, the destination can receive data it cannot process, with the processing failure becoming visible there only after the source has been decommissioned. The transfer did its job, but the plan described the wrong job.
The data to move also includes temporary backups, test environments and duplicate stores that routine inventories miss. These shadow assets have their own dependencies and rules to follow, even if nobody remembers creating them. List what exists, write down its dependencies and set acceptance criteria before writing migration scripts.
Data loss and corruption in transit
A transfer that completes without error is not necessarily correct. Corruption can stay hidden until production traffic reaches a rare edge case or a batch job that runs only now and then. Currency values that are off by a factor of one hundred make the distinction painfully clear. A green progress bar is not an accountant.
Verification is the control that closes this gap, rather than more bandwidth or different migration software. Build and test a validation layer for every migrated object before the first transfer, including row-count comparisons, checksum comparisons and referential integrity reports. For changing datasets, bulk load plus change-data capture reduces the window in which in-flight writes can be lost. A staged cutover then makes validation part of the move, rather than a hopeful inspection after everything has changed.
Security exposure during the migration window
During migration, intermediate storage, network paths and transformation layers may leave data less secure for a time than it is in either permanent environment. Encryption in transit is necessary, but it does not protect records after they land in a staging bucket with broader permissions. Temporary infrastructure is still infrastructure, even when its name contains “delete later”. Teams need to check its access policies and set a time to remove it.
Access control continuity is therefore a parallel workstream. RBAC policies, column-level security rules and row-level filters rarely migrate automatically. Reconfiguring them only after go-live creates a window in which the wrong principals can reach the data. Staging environments need the same access controls as production and a decommission schedule. Treating the migration window as its own threat model makes these temporary paths visible.
Credentials need equally deliberate handling. Use short-lived, scoped credentials for transfers, keep long-lived keys out of scripts and environment variables, and block cloud metadata service (IMDS) access from tooling that does not need it. One relevant pattern is brokering scoped storage access at the network boundary instead of handing keys to applications or migration processes. Separating credentials from compute reduces the places where keys can leak. That pattern matters for long-lived transfer tooling as well as application code.
Compliance drift as data crosses jurisdictional boundaries
Security controls leave teams with a separate question of where the law allows data to be stored. Moving to a different provider or region can change which rules apply, even when every record arrives intact and only those with permission can reach it. The source region may meet residency requirements while the closest match at the destination sits in another jurisdiction. Selecting that region on cost or latency grounds can therefore invalidate the assumptions behind the original deployment. A cheaper location is not a compliance decision.
Temporary backups, test datasets and duplicates may hold regulated records, so leaving them out of classification leaves some of that data outside the compliance scope. Finish classification before transfers begin and map regulated data to destination regions where it is allowed. That mapping becomes a control when transfer pipelines are region-locked and every cross-border transfer has a lawful basis that is written down. Compliance sign-off belongs in a parallel workstream with engineering, because regulatory complexity remains the team’s problem to resolve before cutover.
Egress costs that materialise only after cutover
A dry run, failed transfers, retries and a period of dual-running can generate egress several times larger than the raw data size. The source provider charges for data leaving its network, so the destination’s pricing documentation does not contain the whole bill. The estimate needs to include those repeat volumes and the dual-running duration before the first transfer attempt. Get the source provider’s egress pricing in writing, rather than treating the destination’s attractive price as the cost of getting there.
Downtime and service continuity during cutover
A delayed cutover extends more than the maintenance window. It prolongs temporary security exposure and dual-running costs, allowing operational trouble to compound the other risks. Bulk load plus change-data capture (CDC) can shorten the quiesce window from the time needed for the full transfer to a short final sync. For that to work, teams need to plan and test CDC before migration begins. Introducing it during cutover turns a continuity control into another untested dependency.
Coordination matters just as much as transfer design. When data engineering owns the source, platform engineering owns the target and another team owns compliance sign-off, gaps between teams can stall the move. A single end-to-end owner and a staged cutover with validation for each traffic cohort limit that exposure. Rollback must also work under pressure, with DNS TTLs lowered, the source retained until validation is complete and the runbook tested. A rollback plan that depends on a source system already deprovisioned is less an exit route than a painted door.
Vendor lock-in as a risk that compounds across every future migration
The ability to reverse this cutover raises a larger question about the ability to leave the destination later. The risks so far apply to one migration, while lock-in makes each move after it harder. Proprietary storage formats, closed metadata catalogs, vendor-specific query dialects and bespoke compute abstractions create dependencies without direct equivalents elsewhere. Unwinding those dependencies can require a rebuild. Their cost also constrains pricing negotiations, responses to end-of-life announcements and adoption of newer tooling.
At the storage layer, avoiding an unnecessary move is one concrete way to reduce that dependence. File-system layers that mount existing buckets in their native object format give applications a uniform interface while the bucket remains the source of truth in the customer’s own account. When the need is a common file interface rather than a new data location, this approach sidesteps the schema-discovery and data-cataloguing work of a transfer.
For migrations that do require architectural change, open standards offer another route to portability. Apache Iceberg for table format, open APIs for metadata and standard Kubernetes primitives for orchestration preserve the option to move components independently. That differs from rebuilding a tightly coupled stack all at once. A storage-agnostic interface addresses storage dependence, while open formats and APIs address dependencies elsewhere. With either approach, a transfer from one provider to another still needs integrity, security, compliance and cost checks.
Additional risks when migrating AI agent infrastructure
AI agent workloads bring execution state into the same set of risks. Installed packages, file caches, checkpoint data and in-progress task context can be tightly coupled to the source provider’s storage and execution layer. First, isolation may not survive the move unchanged. A destination container, gVisor environment, VM-backed container runtime such as Kata Containers, or microVM such as Firecracker is not an interchangeable security boundary.
MicroVMs give workloads their own kernel on hardware virtualisation (KVM), providing the strongest isolation described here for agent-generated code. gVisor intercepts syscalls without a full VM, offering stronger separation than containers but weaker separation than microVMs, with some overhead for I/O-heavy work. It can suit compute-heavy agent tasks that do not require full VM isolation. Containers share the host kernel and are not the right default for agent-written code without an additional user-space kernel or microVM layer. Any change in isolation, including a downgrade, needs explicit acceptance.
Next, credential injection may have a different or absent equivalent on the destination. The minimum controls are no standing credentials in the execution environment, default-deny outbound networking, IMDS blocked from agent processes and per-tenant egress rules. These extend the migration-window threat model to code the agent itself produces. A sandbox boundary does not remove the need for a network boundary. Both need to survive the move.
Persistence creates a separate continuity risk because proprietary vector stores, file caches, tool memory and dependency trees may need rebuilding or re-ingestion. Persisting state to a durable, provider-agnostic file system that can also be read over an S3-compatible API lets disk state survive a compute-layer migration. Finally, parallel attempts and checkpoint-based rollback depend on equivalent branching semantics at the destination. Without them, teams can lose both parallel execution and safe recovery after cutover.
A pre-cutover checklist that covers every risk category
The integrity check asks whether the full audit covers volume, schema, undocumented dependencies, shadow data and orphaned assets before transfer. It also asks whether every migrated object has a validation layer that has been tested and uses row-count comparisons, checksum comparisons and referential integrity reports. The integrity check also asks whether bulk load plus change-data capture protects in-flight writes.
The security check asks whether staging environments have the same access controls as production and a schedule for when they will be decommissioned. It asks whether access control migration has an owner and sign-off before go-live. It also asks whether the credentials used for transfers are short-lived, scoped and kept out of scripts or environment variables, and whether IMDS access is blocked where it is not needed.
The compliance check asks whether classification finds regulated records and maps them to regions where they are allowed before transfer. It asks whether transfer pipelines are region-locked and every cross-border transfer has a documented lawful basis. It also asks whether temporary backups, test datasets and duplicates fall within the compliance scope.
The commercial check asks whether the budget covers dry runs, failed transfers, retries, the dual-running period and the final copy. It also asks whether the source provider’s egress pricing has been confirmed directly.
The operational check asks whether rollback has been tested under realistic conditions, including DNS TTL preparation and source retention until validation is complete. It asks whether one owner spans all team boundaries. It also asks whether cutover moves traffic in cohorts with validation at each stage.
The lock-in check asks whether the destination uses open formats and APIs while keeping out proprietary dependencies that would make the next migration cost more. Where storage is provider-specific, it asks whether a documented exit path exists.
For agent workloads, the final check asks whether isolation matches the source or any change has been explicitly accepted. It asks whether durable, provider-agnostic storage preserves state through compute migration. It also asks whether credentials are brokered at the network boundary, outbound access is default-deny, IMDS is blocked and egress rules are per-tenant. The final check also asks whether fast branching and checkpointing remain available after cutover.
This article is sponsored by Archil.


