Skip to main content

Complete guide to Azure Blob Storage: block/append/page blobs, the 4-tier model (Cold tier included), cost traps, Archive rehydration, and security best practices.

Azure Blob Storage Explained: Complete Beginner-to-Advanced Guide
Complete Guide Blob Storage Access Tiers Cost & Security

Azure Blob Storage Explained: Complete Beginner-to-Advanced Guide

Most explanations of Blob Storage stop at "Hot, Cool, and Archive" — a three-tier model that's been out of date since 2023. A fourth tier sits between Cool and Archive, and the actual cost traps that catch teams aren't in choosing the wrong tier — they're in the specific minimum-duration and minimum-billable-size rules almost nobody reads until the bill arrives.

Two things worth knowing before anything else

There are four access tiers, not three. Cold tier, added in 2023, sits between Cool and Archive — a lot of still-circulating content only covers the original Hot/Cool/Archive model.

Moving or deleting a blob before its tier's minimum storage duration triggers a prorated early-deletion fee — Cool is 30 days, Cold is 90 days, Archive is 180 days. And a 128 KiB minimum billable size applies to every object in Cool, Cold, and Archive, regardless of how small the actual file is.

4 access tiers
Hot, Cool, Cold, and Archive — Cold specifically added in 2023, still missing from a lot of guides
30 / 90 / 180 days
Minimum storage duration for Cool, Cold, and Archive respectively — leave early and pay a prorated fee
128 KiB minimum
The minimum billable object size in Cool, Cold, and Archive — small files still get charged as if they were this size
Archive = offline
Archive blobs can't be read directly — they require an explicit rehydration operation first

Azure Blob Storage is genuinely simple at its core — massively scalable object storage for unstructured data, the same category of service as Amazon S3 — and genuinely easy to get wrong in the specific details that determine your actual bill and your actual security posture. This guide starts from the fundamentals (what a blob actually is, the three distinct blob types, how storage accounts and performance tiers relate) and builds toward the details that separate a functioning storage account from a well-run one: the real, current structure of access tiers, the specific cost rules that catch people who tier data without reading the fine print, why Archive isn't simply "the slow tier," and the security defaults worth confirming rather than assuming.

Figure 1 — Four tiers, not three, each trading storage cost against access cost and commitment
STORAGE COST GOES DOWN LEFT TO RIGHT - COMMITMENT AND RETRIEVAL COST GO UP HOT No minimum duration Highest storage cost, no retrieval fee COOL 30-day minimum Lower storage cost, retrieval fee applies COLD 90-day minimum Added 2023 - often missing from older guides ARCHIVE 180-day minimum Offline - requires rehydration to read HOT AND COOL CAN BE SET AS THE ACCOUNT-LEVEL DEFAULT for new blobs - Cold and Archive can only be set per-blob, never as an account-wide default. Archive specifically cannot be read directly at all - Section 5 covers exactly what rehydration requires.
Azure Blob Storage has four access tiers, not the three (Hot, Cool, Archive) that a lot of older or generic content still describes — Cold tier was added in 2023 specifically to sit between Cool and Archive, offering roughly 75% lower storage cost than Hot with a 90-day minimum commitment. Only Hot and Cool can be configured as an account-level default tier applied automatically to new blobs; Cold and Archive are always set explicitly, either per blob or via a lifecycle management policy.
01What Blob Storage Actually Is, and the Three Blob TypesFoundation

Blob Storage is Azure's object storage service for unstructured data — images, video, log files, backups, documents, and any data that doesn't fit a structured database model. Underneath that single service name, there are three distinct blob types, each optimized for a different write pattern.

Blob typeOptimized for
Block blobUploading large amounts of data efficiently — composed of individually-managed blocks, the default and by far most common type for general file storage
Append blobAppend-only operations — data can only be added to the end, never modified or removed from the middle — the natural fit for logging scenarios
Page blobRandom read/write access to fixed-size pages — the foundation underlying Azure VM disks specifically
Most everyday use cases only ever need block blobs — the other two are purpose-specific

Unless building a logging pipeline that specifically needs append-only writes, or working directly with VM disk infrastructure, block blobs are the correct default and cover the overwhelming majority of real-world Blob Storage use cases — uploading files, serving static assets, storing backups, and general application data all use block blobs without needing to think about the other two types at all.

02Storage Accounts and Performance TiersFoundation

Every blob lives inside a storage account, and the account's performance tier is a separate decision from the access tier covered in Section 3 — worth keeping these two concepts distinct.

