learn.microsoft.com Open in urlscan Pro
2a02:26f0:e300:298::3544  Public Scan

Submitted URL: https://docs.microsoft.com/en-us/azure/storage/common/transport-layer-security-configure-minimum-version?tabs=portal
Effective URL: https://learn.microsoft.com/en-us/azure/storage/common/transport-layer-security-configure-minimum-version?tabs=portal
Submission: On September 23 via api from US — Scanned from DE

Form analysis 3 forms found in the DOM

Name: site-header-search-form-mobileGET /en-us/search/

<form class="flex-grow-1" method="GET" role="search" id="ms--site-header-search-form-mobile" data-bi-name="site-header-search-form-mobile" name="site-header-search-form-mobile" aria-label="Search" action="/en-us/search/">
  <div class="autocomplete display-block" data-bi-name="autocomplete"><!---->
    <div class="field-body control ">
      <input role="combobox" maxlength="100" aria-autocomplete="list" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="site-header-search-autocomplete-input-mobile"
        data-test-id="site-header-search-autocomplete-input-mobile" class="autocomplete-input input 
						
						width-full" type="search" name="terms" aria-expanded="false" aria-owns="ax-1-listbox" aria-controls="ax-1-listbox" aria-activedescendant="" aria-label="Search" aria-describedby="ms--site-header-search-autocomplete-input-mobile-description"
        placeholder="Search" data-bi-name="site-header-search-autocomplete-input-mobile" pattern=".*">
      <span aria-hidden="true" class="autocomplete-loader loader has-text-primary " hidden=""></span>
      <span hidden="" id="ms--site-header-search-autocomplete-input-mobile-description"> Suggestions will filter as you type </span>
    </div>
    <ul role="listbox" id="ax-1-listbox" data-test-id="site-header-search-autocomplete-input-mobile-listbox" class="autocomplete-suggestions is-vertically-scrollable padding-xxs " aria-label="Suggestions" hidden="">
    </ul>
    <!---->
  </div>
  <!-- mobile safari will not dispatch submit event unless there's a submit button that is not display:none -->
  <button type="submit" class="visually-hidden" tabindex="-1" aria-hidden="true"></button>
  <input name="category" hidden="" value="">
</form>

Name: site-header-search-formGET /en-us/search/

<form class="flex-grow-1" method="GET" role="search" id="ms--site-header-search-form" data-bi-name="site-header-search-form" name="site-header-search-form" aria-label="Search" action="/en-us/search/">
  <div class="autocomplete display-block" data-bi-name="autocomplete"><!---->
    <div class="field-body control ">
      <input role="combobox" maxlength="100" aria-autocomplete="list" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="site-header-search-autocomplete-input" data-test-id="site-header-search-autocomplete-input" class="autocomplete-input input input-sm
						
						width-full" type="search" name="terms" aria-expanded="false" aria-owns="ax-0-listbox" aria-controls="ax-0-listbox" aria-activedescendant="" aria-label="Search" aria-describedby="ms--site-header-search-autocomplete-input-description"
        placeholder="Search" data-bi-name="site-header-search-autocomplete-input" pattern=".*">
      <span aria-hidden="true" class="autocomplete-loader loader has-text-primary " hidden=""></span>
      <span hidden="" id="ms--site-header-search-autocomplete-input-description"> Suggestions will filter as you type </span>
    </div>
    <ul role="listbox" id="ax-0-listbox" data-test-id="site-header-search-autocomplete-input-listbox" class="autocomplete-suggestions is-vertically-scrollable padding-xxs " aria-label="Suggestions" hidden="">
    </ul>
    <!---->
  </div>
  <!-- mobile safari will not dispatch submit event unless there's a submit button that is not display:none -->
  <button type="submit" class="visually-hidden" tabindex="-1" aria-hidden="true"></button>
  <input name="category" hidden="" value="">
</form>

javascript:

