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

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

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

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

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

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

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

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

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

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

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

Для контейнера задан уровень анонимного доступа (параметр по умолчанию) Уровень анонимного доступа для контейнера имеет значение Container Уровень анонимного доступа для контейнера имеет значение 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-объектов хранилища или читатель и доступ к данным.

Примечание.

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

Чтобы предоставить анонимным пользователям доступ на чтение к контейнеру и его 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, чтобы оценить поддержку данной функции.

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