Azure AZ-104 study materials
Azure AZ-104 study resources

Fabrikam: Private Endpoint Reachability and Cold Blob Tiering

Azure AZ-104 · Put your knowledge to work in context.

All case studies

Fabrikam: Private Endpoint Reachability and Cold Blob Tiering

Fabrikam stores 120 TB of blob data in one storage account, stfabprod, in West Europe: Standard general-purpose v2, LRS, hot tier. About 40 TB is read every month by an application running in VNet-Prod. The remaining 80 TB is compliance data written once and read perhaps twice a year, but it must be retrievable within 24 hours on request. A private endpoint for blob is deployed in VNet-Prod, and the zone privatelink.blob.core.windows.net is linked to VNet-Prod only. Public network access is set to 'Enabled from selected virtual networks' with no networks listed. On-premises staff reach VNet-Prod over a site-to-site VPN and use on-premises DNS servers; they report HTTP 403 from Storage Explorer. A lifecycle rule moves all blobs to the cool tier after 30 days, and the monthly bill keeps rising.

1. Diagnose the 403 error for on-premises staff and describe the fix, including the DNS dependency.

Read the worked answer

The firewall is not the whole story - name resolution is.

The private endpoint exposes the blob service on a private IP inside a VNet-Prod subnet. With no public networks allowed, requests arriving at the public endpoint are rejected. On-premises clients resolve stfabprod.blob.core.windows.net through on-premises DNS, which returns the public IP. The VPN carries the packet, but it arrives at the public front end from the on-premises egress address, so the storage firewall rejects it - 403, not a timeout, because the request reached the service and was refused.

Fix (DNS first, then confirm the path):

  1. Deploy an Azure DNS Private Resolver inbound endpoint in VNet-Prod (or a forwarder VM pair) and note its private IP.
  2. On the on-premises DNS servers, create a conditional forwarder for blob.core.windows.net (or the narrower privatelink.blob.core.windows.net) to that resolver IP.
  3. Ensure the private DNS zone is linked to the VNet that hosts the resolver - it already is (VNet-Prod).
  4. Verify with nslookup stfabprod.blob.core.windows.net from an on-premises client: it must return the private endpoint IP, not a public address.

Adding the on-premises public IP to the storage firewall would also stop the 403, but it re-exposes the account publicly and defeats the private endpoint.

2. The lifecycle rule moves every blob to cool after 30 days. Is that the right policy for this data set? What would you change?

Read the worked answer

No - it over-cools the active set and under-tiers the dormant set.

The 40 TB read monthly should stay hot-tiered; paying cool-tier storage and access charges buys nothing. The 80 TB read twice a year is a candidate for a colder tier, and the requirement that it be retrievable within 24 hours is the constraint that decides between cold and archive.

Practical shape:

  • Hot for the 40 TB working set. Consider reserved capacity for the predictable baseline - it is a commitment on capacity, not on tier, so it does not block later re-tiering.
  • Cold or Archive for the 80 TB compliance set. Archive rehydration at standard priority can take up to 15 hours, which fits inside 24 hours; high priority is faster but costs more and only suits smaller blobs.
  • Apply rules with prefix or blob-index-tag filters rather than account-wide, and split the two data sets into separate accounts or containers so retention and lifecycle rules do not collide.

Watch the penalties: cool has a 30-day minimum, cold 90 days, archive 180 days. Blobs deleted, overwritten or re-tiered before the minimum incur early-deletion charges - so a rule that thrashes between tiers can cost more than it saves. Test on a sample container for a billing cycle before enabling account-wide.

3. Compliance asks for written assurance that archived data can be produced within 24 hours. What technical facts must your answer state, and what would invalidate it?

Read the worked answer

State the rehydration path and its worst case.

  • Archive blobs are offline. Retrieval requires a rehydrate operation to hot/cool/cold; standard priority is documented at up to 15 hours, and high priority is typically under an hour for smaller blobs.
  • 15 hours < 24 hours, so the objective is met - but only if the operational runbook includes: who raises the rehydrate request, how the completion is detected (blob ArchiveStatus clears), and a buffer for a partial failure and retry.

What would invalidate the assurance:

  1. Blobs that have not yet finished the asynchronous tier change - a lifecycle rule set to archive is not instantaneous, so check ArchiveStatus across the container.
  2. Early deletion if a blob is re-tiered or overwritten inside the 180-day archive minimum - it does not break retrievability but changes cost.
  3. Immutability or legal-hold policies that a rehydrate does not override (it should not), and any lock that prevents the restore workflow from running.
  4. A large simultaneous request: rehydration is per blob and throughput-bound, so a bulk 80 TB pull is a different problem from a single-record retrieval. Quantify the realistic request size in the assurance.