Performance tierDetail
StandardHDD-based, the correct default for the vast majority of workloads, supports all four access tiers
Premium Block BlobSSD-based, 1-3ms latency, several to 10x the cost of Standard, Hot tier only — no Cool, Cold, or Archive support at all
Premium Block Blob is a real, specific tool for a real, specific problem — not a general upgrade

Premium Block Blob genuinely earns its cost premium for high-volume small-file read/write patterns — machine learning datasets with heavy random access, log aggregation pipelines, high-frequency API-based access patterns, and high-performance AKS persistent volume requirements. Outside of a workload with a clear, measured low-latency requirement, Standard performance tier is the correct, cost-appropriate choice, and reaching for Premium by default is a common, avoidable cost inflation.

03Access Tiers: The Fourth Tier Most Guides Still MissCurrent Status

Restating Figure 1's point with the operational detail behind it — the tier structure directly shapes how data should actually be classified and managed.

TierBest suited for
HotData accessed multiple times per month — active application data, current working files
CoolData accessed infrequently, retained at least 30 days — short-term backups, recent but inactive data
ColdData accessed rarely, retained at least 90 days — the gap between "occasional backup" and "long-term archive"
ArchiveData essentially never accessed, retained at least 180 days — long-term compliance retention, raw source data kept for provenance
Azure CLI — set a blob's access tier explicitly az storage blob set-tier \ --account-name mystorageaccount \ --container-name backups \ --name 2026-01-quarterly-backup.tar.gz \ --tier Cold \ --auth-mode login # --auth-mode login uses Entra ID authentication rather than an # account key - the current recommended default, covered in Section 7.
04The Cost Trap: Minimum Duration and Minimum Billable SizeCritical Correction

These two rules together are the single most common source of unexpected Blob Storage cost surprises — worth understanding precisely before designing a tiering strategy.

RuleDetail
Minimum storage durationCool (30 days), Cold (90 days), Archive (180 days) — moving, deleting, or overwriting a blob before this period elapses triggers a prorated early-deletion fee for the remaining days
Minimum billable object size128 KiB applies to every object in Cool, Cold, and Archive — a file smaller than 128 KiB is still billed as if it were exactly that size
Hot tier exceptionNeither rule applies to Hot — no minimum duration, no minimum billable size floor
The 128 KiB minimum can make tiering many small files a net loss, not a savings

A lifecycle policy that aggressively moves large numbers of small files (log fragments, thumbnails, small JSON documents) into Cool, Cold, or Archive can end up costing more than leaving them in Hot, specifically because each individual small file is billed at the 128 KiB floor regardless of its actual size — the storage cost savings per byte in a colder tier can be entirely offset, or worse, by billing many small files as if each one were 128 KiB. Before applying an aggressive tiering policy, check the actual size distribution of the target data, not just its access frequency.

Early deletion fees apply to overwrites too, not just deletes

The early-deletion fee isn't limited to literally deleting a blob before its tier's minimum duration — rewriting the entire object through any operation (a new upload, a Put Block List, or a Copy Blob) within that window triggers the same prorated charge, since the platform treats a full overwrite the same as an early deletion of the original object. This is worth knowing for any workflow that periodically replaces files in place rather than genuinely appending or versioning them.

Figure 2 — Archive isn't a slow read, it's an offline state requiring an explicit operation first
YOU CANNOT READ AN ARCHIVE BLOB DIRECTLY - IT HAS TO BE REHYDRATED FIRST ARCHIVE (offline) Cannot be read directly - no exceptions rehydrate STANDARD PRIORITY Up to ~15 hours, lower cost HIGH PRIORITY Faster (often under 1 hour), higher cost REHYDRATION MEANS SETTING THE BLOB'S TIER BACK to Hot, Cool, or Cold - an explicit operation with its own duration and cost, not an instant or automatic process. Any workflow assuming Archive data is available on demand needs to account for this delay explicitly.
Archive is genuinely an offline tier — a blob sitting in Archive cannot be read by any operation until it's explicitly rehydrated, which means changing its tier back to Hot, Cool, or Cold. This isn't instant: Standard priority rehydration typically completes within around 15 hours, while High priority rehydration is faster (often under an hour) at a higher cost. Any application or workflow that assumes Archive data is retrievable on demand needs to account for this delay as a real part of its design, not an edge case.
05Archive Tier: Why It's an Operation, Not Just a Slower ReadDeep Dive

Restating Figure 2's core point directly, since it's a genuinely common source of confusion for anyone new to the Archive tier.

