Azure Storage Exposure Calculator
Score an Azure storage account's exposure from public network access, anonymous blob access, Shared Key auth, TLS floor and SAS token lifetime.
Inputs
Exposure Index
54.3/ 100
Exposure Level
Medium
Public Container Ratio
7.14%
SAS Token Risk Points
15.8points
Data in the Exposed Path
9.78TB
Dominant Exposure Path
SAS tokens are long-lived and numerous
Recommended Remediation
Disable Shared Key authorisation, move callers to Entra ID, then rotate both account keys
Step by step
Values used
Storage account public network access = Enabled from selected virtual networks — 10; Allow blob anonymous access = Enabled, every container private — 8; Shared Key (account key) authorisation = Enabled — 12; Minimum TLS version = TLS 1.2 or higher — 0; Containers in the account = 42 containers; Containers with a public access level = 3 containers; Active SAS tokens = 64 tokens; Longest SAS token lifetime = 365 days; Data stored in the account = 18 TB
Azure Storage Exposure
Exposure index = public network access points + anonymous blob access points + Shared Key points + TLS floor points + min(15, public container ratio × 1.2) + SAS risk points, clamped to 0–100.
SAS token risk
SAS risk points = min(12, log2(longest SAS lifetime in days) × 1.4) + min(6, active tokens × 0.06).
Exposure Index
= 54.3 / 100
Exposure Level
= Medium
Public Container Ratio
= 7.14
SAS Token Risk Points
= 15.8 points
Data in the Exposed Path
= 9.78 TB
Dominant Exposure Path
= SAS tokens are long-lived and numerous
How it works
The index adds the points carried by each control that decides whether a blob can be read from the internet. Shared Key authorisation is scored separately from network reachability because an account key is a permanent, non-revocable credential that bypasses Entra ID conditional access entirely, and a leaked key plus 'enabled from all networks' is a complete compromise of the account. Azure storage accounts fail differently from S3: the usual leak path is not a public container but a SAS token with a one-year expiry signed by an account key that nobody can rotate without breaking production.
Formulas
Azure Storage Exposure
Exposure index = public network access points + anonymous blob access points + Shared Key points + TLS floor points + min(15, public container ratio × 1.2) + SAS risk points, clamped to 0–100.
- publicNetworkAccess
- 0–25 points for network reachability
- sharedKeyAuth
- 12 points while account-key authorisation is enabled
- containerPts
- Public containers ÷ all containers × 100 × 1.2, capped at 15
SAS token risk
SAS risk points = min(12, log2(longest SAS lifetime in days) × 1.4) + min(6, active tokens × 0.06).
- sasTtlDays
- Longest lifetime granted to any live SAS token
- sasTokens
- Count of SAS tokens currently valid
Frequently Asked Questions
How is Azure Storage Exposure calculated?
Exposure index = public network access points + anonymous blob access points + Shared Key points + TLS floor points + min(15, public container ratio × 1.2) + SAS risk points, clamped to 0–100. The index adds the points carried by each control that decides whether a blob can be read from the internet. Shared Key authorisation is scored separately from network reachability because an account key is a permanent, non-revocable credential that bypasses Entra ID conditional access entirely, and a leaked key plus 'enabled from all networks' is a complete compromise of the account.
Why does Azure Storage Exposure matter?
Azure storage accounts fail differently from S3: the usual leak path is not a public container but a SAS token with a one-year expiry signed by an account key that nobody can rotate without breaking production.
What values do I need to enter?
This calculator takes 9 inputs: Storage account public network access, Allow blob anonymous access, Shared Key (account key) authorisation, Minimum TLS version, Containers in the account, Containers with a public access level, Active SAS tokens, Longest SAS token lifetime, Data stored in the account. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.
Why is Shared Key worse than a SAS token?
Because it cannot be scoped or revoked individually. An account key grants everything in the account, is not covered by conditional access or Entra ID logging, and rotating it invalidates every SAS token derived from it at once — which is exactly why teams put off rotation for years.
What is a user-delegation SAS?
A SAS signed with an Entra ID credential rather than the account key. It inherits the signer's RBAC permissions, appears in Entra sign-in logs, is capped at seven days, and can be revoked by removing the signer's role assignment. It is the only SAS type worth issuing.
You might also need
- GCP Bucket Exposure CalculatorCommonly used together
- S3 Bucket Exposure CalculatorCommonly used together
- Cloud Key Management CalculatorCommonly used together
- Cloud Security Health Score CalculatorAlso in Cloud Security
- Cloud IAM Risk CalculatorAlso in Cloud Security
- Public IP Exposure CalculatorAlso in Cloud Security