Verhindern von anonymem Lesezugriff auf Container und Blobs (klassische Bereitstellungen)

Azure Blob Storage unterstützt optional den anonymen Lesezugriff auf Container und Blobs. Der anonyme Zugriff kann jedoch ein Sicherheitsrisiko darstellen. Für eine optimale Sicherheit wird empfohlen, den anonymen Zugriff zu deaktivieren. Wenn Sie den anonymen Zugriff nicht zulassen, können Sie Sicherheitsverletzungen bei den Daten verhindern, die durch den unerwünschten anonymen Zugriff verursacht werden.

Standardmäßig ist der anonyme Zugriff auf Ihre Blobdaten immer verboten. Die Standardkonfiguration für ein klassisches Speicherkonto gestattet es einem Benutzer mit entsprechenden Berechtigungen jedoch, den anonymen Zugriff auf Container und Blobs in einem Speicherkonto zu konfigurieren. Um den anonymen Zugriff auf ein klassisches Speicherkonto zu verhindern, müssen Sie jeden Container im Konto so konfigurieren, dass der anonyme Zugriff blockiert wird.

Wenn Ihr Speicherkonto das klassische Bereitstellungsmodell verwendet, sollten Sie so schnell wie möglich zum Azure Resource Manager-Bereitstellungsmodell migrieren. Nachdem Sie Ihr Konto migriert haben, können Sie es so konfigurieren, dass der anonyme Zugriff auf Kontoebene nicht zulässig ist. Informationen dazu, wie Sie den anonymen Zugriff für ein Azure Resource Manager-Konto verhindern, finden Sie unter Verhindern von anonymen Lesezugriffen auf Blobdaten (Azure Resource Manager-Bereitstellungen).

Wenn Sie Ihre klassischen Speicherkonten derzeit nicht migrieren können, sollten Sie den Zugriff auf diese Konten jetzt verhindern, indem Sie alle Container als private Container festlegen. In diesem Artikel wird beschrieben, wie Sie den Zugriff auf die Container in einem klassischen Speicherkonto verhindern.

Azure Storage-Konten, die das klassische Bereitstellungsmodell verwenden, werden am 31. August 2024 eingestellt. Weitere Informationen finden Sie unter Azure classic storage accounts will be retired on 31 August 2024 (Klassische Azure-Speicherkonten werden am 31. August 2024 eingestellt).

Warnung

Anonymer Zugriff stellt ein Sicherheitsrisiko dar. Es wird empfohlen, die im folgenden Abschnitt beschriebenen Schritte auszuführen, um den anonymen Zugriff auf alle klassischen Speicherkonten zu verhindern, es sei denn, Ihr Szenario erfordert ausdrücklich den anonymen Zugriff.

Blockieren des anonymen Zugriffs auf Container

Um den anonymen Zugriff auf ein klassisches Speicherkonto zu verhindern, legen Sie die anonyme Zugriffsebene für jeden Container im Konto auf Privat fest.

Führen Sie die folgenden Schritte aus, um den anonymen Zugriff auf mindestens einen Container im Azure-Portal zu verhindern:

  1. Navigieren Sie zu Ihrer Speicherkontoübersicht im Azure-Portal.

  2. Wählen Sie unter Datenspeicherung auf dem Menüblatt Blobcontainer aus.

  3. Wählen Sie die Container aus, für die Sie die öffentliche Zugriffsebene festlegen möchten.

  4. Klicken Sie auf Zugriffsebene ändern, um die Einstellungen für den Zugriff aufzurufen.

  5. Wählen Sie aus der Dropdownliste Anonyme Zugriffsebene den Eintrag Privat (kein anonymer Zugriff) aus, und klicken Sie auf die Schaltfläche „OK“, um die Änderung auf die ausgewählten Container anzuwenden.

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

Überprüfen der Einstellung für den anonymen Zugriff auf eine Gruppe von Containern

Durch Auflisten der Container und Überprüfen der Einstellung für den anonymen Zugriff können Sie überprüfen, welche Container in einem oder mehreren Speicherkonten für den anonymen Zugriff konfiguriert sind. Diese Vorgehensweise ist praktisch, wenn ein Speicherkonto keine große Anzahl von Containern enthält oder wenn Sie die Einstellung für eine kleine Anzahl von Speicherkonten überprüfen. Die Leistung kann jedoch beeinträchtigt werden, wenn Sie versuchen, eine große Anzahl von Containern aufzuzählen.

Im folgenden Beispiel wird PowerShell verwendet, um die Einstellung für den anonymen Zugriff auf alle Container in einem Speicherkonto zu erhalten. Denken Sie daran, die Platzhalterwerte in Klammern durch Ihre eigenen Werte zu ersetzen:

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

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

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

Beispielskript, mit dem der Zugriff in einem Massenvorgang verhindert wird

Das folgende PowerShell-Beispielskript wird für alle klassischen Speicherkonten in einem Abonnement ausgeführt und legt die Einstellung für den anonymen Zugriff für die Container in diesen Konten auf Privat fest.

Achtung

Die Ausführung dieses Skripts für Speicherkonten mit einer sehr großen Anzahl von Containern kann erhebliche Ressourcen erfordern und viel Zeit in Anspruch nehmen. Wenn Sie über ein Speicherkonto mit sehr vielen Containern verfügen, möchten Sie vielleicht einen anderen Ansatz für die Verhinderung des anonymen Zugriffs entwickeln.

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

Siehe auch