Azure CLI — rehydrate an archived blob back to Hot az storage blob set-tier \ --account-name mystorageaccount \ --container-name backups \ --name 2024-01-31-backup.tar.gz \ --tier Hot \ --rehydrate-priority Standard \ --auth-mode login # Standard priority: lower cost, typically completes within ~15 hours. # Use --rehydrate-priority High for faster turnaround at higher cost.
ConstraintDetail
Cannot set an entire account to ArchiveArchive is only ever set at the individual blob level, never as an account-wide default
No direct read operationsAny attempt to read an Archive-tier blob without first rehydrating it fails outright
Rehydration is itself a tier changeThe blob moves to Hot, Cool, or Cold — it doesn't get "temporarily unlocked" while staying in Archive
Design any compliance or disaster-recovery process around the real rehydration delay, not an assumption of instant access

If Archive tier is part of a compliance retention strategy or a disaster-recovery plan, the realistic retrieval time — hours, not seconds or minutes — needs to be an explicit, documented part of that plan's recovery time objective. A DR runbook that assumes archived backup data is available within minutes will fail its own assumptions the first time it's actually exercised against real Archive-tier data.

06Redundancy Options and the Archive Interaction GotchaCritical Correction

Redundancy options and access tiers interact in a way that's easy to overlook until it becomes a real operational blocker.

Redundancy optionProtects against
LRS (Locally Redundant Storage)A single datacenter failure — lowest cost, no geographic protection
ZRS (Zone-Redundant Storage)A single availability zone failure within a region
GRS (Geo-Redundant Storage)An entire region failure — data replicated to a paired region
RA-GRS / GZRS / RA-GZRSRegion failure plus, for the RA variants, read access to the secondary region directly
Changing redundancy on an account with archived blobs requires rehydrating all of them first

To change a storage account's redundancy configuration — moving from LRS to GRS, for instance — while that account contains any blobs in the Archive tier, every one of those archived blobs must be rehydrated first. Microsoft's own guidance explicitly recommends avoiding redundancy configuration changes on accounts containing archived data specifically because this rehydration requirement can be genuinely costly and time-consuming at scale. Plan redundancy configuration deliberately before archiving large volumes of data, since changing course later carries real cost.

LRS-to-GRS migration has its own Archive-specific constraint worth checking before relying on it

Migrating a storage account from LRS to GRS is supported specifically as long as no blobs were ever moved to the Archive tier while the account was configured for LRS — if any blob was archived during the LRS period, this straightforward migration path isn't available, and the redundancy change requires the full rehydrate-first process described above. Worth checking this history before assuming a simple redundancy upgrade is possible on an account with any archival activity in its past.

07Security: Authentication, SAS Tokens, and the Public Access DefaultBest Practices

A concrete set of current, recommended security controls for a production storage account.

ControlRecommendation
Public blob accessDisable at the storage account level (Allow Blob Anonymous Access = false) — access only via authenticated methods or Private Endpoint
Primary authentication methodMicrosoft Entra ID with Azure RBAC roles like Storage Blob Data Contributor — reserve storage account keys for genuine emergencies only
SAS tokens, when neededPrefer User Delegation SAS (backed by Entra ID) over Account SAS or Service SAS, which rely on the storage account key directly — always set an explicit expiration
Network accessRestrict to selected networks plus Private Endpoint rather than allowing all networks by default
Data protectionEnable versioning and soft delete as protection against both accidental and malicious deletion
User Delegation SAS is the meaningfully more secure SAS option — worth defaulting to it specifically

A User Delegation SAS token is secured with Entra ID credentials rather than the storage account key, meaning it can be scoped to a specific security principal's actual permissions and revoked by removing that principal's access — an Account SAS or Service SAS, by contrast, is tied directly to the account key itself, meaning anyone holding that token has whatever access the token grants until it expires, with no way to revoke it individually short of rotating the entire account key. For any SAS token generation in a production system, User Delegation SAS is the correct default, not just a nice-to-have upgrade.

08Lifecycle Management: Automating Tier TransitionsThe Fix

Lifecycle management policies automate tier transitions and deletion based on blob age, removing the need to manually manage tiering at scale.

