Remediar o acesso de leitura anônimo aos dados de blob (implantações clássicas)

O Armazenamento de Blobs do Azure dá suporte ao acesso de leitura anônimo opcional a contêineres e blobs. No entanto, o acesso anónimo pode representar um risco de segurança. Recomendamos que desative o acesso anónimo para uma segurança ideal. Não permitir o acesso anónimo ajuda a evitar violações de dados causadas por acessos anónimos indesejados.

Por padrão, o acesso anônimo aos seus dados de blob é sempre proibido. No entanto, a configuração padrão para uma conta de armazenamento clássica permite que um usuário com permissões apropriadas configure o acesso anônimo a contêineres e blobs em uma conta de armazenamento. Para impedir o acesso anônimo a uma conta de armazenamento clássica, você deve configurar cada contêiner na conta para bloquear o acesso anônimo.

Se sua conta de armazenamento estiver usando o modelo de implantação clássico, recomendamos que você migre para o modelo de implantação do Azure Resource Manager o mais rápido possível. Depois de migrar sua conta, você pode configurá-la para não permitir acesso anônimo no nível da conta. Para obter informações sobre como não permitir acesso anônimo para uma conta do Azure Resource Manager, consulte Remediar acesso de leitura anônimo a dados de blob (implantações do Azure Resource Manager).

Se você não puder migrar suas contas de armazenamento clássicas no momento, deverá corrigir o acesso anônimo a essas contas agora, definindo todos os contêineres como privados. Este artigo descreve como corrigir o acesso aos contêineres em uma conta de armazenamento clássica.

As contas de Armazenamento do Azure que usam o modelo de implantação clássico serão desativadas em 31 de agosto de 2024. Para obter mais informações, consulte As contas de armazenamento clássico do Azure serão desativadas em 31 de agosto de 2024.

Aviso

O acesso anónimo representa um risco de segurança. Recomendamos que você execute as ações descritas na seção a seguir para corrigir o acesso anônimo para todas as suas contas de armazenamento clássicas, a menos que seu cenário exija especificamente acesso anônimo.

Bloquear o acesso anónimo a contentores

Para corrigir o acesso anônimo para uma conta de armazenamento clássica, defina o nível de acesso anônimo para cada contêiner na conta como Privado.

Para corrigir o acesso anônimo para um ou mais contêineres no portal do Azure, siga estas etapas:

  1. Navegue até a visão geral da sua conta de armazenamento no portal do Azure.

  2. Em Armazenamento de dados na folha do menu, selecione Contêineres de Blob.

  3. Selecione os contêineres para os quais você deseja definir o nível de acesso anônimo.

  4. Use o botão Alterar nível de acesso para exibir as configurações de acesso.

  5. Selecione Privado (sem acesso anônimo) na lista suspensa Nível de acesso anônimo e clique no botão OK para aplicar a alteração aos contêineres selecionados.

    Captura de ecrã a mostrar como definir o nível de acesso anónimo no portal.

Verifique a configuração de acesso anônimo para um conjunto de contêineres

É possível verificar quais contêineres em uma ou mais contas de armazenamento estão configurados para acesso anônimo listando os contêineres e verificando a configuração de acesso anônimo. Essa abordagem é uma opção prática quando uma conta de armazenamento não contém um grande número de contêineres ou quando você está verificando a configuração em um pequeno número de contas de armazenamento. No entanto, o desempenho pode sofrer se você tentar enumerar um grande número de contêineres.

O exemplo a seguir usa o PowerShell para obter a configuração de acesso anônimo para todos os contêineres em uma conta de armazenamento. Lembre-se de substituir os valores de espaço reservado entre colchetes pelos seus próprios valores:

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

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

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

Script de exemplo para correção em massa

O script PowerShell de exemplo a seguir é executado em todas as contas de armazenamento clássicas em uma assinatura e define a configuração de acesso anônimo para os contêineres nessas contas como Particular.

Atenção

A execução desse script em contas de armazenamento com um número muito grande de contêineres pode exigir recursos significativos e levar muito tempo. Se você tiver uma conta de armazenamento com um número muito grande de contêineres, convém criar uma abordagem diferente para corrigir o acesso anônimo.

# 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://video2.skills-academy.com/en-us/azure/virtual-machines/migration-classic-resource-manager-overview"
}
write-host "Script complete"

Consulte também