Настройка анонимного доступа на чтение к контейнерам и BLOB-объектам

служба хранилища Azure поддерживает необязательный анонимный доступ на чтение для контейнеров и больших двоичных объектов. Анонимный доступ к данным по умолчанию никогда не разрешен. Если анонимный доступ не включен явно, все запросы к контейнеру и его BLOB-объектам должны быть разрешены. При настройке параметра уровня доступа контейнера для разрешения анонимного доступа клиенты могут считывать данные в этом контейнере без авторизации запроса.

Предупреждение

Когда контейнер настроен для анонимного доступа, любой клиент может считывать данные в этом контейнере. Анонимный доступ представляет собой потенциальный риск безопасности, поэтому если сценарий не требует его, рекомендуется устранить анонимный доступ для учетной записи хранения.

В этой статье описывается настройка анонимного доступа на чтение для контейнера и больших двоичных объектов. Сведения об устранении анонимного доступа для оптимальной безопасности см. в одной из следующих статей:

О анонимном доступе для чтения

Анонимный доступ к данным всегда запрещен по умолчанию. Существует два отдельных параметра, влияющих на анонимный доступ:

  1. Параметр анонимного доступа для учетной записи хранения. Учетная запись хранения Azure Resource Manager предлагает параметр для разрешения или запрета анонимного доступа для учетной записи. Корпорация Майкрософт рекомендует запретить анонимный доступ для учетных записей хранения для оптимальной безопасности.

    Если анонимный доступ разрешен на уровне учетной записи, данные BLOB-объектов недоступны для анонимного доступа на чтение, если пользователь не выполняет дополнительный шаг, чтобы явно настроить параметр анонимного доступа контейнера.

  2. Настройте параметр анонимного доступа контейнера. По умолчанию параметр анонимного доступа контейнера отключен, то есть для каждого запроса к контейнеру или его данным требуется авторизация. Пользователь с соответствующими разрешениями может изменить параметр анонимного доступа контейнера, чтобы включить анонимный доступ только в том случае, если анонимный доступ разрешен для учетной записи хранения.

В следующей таблице показано, как два параметра влияют на анонимный доступ для контейнера.

Для контейнера задан уровень анонимного доступа (параметр по умолчанию) Уровень анонимного доступа для контейнера имеет значение Container Уровень анонимного доступа для контейнера имеет значение BLOB-объект
Анонимный доступ запрещен для учетной записи хранения Анонимный доступ к любому контейнеру в учетной записи хранения не существует. Анонимный доступ к любому контейнеру в учетной записи хранения не существует. Параметр учетной записи хранения переопределяет параметр контейнера. Анонимный доступ к любому контейнеру в учетной записи хранения не существует. Параметр учетной записи хранения переопределяет параметр контейнера.
Анонимный доступ разрешен для учетной записи хранения Анонимный доступ к этому контейнеру (конфигурация по умолчанию) отсутствует. Анонимный доступ разрешен для этого контейнера и его больших двоичных объектов. Анонимный доступ разрешен для больших двоичных объектов в этом контейнере, но не к самому контейнеру.

Если анонимный доступ разрешен для учетной записи хранения и настроен для определенного контейнера, запрос на чтение большого двоичного объекта в этом контейнере, передаваемом без заголовка авторизации , принимается службой, а данные большого двоичного объекта возвращаются в ответе.

Разрешить или запретить анонимный доступ на чтение для учетной записи хранения

Если анонимный доступ разрешен для учетной записи хранения, пользователь с соответствующими разрешениями может изменить параметр анонимного доступа контейнера, чтобы обеспечить анонимный доступ к данным в этом контейнере. Данные BLOB-объектов никогда не доступны для анонимного доступа, если пользователь не выполняет дополнительный шаг, чтобы явно настроить параметр анонимного доступа контейнера.

Помните, что анонимный доступ к контейнеру всегда отключен по умолчанию и должен быть явно настроен для разрешения анонимных запросов. Независимо от параметра учетной записи хранения ваши данные никогда не будут доступны для анонимного доступа, если пользователь с соответствующими разрешениями не принимает этот дополнительный шаг, чтобы включить анонимный доступ в контейнере.

Запрет анонимного доступа для учетной записи хранения переопределяет параметры доступа для всех контейнеров в этой учетной записи хранения, предотвращая анонимный доступ к данным BLOB-объектов в этой учетной записи. Если анонимный доступ запрещен для учетной записи, невозможно настроить параметр доступа для контейнера, чтобы разрешить анонимный доступ, и любые будущие анонимные запросы к этой учетной записи завершаются ошибкой. Перед изменением этого параметра убедитесь в том, что вы понимаете, как это повлияет на клиентские приложения, которые могут анонимно обращаться к данным в учетной записи хранения. Дополнительные сведения см. в разделе "Запрет анонимного доступа на чтение" к контейнерам и BLOB-объектам.