<form action="javascript:" role="search" aria-label="Search" class="margin-bottom-xxs"><label class="visually-hidden" for="ax-2">Search</label>
  <div class="autocomplete display-block" data-bi-name="autocomplete"><!---->
    <div class="field-body control has-icons-left">
      <input role="combobox" maxlength="100" aria-autocomplete="list" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="ax-2" data-test-id="ax-2" class="autocomplete-input input input-sm
						control has-icons-left
						width-full" type="text" aria-expanded="false" aria-owns="ax-3-listbox" aria-controls="ax-3-listbox" aria-activedescendant="" aria-describedby="ms--ax-2-description" placeholder="Filter by title" pattern=".*">
      <span aria-hidden="true" class="icon is-small is-left">
        <span class="has-text-primary docon docon-filter-settings"></span>
      </span>
      <span aria-hidden="true" class="autocomplete-loader loader has-text-primary " hidden=""></span>
      <span hidden="" id="ms--ax-2-description"> Suggestions will filter as you type </span>
    </div>
    <ul role="listbox" id="ax-3-listbox" data-test-id="ax-2-listbox" class="autocomplete-suggestions is-vertically-scrollable padding-xxs " aria-label="Suggestions" hidden="">
    </ul>
    <!---->
  </div>
</form>

Text Content

Skip to main content

We use optional cookies to improve your experience on our websites, such as
through social media connections, and to display personalized advertising based
on your online activity. If you reject optional cookies, only cookies necessary
to provide you the services will be used. You may change your selection by
clicking “Manage Cookies” at the bottom of the page. Privacy Statement
Third-Party Cookies

Accept Reject Manage cookies


MICROSOFT IGNITE

Nov 18–22, 2024

Join us this November to explore AI innovations, level up your skillset, and
expand your network.

Register now
Dismiss alert

This browser is no longer supported.

Upgrade to Microsoft Edge to take advantage of the latest features, security
updates, and technical support.

Download Microsoft Edge More info about Internet Explorer and Microsoft Edge

Learn
Suggestions will filter as you type
Sign in


 * Profile
 * Settings

Sign out

Learn
   
 * Discover
      
    * Documentation
      
      In-depth articles on Microsoft developer tools and technologies
   
      
    * Training
      
      Personalized learning paths and courses
   
      
    * Credentials
      
      Globally recognized, industry-endorsed credentials
   
      
    * Q&A
      
      Technical questions and answers moderated by Microsoft
   
      
    * Code Samples
      
      Code sample library for Microsoft developer tools and technologies
   
      
    * Assessments
      
      Interactive, curated guidance and recommendations
   
      
    * Shows
      
      Thousands of hours of original programming from Microsoft experts
   
      
   
   Microsoft Learn for Organizations
   
   Boost your team's technical skills
   
   Access curated resources to upskill your team and close skills gaps.

   
 * Product documentation
      
    * ASP.NET
      
    * Azure
      
    * Dynamics 365
      
    * Microsoft 365
      
    * Microsoft Edge
      
    * Microsoft Entra
      
    * Microsoft Graph
      
    * Microsoft Intune
      
    * Microsoft Purview
      
    * Microsoft Teams
      
    * .NET
      
    * Power Apps
      
    * Power Automate
      
    * Power BI
      
    * Power Platform
      
    * PowerShell
      
    * SQL
      
    * Sysinternals
      
    * Visual Studio
      
    * Windows
      
    * Windows Server
      
   
   View all products
   
   Microsoft Learn for Organizations
   
   Boost your team's technical skills
   
   Access curated resources to upskill your team and close skills gaps.

   
 * Development languages
      
    * C++
      
    * C#
      
    * DAX
      
    * Java
      
    * OData
      
    * OpenAPI
      
    * Power Query M
      
    * VBA
      
   
   Microsoft Learn for Organizations
   
   Boost your team's technical skills
   
   Access curated resources to upskill your team and close skills gaps.

   
 * Topics
      
    * Artificial intelligence
      
    * Compliance
      
    * DevOps
      
    * Platform engineering
      
    * Security
      
   
   Microsoft Learn for Organizations
   
   Boost your team's technical skills
   
   Access curated resources to upskill your team and close skills gaps.

   

Suggestions will filter as you type
Sign in


 * Profile
 * Settings

