Interdire l’accès en lecture anonyme aux données blob (déploiements classiques)

Stockage Blob Azure prend en charge l’accès en lecture anonyme facultatif aux conteneurs et objets blob. Toutefois, un accès anonyme peut représenter un risque de sécurité. Nous vous recommandons de désactiver l’accès anonyme à des fins de sécurité optimale. L’interdiction de l’accès anonyme permet d’éviter les violations de données causées par un accès anonyme indésirable.

Par défaut, l’accès anonyme à vos données blob est toujours interdit. Néanmoins, la configuration par défaut d’un compte de stockage classique permet à un utilisateur disposant des autorisations appropriées de configurer un accès anonyme aux conteneurs et aux blobs d’un compte de stockage. Pour empêcher l’accès anonyme à un compte de stockage classique, vous devez configurer chaque conteneur du compte de manière à bloquer l’accès anonyme.

Si votre compte de stockage utilise le modèle de déploiement classique, nous vous recommandons de migrer vers le modèle de déploiement Azure Resource Manager dès que possible. Après avoir migré votre compte, vous pouvez le configurer pour interdire l’accès anonyme au niveau du compte. Pour plus d’informations sur la façon d’interdire l’accès anonyme pour un compte Azure Resource Manager, consultez Corriger l’accès en lecture anonyme aux données blob (déploiements Azure Resource Manager).

Si vous ne pouvez pas migrer vos comptes de stockage classiques pour l’instant, vous devez corriger l’accès anonyme à ces comptes en définissant tous les conteneurs comme étant privés. Cet article explique comment corriger l’accès aux conteneurs dans un compte de stockage classique.

Les comptes de stockage Azure qui utilisent le modèle de déploiement classique seront mis hors service le 31 août 2024. Pour plus d’informations, consultez les comptes de stockage Azure Classic mis hors service le 31 août 2024.

Avertissement

L’accès anonyme présente un risque de sécurité. Nous vous recommandons d’effectuer les actions décrites dans la section suivante pour corriger l’accès anonyme pour tous vos comptes de stockage classiques, sauf si votre scénario nécessite spécifiquement un accès anonyme.

Bloquer l’accès anonyme aux conteneurs

Pour corriger l’accès anonyme pour un compte de stockage classique, définissez le niveau d’accès anonyme pour chaque conteneur du compte sur Privé.

Pour corriger l’accès anonyme pour un ou plusieurs conteneurs dans le portail Azure, effectuez les étapes suivantes :

  1. Accédez à la vue d’ensemble de votre compte de stockage dans le portail Azure.

  2. Sous Stockage des données dans le panneau de menu, sélectionnez Conteneurs d’objets blob.

  3. Sélectionnez les conteneurs pour lesquels vous voulez définir le niveau d’accès anonyme.

  4. Utilisez le bouton Modifier le niveau d’accès pour afficher les paramètres d’accès.

  5. Sélectionnez Privé (pas d’accès anonyme) dans la liste déroulante Niveau d’accès anonyme et cliquez sur le bouton OK pour appliquer la modification aux conteneurs sélectionnés.

    Screenshot showing how to set anonymous access level in the portal.

Vérifier le paramètre d’accès anonyme pour un ensemble de conteneurs

Il est possible de vérifier quels conteneurs d’un ou plusieurs comptes de stockage sont configurés pour l’accès anonyme en listant les conteneurs et en vérifiant le paramètre d’accès anonyme. Cette approche est pratique lorsqu’un compte de stockage ne contient pas un grand nombre de conteneurs, ou lorsque vous vérifiez le paramètre sur un petit nombre de comptes de stockage. Toutefois, les performances peuvent être dégradées si vous tentez d’énumérer un grand nombre de conteneurs.

L’exemple suivant utilise PowerShell pour obtenir le paramètre d’accès anonyme de tous les conteneurs d’un compte de stockage. N’oubliez pas de remplacer les valeurs d’espace réservé entre crochets par vos propres valeurs :

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

$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context

Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess

Exemple de script pour une correction en bloc