Важно!

После запрета анонимного доступа для учетной записи хранения клиенты, использующие вызов анонимного носителя, будут находить, что служба хранилища Azure возвращает ошибку 403 (запрещено), а не ошибку 401 (несанкционированно). Рекомендуется сделать все контейнеры частными для устранения этой проблемы. Дополнительные сведения об изменении параметра анонимного доступа для контейнеров см. в разделе "Настройка уровня доступа для контейнера".

Для разрешения или запрета анонимного доступа требуется версия 2019-04-01 или более поздней версии поставщика ресурсов служба хранилища Azure. Дополнительные сведения см. в разделе REST API поставщика ресурсов службы хранилища Microsoft Azure.

Разрешения для запрета анонимного доступа

Чтобы задать свойство AllowBlobAnonymousAccess для учетной записи хранения, пользователь должен иметь разрешения на создание учетных записей хранения и управление ими. Роли управления доступом на основе ролей Azure (Azure RBAC), предоставляющие эти разрешения, включают Microsoft.служба хранилищаДействие /storageAccounts/write. Встроенные роли с этим действием:

Назначения ролей должны быть область уровня учетной записи хранения или выше, чтобы разрешить пользователю запретить анонимный доступ к учетной записи хранения. Дополнительные сведения об области роли см. в разделе Общие сведения об области для Azure RBAC.

Будьте осторожны, чтобы ограничить назначение этих ролей только теми пользователями администратора, которым требуется возможность создать учетную запись хранения или обновить его свойства. Используйте принцип наименьших привилегий, чтобы предоставлять пользователям минимальный набор разрешений, необходимый для выполнения их задач. Дополнительные сведения об управлении доступом с помощью Azure RBAC см. в разделе Рекомендации по использованию Azure RBAC.

Эти роли не предоставляют доступ к данным в учетной записи хранения с помощью идентификатора Microsoft Entra. Однако они включают в себя разрешение Microsoft. Storage/storageAccounts/listkeys/Action, которое предоставляет доступ к ключам доступа учетной записи. Пользователь с этим разрешением может использовать ключи доступа учетной записи для доступа ко всем данным в учетной записи хранения.

Microsoft.служба хранилища /storageAccounts/listkeys/action сам предоставляет доступ к данным через ключи учетной записи, но не предоставляет пользователю возможность изменять свойство AllowBlobPublicAccess для учетной записи хранения. Для пользователей, которым требуется доступ к данным в учетной записи хранения, но не должны иметь возможность изменять конфигурацию учетной записи хранения, рекомендуется назначать такие роли, как служба хранилища участник данных BLOB-объектов, служба хранилища читатель данных BLOB-объектов или читатель и доступ к данным.

Примечание.

Роли администратора классической подписки "администратор службы" и "соадминистратор" включают в себя эквивалент роли владельца Azure Resource Manager. Роль владельца включает все действия, поэтому пользователь с одной из этих административных ролей также может создавать учетные записи хранения и управлять конфигурацией учетной записи. Дополнительные сведения см. в статье о ролях Azure, ролях Microsoft Entra и классических ролях администратора подписки.

Установка свойства AllowBlobPublicAccess учетной записи хранения

Чтобы разрешить или запретить анонимный доступ для учетной записи хранения, задайте свойство AllowBlobPublicAccess учетной записи. Это свойство доступно для всех учетных записей хранения, созданных с помощью модели развертывания Azure Resource Manager. Дополнительные сведения см. в статье Общие сведения об учетных записях хранения.

Чтобы разрешить или запретить анонимный доступ для учетной записи хранения в портал Azure, выполните следующие действия.

  1. Войдите в свою учетную запись хранения на портале Azure.

  2. Выберите параметр Configuration (Конфигурация) в разделе Settings (Параметры).

  3. Задайте для параметра Allow BLOB анонимный доступ квключено или отключено.

    Screenshot showing how to allow or disallow anonymous access for account

Примечание.

Запрет анонимного доступа для учетной записи хранения не влияет на статические веб-сайты, размещенные в этой учетной записи хранения. Контейнер $web всегда является общедоступным.

После обновления параметра анонимного доступа для учетной записи хранения может потребоваться до 30 секунд до полного распространения изменения.