Lifecycle management policy — a realistic aging rule set { "rules": [{ "name": "age-based-tiering", "enabled": true, "type": "Lifecycle", "definition": { "filters": { "blobTypes": ["blockBlob"] }, "actions": { "baseBlob": { "tierToCool": { "daysAfterModificationGreaterThan": 30 }, "tierToCold": { "daysAfterModificationGreaterThan": 180 }, "tierToArchive": { "daysAfterModificationGreaterThan": 365 }, "delete": { "daysAfterModificationGreaterThan": 2555 } } } } }] } // A common pattern: Hot -> Cool at 30 days, Cool -> Cold at 180 days, // Cold -> Archive at 365 days, delete at 2,555 days (7 years) - adjust // the exact thresholds to match actual access patterns and retention // requirements, not a generic default.
DetailValue
Policy formatJSON, applied at the storage account level or scoped to a specific blob prefix
Execution scheduleRuns once daily, processing blobs asynchronously
Time to take effect24-48 hours after a blob first meets the policy's condition — not instant
Trigger basisDays since last modification by default, or days since last access if Last Accessed Tracking is enabled
Cross-check lifecycle policy thresholds against the minimum duration rules from Section 4

A lifecycle policy that moves data through tiers faster than each tier's minimum storage duration effectively guarantees early-deletion fees on every transition — setting Cool-to-Cold at 45 days after the Cool transition, for instance, comfortably clears Cool's 30-day minimum, while a more aggressive 20-day transition would not. Design lifecycle thresholds with the minimum duration rules in mind explicitly, not as a separate, unrelated consideration.

09Step-by-Step: Setting Up a Production-Ready Storage AccountHow-To
  1. Create a Standard general-purpose v2 storage account, unless a confirmed low-latency requirement justifies Premium Block Blob

    Standard is the correct default for the large majority of workloads, per Section 2.

  2. Disable anonymous public blob access at the account level

    Set Allow Blob Anonymous Access to false explicitly — don't rely on it defaulting correctly without verification.

  3. Configure Microsoft Entra ID authentication with appropriately scoped RBAC roles

    Assign roles like Storage Blob Data Contributor or Storage Blob Data Reader based on actual need, per Section 7.

  4. Restrict network access to selected networks plus a Private Endpoint

    Avoid leaving the account open to all networks by default.

  5. Enable versioning and soft delete

    Protects against both accidental overwrites and deletions, and malicious deletion attempts.

  6. Classify data by actual access pattern before designing a tiering strategy

    Check the size distribution of data being considered for Cool/Cold/Archive against the 128 KiB minimum billable size from Section 4 before committing to an aggressive tiering policy.

  7. Design and apply a lifecycle management policy with thresholds that respect each tier's minimum duration

    Cross-check transition timing against Section 4's minimum duration rules, per Section 8's guidance.

  8. Choose a redundancy configuration deliberately before any data reaches the Archive tier

    Changing redundancy later on an account with archived data requires rehydrating everything first, per Section 6 — get this decision right upfront where possible.

  9. If SAS tokens are needed for any workflow, default to User Delegation SAS with an explicit expiration

    Avoid Account SAS or Service SAS tokens tied to the account key unless there's a specific reason they're required.

10Anti-PatternsTraps
Anti-patternWhy it feels rightWhy it isn't
Designing a tiering strategy around only Hot, Cool, and Archive"That's the model everyone talks about"Cold tier, added in 2023, often fits the gap between infrequent-but-soon and long-term-archive better than either neighbor
Aggressively tiering large volumes of small files to save on storage cost"Colder tier, lower cost per GB"The 128 KiB minimum billable size can make tiering many small files a net loss, not a savings — check size distribution first
Assuming Archive data is retrievable within minutes for a DR plan"It's still in Azure, should be fast"Archive requires explicit rehydration, typically hours even at high priority — build this delay into any real recovery time objective
Changing a storage account's redundancy configuration without checking for archived blobs first"Redundancy and access tier are unrelated settings"Any archived blob must be rehydrated before a redundancy change can proceed — a real, often-costly prerequisite
Using Account SAS or Service SAS tokens as the default for application access"SAS tokens are SAS tokens"User Delegation SAS, backed by Entra ID, is individually revocable and more securely scoped — the correct default for production systems
Leaving anonymous public blob access enabled because it was the historical default"Never had a reason to change it"Disabling public access explicitly is a current, standard security control worth confirming directly rather than assuming

Key Takeaways