Sign out
Azure
   
 * Products
     
   * Popular products
       
     * Azure AI Services
       
     * Azure App Service
       
     * Azure Databricks
       
     * Azure DevOps
       
     * Azure Functions
       
     * Azure Monitor
       
     * Azure Virtual Machines
       
     
   * Popular categories
       
     * Compute
       
     * Networking
       
     * Storage
       
     * AI & machine learning
       
     * Analytics
       
     * Databases
       
     * Security
       
     
   * View all products
     
   
 * Architecture
     
   * Cloud Adoption Framework
     
   * Well-Architected Framework
     
   * Azure Architecture Center
     
   
 * Develop
     
   * Python
     
   * .NET
     
   * JavaScript
     
   * Java
     
   * PowerShell
     
   * Azure CLI
     
   * View all developer resources
     
   
 * Learn Azure
     
   * Start your AI learning assessment
     
   * Top learning paths
       
     * Cloud concepts
       
     * AI fundamentals
       
     * Intro to generative AI
       
     * Azure Architecture fundamentals
       
     
   * Earn credentials
     
   * Instructor-led courses
     
   * View all training
     
   
 * Troubleshooting
   
 * Resources
     
   * Product overview
     
   * Latest blog posts
     
   * Pricing information
     
   * Support options
     
   
 * More
     
   * Products
       
     * Popular products
         
       * Azure AI Services
         
       * Azure App Service
         
       * Azure Databricks
         
       * Azure DevOps
         
       * Azure Functions
         
       * Azure Monitor
         
       * Azure Virtual Machines
         
       
     * Popular categories
         
       * Compute
         
       * Networking
         
       * Storage
         
       * AI & machine learning
         
       * Analytics
         
       * Databases
         
       * Security
         
       
     * View all products
       
     
   * Architecture
       
     * Cloud Adoption Framework
       
     * Well-Architected Framework
       
     * Azure Architecture Center
       
     
   * Develop
       
     * Python
       
     * .NET
       
     * JavaScript
       
     * Java
       
     * PowerShell
       
     * Azure CLI
       
     * View all developer resources
       
     
   * Learn Azure
       
     * Start your AI learning assessment
       
     * Top learning paths
         
       * Cloud concepts
         
       * AI fundamentals
         
       * Intro to generative AI
         
       * Azure Architecture fundamentals
         
       
     * Earn credentials
       
     * Instructor-led courses
       
     * View all training
       
     
   * Troubleshooting
     
   * Resources
       
     * Product overview
       
     * Latest blog posts
       
     * Pricing information
       
     * Support options
       
     
   

Portal Free account
Table of contents Exit focus mode

Search
Suggestions will filter as you type
 * Azure Blob Storage documentation
 * Overview
   * What is Azure Blob Storage?
   * Compare core storage services
   * Blob Storage feature support
 * Blob Storage
   * Overview
   * Architecture
   * Quickstarts
   * Storage accounts
   * Data transfer and migration
   * Data management
   * Security and networking
     * Security recommendations
     * Security baseline
     * Encryption
     * Networking
       * Require secure transfer
       * Configure firewalls and virtual networks
       * Use Azure Private Endpoints
       * Restrict scope of copy operations
       * Manage Transport Layer Security (TLS)
         * Enforce minimum TLS version for incoming requests
         * Configure TLS version for a client application
         * Migrate to TLS 1.2
       * Network routing preference
       * Use a custom domain
     * Authorization
     * Microsoft Defender for Storage
   * Data protection
   * Availability and disaster recovery
   * Performance and scale
   * Cost management
   * Monitoring metrics and logs
   * Application development
   * Troubleshooting
   * Samples
   * Reference
   * Resources
 * Data Lake Storage
 * Reference
 * Resources

Download PDF
    
 1. Learn
    
    
 2. Azure
    
    
 3. Storage
    

    
 1. Learn
    
    
 2. Azure
    
    
 3. Storage
    

Read in English Save
 * Add to Collections
 * Add to Plan

Table of contents Read in English Add to Collections Add to Plan Edit


--------------------------------------------------------------------------------

SHARE VIA

Facebook x.com LinkedIn Email

--------------------------------------------------------------------------------

Print
Table of contents


ENFORCE A MINIMUM REQUIRED VERSION OF TRANSPORT LAYER SECURITY (TLS) FOR
REQUESTS TO A STORAGE ACCOUNT

 * Article
 * 03/22/2024
 * 16 contributors

Feedback


IN THIS ARTICLE

    
 1. Detect the TLS version used by client applications
    
 2. Remediate security risks with a minimum version of TLS
    
 3. Use Azure Policy to audit for compliance
    
 4. Use Azure Policy to enforce the minimum TLS version
    
 5. Permissions necessary to require a minimum version of TLS
    
 6. Network considerations
    
 7. Next steps
    