Если контейнер настроен для анонимного доступа, запросы на чтение больших двоичных объектов в этом контейнере не должны быть авторизованы. Однако все правила брандмауэра, настроенные для учетной записи хранения, остаются в силе и будут блокировать трафик в соответствии с настроенными списками управления доступом.

Для разрешения или запрета анонимного доступа требуется версия 2019-04-01 или более поздней версии поставщика ресурсов служба хранилища Azure. Дополнительные сведения см. в разделе REST API поставщика ресурсов службы хранилища Microsoft Azure.

В примерах этого раздела показано, как считывать свойство AllowBlobPublicAccess для учетной записи хранения, чтобы определить, разрешен ли анонимный доступ в настоящее время или запрещен. Сведения о том, как убедиться, что параметр анонимного доступа учетной записи настроен для предотвращения анонимного доступа, см. в статье "Исправление анонимного доступа" для учетной записи хранения.

Настройка уровня анонимного доступа для контейнера

Чтобы предоставить анонимным пользователям доступ на чтение к контейнеру и его BLOB-объектам, сначала разрешить анонимный доступ для учетной записи хранения, а затем задать анонимный уровень доступа контейнера. Если анонимный доступ запрещен для учетной записи хранения, вы не сможете настроить анонимный доступ для контейнера.

Внимание

Корпорация Майкрософт рекомендует разрешить анонимный доступ к данным BLOB-объектов в вашей учетной записи хранения.

Если анонимный доступ разрешен для учетной записи хранения, можно настроить контейнер со следующими разрешениями:

  • Без общего доступа на чтение: доступ к контейнеру и его BLOB-объектам возможен только по разрешенному запросу. Это — параметр по умолчанию для всех новых контейнеров.
  • Общий доступ на чтение только для больших двоичных объектов: BLOB-объекты в контейнере можно считывать с помощью анонимного запроса, но анонимный доступ к данным контейнера невозможен. Анонимные клиенты не могут перечислять большие двоичные объекты внутри контейнера.
  • Общий доступ на чтение для контейнера и его BLOB-объектов: данные контейнера и BLOB-объектов могут считываться анонимным запросом, кроме параметров разрешений и метаданных контейнера. Клиенты могут перечислять большие двоичные объекты внутри контейнера с помощью анонимного запроса, но не могут перечислять контейнеры в учетной записи хранения.

Невозможно изменить уровень анонимного доступа для отдельного большого двоичного объекта. Уровень анонимного доступа устанавливается только на уровне контейнера. При создании контейнера можно задать анонимный уровень доступа контейнера или обновить параметр существующего контейнера.

Чтобы обновить уровень анонимного доступа для одного или нескольких существующих контейнеров в портал Azure, выполните следующие действия.

  1. Войдите в свою учетную запись хранения на портале Azure.

  2. В колонке меню хранилища данных выберите контейнеры.

  3. Выберите контейнеры, для которых необходимо задать уровень анонимного доступа.

  4. Нажмите кнопку "Изменить уровень доступа", чтобы отобразить параметры анонимного доступа.

  5. Выберите требуемый уровень анонимного доступа в раскрывающемся списке "Анонимный доступ" и нажмите кнопку "ОК", чтобы применить изменение к выбранным контейнерам.

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

Если анонимный доступ запрещен для учетной записи хранения, невозможно задать уровень анонимного доступа контейнера. Если вы попытаетесь задать уровень анонимного доступа контейнера, вы увидите, что параметр отключен, так как анонимный доступ запрещен для учетной записи.

Screenshot showing that setting a container's anonymous access level is blocked when anonymous access disallowed for the account

Проверьте параметр анонимного доступа для набора контейнеров

Можно проверка, какие контейнеры в одной или нескольких учетных записях хранения настроены для анонимного доступа, перечислив контейнеры и проверка параметр анонимного доступа. Этот подход удобен, если учетная запись хранения не содержит большого количества контейнеров, а также при проверке параметра по небольшому числу учетных записей хранения. Однако при попытке перечисления большого количества контейнеров производительность может снизиться.

В следующем примере powerShell используется для получения параметра анонимного доступа для всех контейнеров в учетной записи хранения. Не забудьте заменить значения заполнителей в скобках собственными значениями.

$rgName = "<resource-group>"
$accountName = "<storage-account>"
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context
Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess

Поддерживаемые компоненты

На поддержку данной функции может повлиять включение протокола Data Lake Storage 2-го поколения, протокола сетевой файловой системы (NFS) 3.0 или протокола SFTP. Если вы включили любую из этих возможностей, см. Сведения о поддержке функций хранилища BLOB-объектов в учетных записях хранения Azure, чтобы оценить поддержку данной функции.

Следующие шаги