There are four access tiers, not three. Cold, added in 2023, sits between Cool and Archive — check any tiering strategy against the current, complete model.
Minimum storage duration applies to Cool (30 days), Cold (90 days), and Archive (180 days). Early deletion or overwrite triggers a prorated fee.
A 128 KiB minimum billable size applies to Cool, Cold, and Archive. Tiering many small files can cost more than leaving them in Hot.
Archive is offline — reading it requires explicit rehydration, typically hours. Build this into any DR plan's actual recovery time objective.
Changing redundancy on an account with archived blobs requires rehydrating them all first. Choose redundancy configuration deliberately before archiving at scale.
User Delegation SAS is the more secure default over Account or Service SAS. Entra ID-backed, individually revocable, properly scoped.
Disable anonymous public blob access explicitly. Confirm this directly rather than assuming the account is already configured correctly.

Frequently Asked Questions

What are the four Azure Blob Storage access tiers, and how are they different from the old three-tier model?
Azure Blob Storage currently offers four access tiers: Hot, Cool, Cold, and Archive. Cold tier was added in 2023 specifically to sit between Cool and Archive, offering roughly 75% lower storage cost than Hot with a 90-day minimum storage commitment — filling a genuine gap for data that's accessed too rarely to justify Cool's cost but not rarely enough to justify Archive's offline, rehydration-required model. A lot of still-circulating documentation, tutorials, and mental models only describe the original three-tier structure (Hot, Cool, Archive), which predates Cold's introduction — worth double-checking any tiering strategy or cost-optimization guidance against the current, complete four-tier model rather than the older three-tier one. Hot has no minimum storage duration and no retrieval fee, but the highest storage cost. Cool requires a 30-day minimum commitment. Cold requires 90 days. Archive requires 180 days and is the only tier that's fully offline, requiring an explicit rehydration operation before any data can be read.
Why did moving my small files to a colder storage tier not save as much money as expected?
This is almost certainly the 128 KiB minimum billable object size, a rule that applies to every object stored in the Cool, Cold, and Archive tiers specifically — it does not apply to Hot. Under this rule, any object smaller than 128 KiB is still billed as though it were exactly 128 KiB, regardless of its actual size. For workloads involving large numbers of genuinely small files — small log fragments, thumbnails, brief JSON documents, and similar — this minimum billable size can substantially offset or even eliminate the storage cost savings that moving to a colder tier would otherwise provide, since the per-object billing floor doesn't scale down with genuinely tiny files. Before applying an aggressive lifecycle management policy that tiers large volumes of small files, it's worth checking the actual size distribution of that data specifically, since a tiering strategy that looks like clear savings based on total data volume alone can turn out to be cost-neutral or even a net loss once this minimum billable size rule is factored in on a per-object basis.
Can I read a file directly from the Archive access tier, or does it need to be moved first?
A blob in the Archive tier cannot be read directly under any circumstances — it first needs to be explicitly rehydrated, meaning its tier is changed back to Hot, Cool, or Cold, before any read operation against it will succeed. This is a genuinely important distinction from the other tiers: Hot, Cool, and Cold are all still "online" in the sense that data can be read directly, just at different cost and latency points, while Archive is a fully offline tier by design, offering the lowest possible storage cost specifically because the data isn't kept in an immediately readable state at all. Rehydration itself takes real time — Standard priority rehydration typically completes within around 15 hours, while High priority rehydration is faster, often completing in under an hour, at a correspondingly higher cost. Any system or process that relies on Archive-tier data — a disaster recovery plan, a compliance data request, a long-term backup restoration — needs to account for this rehydration delay as a genuine part of its expected timeline, not an edge case or unlikely scenario, since it applies every single time Archive-tier data needs to be accessed.
What's the most secure way to authenticate to Azure Blob Storage in a production application?
The current recommended approach prioritizes Microsoft Entra ID authentication with appropriately scoped Azure RBAC roles — such as Storage Blob Data Contributor or Storage Blob Data Reader, depending on the actual access level needed — over storage account keys, which should be reserved for genuine emergency scenarios rather than routine application access. For situations where a SAS (Shared Access Signature) token is genuinely necessary, such as granting temporary, scoped access to an external party, a User Delegation SAS token is the more secure option compared to an Account SAS or Service SAS. A User Delegation SAS is secured using Entra ID credentials rather than the storage account key directly, which means it can be scoped precisely to a specific security principal's actual permissions and can be effectively revoked by removing that principal's access, without needing to rotate the entire storage account key the way revoking an Account SAS or Service SAS would require. Beyond authentication method, a genuinely secure production configuration also disables anonymous public blob access at the storage account level entirely, restricts network access to selected networks combined with a Private Endpoint rather than allowing all networks, and always sets an explicit, reasonably short expiration on any SAS token that is generated, regardless of type.