Show 3 more

Communication between a client application and an Azure Storage account is
encrypted using Transport Layer Security (TLS). TLS is a standard cryptographic
protocol that ensures privacy and data integrity between clients and services
over the Internet. For more information about TLS, see Transport Layer Security.

Azure Storage currently supports three versions of the TLS protocol: 1.0, 1.1,
and 1.2. Azure Storage uses TLS 1.2 on public HTTPS endpoints, but TLS 1.0 and
TLS 1.1 are still supported for backward compatibility.

Tip

Azure Storage relies on Windows implementation of SSL that is not based on
OpenSSL and therefore is not exposed to OpenSSL related vulnerabilities.

Azure Storage accounts permit clients to send and receive data with the oldest
version of TLS, TLS 1.0, and above. To enforce stricter security measures, you
can configure your storage account to require that clients send and receive data
with a newer version of TLS. If a storage account requires a minimum version of
TLS, then any requests made with an older version will fail.

This article describes how to use a DRAG
(Detection-Remediation-Audit-Governance) framework to continuously manage secure
TLS for your storage accounts.

For information about how to specify a particular version of TLS when sending a
request from a client application, see Configure Transport Layer Security (TLS)
for a client application.

Note

The cipher suite used when clients send data to and receive data from a storage
account is dependent on the TLS version used. It is not possible to configure a
storage account to block the use of specific ciphers, other than by requiring a
minimum TLS version. If you require the ability to allow only specific cipher
suites when connecting to your storage account, consider using Azure Application
Gateway. For more information about using Application Gateway for this purpose,
see Configure TLS policy versions and cipher suites on Azure Application
Gateway.


DETECT THE TLS VERSION USED BY CLIENT APPLICATIONS

When you enforce a minimum TLS version for your storage account, you risk
rejecting requests from clients that are sending data with an older version of
TLS. To understand how configuring the minimum TLS version may affect client
applications, Microsoft recommends that you enable logging for your Azure
Storage account and analyze the logs after an interval of time to detect what
versions of TLS client applications are using.

To log requests to your Azure Storage account and determine the TLS version used
by the client, you can use Azure Storage logging in Azure Monitor. For more
information, see Monitor Azure Storage.

Azure Storage logging in Azure Monitor supports using log queries to analyze log
data. To query logs, you can use an Azure Log Analytics workspace. To learn more
about log queries, see Tutorial: Get started with Log Analytics queries.

To log Azure Storage data with Azure Monitor and analyze it with Azure Log
Analytics, you must first create a diagnostic setting that indicates what types
of requests and for which storage services you want to log data. To create a
diagnostic setting in the Azure portal, follow these steps:

 1. Create a new Log Analytics workspace in the subscription that contains your
    Azure Storage account. After you configure logging for your storage account,
    the logs will be available in the Log Analytics workspace. For more
    information, see Create a Log Analytics workspace in the Azure portal.

 2. Navigate to your storage account in the Azure portal.

 3. In the Monitoring section, select Diagnostic settings.

 4. Select the Azure Storage service for which you want to log requests. For
    example, choose Blob to log requests to Blob storage.

 5. Select Add diagnostic setting.

 6. Provide a name for the diagnostic setting.

 7. Under Category details, in the log section, choose which types of requests
    to log. You can log read, write, and delete requests. For example, choosing
    StorageRead and StorageWrite will log read and write requests to the
    selected service.

 8. Under Destination details, select Send to Log Analytics. Select your
    subscription and the Log Analytics workspace you created earlier, as shown
    in the following image.
    
    

After you create the diagnostic setting, requests to the storage account are
subsequently logged according to that setting. For more information, see Create
diagnostic setting to collect resource logs and metrics in Azure.

For a reference of fields available in Azure Storage logs in Azure Monitor, see
Resource logs.


QUERY LOGGED REQUESTS BY TLS VERSION

Azure Storage logs in Azure Monitor include the TLS version used to send a
request to a storage account. Use the TlsVersion property to check the TLS
version of a logged request.

To determine how many requests were made against Blob storage with different
versions of TLS over the past seven days, open your Log Analytics workspace.
Next, paste the following query into a new log query and run it. Remember to
replace the placeholder values in brackets with your own values:

Kusto Copy