L’exemple de script PowerShell suivant s’exécute sur tous les comptes de stockage classiques d’un abonnement et définit le paramètre d’accès anonyme pour les conteneurs de ces comptes sur Privé.

Attention

L’exécution de ce script sur des comptes de stockage dotés d’un très grand nombre de conteneurs peut solliciter d’importantes ressources et prendre beaucoup de temps. Si vous avez un compte de stockage dont le nombre de conteneurs est très élevé, vous pouvez imaginer une autre approche pour corriger l’accès anonyme.

# This script runs against all classic storage accounts in a single subscription
# and sets containers to private.

## IMPORTANT ##
# Running this script requires a connected account through the previous version 
# of Azure PowerShell. Use the following command to install:
# Install-Module Azure -scope CurrentUser -force
#
# Once installed, you will need to connect with:
# Add-AzureAccount
#
# This command may fail if there are modules installed that conflict with it.
# One known conflicting module is AzureRm.Accounts
# You will need to remove conflicting modules using the following:
# Remove-Module -name <name>
#
# The Azure PowerShell module assumes a current subscription when enumerating
# storage accounts.  You can set the current subscription with:
# Select-AzureSubscription -subscriptionId <subscriptionId>
#
# Get-AzureSubscription lists all subscriptions available to the Azure
# module. Not all subscriptions listed under your name in the portal may 
# appear here. If a subscription does not appear, you may need to use 
# the portal to remediate public access for those accounts.
# After you have selected your subscription, verify that it is current
# by running:
# Get-AzureSubscription -current
# 
# After the current subscription runs, you can run this script, change
# to another subscription after it completes, and then run again as necessary.
## END IMPORTANT##

# Standard operation will enumerate all accounts and check for containers with public 
# access, then allow the user to decide whether or not to disable the setting.  

# Run with BypassConfirmation=$true if you wish to remove permissions from all containers
# without individual confirmation

# Run with BypassArmUpgrade=$true if you wish to upgrade your storage account to use the 
# Azure Resource Manager deployment model. All accounts must be upgraded by 31 August 2024.

param(
    [boolean]$BypassConfirmation=$false,
    [boolean]$BypassArmUpgrade=$false
)

#Do not change this
$convertAccounts = $false

foreach($classicAccount in Get-AzureStorageAccount)
{
    $enumerate = $false

    if(!$BypassArmUpgrade)
    {
        write-host "Classic Storage Account" $classicAccount.storageAccountname "found"
        $confirmation = read-host "Convert to ARM? [y/n]:"
    }
    if(($confirmation -eq 'y') -and (!$BypassArmUpgrade))
    {
        write-host "Conversion selected"
        $convertAccounts = $true
    }
    else
    {
        write-host $classicAccount.StorageAccountName "conversion not selected.  Searching for public containers..."
        $enumerate = $true
    }

    if($enumerate)
    {
        foreach($container in get-azurestoragecontainer -context (get-azurestorageaccount -storageaccountname $classicAccount.StorageAccountName).context)
        {
            if($container.PublicAccess -eq 'Off')
            {
            } 
            else 
            {
                if(!$BypassConfirmation)
                {
                    $selection = read-host $container.Name $container.PublicAccess "access found, Make private?[y/n]:"
                }
                if(($selection -eq 'y') -or ($BypassConfirmation))
                {
                    write-host "Removing permissions from" $container.name "container on storage account" $classicaccount.StorageAccountName
                    try
                    {
                        Set-AzureStorageContainerAcl -context $classicAccount.context -name $container.name -Permission Off
                        write-host "Success!"
                    }
                    catch
                    {
                        $_
                    }
                }
                else
                {
                    write-host "Skipping..."
                }
            }
        }
    }
}
if($convertAccounts)
{
    write-host "Converting accounts to ARM is the preferred method, however there are some caveats."
    write-host "The preferred method would be to use the portal to perform the conversions and then "
    write-host "run the ARM script against them.  For more information on converting a classic account"
    write-host "to an ARM account, please see:"
    write-host "https://learn.microsoft.com/en-us/azure/virtual-machines/migration-classic-resource-manager-overview"
}
write-host "Script complete"

Voir aussi