Back to Checks
Prowlerprowler-provider-azure
Storage account minimum TLS version is 1.2
storage_ensure_minimum_tls_version_12
Service: storageSeverity: medium
OfficialBuilt-inVerified
Categories:encryption
Resource Type:microsoft.storage/storageaccounts
Azure Storage accounts enforce a minimum TLS version of 1.2 for client connections to data services
Risk
Allowing TLS 1.0/1.1 enables protocol downgrades and exploitation of known flaws (e.g., BEAST), weakening confidentiality and integrity. Attackers can intercept or modify data in transit and harvest credentials via weakened cipher suites.
Run this check with Prowler
Run in Prowler CloudRun
prowler azure --checks storage_ensure_minimum_tls_version_12Recommendation
Set the storage account minimum TLS version to at least 1.2 (prefer 1.3 where supported) and disable legacy protocols. Apply defense in depth by restricting network access, using least privilege credentials, and monitoring handshake failures to identify outdated clients.
Remediation
CLI
az storage account update --resource-group <RESOURCE_GROUP> --name <STORAGE_ACCOUNT_NAME> --min-tls-version TLS1_2Terraform
# Storage account with minimum TLS 1.2
resource "azurerm_storage_account" "<example_resource_name>" {
name = "<example_resource_name>"
resource_group_name = "<example_resource_name>"
location = "<example_location>"
account_tier = "Standard"
account_replication_type = "LRS"
min_tls_version = "TLS1_2" # CRITICAL: Enforces minimum TLS 1.2 to pass the check
}NativeIaC
// Storage account with minimum TLS 1.2
resource sa 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: '<example_resource_name>'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
properties: {
minimumTlsVersion: 'TLS1_2' // CRITICAL: Enforces minimum TLS 1.2 to pass the check
}
}Other
1In the Azure Portal, go to Storage accounts and open your account
2Select Settings > Configuration
3Set Minimum TLS version to Version 1.2
4Click Save
Check Code
from prowler.lib.check.models import Check, Check_Report_Azure
from prowler.providers.azure.services.storage.storage_client import storage_client
class storage_ensure_minimum_tls_version_12(Check):
def execute(self) -> Check_Report_Azure:
findings = []
for subscription, storage_accounts in storage_client.storage_accounts.items():
subscription_name = storage_client.subscriptions.get(
subscription, subscription
)
for storage_account in storage_accounts:
report = Check_Report_Azure(
metadata=self.metadata(), resource=storage_account
)
report.subscription = subscription
report.status = "PASS"
report.status_extended = f"Storage account {storage_account.name} from subscription {subscription_name} ({subscription}) has TLS version set to 1.2."
if storage_account.minimum_tls_version != "TLS1_2":
report.status = "FAIL"
report.status_extended = f"Storage account {storage_account.name} from subscription {subscription_name} ({subscription}) does not have TLS version set to 1.2."
findings.append(report)
return findings