Åtgärda anonym läsåtkomst till blobdata (klassiska distributioner)

Azure Blob Storage stöder valfri anonym läsåtkomst till containrar och blobar. Anonym åtkomst kan dock utgöra en säkerhetsrisk. Vi rekommenderar att du inaktiverar anonym åtkomst för optimal säkerhet. Om du inte tillåter anonym åtkomst kan du förhindra dataintrång som orsakas av oönstrade anonym åtkomst.

Som standard är anonym åtkomst till dina blobdata alltid förbjuden. Standardkonfigurationen för ett klassiskt lagringskonto tillåter dock en användare med rätt behörighet att konfigurera anonym åtkomst till containrar och blobar i ett lagringskonto. För att förhindra anonym åtkomst till ett klassiskt lagringskonto måste du konfigurera varje container i kontot för att blockera anonym åtkomst.

Om ditt lagringskonto använder den klassiska distributionsmodellen rekommenderar vi att du migrerar till Azure Resource Manager-distributionsmodellen så snart som möjligt. När du har migrerat ditt konto kan du konfigurera det så att anonym åtkomst inte tillåts på kontonivå. Information om hur du inte tillåter anonym åtkomst för ett Azure Resource Manager-konto finns i Åtgärda anonym läsåtkomst till blobdata (Azure Resource Manager-distributioner).

Om du inte kan migrera dina klassiska lagringskonton just nu bör du nu åtgärda anonym åtkomst till dessa konton genom att ange att alla containrar ska vara privata. Den här artikeln beskriver hur du åtgärdar åtkomsten till containrarna i ett klassiskt lagringskonto.

Azure Storage-konton som använder den klassiska distributionsmodellen dras tillbaka den 31 augusti 2024. Mer information finns i Klassiska Azure-lagringskonton dras tillbaka den 31 augusti 2024.

Varning

Anonym åtkomst utgör en säkerhetsrisk. Vi rekommenderar att du vidtar de åtgärder som beskrivs i följande avsnitt för att åtgärda anonym åtkomst för alla dina klassiska lagringskonton, såvida inte ditt scenario specifikt kräver anonym åtkomst.

Blockera anonym åtkomst till containrar

Om du vill åtgärda anonym åtkomst för ett klassiskt lagringskonto anger du den anonyma åtkomstnivån för varje container i kontot till Privat.

Följ dessa steg för att åtgärda anonym åtkomst för en eller flera containrar i Azure-portalen:

  1. Gå till översikten över ditt lagringskonto i Azure-portalen.

  2. Under Datalagring på menybladet väljer du Blobcontainrar.

  3. Välj de containrar som du vill ange den anonyma åtkomstnivån för.

  4. Använd knappen Ändra åtkomstnivå för att visa åtkomstinställningarna.

  5. Välj Privat (ingen anonym åtkomst) i listrutan Anonym åtkomstnivå och klicka på KNAPPEN OK för att tillämpa ändringen på de valda containrarna.

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

Kontrollera inställningen för anonym åtkomst för en uppsättning containrar

Det går att kontrollera vilka containrar i ett eller flera lagringskonton som har konfigurerats för anonym åtkomst genom att visa containrar och kontrollera inställningen för anonym åtkomst. Den här metoden är ett praktiskt alternativ när ett lagringskonto inte innehåller ett stort antal containrar eller när du kontrollerar inställningen för ett litet antal lagringskonton. Prestanda kan dock bli lidande om du försöker räkna upp ett stort antal containrar.

I följande exempel används PowerShell för att hämta inställningen för anonym åtkomst för alla containrar i ett lagringskonto. Kom ihåg att ersätta platshållarvärdena inom hakparenteser med dina egna värden:

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

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

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

Exempelskript för massreparation

Följande PowerShell-exempelskript körs mot alla klassiska lagringskonton i en prenumeration och anger inställningen för anonym åtkomst för containrarna i dessa konton till Privat.

Varning

Att köra det här skriptet mot lagringskonton med ett mycket stort antal containrar kan kräva betydande resurser och ta lång tid. Om du har ett lagringskonto med ett mycket stort antal containrar kanske du vill skapa en annan metod för att åtgärda anonym åtkomst.

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

Se även