StorageBlobLogs
| where TimeGenerated > ago(7d) and AccountName == "<account-name>"
| summarize count() by TlsVersion


The results show the count of the number of requests made with each version of
TLS:




QUERY LOGGED REQUESTS BY CALLER IP ADDRESS AND USER AGENT HEADER

Azure Storage logs in Azure Monitor also include the caller IP address and user
agent header to help you to evaluate which client applications accessed the
storage account. You can analyze these values to decide whether client
applications must be updated to use a newer version of TLS, or whether it's
acceptable to fail a client's request if it is not sent with the minimum TLS
version.

To determine which clients made requests with a version of TLS older than TLS
1.2 over the past seven days, paste the following query into a new log query and
run it. Remember to replace the placeholder values in brackets with your own
values:

Kusto Copy


StorageBlobLogs
| where TimeGenerated > ago(7d) and AccountName == "<account-name>" and TlsVersion != "TLS 1.2"
| project TlsVersion, CallerIpAddress, UserAgentHeader



REMEDIATE SECURITY RISKS WITH A MINIMUM VERSION OF TLS

When you are confident that traffic from clients using older versions of TLS is
minimal, or that it's acceptable to fail requests made with an older version of
TLS, then you can begin enforcement of a minimum TLS version on your storage
account. Requiring that clients use a minimum version of TLS to make requests
against a storage account is part of a strategy to minimize security risks to
your data.

Important

If you are using a service that connects to Azure Storage, make sure that
service is using the appropriate version of TLS to send requests to Azure
Storage before you set the required minimum version for a storage account.


CONFIGURE THE MINIMUM TLS VERSION FOR A STORAGE ACCOUNT

To configure the minimum TLS version for a storage account, set the
MinimumTlsVersion version for the account. This property is available for all
storage accounts that are created with the Azure Resource Manager deployment
model. For more information about the Azure Resource Manager deployment model,
see Storage account overview.

The default value of the MinimumTlsVersion property is different depending on
how you set it. When you create a storage account with the Azure portal, the
minimum TLS version is set to 1.2 by default. When you create a storage account
with PowerShell, Azure CLI, or an Azure Resource Manager template, the
MinimumTlsVersion property is not set by default and does not return a value
until you explicitly set it.

When the MinimumTlsVersion property is not set, its value may be displayed as
either null or an empty string, depending on the context. The storage account
will permit requests sent with TLS version 1.0 or greater if the property is not
set.

 * Portal
 * PowerShell
 * Azure CLI
 * Template

When you create a storage account with the Azure portal, the minimum TLS version
is set to 1.2 by default.

To configure the minimum TLS version for an existing storage account with the
Azure portal, follow these steps:

 1. Navigate to your storage account in the Azure portal.

 2. Under Settings, select Configuration.

 3. Under Minimum TLS version, use the drop-down to select the minimum version
    of TLS required to access data in this storage account.
    
    

To configure the minimum TLS version for a storage account with PowerShell,
install Azure PowerShell version 4.4.0 or later. Next, configure the
MinimumTLSVersion property for a new or existing storage account. Valid values
for MinimumTlsVersion are TLS1_0, TLS1_1, and TLS1_2.

The following example creates a storage account and sets the MinimumTLSVersion
to TLS 1.1, then updates the account and sets the MinimumTLSVersion to TLS 1.2.
The example also retrieves the property value in each case. Remember to replace
the placeholder values in brackets with your own values:

PowerShell Copy


$rgName = "<resource-group>"
$accountName = "<storage-account>"
$location = "<location>"

