Condividi tramite


Correggere l'accesso in lettura anonimo ai dati BLOB (distribuzioni classiche)

Archiviazione BLOB di Azure supporta l'accesso in lettura anonimo facoltativo ai contenitori e ai BLOB. Tuttavia, l'accesso anonimo può presentare un rischio per la sicurezza. È consigliabile disabilitare l'accesso anonimo per una sicurezza ottimale. La disattivazione dell'accesso anonimo consente di evitare violazioni dei dati causate da accessi anonimi indesiderati.

Per impostazione predefinita, l'accesso anonimo ai dati BLOB è sempre vietato. Tuttavia, la configurazione predefinita per un account di archiviazione classico consente a un utente con autorizzazioni appropriate di configurare l'accesso anonimo a contenitori e BLOB in un account di archiviazione. Per impedire l'accesso anonimo a un account di archiviazione classico, è necessario configurare ogni contenitore nell'account per bloccare l'accesso anonimo.

Se l'account di archiviazione usa il modello di distribuzione classica, è consigliabile eseguire la migrazione al modello di distribuzione di Azure Resource Manager appena possibile. Dopo aver eseguito la migrazione dell'account, è possibile configurarlo per impedire l'accesso anonimo a livello di account. Per informazioni su come impedire l'accesso anonimo per un account Azure Resource Manager, vedere Correggere l'accesso in lettura anonimo ai dati BLOB (distribuzioni di Azure Resource Manager).

Se non è possibile eseguire la migrazione degli account di archiviazione classici in questo momento, è consigliabile correggere l'accesso anonimo a tali account impostando tutti i contenitori come privati. Questo articolo descrive come correggere l'accesso ai contenitori in un account di archiviazione classico.

Gli account di archiviazione di Azure che usano il modello di distribuzione classica verranno ritirati il 31 agosto 2024. Per altre informazioni, vedere Gli account di archiviazione classica di Azure verranno ritirati il 31 agosto 2024.

Avviso

L'accesso anonimo presenta un rischio per la sicurezza. È consigliabile eseguire le azioni descritte nella sezione seguente per correggere l'accesso anonimo per tutti gli account di archiviazione classici, a meno che lo scenario non richieda in modo specifico l'accesso anonimo.

Bloccare l'accesso anonimo ai contenitori

Per correggere l'accesso anonimo per un account di archiviazione classico, impostare il livello di accesso anonimo per ogni contenitore nell'account su Privato.

Per correggere l'accesso anonimo per uno o più contenitori nel portale di Azure, seguire questa procedura:

  1. Passare alla panoramica dell'account di archiviazione nel portale di Azure.

  2. In Archiviazione dati nel pannello del menu selezionare Contenitori BLOB.

  3. Selezionare i contenitori per cui si vuole impostare il livello di accesso anonimo.

  4. Usare il pulsante Modifica livello di accesso per visualizzare le impostazioni di accesso.

  5. Selezionare Privato (nessun accesso anonimo) dall'elenco a discesa Livello di accesso anonimo e fare clic sul pulsante OK per applicare la modifica ai contenitori selezionati.

    Screenshot che mostra come impostare il livello di accesso anonimo nel portale.

Controllare l'impostazione di accesso anonimo per un set di contenitori

È possibile controllare quali contenitori in uno o più account di archiviazione sono configurati per l'accesso anonimo elencando i contenitori e controllando l'impostazione di accesso anonimo. Questo approccio è un'opzione pratica quando un account di archiviazione non contiene un numero elevato di contenitori o quando si controlla l'impostazione in un numero ridotto di account di archiviazione. Tuttavia, le prestazioni possono risentirne se si tenta di enumerare un numero elevato di contenitori.

L'esempio seguente usa PowerShell per ottenere l'impostazione di accesso anonimo per tutti i contenitori in un account di archiviazione. È necessario ricordare di sostituire i valori segnaposto tra parentesi con i valori personalizzati:

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

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

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

Script di esempio per la correzione bulk

Lo script di PowerShell di esempio seguente viene eseguito su tutti gli account di archiviazione classici in una sottoscrizione e imposta l'impostazione di accesso anonimo per i contenitori in tali account su Privato.

Attenzione

L'esecuzione di questo script su account di archiviazione con un numero molto elevato di contenitori può richiedere risorse significative, nonché molto tempo. Se si dispone di un account di archiviazione con un numero molto elevato di contenitori, è possibile definire un approccio diverso per correggere l'accesso anonimo.

# 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"

Vedi anche