Sequence 2 β Create & Configure Storage Accounts
Prerequisites: Sequence 1 (you know what a storage account is and which services it hosts) Β· What you'll be able to do: create an account end-to-end in the portal, CLI and PowerShell Β· pick the right kind and performance tier Β· obey the naming/region rules Β· manage an account after creation (upgrade, move, delete) Β· Est. time: ~14 min.
1. The big picture: an account is an ARM resource
A storage account is an Azure Resource Manager (ARM) resource. That single fact drives the whole creation workflow:
- Every account must live in a resource group β a logical container in a single subscription. You either create a new one or pick an existing one.
- The account gets a globally unique namespace (
https://<name>.blob.core.windows.net, etc. β see Sequence 1) accessible over HTTP/HTTPS worldwide. - All four data services (blobs, files, queues, tables) live inside the same account and are billed together as a group.
Three properties are decided at creation and can never be changed afterwards: the account name, the kind (account type), and β implicitly β the performance tier. Get these right the first time; everything else (networking, data protection, most encryption settings) can be tuned later.
2. Naming, region & placement β the Basics tab
The Basics tab is the only tab you must complete; everything else can take defaults via Review + create.
| Field | Rule / decision |
|---|---|
| Subscription | Billing + policy boundary. Required. |
| Resource group | New or existing logical container. Required. |
| Storage account name | 3β24 characters, lowercase letters and numbers only, globally unique across all of Azure. No hyphens, no uppercase. |
| Region | Where data physically lives. Affects billing, latency, and which redundancy/account types are available (not all regions support all options). |
| Preferred storage type | Guidance hint only (Blob/ADLS Gen2, Files, Tables, Queues). It does not lock you out of other services. |
| Performance | Standard (default, recommended) vs Premium β see Β§3. |
| Redundancy | LRS / ZRS / GRS / GZRS (+ read-access variants). Deep dive in Sequence 3. |
Memory hook for naming: "3 to 24, lowercase + digits, unique on the planet." The name becomes part of every endpoint URL, which is why it must be globally unique and DNS-safe.
Choose the region to co-locate data with the apps that use it β accessing data from a different region incurs egress charges.
3. The decision that's permanent: kind + performance tier
Two linked choices define the account type. In the portal you pick Performance then a sub-type; in CLI/PowerShell you set them with the kind and sku/SkuName parameters.
Standard vs Premium
| Standard | Premium | |
|---|---|---|
| Media | HDD-backed | SSD-backed |
| Latency | Normal | Consistently low latency, high IOPS/throughput |
| Best for | Most scenarios, general workloads, archival | High transaction rates, small objects, latency-sensitive apps |
| Billing model | Pay for capacity used + transactions | Pay for provisioned capacity (higher per-GB, predictable) |
| Default? | Yes β recommended | No |
Account kinds (current)
| Account type | kind | sku/SkuName examples | HNS support |
|---|---|---|---|
| Standard general-purpose v2 (default, recommended) | StorageV2 | Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Standard_GZRS, Standard_RAGZRS | Yes |
| Premium block blobs | BlockBlobStorage | Premium_LRS, Premium_ZRS | Yes |
| Premium file shares | FileStorage | Premium_LRS, Premium_ZRS | No |
| Premium page blobs | StorageV2 | Premium_LRS | No |
The SKU encodes BOTH performance and redundancy in one string: Standard_GRS = standard tier + geo-redundant storage. (Redundancy itself is Sequence 3.)
Legacy kinds β recognize and avoid
| Legacy type | kind | Why avoid | Action |
|---|---|---|---|
| General-purpose v1 | Storage | No access tiers, no lifecycle mgmt, older pricing | Upgrade to v2 (in-place, one-way) |
| Blob Storage (legacy) | BlobStorage | Blobs only; superseded by GPv2 | Upgrade to v2 |
| Classic (ASM) | n/a | Retired Aug 31, 2024 | Migrate to ARM |
Critical exam fact: you cannot change an account to a different kind after creation β the one exception is the one-way in-place upgrade from v1 / legacy Blob Storage β GPv2. To switch performance tier (StandardβPremium) you must create a new account and copy the data.
4. The remaining creation tabs β what each decides
After Basics, the portal organizes everything else into tabs. Most can also be set after creation; a few are creation-only.
| Tab | Key settings | Set later? |
|---|---|---|
| Advanced | Enable hierarchical namespace (ADLS Gen2 β see Β§5); SFTP; NFS v3; allow cross-tenant replication; default access tier (Hot/Cool); SMB managed identity / encryption-in-transit | HNS is creation-only; tier is changeable |
| Networking | Public network access (enable / disable / network security perimeter); allowed VNets & IP ranges; private endpoints; routing preference; IPv6 | Yes β deep dive in Sequence 8 |
| Data protection | Soft delete (blobs/containers/file shares), versioning, change feed, point-in-time restore, version-level immutability | Yes β Sequences 11 & 13 |
| Encryption | Microsoft-managed keys (default) vs customer-managed keys; scope; infrastructure encryption (double encryption) | Some keys creation-only β deep dive in Sequence 4 |
| Security | Require secure transfer (HTTPS); allow/deny anonymous container access; storage account key access on/off; default to Microsoft Entra authorization; minimum TLS version (default 1.2) | Mostly yes β see Sequences 6 & 7 |
| Tags | ARM name/value tags for organization, cost reporting, governance | Yes |
| Review + create | Azure validates all settings; failures tell you what to fix | β |
Default access tier (Hot vs Cool) is chosen here and applies to new blobs: Hot = frequently accessed (default); Cool = infrequently accessed. (The full four-tier story β Hot/Cool/Cold/Archive β is Sequence 10.)
5. Hierarchical namespace / Azure Data Lake Storage Gen2
On the Advanced tab, Enable hierarchical namespace (HNS) converts the account's flat blob namespace into a true file-system hierarchy of directories β this is what makes the account Azure Data Lake Storage Gen2.
- Supported on GPv2 and Premium block blobs; not on Premium file shares or page blobs.
- Ideal for analytics, big data, and HPC workloads (atomic directory operations, POSIX-style ACLs).
- In templates/Bicep the property is
isHnsEnabled; in CLI--enable-hierarchical-namespace true; in PowerShell-EnableHierarchicalNamespace $true.
Like the kind, HNS is a creation-time decision for practical purposes β plan it up front.
6. Create it three ways
Azure portal
Navigate to Storage accounts β Create, fill in the Basics tab, optionally adjust other tabs, then Review + create.
Azure CLI
# 1. Resource group
az group create --name storage-resource-group --location eastus
# 2. Standard GPv2 account, read-access geo-redundant, hardened defaults
az storage account create \
--name mystorageacct2026 \
--resource-group storage-resource-group \
--location eastus \
--sku Standard_RAGRS \
--kind StorageV2 \
--min-tls-version TLS1_2 \
--allow-blob-public-access false
Add --enable-hierarchical-namespace true to make it an ADLS Gen2 account.
Azure PowerShell
$rg = "storage-resource-group"; $loc = "eastus"
New-AzResourceGroup -Name $rg -Location $loc
New-AzStorageAccount -ResourceGroupName $rg `
-Name mystorageacct2026 `
-Location $loc `
-SkuName Standard_RAGRS `
-Kind StorageV2 `
-AllowBlobPublicAccess $false `
-MinimumTlsVersion TLS1_2
Add -EnableHierarchicalNamespace $true for ADLS Gen2. (Bicep/ARM/Terraform/azd are also supported but out of AZ-104 scope.)
Pattern to memorize: resource group first β then the account with --kind StorageV2 + a Standard_* SKU + secure defaults (TLS1_2, public access off).
7. Managing the account after creation
| Task | How | Notes |
|---|---|---|
| Upgrade v1 / legacy Blob β GPv2 | Portal Upgrade / az storage account update | One-way, in-place, cannot be undone |
| Move to another resource group | ARM Move operation | Same subscription or across; account name unchanged |
| Move to another subscription | ARM Move operation | Crosses billing/policy boundary |
| Move to another region | Create new account + copy data (e.g. AzCopy β Sequence 5) | No in-place region move exists |
| Change performance tier | Create new account + copy data | StandardβPremium not in-place |
| Delete | Portal Delete / az storage account delete / Remove-AzStorageAccount | Deletes ALL data; recovery possible but not guaranteed β back up first |
az storage account delete --name mystorageacct2026 --resource-group storage-resource-group
Deleting the resource group deletes the account and every other resource in it β handle with care.
Key takeaways
- N-K-P first, permanent forever: Name, Kind, Performance can't be changed after creation (only exception: v1/legacy-Blob β GPv2 one-way upgrade).
- Naming: 3β24 chars, lowercase + digits, globally unique β it's a DNS subdomain.
- Default & recommended = Standard general-purpose v2 (
kind StorageV2). Premium = SSD, low latency, three flavors (block blobs / file shares / page blobs). - SKU = performance + redundancy in one token (
Standard_GRS). - HNS turns the account into ADLS Gen2 β a creation-time choice, GPv2 or Premium block blobs only.
- Tabs: Basics (mandatory) β Advanced (HNS, default tier) β Networking (Seq 8) β Data protection (Seq 11/13) β Encryption (Seq 4) β Security (TLS 1.2 default) β Tags.
- Region drives billing, latency, and option availability; co-locate to avoid egress charges.
- Delete = data gone. Back up first.
Exercises
- Recall: State the four naming rules for a storage account name.
- Recall: Which
kindvalue creates the default, recommended account type, and what does Microsoft call it? - Applied: A team needs the lowest possible latency for millions of small block blobs. Which performance tier and account kind do you choose, and what backs it physically?
- Applied: You have a general-purpose v1 account and want access tiers and lifecycle management. What's the supported, in-place path β and what's the catch?
- Scenario: A data-engineering group will run analytics with directory-level operations and POSIX ACLs over petabytes of data. Which single Advanced-tab toggle is essential, on which account kinds is it available, and why can't you defer the decision?
- Scenario: A colleague created a
Standard_LRSGPv2 account in West Europe but now needs it in East US withPremiumperformance. Can either change be done in place? What must they actually do?
Answers
- 3β24 characters, lowercase letters and numbers only, no other characters (no hyphens/uppercase), and the name must be globally unique across all of Azure (it's a DNS subdomain).
StorageV2β Microsoft calls it Standard general-purpose v2; it's the default and recommended for most scenarios.- Premium performance with
BlockBlobStoragekind (Premium block blobs). It's backed by SSDs for consistently low latency and high IOPS β ideal for high transaction rates and small objects. - In-place upgrade to general-purpose v2 (portal Upgrade or
az storage account update). The catch: it is one-way and cannot be undone. - Enable hierarchical namespace (HNS), which makes the account Azure Data Lake Storage Gen2. Available on GPv2 and Premium block blobs (not Premium file shares or page blobs). You can't defer it because HNS is set at creation time and effectively can't be toggled afterward β switching would require a new account.
- Neither can be changed in place: there is no in-place region move and no in-place StandardβPremium switch. They must create a new account (East US, Premium) and copy the data over (e.g. with AzCopy, Sequence 5).
Coming up next
Sequence 3 β Storage Redundancy & Disaster Recovery: the SKU's redundancy half explained β LRS, ZRS, GRS, GZRS and their read-access variants, plus failover.