Corrigir o acesso de leitura público anônimo aos dados de blob (implantações clássicas)

O Armazenamento de Blobs do Azure dá suporte ao acesso de leitura público anônimo opcional em contêineres e blobs. No entanto, o acesso anônimo pode apresentar um risco à segurança. Recomendamos que você desabilite o acesso anônimo, permitindo a segurança ideal. Não permitir o acesso público ajuda a evitar violações de dados causadas por acesso anônimo indesejado.

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

Se a sua conta de armazenamento está 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ê poderá configurá-la para não permitir o acesso público anônimo na conta. Para obter informações sobre como não permitir o acesso público anônimo em uma conta do Azure Resource Manager, consulte Corrigir o acesso de leitura anônimo público aos dados de blob (implantações do Azure Resource Manager).

Se você não puder migrar suas contas de armazenamento clássicas no momento, corrija o acesso público 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 do 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, confira As contas de armazenamento clássicas do Azure serão desativadas em 31 de agosto de 2024.

Aviso

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

Bloquear o acesso anônimo em contêineres e blobs

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

Para corrigir o acesso público em um ou mais contêineres no portal do Azure, siga essas etapas:

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

  2. Em armazenamento de dados no menu, selecione contêineres de blob.

  3. Selecione os contêineres para os quais você deseja definir o nível de acesso público.

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

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

    Captura de tela mostrando como definir o nível de acesso anônimo no portal.

Verificar a configuração de acesso público para um conjunto de contêineres

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

O exemplo a seguir usa o PowerShell para obter a configuração de acesso público para todos os contêineres em uma conta de armazenamento. Não deixe de substituir os valores de espaço reservado entre colchetes pelos seus valores:

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

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

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

Exemplo de script para correção em massa

O exemplo de script do PowerShell a seguir é executado em todas as contas de armazenamento clássicas em uma assinatura e define a configuração de acesso público para os contêineres nessas contas como Privado.

Cuidado

A execução desse script nas 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, o ideal será criar uma abordagem diferente para corrigir o acesso público.

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

Confira também