Sdílet prostřednictvím


Náprava anonymního přístupu pro čtení k datům objektů blob (klasická nasazení)

Azure Blob Storage podporuje volitelný anonymní přístup pro čtení ke kontejnerům a objektům blob. Anonymní přístup však může představovat bezpečnostní riziko. Doporučujeme zakázat anonymní přístup pro optimální zabezpečení. Zakázání anonymního přístupu pomáhá zabránit porušením zabezpečení dat způsobeným nežádoucím anonymním přístupem.

Ve výchozím nastavení je anonymní přístup k datům objektů blob vždy zakázán. Výchozí konfigurace klasického účtu úložiště ale umožňuje uživateli s příslušnými oprávněními nakonfigurovat anonymní přístup ke kontejnerům a objektům blob v účtu úložiště. Pokud chcete zabránit anonymnímu přístupu ke klasickému účtu úložiště, musíte nakonfigurovat každý kontejner v účtu tak, aby blokoval anonymní přístup.

Pokud váš účet úložiště používá klasický model nasazení, doporučujeme co nejdříve migrovat na model nasazení Azure Resource Manager. Po migraci účtu ho můžete nakonfigurovat tak, aby nepovolil anonymní přístup na úrovni účtu. Informace o tom, jak zakázat anonymní přístup k účtu Azure Resource Manageru, najdete v tématu Oprava anonymního přístupu pro čtení k datům objektů blob (nasazení Azure Resource Manageru).

Pokud v tuto chvíli nemůžete migrovat klasické účty úložiště, měli byste teď napravit anonymní přístup k těmto účtům nastavením všech kontejnerů na privátní. Tento článek popisuje, jak napravit přístup ke kontejnerům v klasickém účtu úložiště.

Účty Azure Storage, které používají model nasazení Classic, budou vyřazeny 31. srpna 2024. Další informace najdete v tématu Účty azure Classic Storage vyřazené 31. srpna 2024.

Upozorňující

Anonymní přístup představuje bezpečnostní riziko. Doporučujeme provést akce popsané v následující části pro nápravu anonymního přístupu pro všechny klasické účty úložiště, pokud váš scénář výslovně nevyžaduje anonymní přístup.

Blokování anonymního přístupu ke kontejnerům

Pokud chcete napravit anonymní přístup pro klasický účet úložiště, nastavte úroveň anonymního přístupu pro každý kontejner v účtu na Privátní.

Pokud chcete napravit anonymní přístup pro jeden nebo více kontejnerů na webu Azure Portal, postupujte takto:

  1. Na webu Azure Portal přejděte na přehled svého účtu úložiště.

  2. V části Úložiště dat v okně nabídky vyberte kontejnery objektů blob.

  3. Vyberte kontejnery, pro které chcete nastavit úroveň anonymního přístupu.

  4. Pomocí tlačítka Změnit úroveň přístupu zobrazte nastavení přístupu.

  5. V rozevíracím seznamu Úroveň anonymního přístupu vyberte Soukromé (bez anonymního přístupu) a kliknutím na tlačítko OK použijte změnu u vybraných kontejnerů.

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

Kontrola nastavení anonymního přístupu pro sadu kontejnerů

Je možné zkontrolovat, které kontejnery v jednom nebo více účtech úložiště jsou nakonfigurované pro anonymní přístup, výpisem kontejnerů a kontrolou nastavení anonymního přístupu. Tento přístup je praktická možnost, pokud účet úložiště neobsahuje velký počet kontejnerů nebo při kontrole nastavení v malém počtu účtů úložiště. Pokud se ale pokusíte vytvořit výčet velkého počtu kontejnerů, může dojít k omezení výkonu.

Následující příklad používá PowerShell k získání nastavení anonymního přístupu pro všechny kontejnery v účtu úložiště. Nezapomeňte nahradit zástupné hodnoty v závorkách vlastními hodnotami:

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

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

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

Ukázkový skript pro hromadnou nápravu

Následující ukázkový skript PowerShellu se spustí pro všechny klasické účty úložiště v předplatném a nastaví nastavení anonymního přístupu pro kontejnery v těchto účtech na privátní.

Upozornění

Spuštění tohoto skriptu pro účty úložiště s velmi velkým počtem kontejnerů může vyžadovat významné prostředky a trvat dlouhou dobu. Pokud máte účet úložiště s velkým počtem kontejnerů, možná budete chtít navrhnout jiný přístup pro nápravu anonymního přístupu.

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

Viz také