Korygowanie anonimowego dostępu do odczytu do danych obiektów blob (wdrożenia klasyczne)

Usługa Azure Blob Storage obsługuje opcjonalny anonimowy dostęp do odczytu do kontenerów i obiektów blob. Jednak dostęp anonimowy może stanowić zagrożenie bezpieczeństwa. Zalecamy wyłączenie dostępu anonimowego w celu uzyskania optymalnego bezpieczeństwa. Odmowa dostępu anonimowego pomaga zapobiec naruszeniom zabezpieczeń danych spowodowanym niepożądanym dostępem anonimowym.

Domyślnie dostęp anonimowy do danych obiektów blob jest zawsze zabroniony. Jednak domyślna konfiguracja klasycznego konta magazynu zezwala użytkownikowi z odpowiednimi uprawnieniami do konfigurowania anonimowego dostępu do kontenerów i obiektów blob na koncie magazynu. Aby uniemożliwić anonimowy dostęp do klasycznego konta magazynu, należy skonfigurować każdy kontener na koncie, aby zablokować dostęp anonimowy.

Jeśli twoje konto magazynu korzysta z klasycznego modelu wdrażania, zalecamy jak najszybszą migrację do modelu wdrażania usługi Azure Resource Manager. Po przeprowadzeniu migracji konta można skonfigurować go tak, aby nie zezwalał na dostęp anonimowy na poziomie konta. Aby uzyskać informacje o tym, jak nie zezwalać na anonimowy dostęp do konta usługi Azure Resource Manager, zobacz Korygowanie anonimowego dostępu do odczytu do danych obiektów blob (wdrożenia usługi Azure Resource Manager).

Jeśli nie możesz w tej chwili przeprowadzić migracji klasycznych kont magazynu, należy skorygować anonimowy dostęp do tych kont, ustawiając wszystkie kontenery jako prywatne. W tym artykule opisano sposób korygowania dostępu do kontenerów na klasycznym koncie magazynu.

Konta usługi Azure Storage korzystające z klasycznego modelu wdrażania zostaną wycofane 31 sierpnia 2024 r. Aby uzyskać więcej informacji, zobacz Klasyczne konta magazynu platformy Azure zostaną wycofane 31 sierpnia 2024 r.

Ostrzeżenie

Dostęp anonimowy stanowi zagrożenie bezpieczeństwa. Zalecamy wykonanie akcji opisanych w poniższej sekcji w celu skorygowania dostępu anonimowego dla wszystkich klasycznych kont magazynu, chyba że scenariusz wymaga dostępu anonimowego.

Blokuj anonimowy dostęp do kontenerów

Aby skorygować dostęp anonimowy dla klasycznego konta magazynu, ustaw poziom dostępu anonimowego dla każdego kontenera na prywatny.

Aby skorygować dostęp anonimowy dla co najmniej jednego kontenera w witrynie Azure Portal, wykonaj następujące kroki:

  1. Przejdź do przeglądu konta magazynu w witrynie Azure Portal.

  2. W obszarze Magazyn danych w bloku menu wybierz pozycję Kontenery obiektów blob.

  3. Wybierz kontenery, dla których chcesz ustawić poziom dostępu anonimowego.

  4. Użyj przycisku Zmień poziom dostępu, aby wyświetlić ustawienia dostępu.

  5. Wybierz pozycję Prywatny (bez dostępu anonimowego) z listy rozwijanej Poziom dostępu anonimowego i kliknij przycisk OK, aby zastosować zmianę do wybranych kontenerów.

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

Sprawdzanie ustawienia dostępu anonimowego dla zestawu kontenerów

Istnieje możliwość sprawdzenia, które kontenery na co najmniej jednym koncie magazynu są skonfigurowane pod kątem dostępu anonimowego, wyświetlając listę kontenerów i sprawdzając ustawienie dostępu anonimowego. Takie podejście jest praktycznym rozwiązaniem, gdy konto magazynu nie zawiera dużej liczby kontenerów lub podczas sprawdzania ustawienia dla niewielkiej liczby kont magazynu. Jednak wydajność może wystąpić w przypadku próby wyliczenia dużej liczby kontenerów.

W poniższym przykładzie użyto programu PowerShell do uzyskania ustawienia dostępu anonimowego dla wszystkich kontenerów na koncie magazynu. Pamiętaj, aby zastąpić wartości symboli zastępczych w nawiasach własnymi wartościami:

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

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

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

Przykładowy skrypt do korygowania zbiorczego

Poniższy przykładowy skrypt programu PowerShell jest uruchamiany dla wszystkich klasycznych kont magazynu w subskrypcji i ustawia ustawienie dostępu anonimowego dla kontenerów w tych kontach na Prywatne.

Uwaga

Uruchomienie tego skryptu względem kont magazynu z bardzo dużą liczbą kontenerów może wymagać znacznych zasobów i zająć dużo czasu. Jeśli masz konto magazynu z bardzo dużą liczbą kontenerów, możesz opracować inne podejście do korygowania dostępu anonimowego.

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

Zobacz też