Lesson 06 — Storage Accounts: Configuration & Redundancy
Why Storage Accounts Are Foundational
Nearly every Azure workload touches a storage account. VM boot diagnostics, Azure Function triggers, Log Analytics workspace exports, ARM template deployments, static web hosting, data lake analytics — all of these depend on storage accounts configured correctly. Getting the redundancy option wrong is the single most common storage mistake in enterprise Azure, and it surfaces only when there is a disaster.
The AZ-104 exam specifically tests the six redundancy tiers — their names, their protections, their RPOs, and what happens post-failover. Memorise the redundancy table in this lesson before your exam date.
Storage Account Types
Azure has four current storage account types. Choosing the wrong type is an irreversible decision — you cannot change a storage account type after creation.
| Type | Services | Redundancy | Use case |
|---|---|---|---|
| Standard GPv2 | Blob, Files, Queues, Tables | LRS, ZRS, GRS, GZRS, RA-GRS, RA-GZRS | Default choice for almost all workloads |
| Premium Block Blob | Block blobs only | LRS, ZRS only | High-throughput blob workloads, low-latency streaming |
| Premium File Shares | Azure Files only | LRS, ZRS only | Enterprise file shares requiring low latency or NFS protocol |
| Premium Page Blobs | Page blobs only | LRS only | Unmanaged VM disks (legacy — use Managed Disks instead) |
Redundancy Options — All Six
This is the most exam-dense section in the Storage domain. Understand the topology of each option — not just the name. Know exactly what failure scenario each one does and does not protect against.
| Tier | Copies | Datacenter failure? | Region failure? | Secondary readable? |
|---|---|---|---|---|
| LRS | 3 (1 datacenter) | ✗ Not protected | ✗ Not protected | N/A |
| ZRS | 3 (3 AZs) | ✓ Protected | ✗ Not protected | N/A |
| GRS | 6 (3+3) | ✗ Not protected (primary is LRS) | ✓ After failover | ✗ Only after failover |
| GZRS | 6 (3+3) | ✓ Protected | ✓ After failover | ✗ Only after failover |
| RA-GRS | 6 (3+3) | ✗ Not protected (primary is LRS) | ✓ Anytime | ✓ Always |
| RA-GZRS | 6 (3+3) | ✓ Protected | ✓ Anytime | ✓ Always |
Reading from the Secondary Region
When read access (RA-GRS or RA-GZRS) is enabled, the secondary endpoint URL is:
https://<accountname>-secondary.blob.core.windows.net/<container>/<blob>
Data on the secondary is eventually consistent — the replication is asynchronous with a typical RPO under 15 minutes, but this is not guaranteed. Applications reading from the secondary must tolerate stale data and must handle 404 responses gracefully (objects may not yet have been replicated).
Manual Failover
For GRS, GZRS, RA-GRS, and RA-GZRS accounts, you can initiate a customer-managed failover via the portal or Azure CLI when the primary region is unavailable:
- The secondary region becomes the new primary.
- The account's redundancy downgrades to LRS immediately after failover — the former secondary only has LRS within itself.
- Data loss is possible — any writes to the primary not yet replicated to the secondary are lost.
- After the original primary region recovers, you must manually reconfigure geo-redundancy on the account. It does not restore automatically.
Access Tiers
Access tiers apply to Standard GPv2 accounts and control the storage and access cost trade-off. The default tier can be set at the account level; individual blobs can override with blob-level tiering.
| Tier | Optimised for | Storage cost | Access cost | Min storage duration |
|---|---|---|---|---|
| Hot | Frequent access | Highest | Lowest | None |
| Cool | Infrequent access (monthly) | Lower | Higher | 30 days |
| Cold | Rarely accessed (quarterly) | Lower still | Higher still | 90 days |
| Archive | Long-term retention, rarely read | Lowest | Highest + rehydration time | 180 days |
Hot and Cool tiers can be set as the account default. Cold and Archive are available only at the individual blob level — you cannot set Cold or Archive as the storage account default tier.
Configuration and Security Settings
Naming Constraints
Storage account names must be 3–24 lowercase alphanumeric characters, globally unique across all Azure. The name becomes part of the service endpoint URL (https://<name>.blob.core.windows.net), so name collisions are global.
Hierarchical Namespace (HNS)
Enabling Hierarchical Namespace at account creation converts the account into Azure Data Lake Storage Gen2. This adds:
- Atomic directory rename and delete operations (critical for big data pipelines).
- POSIX-compatible ACLs at file and directory level (in addition to RBAC).
- Native integration with Spark (Azure Databricks, HDInsight, Synapse Analytics).
Network Access Configuration
| Setting | What it does |
|---|---|
| Public access — All networks | Anyone on the internet can reach the storage endpoint (subject to auth) |
| Public access — Selected networks | Only specified VNet subnets (via service endpoints) and IP ranges can access |
| Public access — Disabled | All public traffic denied; access only via private endpoints in your VNet |
Authentication Options
Storage accounts support two authentication models for data-plane access:
- Shared key (access keys): two 512-bit keys, full account access. Simple but high blast radius if leaked. Microsoft now recommends disabling shared key auth in production.
- Microsoft Entra ID (OAuth + RBAC): assign storage data-plane roles (
Storage Blob Data Reader,Storage Blob Data Contributor, etc.) to managed identities or service principals. No secret to rotate or leak.
Encryption Settings
- Encryption at rest: all storage data is encrypted at rest by default with 256-bit AES using Microsoft-managed keys. No configuration needed.
- Customer-Managed Keys (CMK): supply your own encryption key via Azure Key Vault or Managed HSM. Required for some compliance frameworks (PCI-DSS, HIPAA). Key rotation is your responsibility.
- Infrastructure encryption: double encryption — Azure encrypts data twice at the hardware layer plus the software layer. For the most stringent compliance requirements.
- Minimum TLS version: set to TLS 1.2 in production. TLS 1.0 and 1.1 are insecure and deprecated.
- Secure transfer required: enforces HTTPS for all connections — should always be enabled. Rejects HTTP connections.
Key Service Limits
| Limit | Value |
|---|---|
| Max storage capacity | 5 PiB (petabytes) |
| Max storage accounts per subscription per region | 250 |
| Max request rate per account | 20,000 requests/second |
| Max ingress (LRS/GRS) | 10 Gbps (US/Europe), varies by region |
Check Your Understanding
Click any option to see immediate feedback. Answers represent correct behaviour in a real Azure environment.
1. A critical financial application must read data from the secondary region during a primary region outage without waiting for a Microsoft-initiated failover. Which redundancy should you choose?
2. You create a GPv2 storage account with Cool as the account tier. A developer uploads a blob then deletes it 5 days later. What is the billing implication?
3. An application uses shared key authentication for storage access. Your security team mandates migration to Entra ID authentication. What is the correct sequence?
4. A storage account must be inaccessible from the public internet — all access must go through a private network path. Which configuration achieves this?
5. You need to store video files with low-latency access and run Spark analytics jobs using Azure Databricks with directory-level operations. Which configuration is required?
6. Your storage account currently uses GRS. You initiate a manual customer failover due to a regional outage. What is the state of the account immediately after failover completes?
Also read: Storage account overview and Disaster recovery and storage account failover. The failover article explains post-failover LRS state in detail.
This lesson covered storage account types, redundancy, tiers, and security. Go deeper on:
- Walk me through the exact CLI commands to initiate a storage account failover and then reconfigure GRS afterwards.
- What is the difference between a service endpoint and a private endpoint for storage, architecturally?
- How does ADLS Gen2 POSIX ACL interact with Azure RBAC — which takes precedence?
- When would I use a customer-managed key versus Microsoft-managed key for storage encryption?
- How do I migrate a production storage account from LRS to ZRS without downtime?