Поделиться через


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

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

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

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

В этой статье описывается, как настроить анонимный доступ на чтение для контейнера и блобов. Для получения информации об устранении анонимного доступа к данным BLOB-объектов для оптимальной безопасности см. "Устранение анонимного доступа на чтение к данным BLOB-объектов".

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

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

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

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

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

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

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

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

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

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

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

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

Внимание

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

  3. Установите Разрешить анонимный доступ к Blob в положение включено или отключено.

    Снимок экрана: разрешение или запрет анонимного доступа для учетной записи

Примечание.

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

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

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

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

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

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

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

Внимание

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

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

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

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

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

  1. Перейдите на страницу обзора вашей учетной записи хранения в портале Azure.

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

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

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

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

    Снимок экрана: настройка уровня анонимного доступа на портале.

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

Снимок экрана: настройка уровня анонимного доступа контейнера блокируется, когда анонимный доступ запрещен для учетной записи

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

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

В следующем примере 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, чтобы оценить поддержку этой возможности.

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