Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Для оптимальной безопасности корпорация Майкрософт рекомендует использовать Microsoft Entra ID с управляемыми удостоверениями для авторизации запросов к данным в blob-объектах, очередях и таблицах, когда это возможно. Авторизация с помощью идентификатора Microsoft Entra и управляемых удостоверений обеспечивает более высокую безопасность и удобство использования при авторизации общего ключа. Дополнительные сведения см. в разделе "Авторизация с помощью идентификатора Microsoft Entra". Дополнительные сведения об управляемых удостоверениях см. в статье "Что такое управляемые удостоверения для ресурсов Azure".
Для ресурсов, размещенных за пределами Azure, таких как локальные приложения, можно использовать управляемые удостоверения с помощью Azure Arc. Например, приложения, работающие на серверах с поддержкой Azure Arc, могут использовать управляемые удостоверения для подключения к службам Azure. Дополнительные сведения см. в статье "Проверка подлинности в ресурсах Azure с помощью серверов с поддержкой Azure Arc".
В сценариях, где используются совместные ключи доступа (SAS), корпорация Майкрософт рекомендует использовать пользовательские делегированные SAS. SAS делегирования пользователей защищены учетными данными Microsoft Entra вместо ключа учетной записи. Чтобы узнать о подписях общего доступа, см. раздел «Создать пользовательскую делегацию SAS».
Подпись общего доступа сервиса (SAS) делегирует доступ к ресурсу только в одном из сервисов хранения: Blob Storage (включая Data Lake Storage и dfs конечные точки), Queue Storage, Table Storage или Azure Files. URI для SAS на уровне сервиса состоит из URI ресурса, к которому SAS делегирует доступ, за которым следует токен SAS.
Токен SAS — это строка запроса, включающая всю необходимую информацию для авторизации запроса. Токен указывает ресурс, к которому клиент может получить доступ, предоставленные права и период времени, в течение которого подпись является действительной.
SAS также может указывать поддерживаемый IP-адрес или диапазон адресов, с которого могут исходить запросы, поддерживаемый протокол, с помощью которого может быть сделан запрос, или необязательный идентификатор политики доступа, связанный с запросом.
Наконец, каждый токен SAS содержит подпись.
Предостережение
Подписанные URL-адреса — это ключи, предоставляющие разрешения ресурсам хранилища, и их следует защищать так же, как и ключ учетной записи. Важно обеспечить для SAS защиту от вредоносного или непреднамеренного использования. Распространять SAS нужно с осторожность и следует подготовить план для отзыва скомпрометированного SAS. Операции, использующие сигнатуры общего доступа, должны выполняться только через HTTPS-соединение, а SAS-URI — распространяться только по защищённому соединению, такому как HTTPS.
Авторизация сервиса SAS
Вы защищаете аккаунт SAS, используя ключ аккаунта хранения. Когда вы создаёте аккаунт SAS, ваше клиентское приложение должно содержать ключ аккаунта.
Чтобы использовать учетные данные Microsoft Entra для защиты SAS для контейнера или blob, создайте пользовательскую делегацию SAS.
Поддержка сервиса SAS для доступа в области каталога
Сервис SAS поддерживает область действия каталога (sr=d), если версия авторизации (sv) — 2020-02-10 или позже. Семантика домена каталога (sr=d) схожа с семантикой области контейнера (sr=c), за исключением того, что доступ ограничен каталогом и любыми файлами и подкаталогами внутри него. При указании sr=d также требуется параметр запроса sdd.
Формат входа в строку для авторизации версии 2020-02-10 не изменяется.
Создание сервиса SAS
Следующее изображение представляет части URI сигнатуры общего доступа. Требуемые детали представлены оранжевым цветом. Поля, составляющие токен SAS, описаны в последующих разделах.
В следующих разделах описывается, как задать параметры, из которых состоит токен сервиса SAS.
Укажите поле signedVersion
Поле signedVersion (sv) содержит сервисную версию подписи общего доступа. Это значение указывает версию авторизации общего ключа, используемую этой подписью общего доступа (в поле).signature Значение также указывает версию сервиса для запросов, выполненных с помощью этой общей подписи доступа.
Для получения информации о том, какая версия используется при выполнении запросов через общую подпись доступа, см . раздел «Версионирование для Azure Storage services».
Для получения информации о том, как этот параметр влияет на авторизацию запросов, сделанных с помощью общей подписи доступа, см. раздел «Делегат доступа с общей подписью доступа».
| Имя поля | Параметр запроса | Описание |
|---|---|---|
signedVersion |
sv |
Обязательно. Поддерживается в версии 2012-02-12 и более позднее. Версия службы хранения для авторизации и обработки запросов, которые вы делаете с помощью этой подписи общего доступа. Для получения дополнительной информации см. раздел Versioning for Azure Storage services. |
Определите версию устаревшего запроса SAS
В устаревших случаях, где signedVersion не используется, Blob Storage применяет правила для определения версии. Для получения дополнительной информации об этих правилах см. раздел Versioning for Azure Storage services.
Это важно
Клиентское программное обеспечение может испытывать неожиданное поведение протокола, если вы используете URI с подписью общего доступа, которая использует версию сервиса хранения, более свежую по сравнению с клиентским. Код, который строит URI с совместной подписью доступа, должен опираться на версии, понятные клиентскому программному обеспечению, выполняющему запросы на сервисы хранения.
Укажите подписанный ресурс (только Blob Storage)
Необходимое поле signedResource (sr) указывает, какие ресурсы доступны с помощью подписанного URL-адреса. В следующей таблице описано, как обращаться к blob или контейнерному ресурсу в токене SAS.
| Ресурс | Значение параметра | Поддерживаемые версии | Описание |
|---|---|---|---|
| блоб | б | Все | Предоставляет доступ к содержимому и метаданным большого двоичного объекта. |
| Версия BLOB-объектов | БВ | 2018-11-09 и более поздних версий | Предоставляет доступ к содержимому и метаданным версии большого двоичного объекта, но не к базовому BLOB-объекту. |
| Моментальный снимок BLOB | bs | 2018-11-09 и более поздних версий | Предоставляет доступ к содержимому и метаданным моментального снимка BLOB-объектов, но не к базовому BLOB-объекту. |
| Контейнер | c | Все | Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в контейнере и списку больших двоичных объектов в контейнере. |
| Directory | d | 2020-02-10 и более поздних версий | Предоставляет доступ к содержимому и метаданным любого blob в каталоге, а также к списку blob в каталоге. Если для поля signedResource указан каталог, также требуется параметр signedDirectoryDepth (sdd) . Каталог всегда вложен в контейнер. |
Укажите подписанный ресурс (Azure Files)
SAS поддерживается для Azure Files версии 2015-02-21 и более поздней.
Поле signedResource указывает, какие ресурсы доступны через подпись общего доступа. В следующей таблице описано, как обращаться к файлу или ресурсу для совместного использования в URI.
| Имя поля | Параметр запроса | Описание |
|---|---|---|
signedResource |
sr |
Обязательно. Укажите f , является ли общий ресурс файлом. Это даёт доступ к содержимому и метаданным файла.Укажите s , является ли общий ресурс долей. Это даёт доступ к содержимому и метаданным любого файла в разделе, а также к списку каталогов и файлов в разделе. |
Задайте параметры запроса для переопределения заголовков ответов (только Blob Storage и Azure Files)
Чтобы определить значения для определенных заголовков ответа, возвращаемых при использовании подписанного URL-адреса в запросе, можно указать заголовки ответа в параметрах запроса. Эта функция поддерживается с версии 2013-08-15 для Blob Storage и версии 2015-02-21 для Azure Files. Подписи общего доступа, использующие эту функцию, должны включать параметры, sv установленные до 2013-08-15 или позже для Blob Storage, или для 2015-02-21 Azure Files.
Заголовки ответов и соответствующие параметры запроса приведены в следующей таблице:
| Имя заголовка ответа | Соответствующий параметр запроса SAS |
|---|---|
Cache-Control |
rscc |
Content-Disposition |
rscd |
Content-Encoding |
rsce |
Content-Language |
rscl |
Content-Type |
rsct |
Например, если указать rsct=binary параметр запроса на подписи общего доступа, созданной с версии 2013-08-15 или выше, Content-Type заголовок ответа устанавливается на binary. Это значение переопределяет Content-Type значение заголовка, хранящееся для blob для запроса, использующего только эту подпись общего доступа.
Если вы создаёте сигнатуру общего доступа, которая указывает заголовки ответа как параметры запроса, вы должны включить их в строку от подписи к знаку, используемую для построения строки подписи. Для получения дополнительной информации см. раздел «Построить строку подписи» позже в этой статье. Для дополнительных примеров см. примеры Service SAS.
Укажите имя таблицы (только хранилище таблиц)
Поле tableName указывает название таблицы для совместного использования.
| Имя поля | Параметр запроса | Описание |
|---|---|---|
tableName |
tn |
Обязательно. Название стола, которым можно поделиться. |
Укажите политику доступа
Раздел политики доступа в URI указывает период времени, в течение которого общая подпись доступа действительна, и какие права будут предоставлены пользователю. Части URI, составляющие политику доступа, описаны в следующей таблице:
| Имя поля | Параметр запроса | Описание |
|---|---|---|
signedStart |
st |
Необязательно. Время, когда подпись общего доступа становится допустимой, выраженная в одном из принятых форматов ISO 8601 UTC. Если этот параметр отсутствует, в качестве старта используется текущее время UTC. В версиях, выпущенных раньше 12.02.2012, интервал между signedStart и signedExpiry не может превышать один час, если не используется полис контейнера. Для получения дополнительной информации о принятых форматах UTC см. значения даты/времени формата. |
signedExpiry |
se |
Обязательно. Время, когда подпись общего доступа становится недопустимой, выраженная в одном из принятых форматов ISO 8601 UTC. Вы должны исключить это поле, если оно указано в соответствующей политике сохранённого доступа. Для получения дополнительной информации о принятых форматах UTC см. значения даты/времени формата. |
signedPermissions
1 |
sp |
Обязательно. Права, связанные с подписью общего доступа. Пользователь ограничен операциями, разрешёнными разрешениями. Вы должны исключить это поле, если оно указано в соответствующей политике сохранённого доступа. |
startPk
2startRk
2 |
spksrk |
Только для хранения за столом. Необязательно, но startPk обязательно должно сопровождать startRk. Минимальные ключи разделов и строк, доступные с помощью этой общей подписи доступа. Ключевые ценности — инклюзивные. Если их опустить, нижнюю границу на сущностях таблицы, к которым можно получить доступ, не останется. |
endPk
2endRk
2 |
epkerk |
Только для хранения за столом. Необязательно, но endPk обязательно должно сопровождать endRk. Максимальное количество клавиш разделов и строк, доступных с помощью этой общей подписи доступа. Ключевые ценности — инклюзивные. Если их опустить, верхняя граница сущностей таблицы, к которой можно получить доступ, не будет. |
1 Это signedPermissions поле обязательно указано в URI, если оно не указано в политике сохранённого доступа.
2startPkПоля , startRk, endPkи endRk могут быть заданы только на ресурсах хранения таблиц.
Указание разрешений
Права, указанные для signedPermissions поля (sp) на токене SAS, указывают, какие операции клиент может выполнять над ресурсом.
Вы можете комбинировать разрешения, чтобы клиент мог выполнять несколько операций с одним и тем же SAS. При создании SAS необходимо включить разрешения в следующем порядке:
racwdxltmeop
Примеры допустимых параметров разрешений для контейнера включают rw, rd, rl, wd, wlи rl. Примеры недопустимых параметров включают wr, dr, lrи dw. Нельзя указывать обозначение разрешения более одного раза.
Сервис SAS не может предоставить доступ к определённым операциям:
- Контейнеры, очереди и таблицы нельзя создавать, удалять или перечислять.
- Метаданные и свойства контейнера не могут быть прочитаны или записаны.
- Очереди нельзя очистить, и их метаданные нельзя записать.
- Контейнеры не могут быть арендованы.
Чтобы создать SAS, предоставляющий доступ к этим операциям, используйте SAS учетной записи. Дополнительные сведения см. в статье СозданиеSAS учетной записи.
Это важно
Подписанные URL-адреса — это ключи, предоставляющие разрешения ресурсам хранилища, и их следует защищать так же, как и ключ учетной записи. Выполняйте операции, использующие сигнатуры общего доступа только через HTTPS-соединение, и распространяйте URI подписей общего доступа только на защищённом соединении, таком как HTTPS.
Поддерживаемые права доступа для каждого типа ресурсов описаны в следующих разделах.
Разрешения для каталога, контейнера или blob
Разрешения, поддерживаемые для каждого типа ресурса, описаны в следующей таблице.
| Разрешение | Символ URI | Ресурс | Поддержка версий | Разрешенные операции |
|---|---|---|---|---|
| Читайте | р | Контейнер Directory блоб |
Все | Читайте содержимое, список блокировок, свойства и метаданные любого blob в контейнере или каталоге. Используйте большой двоичный объект в качестве источника операции копирования. |
| Добавь | a | Контейнер Directory блоб |
Все | Добавьте блок в дополняющий двоичный объект. |
| Create | c | Контейнер Directory блоб |
Все | Создание нового большого двоичного объекта, моментального снимка большого двоичного объекта или копирование большого двоичного объекта в новый большой двоичный объект. |
| Напишите | w | Контейнер Directory блоб |
Все | Создавайте или пишите контент, свойства, метаданные или блок-лист. Моментальный снимок или аренда блоба. Измените размер большого двоичного объекта (только для страничного большого двоичного объекта). Используйте объект BLOB как место назначения копирования. |
| Удалить | d | Контейнер Directory блоб |
Все | Удалить BLOB. Для версии 2017-07-29 и более поздних версий разрешение delete также позволяет нарушить аренду большого двоичного объекта. Дополнительные сведения см. в операции аренды BLOB-объектов. |
| Удалить версию | x | Контейнер блоб |
2019-12-12 и более поздних версий | Удалите версию BLOB. |
| Безвозвратное удаление | и | блоб | 2020-02-10 и более поздних версий | Окончательно удалите моментальный снимок или версию объекта BLOB. |
| List | l | Контейнер Directory |
Все | Вывод списка больших двоичных объектов, не рекурсивно. |
| Метки | т | блоб | 2019-12-12 и более поздних версий | Чтение или запись тегов в большом двоичном объекте. |
| Найти | f | Контейнер | 2019-12-12 и более поздних версий | Найдите пятна с индексными тегами. |
| Move | m | Контейнер Directory блоб |
2020-02-10 и более поздних версий | Переместите blob или каталог с его содержимым в новое расположение. Эта операция может быть ограничена владельцем дочернего большого двоичного объекта, каталога или родительского каталога, если параметр saoid включен в маркер SAS, а липкий бит установлен в родительском каталоге. |
| выполнить | e | Контейнер Directory блоб |
2020-02-10 и более поздних версий | Получите системные свойства и, если иерархическое пространство имен включено для учетной записи хранения, получите ACL POSIX большого двоичного объекта. Если иерархическое пространство имен включено, и вызывающий объект является владельцем большого двоичного объекта, это разрешение предоставляет возможность задавать собственные группы, разрешения POSIX и ACL POSIX большого двоичного объекта. не позволяет звонящему читать пользовательские метаданные. |
| Владение | o | Контейнер Directory блоб |
2020-02-10 и более поздних версий | Когда иерархическое пространство имён включено, это разрешение позволяет вызывающему установить владельца или группу владельцев, либо выступать в роли владельца при переименовании или удалении каталога или blob в каталоге, где установлен прикреплённый бит. |
| Разрешения | п | Контейнер Directory блоб |
2020-02-10 и более поздних версий | Если иерархическое пространство имен включено, это разрешение позволяет вызывающей стороне задавать разрешения и списки ACL POSIX для каталогов и больших двоичных объектов. |
| Настройка политики неизменяемости | и | Контейнер блоб |
2020-06-12 и более поздних версий | Задайте или удалите политику неизменяемости или юридическое удержание для блоба. |
Права на файл
| Разрешение | Символ URI | Разрешенные операции |
|---|---|---|
| Читайте | р | Читайте содержимое, свойства, метаданные. Используйте файл как источник операции копирования. |
| Create | c | Создайте новый файл или скопируйте его в новый. |
| Напишите | w | Создавайте или пишите контент, свойства, метаданные. Уменьшите размер файла. Используйте файл как пункт назначения операции копирования. |
| Удалить | d | Удалите файл. |
Разрешения на использование
| Разрешение | Символ URI | Разрешенные операции |
|---|---|---|
| Читайте | р | Читайте содержимое, свойства или метаданные любого файла в общем разделе. Используйте любой файл в разделе как источник операции копирования. |
| Create | c | Создайте новый файл в общей библиотеке или скопируйте его в новый файл в разделе. |
| Напишите | w | Для любого файла в разделе создавайте или пишите контент, свойства или метаданные. Уменьшите размер файла. Используйте файл как пункт назначения операции копирования. Примечание: вы не можете предоставить разрешения на чтение или запись свойств или метаданных с помощью сервиса SAS. Используйте аккаунт SAS вместо этого. |
| Удалить | d | Удалите любой файл из общего доступа. Примечание: вы не можете предоставить разрешения на удаление share, используя сервис SAS. Используйте аккаунт SAS вместо этого. |
| List | l | Перечислите файлы и каталоги в разделе. |
Разрешения для очереди
| Разрешение | Символ URI | Разрешенные операции |
|---|---|---|
| Читайте | р | Читайте метаданные и свойства, включая количество сообщений. Просматривайте сообщения. |
| Добавь | a | Добавляйте сообщения в очередь. |
| Обновление | u | Обновляйте сообщения в очереди. Примечание: используйте разрешение Process с Update, чтобы сначала получить сообщение о необходимости обновления. |
| Процедура | п | Получайте и удаляйте сообщения из очереди. |
Разрешения для таблицы
| Разрешение | Символ URI | Разрешенные операции |
|---|---|---|
| Запрос | р | Получайте сущности и запрашивайте сущности. |
| Добавь | a | Добавляйте сущности. Примечание: для операций upsert необходимы права на добавление и обновление. |
| Обновление | u | Обновить сущности. Примечание: для операций upsert необходимы права на добавление и обновление. |
| Удалить | d | Удалить сущности. |
Указание IP-адреса или диапазона IP-адресов
По состоянию на версию 2015-04-05 дополнительное signedIp поле (sip) указывает публичный IP-адрес или ряд публичных IP-адресов для приема запросов. Если IP-адрес, из которого создается запрос, не соответствует диапазону IP-адресов или диапазону адресов, указанному в маркере SAS, запрос не авторизован. Поддерживаются только IPv4-адреса.
Когда вы указываете диапазон IP-адресов, обратите внимание, что диапазон является инклюзивным. Например, указание sip=198.51.100.0 или sip=198.51.100.10-198.51.100.20 в SAS ограничивает запрос на эти IP-адреса.
В следующей таблице описывается, стоит ли включать поле signedIp в токен SAS для определённого сценария, исходя из клиентской среды и расположения аккаунта хранения.
| Клиентская среда | Расположение учетной записи хранения | Recommendation |
|---|---|---|
| Клиент, работающий в Azure | В том же регионе, что и клиент | SAS, предоставленный клиенту в этом сценарии, не должен включать исходящий IP-адрес для поля signedIp. Запросы, осуществляемые из одного региона, которые используют SAS с указанным исходящим IP-адресом, завершаются ошибкой.Вместо этого используйте виртуальную сеть Azure для управления ограничениями безопасности сети. Запросы к службе хранилища Azure из одного региона всегда выполняются по частному IP-адресу. Дополнительные сведения см. в статье Настройка брандмауэров службы хранилища Azure и виртуальных сетей. |
| Клиент, работающий в Azure | В другом регионе от клиента | SAS, предоставляемый клиенту в данном случае, может содержать публичный IP-адрес или диапазон адресов для поля signedIp . Запрос, осуществляемый в SAS, должен исходить с указанного IP-адреса или диапазона адресов. |
| Клиент, работающий локально или в другой облачной среде | В любом регионе Azure | SAS, предоставляемый клиенту в данном случае, может содержать публичный IP-адрес или диапазон адресов для поля signedIp . Запрос, осуществляемый в SAS, должен исходить с указанного IP-адреса или диапазона адресов.Если запрос проходит через прокси-сервер или шлюз, укажите общедоступный исходящий IP-адрес этого прокси-сервера или шлюза для поля signedIp. |
Указание протокола HTTP
По состоянию на версию 2015-04-05 поле option signedProtocol (spr) указывает протокол, разрешённый для запроса, сделанного через SAS. Возможные значения : HTTPS и HTTP (https,http) или только HTTPS (https). Значение по умолчанию — https,http. Обратите внимание, что только HTTP не является разрешённым значением.
Укажите диапазоны доступа к таблице
Поля startPk, startRk, endPkи endRk определяют ряд сущностей таблицы, связанных с общей подписью доступа. Запросы к таблице возвращают только результаты, находящиеся в пределах диапазона, и попытки использовать подпись общего доступа для добавления, обновления или удаления сущностей вне этого диапазона будут неудачными.
Если startPk равно endPk, подпись общего доступа авторизирует доступ к сущностям только в одном разделе таблицы.
Если startPk равно endPk и startRk равно endRk, подпись общего доступа может получить доступ только к одной сущности в одном разделе.
Чтобы понять, как эти поля ограничивают доступ к сущностям в таблице, обратитесь к следующей таблице:
| Действующие области | Область действия ограничения |
|---|---|
startPk |
partitionKey >= startPk |
endPk |
partitionKey <= endPk |
startPk, startRk |
(partitionKey >startPk) || (partitionKey == startPk && rowKey >= startRk) |
endPk, endRk |
(partitionKey <endPk) || (partitionKey == endPk && rowKey <= endRk) |
Указание глубины каталога
Когда signedResource поле указывает каталог (sr=d), необходимо также указать signedDirectoryDepth поле (sdd) для обозначения количества подкаталогов в корневом каталоге. Значение поля sdd должно быть неотрицательное целое число.
Например, корневой каталог https://{account}.blob.core.windows.net/{container}/ имеет глубину 0. Каждая подкаталога в корневом каталоге добавляется к глубине на 1. Каталог https://{account}.blob.core.windows.net/{container}/d1/d2 имеет глубину 2.
Это поле поддерживается с версией 2020-02-10 или более позднее.
Укажите подписанный идентификатор
Когда вы указываете поле signedIdentifier в URI, вы связываете указанную подпись общего доступа с соответствующей политикой сохранённого доступа. Политика сохранённого доступа обеспечивает дополнительный контроль над одной или несколькими подписями общего доступа, включая возможность отзыва подписи при необходимости. Каждый контейнер, очередь, таблица или общий ресурс может содержать до пяти сохранённых политик доступа.
В следующей таблице описано, как обращаться к подписанному идентификатору на URI:
| Имя поля | Параметр запроса | Описание |
|---|---|---|
signedIdentifier |
si |
Необязательно. Уникальное значение до 64 символов, коррелирующее с политикой доступа, указанной для контейнера, очереди или таблицы. |
Политика сохранённого доступа включает подписанный идентификатор — значение до 64 символов, уникальное внутри ресурса. Вы можете указать значение этого подписанного идентификатора для signedidentifier поля в URI для подписи общего доступа. Когда вы указываете подписанный идентификатор на URI, вы связываете подпись с политикой сохранённого доступа. Чтобы установить политику доступа на уровне контейнера с помощью REST API, см. раздел «Делегат доступа с общей подписью доступа».
Указание области шифрования
Используя signedEncryptionScope поле на URI, можно указать область шифрования, которую может использовать клиентское приложение. Он обеспечивает серверное шифрование с указанным областью шифрования при загрузке blob (PUT) с помощью токена SAS. GET и HEAD не будут ограничены и выполняются как раньше.
Следующая таблица описывает, как обращаться к знаковому диапазону шифрования на URI:
| Имя поля | Параметр запроса | Описание |
|---|---|---|
signedEncryptionScope |
ses |
Необязательно. Указывает область шифрования, используемую для шифрования содержимого запроса. |
Это поле поддерживается с версией 2020-12-06 и более поздней. Если вы добавите версию ses с предыдущей поддерживаемой, сервис возвращает код ответа на ошибку 403 (Запрещён).
Если вы установите область шифрования по умолчанию для контейнера или файловой системы, ses параметр запроса будет учитывать политику шифрования контейнера. Если между параметром запроса ses и заголовком x-ms-default-encryption-scope имеется несоответствие, а заголовок x-ms-deny-encryption-scope-override имеет значение true, служба возвращает код ответа на ошибку 403 (запрещено).
Когда вы указываете x-ms-encryption-scope заголовок и ses параметр запроса в запросе PUT, сервис возвращает код ответа на ошибку 400 (Плохой запрос), если возникает несоответствие.
Указание подписи
Вы используете подпись в URI для авторизации запроса, сделанного с помощью подписи общего доступа. Azure Storage использует схему авторизации Shared Key для авторизации сервиса SAS.
Следующая таблица описывает, как задать подпись на URI:
| Имя поля | Параметр запроса | Описание |
|---|---|---|
signature |
sig |
Строка-знак — это уникальная строка, построенная из полей и которая должна быть проверена для авторизации запроса. Подпись — это код аутентификации сообщений на основе хэша (HMAC), который вы вычисляете по строке к знаку и ключу с помощью алгоритма SHA256, а затем кодируете с помощью кодирования Base64. |
Постройте строку подписи
Чтобы построить строку подписи общего доступа, сначала постройте строку в знак из полей, составляющих запрос, закодуйте строку как UTF-8, а затем вычислите подпись с помощью алгоритма HMAC-SHA256. Поля, включенные в вход, должны быть декодированы ПО URL-адресу.
Версия 2020-12-06 и более поздних версий
Версия 2020-12-06 добавляет поддержку поля знакового шифрования. Для построения строк-to-sign для ресурсов Blob Storage используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n" +
signedSnapshotTime + "\n" +
signedEncryptionScope + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Версия 2018-11-09 и более поздние
Версия 2018-11-09 добавляет поддержку полей времени подписанного ресурса и подписанного снимка blob. Эти поля должны быть включены в систему string-to-sign. Для построения строк-to-sign для ресурсов Blob Storage используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n"
signedSnapshotTime + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Версия 2015-04-05 и более поздние
Версия 2015-04-05 добавляет поддержку подписанного IP и подписанных протокольных полей. Эти поля должны быть включены в систему string-to-sign. Для построения строки в знак для ресурсов Blob Storage или Azure Files используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Для построения строк-to-sign для ресурсов хранения таблиц используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
startingPartitionKey + "\n"
startingRowKey + "\n"
endingPartitionKey + "\n"
endingRowKey
Для построения строк-to-sign для ресурсов хранилища в очереди используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion
Версии 2013-08-15 по 2015-02-21
Чтобы построить строку для ресурсов Blob Storage или Azure Files с помощью версий 2013-08-15 по 2015-02-21, используйте следующий формат. Для Azure Files поддерживается SAS с версии 2015-02-21.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Для построения строки в знак таблицы используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
startPk + "\n" +
startRk + "\n" +
endPk + "\n" +
endRk
Для построения строки в знак очереди используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
Версия 2012-02-12
Для построения строк-to-sign для ресурсов Blob Storage для версии 2012-02-12 используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
Версии, ранее 12.02.2012
Для построения строк-to-sign для ресурсов Blob Storage для версий, более ранних за 12.02.2012, используйте следующий формат:
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier
Когда вы строите строку для подписания, имейте в виду следующее:
Если поле необязательно и не предусмотрено в запросе, укажите пустую строку для этого поля. Не забудьте включить новый символ (\n) после пустой строки.
String-to-sign для таблицы должны включать дополнительные параметры, даже если это пустые строки.
signedpermissionЧасть строки должна содержать обозначения разрешений в фиксированном порядке, специфичном для каждого типа ресурса. Любая комбинация этих разрешений допустима, но порядок писем должен совпадать с порядком в следующей таблице.Тип ресурса Порядок разрешений блоб RACWD Контейнер racwdl Очередь raup Файл rcwd Поделиться rcwdl таблица Рауд Например, примеры допустимых настроек разрешений для контейнера включают
rw,rd,rl,wd,wl, иrl. Примеры недопустимых параметров включаютwr,dr,lrиdw. Указание назначения разрешений несколько раз не разрешено.Укажите значение для части
signedIdentifierстроки, если вы связываете запрос с политикой сохранённого доступа.Подпись общего доступа, указывающая версию сервиса хранения, выпущенную раньше 2012-02-12, может использовать только blob или контейнер, и должна опускать
signedVersionсимвол newline перед ним.canonicalizedResourceчасть строки является каноническим путем к подписанному ресурсу. Он должен содержать имя сервиса (Blob Storage, Table Storage, Queue Storage или Azure Files) для версии 2015-02-21 и более поздне, имя аккаунта хранения и имя ресурса, при этом должен быть декодирован по URL. Названия blob должны включать контейнер blob. Имена таблиц должны быть строчными.
Канонизированная строка ресурса для контейнера, очереди, таблицы или общего файла должна опускать слэш (/) для SAS, предоставляющего доступ к этому объекту.
В следующих примерах показано, как создать canonicalizedResource часть строки в зависимости от типа ресурса.
Контейнеры
Для версии 2015-02-21 и более позднее:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
Для версий до 21.02.2015:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"
Blobs
Для версии 2015-02-21 и более позднее:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
Для версий до 21.02.2015:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"
Файловые ресурсы
URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"
Files
URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"
Queues
Для версии 2015-02-21 и более позднее:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/queue/myaccount/thumbnails"
Для версий до 21.02.2015:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/myaccount/thumbnails"
Tables
Если подписанный ресурс является таблицей, убедитесь, что название таблицы строчным в канонизированном формате.
Для версии 2015-02-21 и более позднее:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/table/myaccount/employees"
Для версий до 21.02.2015:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/myaccount/employees"
Срок жизни и отмена подписи общего доступа
Подписи общего доступа предоставляют пользователям права на доступ к ресурсам хранения аккаунтов. Когда вы планируете использовать SAS, подумайте о сроке действия SAS и о том, может ли ваше приложение потребовать отмену прав доступа при определённых обстоятельствах.
Ad hoc политика SAS против сохранённого доступа
Сервисный SAS может иметь одну из двух форм:
Ad hoc SAS: Когда вы создаёте ad hoc SAS, время запуска, срок действия и разрешения для SAS указаны в URI SAS (или подразумеваются, если время запуска опущено). SAS любого типа может быть одноразовым.
Вы можете управлять сроком службы ad hoc SAS, используя поле
signedExpiry. Если вы хотите продолжать предоставлять клиенту доступ к ресурсу после истечения срока действия, необходимо выпустить новую подпись. Мы рекомендуем ограничивать срок действия подписи с общим доступом коротким. До версии 2012-02-12 подпись общего доступа, не связанная с политикой сохранённого доступа, не могла иметь активный период, превышающий один час.SAS с политикой сохранённого доступа: В контейнере ресурсов определяется политика доступа к хранилищу, который может быть blob-контейнером, таблицей, очередью или файловым ресурсом. Вы можете использовать политику сохранённого доступа для управления ограничениями для одной или нескольких подписей общего доступа. Когда вы связываете SAS с сохранённой политикой доступа, SAS наследует ограничения (то есть время запуска, срок действия и разрешения), которые определяются для политики сохранённого доступа.
Политика сохранённого доступа представлена полем
signedIdentifierна URI. Политика сохранённого доступа обеспечивает дополнительный контроль над одной или несколькими подписями общего доступа, включая возможность отзыва подписи при необходимости.
Отменить SAS
Поскольку SAS URI — это URL, любой, кто получит SAS, может им пользоваться, независимо от того, кто его создал. Если SAS публикуется публично, им может пользоваться любой человек в мире. SAS предоставляет доступ к ресурсам каждому, кто ими владеет, пока не произойдёт одно из четырёх вещей:
Срок истечения, указанный в ad hoc SAS, достигнут.
Время истечения, указанное в политике сохраненного доступа, на которую ссылается SAS, достигается, если ссылка на сохраненную политику доступа и политика доступа указывает время истечения.
Срок истечения можно достичь либо из-за истечения интервала, либо потому, что вы изменили политику сохранённого доступа, добавив срок действия в прошлом, что является одним из способов отменить SAS.
Политика сохранённого доступа, на которую ссылается SAS, удаляется, что аннулирует SAS. Если Azure Storage не может найти политику доступа, указанную в подписи общего доступа, клиент не сможет получить доступ к ресурсу, указанному URI.
Если вы заново создаёте политику доступа с точно таким же именем, как и удалённая политика, все существующие токены SAS снова станут действительными согласно разрешениям, связанным с этой политикой доступа. Это предполагает, что срок годности SAS ещё не истёк. Если вы собираетесь отменить SAS, обязательно используйте другое имя при повторном создании политики доступа с истечением срока действия в будущем.
Ключ аккаунта, использованный для создания SAS, генерируется. Восстановление ключа учетной записи приводит к тому, что все компоненты приложения, использующие этот ключ, не авторизуются, пока не будут обновлены для использования либо другого действительного ключа аккаунта, либо вновь восстановленного ключа аккаунта. Восстановление ключа аккаунта — единственный способ сразу отменить ad hoc SAS.
Это важно
URI с общей подписью доступа связана с ключом аккаунта, используемым для создания подписи, и с соответствующей политикой сохранённого доступа, если это применимо. Если политика сохраненного доступа не указана, единственный способ отменить подпись общего доступа — изменить ключ аккаунта.
В качестве лучшей практики мы рекомендуем использовать политику сохранённого доступа с сервисом SAS. Если вы решите не использовать политику сохранённого доступа, обязательно сократите период, в течение которого ad hoc SAS действует. Для получения дополнительной информации о связи сервиса SAS с политикой сохранённого доступа см. раздел «Определить политику сохранённого доступа».
Пример SAS службы
Следующий пример показывает blob URI с добавленным токеном сервиса SAS. Токен сервиса SAS предоставляет разрешения на чтение и запись blob.
https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&sip=198.51.100.10-198.51.100.20&spr=https&sv=2022-11-02&sr=b&sig=<signature>
Каждая часть URI описана в следующей таблице:
| Имя | Часть SAS | Описание |
|---|---|---|
| Универсальный код ресурса (URI) ресурса | https://myaccount.blob.core.windows.net/sascontainer/blob1.txt |
Адрес большого двоичного объекта. Настоятельно рекомендуется использовать ПРОТОКОЛ HTTPS. |
| Разделитель | ? |
Разделитель, предшествующий строке запроса. Разделитель не является частью маркера SAS. |
| Разрешения | sp=rw |
Разрешения, предоставленные SAS, включают чтение (r) и запись (w). |
| Время запуска | st=2023-05-24T01:13:55Z |
Указано в формате UTC. Если вы хотите, чтобы SAS был действительным немедленно, опустите время начала. |
| Время окончания срока действия | se=2023-05-24T09:13:55Z |
Указано в формате UTC. |
| IP range | sip=198.51.100.10-198.51.100.20 |
Диапазон IP-адресов, из которых будет приниматься запрос. |
| Протокол | spr=https |
Разрешены только запросы, использующие ПРОТОКОЛ HTTPS. |
| Azure Storage version | sv=2023-05-24 |
Для службы хранилища Azure версии 2012-02-12 и более поздних версий этот параметр указывает версию, используемую. |
| Ресурс | sr=b |
Ресурс — это большой двоичный объект. |
| Signature | sig=<signature> |
Используется для авторизации доступа к большому двоичному объекту. Сигнатура — это HMAC, вычисленный по протоколу "строка — подпись" с помощью алгоритма SHA256, а затем закодированный с помощью кодировки Base64. |