Исправление анонимного доступа на чтение к данным BLOB-объектов (классические развертывания)
Хранилище BLOB-объектов Azure поддерживает необязательный анонимный доступ на чтение к контейнерам и BLOB-объектам. Однако анонимный доступ может представлять угрозу безопасности. Рекомендуется отключить анонимный доступ для оптимальной безопасности. Запрет анонимного доступа помогает предотвратить нарушения данных, вызванные нежелательным анонимным доступом.
По умолчанию анонимный доступ к данным BLOB-объектов всегда запрещен. Однако конфигурация по умолчанию для классической учетной записи хранения позволяет пользователю с соответствующими разрешениями настроить анонимный доступ к контейнерам и BLOB-объектам в учетной записи хранения. Чтобы предотвратить анонимный доступ к классической учетной записи хранения, необходимо настроить каждый контейнер в учетной записи, чтобы заблокировать анонимный доступ.
Если ваша учетная запись хранения использует классическую модель развертывания, рекомендуется перенести ее в модель развертывания Azure Resource Manager как можно скорее. После переноса учетной записи его можно настроить для запрета анонимного доступа на уровне учетной записи. Сведения о том, как запретить анонимный доступ для учетной записи Azure Resource Manager, см. в статье "Исправление анонимного доступа на чтение" к данным BLOB-объектов (развертывания Azure Resource Manager).
Если вы не можете перенести классические учетные записи хранения в настоящее время, необходимо исправить анонимный доступ к этим учетным записям, установив для всех контейнеров частный доступ. В этой статье описывается, как исправить доступ к контейнерам в классической учетной записи хранения.
служба хранилища Azure учетные записи, использующие классическую модель развертывания, будут прекращены 31 августа 2024 г. Дополнительные сведения см. в записи о прекращении использования классических учетных записей хранения Azure 31 августа 2024 г.
Предупреждение
Анонимный доступ представляет угрозу безопасности. Мы рекомендуем выполнить действия, описанные в следующем разделе, чтобы устранить анонимный доступ для всех классических учетных записей хранения, если в вашем сценарии не требуется анонимный доступ.
Блокировать анонимный доступ к контейнерам
Чтобы устранить анонимный доступ для классической учетной записи хранения, задайте для каждого контейнера в учетной записи значение Private.
Чтобы устранить анонимный доступ для одного или нескольких контейнеров в портал Azure, выполните следующие действия.
Войдите в свою учетную запись хранения на портале Azure.
В разделе Хранилище данных в колонке меню выберите Контейнеры BLOB-объектов.
Выберите контейнеры, для которых необходимо задать уровень анонимного доступа.
Нажмите кнопку "Изменить уровень доступа", чтобы отобразить параметры доступа.
Выберите "Частный" (без анонимного доступа) в раскрывающемся списке "Анонимный доступ" и нажмите кнопку "ОК", чтобы применить изменение к выбранным контейнерам.
Проверьте параметр анонимного доступа для набора контейнеров
Можно проверить, какие контейнеры в одной или нескольких учетных записях хранения настроены для анонимного доступа, перечислив контейнеры и проверив параметр анонимного доступа. Этот подход удобен, если учетная запись хранения не содержит большого количества контейнеров, а также при проверке параметра по небольшому числу учетных записей хранения. Однако при попытке перечисления большого количества контейнеров производительность может снизиться.
В следующем примере powerShell используется для получения параметра анонимного доступа для всех контейнеров в учетной записи хранения. Не забудьте заменить значения заполнителей в скобках собственными значениями.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context
Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess
Пример скрипта для массового исправления
Следующий пример скрипта PowerShell выполняется для всех классических учетных записей хранения в подписке и задает параметр анонимного доступа для контейнеров в этих учетных записях частным.
Внимание
Выполнение этого сценария для учетных записей хранения с очень большим количеством контейнеров может потребовать значительных ресурсов и занять много времени. Если у вас есть учетная запись хранения с очень большим количеством контейнеров, вам может потребоваться разработать другой подход к устранению анонимного доступа.
# 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"