Microsoft will automatically migrate any remaining legacy Blob Storage accounts to the newer general-purpose v2 (GPv2) format after October 13, 2026. The company warns that customers who let the automatic migration run risk a billing spike, making this a financial-control deadline as much as a platform-maintenance one.
What’s Changing and When
The retirement involves two milestones. First, starting September 2026, Azure will block requests to create new accounts with the kind BlobStorage. Second, after October 13, 2026, any legacy Blob Storage accounts that still exist at that point will be converted in place to GPv2 by Microsoft—automatically, and without further notice.
Legacy Blob Storage accounts are the original blob-only offering, supporting block blobs and append blobs with account-level access tiers. They never supported file shares, tables, queues, or modern features like lifecycle management or per-blob tiering. General-purpose v1 (GPv1) accounts, identified by kind: Storage, are also in the retirement inventory but are not covered by the same automatic-migration guarantee. Microsoft’s documentation says GPv1 accounts should be migrated, and that inaction could be construed as consent for a future automatic upgrade, but it does not establish October 13 as the trigger for that action. Teams running GPv1 must consult Microsoft’s current guidance rather than assuming the same timeline applies.
What This Means for Your Workloads
If you own or operate any Azure Storage account that isn’t already GPv2, this retirement lands squarely on your desk. The impact splits into three audiences.
For Cloud Administrators and SREs
You need an inventory—today—of every BlobStorage and Storage-kind account across all subscriptions. Azure Resource Graph is the fastest route. A query like this surfaces candidates:
resources
| where type =~ 'microsoft.storage/storageaccounts'
| where kind == 'BlobStorage' or kind == 'Storage'
| extend owner = coalesce(
tostring(tags['owner']),
tostring(tags['Owner']),
tostring(tags['serviceOwner']),
tostring(tags['ServiceOwner'])
)
| join kind=leftouter (
resourcecontainers
| where type == 'microsoft.resources/subscriptions'
| project subscriptionId, subscriptionName = name
) on subscriptionId
| project
subscriptionName,
subscriptionId,
resourceGroup,
accountName = name,
accountKind = kind,
location,
owner,
tags
| order by subscriptionName asc, resourceGroup asc, accountName asc
Run it across every subscription you can access. An empty owner column doesn’t prove nobody owns the account—only that no tag named owner (or Owner, serviceOwner, etc.) was found. Reconcile the results with your infrastructure-as-code repositories, deployment histories, and billing records.
For Developers and DevOps Engineers
Your deployment code needs a scrub. Search ARM templates, Bicep files, Terraform configs, pipeline variables, and internal service catalogs for kind: BlobStorage. Remove or replace those definitions before September 2026. The creation block will stop pipelines cold if they try to provision a now-unsupported account type.
Also scan for kind: Storage references. Even if the September block doesn’t apply to GPv1, leaving them in place invites a future break. Replace them with reviewed kind: StorageV2 configurations that specify the intended access tier, redundancy, and lifecycle rules.
For Cost Management Teams
The automatic migration changes how Azure bills for storage. GPv2 accounts charge for transactions (read, write, list) plus storage at tier-specific rates. A legacy account that mostly accumulated cold data could generate a higher bill if the default tier or lifecycle policy doesn’t match the workload. Microsoft’s FAQ states plainly that if you don’t migrate proactively, your decision is construed as consent for Microsoft to migrate on your behalf—and that may increase billing.
How We Got Here
Azure Storage has evolved through three generations. General-purpose v1 (GPv1) supported blobs, queues, tables, and files with basic redundancy. Blob Storage accounts were a specialized subset that shed non-blob capabilities for a simpler experience. In 2018, Microsoft introduced GPv2, which merged the full feature set with modern cost controls: per-blob tiering, lifecycle management, point-in-time restore, and Azure Data Lake Storage Gen2.
Since then, GPv2 has been the only account type receiving new features. Microsoft’s retirement of Blob Storage accounts follows a familiar pattern. Previous retirements, such as the Azure Update Delivery service tag and Azure AD Graph API, demonstrated that leaving deprecation to the last minute often uncovers hidden dependencies in automation scripts and recovery procedures. The same risk exists here: a storage account used only by a quarterly reporting job might go undiscovered until the job fails.
What to Do Now
Treat the September 2026 block as the real deadline for code changes, and the October 2026 auto-migration as the deadline for cost governance. Here’s a practical plan.
1. Complete Your Inventory
Run the Azure Resource Graph query above. Cross-reference the accounts with:
- Infrastructure repositories (Terraform, Bicep, ARM templates)
- CI/CD pipeline definitions
- Billing exports (to spot accounts still accruing charges)
- Service catalogs or internal CMDBs
Assign an accountable owner to every account. If none exists, escalate to the team that depends on the stored data.
2. Pull the Code Apart
Search all source code for these strings:
- "kind" with values "BlobStorage" or "Storage"
- API calls to Microsoft.Storage/storageAccounts with a kind parameter
- Hardcoded accountType in older modules
Update every instance to "StorageV2" and commit the changes with explicit approval. Don’t rely on a single find-and-replace across the repo—review each one against the workload it serves.
3. Plan the Migration for Each Account
Microsoft describes the conversion as an in-place Azure Resource Manager operation. No data copy is required. However, “in-place” does not mean risk-free. For each account:
- Confirm the current kind is
BlobStorageorStorage. - Verify your access permissions and watch for resource locks or Azure Policy that might block the change.
- Document the workload, access patterns, and retention requirements.
- Capture a cost and activity baseline for at least a week—don’t look only at stored capacity; include transactions, retrieval, and tier-placement costs.
- Decide on a default access tier. Hot for frequent access, cool for infrequent, archive for rare. Don’t just copy the legacy setting.
- Choose a redundancy configuration. Options range from locally redundant (LRS) to read-access geo-zone-redundant (RA-GZRS). The upgrade is the moment to align redundancy with actual durability and availability needs.
- Design lifecycle rules to automatically move blobs to cooler tiers or delete them after a defined age. Give every rule an owner and a review date.
- Validate that monitoring, alerts, and diagnostics still work after the conversion.
4. Use a Migration Worksheet
Track decisions per account. A structured worksheet prevents cargo-cult configuration:
| Field | Required entry |
|---|---|
| Current account kind | BlobStorage or Storage |
| Workload and access | Purpose, read/write frequency, retention needs |
| Chosen tiering | Default tier + exceptions + lifecycle rules |
| Redundancy decision | Selected option + approving owner |
| Lifecycle-rule owner | Person or team responsible for rule reviews |
| Baseline period | Dates and representative cost/activity data |
| Migration owner | Person accountable for execution and follow-up |
| Validation date | Scheduled date, actual result, and exceptions |
Attach dependency records, policy exceptions, and maintenance-window details.
5. Execute in Controlled Batches
Start with one non-critical account. Convert it via the Azure portal or ARM API, then:
- Confirm the portal reports
kind: StorageV2. - Perform reads and writes through your application’s normal authentication path.
- Verify containers, blobs, and metadata are intact.
- Run your deployment pipeline against the account to catch any source-of-truth drift.
- Compare activity and costs against the baseline.
- Record the outcome in the worksheet.
Expand to larger batches only after the pattern holds. This incremental approach is safer than converting dozens of accounts at once and hoping for the best.
6. Don’t Forget GPv1 Accounts
GPv1 accounts are still in scope. Even though the October 13 auto-migration applies explicitly to BlobStorage accounts, Microsoft’s guidance about GPv1 is clear: migrate them. Use the same discovery and planning steps. Monitor Microsoft’s documentation for a confirmed auto-migration date for GPv1, but plan a proactive upgrade regardless.
7. Post-Migration Validation Checklist
After every conversion, run through this list:
- Account kind reads
StorageV2 - Expected blobs and metadata present
- Authentication and authorization unchanged
- Monitoring, diagnostics, and alerts functional
- Deployment pipeline succeeds with updated definition
- Costs match modeled expectations
- Owner documented and notified
Outlook
The October 2026 deadline is more than a year away, but the work is quieter and more tedious than it looks. The real risk isn’t forgetting to click “migrate”—it’s discovering that a rarely used automation script, a backup module, or a development sandbox still provisions BlobStorage accounts a week before the September block. Use the time to bake migration into your standard lifecycle. Treat every legacy account found as a prompt to modernize not just its SKU, but its operational model: tiering, redundancy, cost governance, and security posture. Microsoft is unlikely to grant exceptions, so the path is set. The only choice left is whether your organization controls the outcome or receives it.