Настройте анонимный общий доступ на чтение к контейнерам и BLOB-объектам
Служба хранилища Azure поддерживает необязательный анонимный общий доступ на чтение для контейнеров и BLOB-объектов. Анонимный доступ к данным по умолчанию никогда не разрешен. Если анонимный доступ не включен явно, все запросы к контейнеру и его BLOB-объектам должны быть разрешены. Если вы настроите параметр общего уровня доступа контейнера для разрешения анонимного доступа, клиенты смогут считывать данные в этом контейнере без авторизации запроса.
Предупреждение
Если контейнер настроен для общего доступа, любой клиент сможет считывать данные в этом контейнере. Общий доступ представляет потенциальную угрозу безопасности, поэтому, если ваш сценарий его не требует, корпорация Майкрософт рекомендует запретить его для учетной записи хранения. Дополнительные сведения см. в статье Настройка анонимного общего доступа на чтение для контейнеров и BLOB-объектов.
В этой статье описывается, как настроить анонимный открытый доступ на чтение для контейнера и его BLOB-объектов. Сведения о анонимном доступе к данным BLOB-объектов из клиентского приложения см. в статье Анонимный доступ к открытым контейнерам и BLOB-объектам с помощью .NET.
Об анонимном общем доступе на чтение
Общий доступ к вашим данным всегда по умолчанию запрещен. На общий доступ влияют два отдельных параметра:
- Разрешить общий доступ для учетной записи хранения. По умолчанию учетная запись хранения позволяет пользователю с соответствующими разрешениями разрешать общий доступ к контейнеру. Данные BLOB-объектов недоступны для общего доступа, если пользователь не выполнит дополнительные действия для явной настройки параметра общего доступа контейнера.
- Настройте параметр общего доступа контейнера. По умолчанию параметр общего доступа контейнера отключен — это значит, что для каждого запроса к контейнеру или его данным требуется авторизация. Пользователь с соответствующими разрешениями может изменить параметр общего доступа контейнера, разрешив анонимный доступ только в том случае, если анонимный доступ разрешен для учетной записи хранения.
В следующей таблице показано, как эти два параметра вместе влияют на общий доступ к контейнеру.
| Для контейнера задан уровень общего доступа “Частный” (значение по умолчанию) | Для контейнера задан уровень общего доступа “Контейнер” | Для контейнера задан уровень общего доступа “Большой двоичный объект” | |
|---|---|---|---|
| Общий доступ для учетной записи хранения запрещен | Общего доступа к контейнеру в учетной записи хранения нет. | Общего доступа к контейнеру в учетной записи хранения нет. Параметр учетной записи хранения переопределяет параметр контейнера. | Общего доступа к контейнеру в учетной записи хранения нет. Параметр учетной записи хранения переопределяет параметр контейнера. |
| Общий доступ для учетной записи хранения разрешен (параметр по умолчанию) | Общего доступа к этому контейнеру нет (конфигурация по умолчанию). | Общий доступ разрешен к этому контейнеру и его BLOB-объектам разрешен. | Общий доступ разрешен для BLOB-объектов в этом контейнере, но не для самого контейнера. |
Если анонимный открытый доступ разрешен для учетной записи хранения и настроен для конкретного контейнера, то служба примет запрос на чтение большого двоичного объекта из этого контейнера, который передается без заголовка Authorization, и возвратит в ответе данные большого двоичного объекта.
Разрешение и запрещение общего доступа на чтение для учетной записи хранения
По умолчанию учетная запись хранения настраивается так, что позволяет пользователю с соответствующими разрешениями разрешать общий доступ к контейнеру. Если общий доступ разрешен, пользователь с соответствующими разрешениями может изменить параметр общего доступа контейнера, разрешив анонимный общий доступ к данным в этом контейнере. Данные BLOB-объектов недоступны для общего доступа, если пользователь не выполнит дополнительные действия для явной настройки параметра общего доступа контейнера.
Помните, что общий доступ к контейнеру всегда по умолчанию отключен и должен быть явно настроен так, чтобы разрешать анонимные запросы. Независимо от параметра в учетной записи хранения данные всегда будут недоступны для общего доступа, если пользователь с соответствующими разрешениями не выполнит этот дополнительный шаг и не включит общий доступ в контейнере.
Запрет общего доступа для учетной записи хранения предотвращает анонимный доступ ко всем контейнерам и BLOB-объектам в этой учетной записи. Если общий доступ для учетной записи запрещен, настроить параметр общего доступа для контейнера так, чтобы разрешить анонимный доступ, нельзя. Для повышения безопасности корпорация Майкрософт рекомендует запрещать общий доступ к учетным записям хранения, если для вашего сценария не требуется анонимный доступ пользователей к ресурсам BLOB-объектов.
Важно!
Запрет общего доступа для учетной записи хранения переопределяет параметры общего доступа для всех контейнеров в этой учетной записи. Если общий доступ для учетной записи хранения запрещен, все последующие анонимные запросы к этой учетной записи будут завершаться ошибкой. Перед изменением этого параметра убедитесь в том, что вы понимаете, как это повлияет на клиентские приложения, которые могут анонимно обращаться к данным в учетной записи хранения. Дополнительные сведения см. в статье Настройка анонимного общего доступа на чтение для контейнеров и BLOB-объектов.
Чтобы разрешить или запретить общий доступ для учетной записи хранения, настройте свойство AllowBlobPublicAccess учетной записи. Это свойство доступно для всех учетных записей хранения, созданных с помощью модели развертывания Azure Resource Manager. Дополнительные сведения см. в статье Общие сведения об учетных записях хранения.
Свойство AllowBlobPublicAccess не задается для учетной записи хранения по умолчанию и не возвращает значение, пока оно не будет задано явно. Учетная запись хранения разрешает общий доступ, если свойство имеет значение null или true.
Чтобы разрешить или запретить общий доступ к учетной записи хранения на портале Azure, выполните следующие действия:
Войдите в свою учетную запись хранения на портале Azure.
Выберите параметр Configuration (Конфигурация) в разделе Settings (Параметры).
Задайте для параметра Общий доступ к BLOB-объектам значение Включено или Отключено.
Примечание
Запрет общего доступа для учетной записи хранения не влияет на статические веб-сайты, размещенные в этой учетной записи хранения. Контейнер $web всегда является общедоступным.
После обновления параметра общего доступа для учетной записи хранения может потребоваться до 30 секунд, прежде чем изменение будет распространено в системе.
Если для контейнера настроен анонимный общий доступ, запросы на чтение больших двоичных объектов из этого контейнера не требуют авторизации. Но все правила брандмауэра, настроенные для соответствующей учетной записи хранения, сохраняют силу и будут блокировать анонимный трафик.
Чтобы разрешить или запретить общий доступ к BLOB-объекту, требуется поставщик ресурсов службы хранилища Azure версии 2019-04-01 или более поздней. Дополнительные сведения см. в разделе REST API поставщика ресурсов службы хранилища Microsoft Azure.
В примерах в этом разделе показано, как читать свойство AllowBlobPublicAccess учетной записи хранения и определять, разрешен или запрещен общий доступ. Дополнительные сведения о том, как проверить, настроен ли параметр общего доступа учетной записи для предотвращения анонимного доступа, см. в статье Исправление анонимного общего доступа.
Настройка уровня общего доступа для контейнера
Чтобы предоставить анонимным пользователям доступ на чтение к контейнеру и его BLOB-объектам, сначала разрешите общий доступ для учетной записи хранения, а затем установите в контейнере уровень общего доступа. Если в общем доступе для учетной записи хранения отказано, вы не сможете настроить общий доступ для контейнера.
Если общий доступ для учетной записи хранения разрешен, вы можете настроить контейнер со следующими разрешениями:
- Без общего доступа на чтение: доступ к контейнеру и его BLOB-объектам возможен только по разрешенному запросу. Это — параметр по умолчанию для всех новых контейнеров.
- Общий доступ на чтение только для больших двоичных объектов: BLOB-объекты в контейнере можно считывать с помощью анонимного запроса, но анонимный доступ к данным контейнера невозможен. Анонимные клиенты не могут перечислять большие двоичные объекты внутри контейнера.
- Общий доступ на чтение для контейнера и его BLOB-объектов: данные контейнера и BLOB-объектов могут считываться анонимным запросом, кроме параметров разрешений и метаданных контейнера. Клиенты могут перечислять большие двоичные объекты внутри контейнера с помощью анонимного запроса, но не могут перечислять контейнеры в учетной записи хранения.
Изменить общий уровень доступа для отдельного BLOB-объекта нельзя. Уровень общего доступа задается только на уровне контейнера. Уровень общего доступа контейнера можно создать при создании контейнера. Также можно изменить соответствующий параметр в существующем контейнере.
Чтобы обновить уровень общего доступа для одного или нескольких существующих контейнеров на портале 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
Поддерживаемые компоненты
На поддержку данной функции может повлиять включение протокола Data Lake Storage 2-го поколения, протокола сетевой файловой системы (NFS) 3.0 или протокола SFTP.
Если вы включили любую из этих возможностей, см. Сведения о поддержке функций хранилища BLOB-объектов в учетных записях хранения Azure, чтобы оценить поддержку данной функции.
