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.

SubscriptionResource groupStorage accountglobally unique nameBlobFilesQueueTable

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.

FieldRule / decision
SubscriptionBilling + policy boundary. Required.
Resource groupNew or existing logical container. Required.
Storage account name3–24 characters, lowercase letters and numbers only, globally unique across all of Azure. No hyphens, no uppercase.
RegionWhere data physically lives. Affects billing, latency, and which redundancy/account types are available (not all regions support all options).
Preferred storage typeGuidance hint only (Blob/ADLS Gen2, Files, Tables, Queues). It does not lock you out of other services.
PerformanceStandard (default, recommended) vs Premium β€” see Β§3.
RedundancyLRS / 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.

NoYesBlock/append blobsFile shares SMB/NFSPage blobs / VM disksNeed ultra-low latencyor high transaction rate?Standard general-purpose v2kind = StorageV2 β€” defaultWhat workload?Premium block blobskind = BlockBlobStoragePremium file shareskind = FileStoragePremium page blobskind = StorageV2 +Premium_LRS

Standard vs Premium

StandardPremium
MediaHDD-backedSSD-backed
LatencyNormalConsistently low latency, high IOPS/throughput
Best forMost scenarios, general workloads, archivalHigh transaction rates, small objects, latency-sensitive apps
Billing modelPay for capacity used + transactionsPay for provisioned capacity (higher per-GB, predictable)
Default?Yes β€” recommendedNo

Account kinds (current)

Account typekindsku/SkuName examplesHNS support
Standard general-purpose v2 (default, recommended)StorageV2Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Standard_GZRS, Standard_RAGZRSYes
Premium block blobsBlockBlobStoragePremium_LRS, Premium_ZRSYes
Premium file sharesFileStoragePremium_LRS, Premium_ZRSNo
Premium page blobsStorageV2Premium_LRSNo

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 typekindWhy avoidAction
General-purpose v1StorageNo access tiers, no lifecycle mgmt, older pricingUpgrade to v2 (in-place, one-way)
Blob Storage (legacy)BlobStorageBlobs only; superseded by GPv2Upgrade to v2
Classic (ASM)n/aRetired Aug 31, 2024Migrate 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.

TabKey settingsSet later?
AdvancedEnable hierarchical namespace (ADLS Gen2 β€” see Β§5); SFTP; NFS v3; allow cross-tenant replication; default access tier (Hot/Cool); SMB managed identity / encryption-in-transitHNS is creation-only; tier is changeable
NetworkingPublic network access (enable / disable / network security perimeter); allowed VNets & IP ranges; private endpoints; routing preference; IPv6Yes β€” deep dive in Sequence 8
Data protectionSoft delete (blobs/containers/file shares), versioning, change feed, point-in-time restore, version-level immutabilityYes β€” Sequences 11 & 13
EncryptionMicrosoft-managed keys (default) vs customer-managed keys; scope; infrastructure encryption (double encryption)Some keys creation-only β€” deep dive in Sequence 4
SecurityRequire 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
TagsARM name/value tags for organization, cost reporting, governanceYes
Review + createAzure 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

TaskHowNotes
Upgrade v1 / legacy Blob β†’ GPv2Portal Upgrade / az storage account updateOne-way, in-place, cannot be undone
Move to another resource groupARM Move operationSame subscription or across; account name unchanged
Move to another subscriptionARM Move operationCrosses billing/policy boundary
Move to another regionCreate new account + copy data (e.g. AzCopy β€” Sequence 5)No in-place region move exists
Change performance tierCreate new account + copy dataStandard↔Premium not in-place
DeletePortal Delete / az storage account delete / Remove-AzStorageAccountDeletes 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

  1. Recall: State the four naming rules for a storage account name.
  2. Recall: Which kind value creates the default, recommended account type, and what does Microsoft call it?
  3. 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?
  4. 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?
  5. 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?
  6. Scenario: A colleague created a Standard_LRS GPv2 account in West Europe but now needs it in East US with Premium performance. Can either change be done in place? What must they actually do?
Answers
  1. 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).
  2. StorageV2 β€” Microsoft calls it Standard general-purpose v2; it's the default and recommended for most scenarios.
  3. Premium performance with BlockBlobStorage kind (Premium block blobs). It's backed by SSDs for consistently low latency and high IOPS β€” ideal for high transaction rates and small objects.
  4. In-place upgrade to general-purpose v2 (portal Upgrade or az storage account update). The catch: it is one-way and cannot be undone.
  5. 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.
  6. 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.