# Create a storage account with MinimumTlsVersion set to TLS 1.1.
New-AzStorageAccount -ResourceGroupName $rgName `
    -Name $accountName `
    -Location $location `
    -SkuName Standard_GRS `
    -AllowBlobPublicAccess $false `
    -MinimumTlsVersion TLS1_1

# Read the MinimumTlsVersion property.
(Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName).MinimumTlsVersion

# Update the MinimumTlsVersion version for the storage account to TLS 1.2.
Set-AzStorageAccount -ResourceGroupName $rgName `
    -Name $accountName `
    -MinimumTlsVersion TLS1_2

# Read the MinimumTlsVersion property.
(Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName).MinimumTlsVersion


To configure the minimum TLS version for a storage account with Azure CLI,
install Azure CLI version 2.9.0 or later. For more information, see Install the
Azure CLI. Next, configure the minimumTlsVersion property for a new or existing
storage account. Valid values for minimumTlsVersion are TLS1_0, TLS1_1, and
TLS1_2.

The following example creates a storage account and sets the minimumTLSVersion
to TLS 1.1. It then updates the account and sets the minimumTLSVersion property
to TLS 1.2. The example also retrieves the property value in each case. Remember
to replace the placeholder values in brackets with your own values:

Azure CLI Copy

Open Cloud Shell

az storage account create \
    --name <storage-account> \
    --resource-group <resource-group> \
    --kind StorageV2 \
    --location <location> \
    --allow-blob-public-access false \
    --min-tls-version TLS1_1

az storage account show \
    --name <storage-account> \
    --resource-group <resource-group> \
    --query minimumTlsVersion \
    --output tsv

az storage account update \
    --name <storage-account> \
    --resource-group <resource-group> \
    --min-tls-version TLS1_2

az storage account show \
    --name <storage-account> \
    --resource-group <resource-group> \
    --query minimumTlsVersion \
    --output tsv


To configure the minimum TLS version for a storage account with a template,
create a template with the MinimumTLSVersion property set to TLS1_0, TLS1_1, or
TLS1_2. The following steps describe how to create a template in the Azure
portal.

 1. In the Azure portal, choose Create a resource.

 2. In Search the Marketplace, type template deployment, and then press ENTER.

 3. Choose Template deployment (deploy using custom templates), choose Create,
    and then choose Build your own template in the editor.

 4. In the template editor, paste in the following JSON to create a new account
    and set the minimum TLS version to TLS 1.2. Remember to replace the
    placeholders in angle brackets with your own values.
    
    JSON Copy
    
    
    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {},
        "variables": {
            "storageAccountName": "[concat(uniqueString(subscription().subscriptionId), 'tls')]"
        },
        "resources": [
            {
            "name": "[variables('storageAccountName')]",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "location": "<location>",
            "properties": {
                "minimumTlsVersion": "TLS1_2"
            },
            "dependsOn": [],
            "sku": {
              "name": "Standard_GRS"
            },
            "kind": "StorageV2",
            "tags": {}
            }
        ]
    }
    

 5. Save the template.

 6. Specify resource group parameter, then choose the Review + create button to
    deploy the template and create a storage account with the MinimumTLSVersion
    property configured.

Note

After you update the minimum TLS version for the storage account, it may take up
to 30 seconds before the change is fully propagated.

Configuring the minimum TLS version requires version 2019-04-01 or later of the
Azure Storage resource provider. For more information, see Azure Storage
Resource Provider REST API.


CHECK THE MINIMUM REQUIRED TLS VERSION FOR MULTIPLE ACCOUNTS

To check the minimum required TLS version across a set of storage accounts with
optimal performance, you can use the Azure Resource Graph Explorer in the Azure
portal. To learn more about using the Resource Graph Explorer, see Quickstart:
Run your first Resource Graph query using Azure Resource Graph Explorer.

Running the following query in the Resource Graph Explorer returns a list of
storage accounts and displays the minimum TLS version for each account:

Kusto Copy


resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend minimumTlsVersion = parse_json(properties).minimumTlsVersion
| project subscriptionId, resourceGroup, name, minimumTlsVersion



TEST THE MINIMUM TLS VERSION FROM A CLIENT

To test that the minimum required TLS version for a storage account forbids
calls made with an older version, you can configure a client to use an older
version of TLS. For more information about configuring a client to use a
specific version of TLS, see Configure Transport Layer Security (TLS) for a
client application.

When a client accesses a storage account using a TLS version that does not meet
the minimum TLS version configured for the account, Azure Storage returns error
code 400 error (Bad Request) and a message indicating that the TLS version that
was used is not permitted for making requests against this storage account.

Note

When you configure a minimum TLS version for a storage account, that minimum
version is enforced at the application layer. Tools that attempt to determine
TLS support at the protocol layer may return TLS versions in addition to the
minimum required version when run directly against the storage account endpoint.


USE AZURE POLICY TO AUDIT FOR COMPLIANCE

If you have a large number of storage accounts, you may want to perform an audit
to make sure that all accounts are configured for the minimum version of TLS
that your organization requires. To audit a set of storage accounts for their
compliance, use Azure Policy. Azure Policy is a service that you can use to
create, assign, and manage policies that apply rules to Azure resources. Azure
Policy helps you to keep those resources compliant with your corporate standards
and service level agreements. For more information, see Overview of Azure
Policy.


CREATE A POLICY WITH AN AUDIT EFFECT

Azure Policy supports effects that determine what happens when a policy rule is
evaluated against a resource. The Audit effect creates a warning when a resource
is not in compliance, but does not stop the request. For more information about
effects, see Understand Azure Policy effects.

To create a policy with an Audit effect for the minimum TLS version with the
Azure portal, follow these steps:

 1. In the Azure portal, navigate to the Azure Policy service.

 2. Under the Authoring section, select Definitions.

 3. Select Add policy definition to create a new policy definition.

 4. For the Definition location field, select the More button to specify where
    the audit policy resource is located.

 5. Specify a name for the policy. You can optionally specify a description and
    category.

 6. Under Policy rule, add the following policy definition to the policyRule
    section.
    
    JSON Copy
    
    
    {
      "policyRule": {
        "if": {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Storage/storageAccounts"
            },
            {
                "anyOf": [
                  {
                    "field": "Microsoft.Storage/storageAccounts/minimumTlsVersion",
                    "notEquals": "TLS1_2"
                  },
                  {
                    "field": "Microsoft.Storage/storageAccounts/minimumTlsVersion",
                    "exists": "false"
                  }
                ]
            }
          ]
        },
        "then": {
          "effect": "audit"
        }
      }
    }
    

 7. Save the policy.


ASSIGN THE POLICY

Next, assign the policy to a resource. The scope of the policy corresponds to
that resource and any resources beneath it. For more information on policy
assignment, see Azure Policy assignment structure.

To assign the policy with the Azure portal, follow these steps:

 1. In the Azure portal, navigate to the Azure Policy service.
 2. Under the Authoring section, select Assignments.
 3. Select Assign policy to create a new policy assignment.
 4. For the Scope field, select the scope of the policy assignment.
 5. For the Policy definition field, select the More button, then select the
    policy you defined in the previous section from the list.
 6. Provide a name for the policy assignment. The description is optional.
 7. Leave Policy enforcement set to Enabled. This setting has no effect on the
    audit policy.
 8. Select Review + create to create the assignment.


VIEW COMPLIANCE REPORT

After you've assigned the policy, you can view the compliance report. The
compliance report for an audit policy provides information on which storage
accounts are not in compliance with the policy. For more information, see Get
policy compliance data.

It may take several minutes for the compliance report to become available after
the policy assignment is created.

To view the compliance report in the Azure portal, follow these steps:

 1. In the Azure portal, navigate to the Azure Policy service.

 2. Select Compliance.

 3. Filter the results for the name of the policy assignment that you created in
    the previous step. The report shows how many resources are not in compliance
    with the policy.

 4. You can drill down into the report for additional details, including a list
    of storage accounts that are not in compliance.
    
    


USE AZURE POLICY TO ENFORCE THE MINIMUM TLS VERSION

Azure Policy supports cloud governance by ensuring that Azure resources adhere
to requirements and standards. To enforce a minimum TLS version requirement for
the storage accounts in your organization, you can create a policy that prevents
the creation of a new storage account that sets the minimum TLS requirement to
an older version of TLS than that which is dictated by the policy. This policy
will also prevent all configuration changes to an existing account if the
minimum TLS version setting for that account is not compliant with the policy.

The enforcement policy uses the Deny effect to prevent a request that would
create or modify a storage account so that the minimum TLS version no longer
adheres to your organization's standards. For more information about effects,
see Understand Azure Policy effects.

To create a policy with a Deny effect for a minimum TLS version that is less
than TLS 1.2, follow the same steps described in Use Azure Policy to audit for
compliance, but provide the following JSON in the policyRule section of the
policy definition:

JSON Copy


{
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Storage/storageAccounts"
        },
        {
            "anyOf": [
              {
                "field": "Microsoft.Storage/storageAccounts/minimumTlsVersion",
                "notEquals": "TLS1_2"
              },
              {
                "field": "Microsoft.Storage/storageAccounts/minimumTlsVersion",
                "exists": "false"
              }
            ]
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  }
}


After you create the policy with the Deny effect and assign it to a scope, a
user cannot create a storage account with a minimum TLS version that is older
than 1.2. Nor can a user make any configuration changes to an existing storage
account that currently requires a minimum TLS version that is older than 1.2.
Attempting to do so results in an error. The required minimum TLS version for
the storage account must be set to 1.2 to proceed with account creation or
configuration.

The following image shows the error that occurs if you try to create a storage
account with the minimum TLS version set to TLS 1.0 (the default for a new
account) when a policy with a Deny effect requires that the minimum TLS version
is set to TLS 1.2.




PERMISSIONS NECESSARY TO REQUIRE A MINIMUM VERSION OF TLS

To set the MinimumTlsVersion property for the storage account, a user must have
permissions to create and manage storage accounts. Azure role-based access
control (Azure RBAC) roles that provide these permissions include the
Microsoft.Storage/storageAccounts/write or Microsoft.Storage/storageAccounts/*
action. Built-in roles with this action include:

 * The Azure Resource Manager Owner role
 * The Azure Resource Manager Contributor role
 * The Storage Account Contributor role

These roles do not provide access to data in a storage account via Microsoft
Entra ID. However, they include the
Microsoft.Storage/storageAccounts/listkeys/action, which grants access to the
account access keys. With this permission, a user can use the account access
keys to access all data in a storage account.

Role assignments must be scoped to the level of the storage account or higher to
permit a user to require a minimum version of TLS for the storage account. For
more information about role scope, see Understand scope for Azure RBAC.

Be careful to restrict assignment of these roles only to those who require the
ability to create a storage account or update its properties. Use the principle
of least privilege to ensure that users have the fewest permissions that they
need to accomplish their tasks. For more information about managing access with
Azure RBAC, see Best practices for Azure RBAC.

Note

The classic subscription administrator roles Service Administrator and
Co-Administrator include the equivalent of the Azure Resource Manager Owner
role. The Owner role includes all actions, so a user with one of these
administrative roles can also create and manage storage accounts. For more
information, see Azure roles, Microsoft Entra roles, and classic subscription
administrator roles.


NETWORK CONSIDERATIONS

When a client sends a request to storage account, the client establishes a
connection with the public endpoint of the storage account first, before
processing any requests. The minimum TLS version setting is checked after the
connection is established. If the request uses an earlier version of TLS than
that specified by the setting, the connection will continue to succeed, but the
request will eventually fail. For more information about public endpoints for
Azure Storage, see Resource URI syntax.


NEXT STEPS

 * Configure Transport Layer Security (TLS) for a client application
 * Security recommendations for Blob storage





--------------------------------------------------------------------------------


FEEDBACK

Was this page helpful?

Yes No
Provide product feedback |
Get help at Microsoft Q&A

--------------------------------------------------------------------------------


ADDITIONAL RESOURCES



--------------------------------------------------------------------------------

Training

Module

Secure your Azure Storage account - Training

Learn how Azure Storage provides multilayered security to protect your data with
access keys, secure networks, and Advanced Threat Protection monitoring.

Certification

Microsoft Certified: Identity and Access Administrator Associate -
Certifications

Demonstrate the features of Microsoft Entra ID to modernize identity solutions,
implement hybrid solutions, and implement identity governance.



English (United States)
California Consumer Privacy Act (CCPA) Opt-Out Icon Your Privacy Choices
Theme
 * Light
 * Dark
 * High contrast

 * Manage cookies
 * Previous Versions
 * Blog
 * Contribute
 * Privacy
 * Terms of Use
 * Trademarks
 * © Microsoft 2024


ADDITIONAL RESOURCES



--------------------------------------------------------------------------------

Training

Module

Secure your Azure Storage account - Training

Learn how Azure Storage provides multilayered security to protect your data with
access keys, secure networks, and Advanced Threat Protection monitoring.

Certification

Microsoft Certified: Identity and Access Administrator Associate -
Certifications

Demonstrate the features of Microsoft Entra ID to modernize identity solutions,
implement hybrid solutions, and implement identity governance.




IN THIS ARTICLE



English (United States)
California Consumer Privacy Act (CCPA) Opt-Out Icon Your Privacy Choices
Theme
 * Light
 * Dark
 * High contrast

 * Manage cookies
 * Previous Versions
 * Blog
 * Contribute
 * Privacy
 * Terms of Use
 * Trademarks
 * © Microsoft 2024