Create a service SAS (Создание SAS на уровне службы)

Важно!

Для оптимальной безопасности корпорация Майкрософт рекомендует по возможности использовать Microsoft Entra ID с управляемыми удостоверениями для авторизации запросов к blob-объектам, очередям и табличным данным. Авторизация с помощью Microsoft Entra ID и управляемых удостоверений обеспечивает более высокий уровень безопасности и простоту использования по сравнению с авторизацией с общим ключом. Дополнительные сведения см. в статье Авторизация с помощью Microsoft Entra ID. Дополнительные сведения об управляемых удостоверениях см. в статье Что такое управляемые удостоверения для ресурсов Azure.

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

Для сценариев, в которых используются подписанные URL-адреса (SAS), корпорация Майкрософт рекомендует использовать SAS для делегирования пользователей. SAS для делегирования пользователей защищен с помощью Microsoft Entra учетных данных вместо ключа учетной записи. Дополнительные сведения о подписанных URL-адресах см. в статье Create SAS делегирования пользователей.

Подписанный URL-адрес службы (SAS) делегирует доступ к ресурсу только в одной из служб хранилища: Хранилище BLOB-объектов Azure, хранилище очередей Azure, хранилище таблиц Azure или Файлы Azure. Универсальный код ресурса (URI) для SAS уровня службы состоит из URI ресурса, для которого SAS будет делегировать доступ, а затем маркера SAS.

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

SAS также может указать поддерживаемый IP-адрес или диапазон адресов, из которых могут исходить запросы, поддерживаемый протокол, с помощью которого можно выполнить запрос, или необязательный идентификатор политики доступа, связанный с запросом.

Наконец, каждый маркер SAS содержит подпись.

Внимание!

Подписанные URL-адреса — это ключи, которые предоставляют разрешения на доступ к ресурсам хранилища, и их следует защищать так же, как и ключ учетной записи. Важно обеспечить для SAS защиту от вредоносного или непреднамеренного использования. Распространять SAS нужно с осторожность и следует подготовить план для отзыва скомпрометированного SAS. Операции, использующие подписанные URL-адреса, должны выполняться только через HTTPS-подключение, а URI SAS должны распространяться только по безопасному подключению, например HTTPS.

Авторизация SAS службы

Вы защищаете SAS учетной записи с помощью ключа учетной записи хранения. При создании SAS учетной записи клиентское приложение должно обладать ключом учетной записи.

Чтобы использовать Microsoft Entra учетные данные для защиты SAS для контейнера или большого двоичного объекта, создайте SAS для делегирования пользователей.

Поддержка подписанного URL-адреса службы для доступа к каталогу по областям

SAS службы поддерживает область каталогов (sr=d), если версия авторизации (sv) — 2020-02-10 или более поздняя и включено иерархическое пространство имен. Семантика каталога область (sr=d) аналогична семантике для контейнера область (sr=c), за исключением того, что доступ ограничен каталогом и любыми файлами и подкаталогами в нем. Если sr=d указан параметр запроса, sdd также является обязательным.

Формат преобразования строки в знак для авторизации версии 2020-02-10 не изменился.

Создание SAS службы

На следующем рисунке представлены части универсального кода ресурса (URI) подписанного URL-адреса. Необходимые части отображаются оранжевым цветом. Поля, составляющие маркер SAS, описаны в последующих разделах.

Схема элементов параметров URL-адреса подписанного URL-адреса.

В следующих разделах описывается, как указать параметры, составляющие маркер SAS службы.

signedVersion Укажите поле

Поле signedVersion (sv) содержит версию службы подписанного URL-адреса. Это значение указывает версию авторизации с общим ключом, которая используется данной подписанным URL-адресом (в signature поле ). Значение также указывает версию службы для запросов, выполняемых с помощью этой подписанной URL-адреса.

Сведения о том, какая версия используется при выполнении запросов через подписанный URL-адрес, см. в статье Управление версиями для служб хранилища Azure.

Сведения о том, как этот параметр влияет на авторизацию запросов, выполненных с помощью подписанного URL-адреса, см. в разделе Делегирование доступа с помощью подписанного URL-адреса.

Имя поля Параметр запроса Описание
signedVersion sv Обязательный. Поддерживается в версии 2012-02-12 и более поздних версиях. Версия службы хранилища, используемая для авторизации и обработки запросов, выполняемых с помощью этой подписанной URL-адреса. Дополнительные сведения см. в статье Управление версиями для служб хранилища Azure.

Определение версии устаревшего запроса SAS

В устаревших сценариях, где signedVersion не используется, Хранилище BLOB-объектов применяет правила для определения версии. Дополнительные сведения об этих правилах см. в статье Управление версиями для служб хранилища Azure.

Важно!

Клиентское программное обеспечение может столкнуться с непредвиденным поведением протокола при использовании универсального кода ресурса (URI) подписанного URL-адреса, использующего версию службы хранилища, более новую, чем клиентское программное обеспечение. Код, создающий URI подписанного URL-адреса, должен полагаться на версии, понятные клиентскому программному обеспечению, которое отправляет запросы на обслуживание хранилища.

Укажите подписанный ресурс (только для хранилища BLOB-объектов)

signedResource Обязательное поле (sr) указывает, какие ресурсы доступны через подписанный URL-адрес. В следующей таблице описывается, как ссылаться на ресурс большого двоичного объекта или контейнера в маркере SAS.

Ресурс Значение параметра Поддерживаемые версии Описание
BLOB-объект b Все Предоставляет доступ к содержимому и метаданным большого двоичного объекта.
Версия BLOB-объекта Bv 09.11.2018 и более поздние версии Предоставляет доступ к содержимому и метаданным версии BLOB-объекта, но не к базовому BLOB-объекту.
Моментальный снимок большого двоичного объекта bs 09.11.2018 и более поздние версии Предоставляет доступ к содержимому и метаданным snapshot большого двоичного объекта, но не к базовому большому двоичному объекту.
Контейнер с Все Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в контейнере, а также к списку больших двоичных объектов в контейнере.
Directory d 10.02.2020 и более поздние версии Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в каталоге, а также к списку больших двоичных объектов в каталоге в учетной записи хранения с включенным иерархическим пространством имен. Если для signedResource поля указан каталог, signedDirectoryDepth параметр (sdd) также является обязательным. Каталог всегда вложен в контейнер.

Указание подписанного ресурса (Файлы Azure)

SAS поддерживается для Файлы Azure версии 2015-02-21 и более поздних версий.

Поле signedResource указывает, доступ к каким ресурсам можно получить с использованием подписанного URL-адреса. В следующей таблице описывается, как ссылаться на файл или ресурс общего ресурса в URI.

Имя поля Параметр запроса Описание
signedResource sr Обязательный.

Укажите f , является ли общий ресурс файлом. При этом предоставляется доступ к содержимому и метаданным файла.

Укажите s , является ли общий ресурс общим ресурсом. При этом предоставляется доступ к содержимому и метаданным любого файла в общей папке, а также к списку каталогов и файлов в общей папке.

Указание параметров запроса для переопределения заголовков ответов (только хранилище BLOB-объектов и Файлы Azure)

Чтобы определить значения для некоторых заголовков ответа, которые будут возвращены при использовании в запросе подписанного URL-адреса, заголовки ответа можно указать в параметрах запроса. Эта функция поддерживается начиная с версии 2013-08-15 для хранилища BLOB-объектов и версии 2015-02-21 для Файлы Azure. Подписанные url-адреса, использующие эту функцию, должны содержать sv параметр , который имеет значение 2013-08-15 или более позднюю версию для хранилища BLOB-объектов, а также значение или более позднюю версию 2015-02-21 для Файлы Azure.

Заголовки ответов и соответствующие параметры запроса перечислены в следующей таблице:

Имя заголовка ответа Соответствующий параметр запроса SAS
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Например, если указать rsct=binary параметр запроса в подписанном URL-адресе, созданном в версии 2013-08-15 или более поздней, Content-Type заголовок ответа будет установлен в binary. Это значение переопределяет Content-Type значение заголовка, хранящееся для большого двоичного объекта, для запроса, использующего только эту подписанный URL-адрес.

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

Укажите имя таблицы (только для хранилища таблиц)

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

Имя поля Параметр запроса Описание
tableName tn Обязательный. Имя таблицы, к которой требуется предоставить общий доступ.

Указание политики доступа

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

Имя поля Параметр запроса Описание
signedStart st Необязательный элемент. Время, когда подписанный URL-адрес становится действительным, выраженный в одном из принятых форматов ISO 8601 UTC. Если этот параметр опущен, в качестве времени начала используется текущее время в формате UTC.

В версиях, предшествующих 2012-02-12, длительность между signedStart и signedExpiry не может превышать один час, если не используется политика контейнеров. Дополнительные сведения о допустимых форматах UTC см. в разделе Форматирование значений даты и времени.
signedExpiry se Обязательный. Время, когда подписанный URL-адрес становится недействительным, выраженный в одном из принятых форматов ISO 8601 UTC. Это поле необходимо опустить, если оно было указано в связанной хранимой политике доступа. Дополнительные сведения о допустимых форматах UTC см. в разделе Форматирование значений даты и времени.
signedPermissions 1 sp Обязательный. Разрешения, связанные с подписанным URL-адресом. Пользователь ограничен операциями, разрешенными разрешениями. Это поле необходимо опустить, если оно было указано в связанной хранимой политике доступа.
startPk 2

startRk 2
spk

srk
Только хранилище таблиц.

Этот параметр не является обязательным, но значение startPk должно указываться вместе со значением startRk. Минимальные ключи секции и строк, доступные с помощью этой подписанной URL-адреса. Значение ключей указываются включительно. Если они опущены, для сущностей таблицы, к которым можно получить доступ, нет нижней границы.
endPk 2

endRk 2
epk

erk
Только хранилище таблиц.

Этот параметр не является обязательным, но значение endPk должно указываться вместе со значением endRk. Максимальное число ключей секций и строк, доступных с помощью этой подписанной URL-адреса. Значение ключей указываются включительно. Если они опущены, верхняя граница сущностей таблицы, к которым можно получить доступ, отсутствует.

1 Поле signedPermissions является обязательным для URI, если оно не указано в рамках хранимой политики доступа.
2 Поля startPk, startRk, endPkи endRk можно указать только для ресурсов хранилища таблиц.

Указание разрешений

Разрешения, указанные для signedPermissions поля (sp) маркера SAS, указывают, какие операции клиент может выполнять с ресурсом.

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

racwdxltmeop

Примеры допустимых параметров разрешений для контейнера: , , , , wlwd, и rl. rlrdrw Примеры недопустимых параметров: wr, dr, lrи dw. Вы не можете указать назначение разрешений более одного раза.

SAS службы не может предоставить доступ к определенным операциям:

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

Чтобы создать SAS, предоставляющий доступ к этим операциям, используйте SAS учетной записи. Дополнительные сведения см. в статье Создание SAS для учетной записи.

Важно!

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

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

Разрешения для каталога, контейнера или большого двоичного объекта

Разрешения, поддерживаемые для каждого типа ресурсов, описаны в следующей таблице:

Разрешение Символ URI Ресурс Поддерживаемые версии Разрешенные операции
Чтение r Контейнер
Каталог
BLOB-объект
Все Чтение содержимого, списка блокировок, свойств и метаданных любого большого двоичного объекта в контейнере или каталоге. Используйте большой двоичный объект в качестве источника операции копирования.
Добавить а Контейнер
Каталог
BLOB-объект
Все Добавление блока в добавочный BLOB-объект.
Создать с Контейнер
Каталог
BLOB-объект
Все Напишите новый BLOB-объект, snapshot большой двоичный объект или скопируйте его в новый BLOB-объект.
запись w Контейнер
Каталог
BLOB-объект
Все Create или запись содержимого, свойств, метаданных или списка блокировок. Создание моментального снимка или аренда большого двоичного объекта. Изменение размера большого двоичного объекта (только для страничных BLOB-объектов). Используйте большой двоичный объект в качестве места назначения операции копирования.
Удалить d Контейнер
Каталог
BLOB-объект
Все Удалить большой двоичный объект. Для версии 29.07.2017 и более поздних разрешение На удаление также позволяет нарушить аренду большого двоичного объекта. Дополнительные сведения см. в разделе Операция аренды BLOB-объектов .
Удалить версию x Контейнер
BLOB-объект
12.12.2019 и более поздние версии Удалите версию BLOB-объекта.
Безвозвратное удаление y BLOB-объект 10.02.2020 и более поздние версии Окончательное удаление большого двоичного объекта snapshot или версии.
Список l Контейнер
Каталог
Все Вывод списка больших двоичных объектов не рекурсивно.
Теги t BLOB-объект 12.12.2019 и более поздние версии Чтение или запись тегов в большом двоичном объекте.
Поиск f Контейнер 12.12.2019 и более поздние версии Поиск больших двоичных объектов с тегами индекса.
Move m Контейнер
Каталог
BLOB-объект
10.02.2020 и более поздние версии Перемещение большого двоичного объекта или каталога и его содержимого в новое расположение. При необходимости эта операция может быть ограничена владельцем дочернего большого двоичного объекта, каталога или родительского каталога, если saoid параметр включен в маркер SAS, а бит залипания задан в родительском каталоге.
Execute й Контейнер
Каталог
BLOB-объект
10.02.2020 и более поздние версии Получите системные свойства и, если иерархическое пространство имен включено для учетной записи хранения, получите список управления доступом POSIX большого двоичного объекта. Если иерархическое пространство имен включено, а вызывающий объект является владельцем большого двоичного объекта, это разрешение дает возможность задать группу владельцев, разрешения POSIX и список управления доступом POSIX для большого двоичного объекта. не позволяет вызывающему объекту считывать пользовательские метаданные.
владельца; o Контейнер
Каталог
BLOB-объект
10.02.2020 и более поздние версии Если иерархическое пространство имен включено, это разрешение позволяет вызывающей объекту задать владельца или группу владельцев или выступать в качестве владельца при переименовании или удалении каталога или большого двоичного объекта в каталоге, для которого задан бит липкий.
Разрешения p Контейнер
Каталог
BLOB-объект
10.02.2020 и более поздние версии Если иерархическое пространство имен включено, это разрешение позволяет вызывающей стороне задавать разрешения и списки управления доступом POSIX для каталогов и BLOB-объектов.
Настройка политики неизменяемости i Контейнер
BLOB-объект
12.06.2020 и более поздние версии Установите или удалите политику неизменяемости или удержание по юридическим причинам большого двоичного объекта.

Разрешения для файла

Разрешение Символ URI Разрешенные операции
Чтение r Чтение содержимого, свойств, метаданных. Используйте файл в качестве источника операции копирования.
Создать с Create новый файл или скопируйте его в новый файл.
запись w Create или запись содержимого, свойств, метаданных. Измените размер файла. Используйте файл в качестве места назначения операции копирования.
Удалить d Удаление файла.

Разрешения для общей папки

Разрешение Символ URI Разрешенные операции
Чтение r Чтение содержимого, свойств или метаданных любого файла в общей папке. Используйте любой файл в общей папке в качестве источника операции копирования.
Создать с Create новый файл в общей папке или скопируйте файл в новый файл в общей папке.
запись w Для любого файла в общей папке создайте или напишите содержимое, свойства или метаданные. Измените размер файла. Используйте файл в качестве назначения для операции копирования. Примечание. Вы не можете предоставить разрешения на чтение или запись свойств или метаданных общего ресурса с помощью SAS службы. Вместо этого используйте SAS учетной записи.
Удалить d Удалите любой файл в общей папке. Примечание. Вы не можете предоставить разрешения на удаление общей папки с помощью SAS службы. Вместо этого используйте SAS учетной записи.
Список l Вывод списка файлов и каталогов в общей папке.

Разрешения для очереди

Разрешение Символ URI Разрешенные операции
Чтение r Чтение метаданных и свойств, включая число сообщений. Выбор сообщений.
Добавить а Добавление сообщений в очередь.
Update u Обновление сообщений в очереди. Примечание. Используйте разрешение Процесс с обновлением, чтобы сначала получить сообщение, которое требуется обновить.
Процесс p Получение и удаление сообщений из очереди.

Разрешения для таблицы

Разрешение Символ URI Разрешенные операции
Запрос r Возврат сущностей и запрос сущностей.
Добавить а Добавление сущностей. Примечание. Для операций upsert требуются разрешения на добавление и обновление.
Update u Обновление сущностей Примечание. Для операций upsert требуются разрешения на добавление и обновление.
Удалить d Удаление сущностей.

Укажите IP-адрес или диапазон IP-адресов

Начиная с версии 2015-04-05 необязательное signedIp поле (sip) указывает общедоступный IP-адрес или диапазон общедоступных IP-адресов, с которых будут приниматься запросы. Если IP-адрес, с которого исходит запрос, не соответствует IP-адресу или диапазону адресов, указанным в маркере SAS, запрос не авторизован. Поддерживаются только IPv4-адреса.

При указании диапазона IP-адресов обратите внимание, что диапазон является инклюзивным. Например, при указании sip=168.1.5.65 или sip=168.1.5.60-168.1.5.70 в SAS запрос ограничивается этими IP-адресами.

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

Клиентская среда Расположение учетной записи хранения Рекомендация
Клиент, работающий в 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 необязательное signedProtocol поле (spr) указывает протокол, разрешенный для запроса, выполненного с помощью SAS. Параметр может иметь значение HTTPS и HTTP (https,http) или только HTTPS (https). Значение по умолчанию — https,http. Обратите внимание, что использовать только протокол HTTP нельзя.

Указание диапазонов доступа к таблицам

Поля startPk, startRk, endPkи endRk определяют диапазон сущностей таблицы, связанных с подписанным URL-адресом. Табличные запросы возвращают только результаты, которые находятся в диапазоне, и попытки использовать подписанный URL-адрес для добавления, обновления или удаления сущностей за пределами этого диапазона завершатся ошибкой.

Если startPk равно endPk, подписанный URL-адрес разрешает доступ к сущностям только в одной секции таблицы.

Если startPk равно endPk и startRk равно endRk, подписанный URL-адрес может получить доступ только к одной сущности в одной секции.

Чтобы понять, как эти поля ограничивают доступ к сущностям в таблице, см. следующую таблицу:

Имеющиеся поля Область ограничения
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) указанная подписанный URL-адрес связана с соответствующей хранимой политикой доступа. Хранимая политика доступа является дополнительным способом управления одной или несколькими подписанными URL-адресами, включая возможность отмены подписи при необходимости. Каждый контейнер, очередь, таблица или общий ресурс может иметь до пяти хранимых политик доступа.

В следующей таблице описано, как ссылаться на подписанный идентификатор в URI:

Имя поля Параметр запроса Описание
signedIdentifier si Необязательный элемент. Уникальное значение не более 64 символов, коррелирует с политикой доступа, указанной для контейнера, очереди или таблицы.

Хранимая политика доступа включает подписанный идентификатор, значение до 64 символов, уникальное в пределах ресурса. Вы можете указать значение этого подписанного идентификатора signedidentifier для поля в URI для подписанного URL-адреса. При указании подписанного идентификатора в URI подпись связывается с хранимой политикой доступа. Сведения о создании политики доступа на уровне контейнера с помощью REST API см. в статье Делегирование доступа с помощью подписанного URL-адреса.

Укажите область шифрования

С помощью 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-scopeses и параметра запроса в запросе PUT служба возвращает код ответа на ошибку 400 (недопустимый запрос) в случае несоответствия.

Указание сигнатуры

Часть URI сигнатуры используется для авторизации запроса, выполненного с помощью подписанного URL-адреса. Служба хранилища Azure использует схему авторизации с общим ключом для авторизации SAS службы.

В следующей таблице описано, как указать сигнатуру в URI:

Имя поля Параметр запроса Описание
signature sig Строка для знака — это уникальная строка, созданная на основе полей и требующая проверки для авторизации запроса. Сигнатура — это код проверки подлинности сообщения на основе хэша (HMAC), который вычисляется по ключу преобразования строки в знак с помощью алгоритма SHA256, а затем кодируется с помощью кодировки Base64.

Построение строки подписи

Чтобы создать строку подписи подписанного URL-адреса, сначала создайте строку для подписи из полей, составляющих запрос, закодируйте строку как UTF-8, а затем вычислить сигнатуру с помощью алгоритма HMAC-SHA256. Поля, включенные в строку для подписи, должны быть декодированы по URL-адресу.

Версия 2020-12-06 и более поздние версии

В версии 2020-12-06 добавлена поддержка подписанного область поля шифрования. Чтобы создать строку для подписывания для ресурсов хранилища BLOB-объектов, используйте следующий формат:

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" +  
Версия 2018-11-09 и более поздние версии

В версии 2018-11-09 добавлена поддержка подписанного ресурса и подписанного BLOB-объекта snapshot полей времени. Эти поля должны быть включены в строку для подписи. Чтобы создать строку для подписывания для ресурсов хранилища BLOB-объектов, используйте следующий формат:

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-адреса и подписанного протокола. Эти поля должны быть включены в строку для подписи. Чтобы создать строку для подписывания для хранилища BLOB-объектов или Файлы Azure ресурсов, используйте следующий формат:

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  

Чтобы создать строку для подписывания для ресурсов хранилища таблиц, используйте следующий формат:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               startingPartitionKey + "\n"  
               startingRowKey + "\n"  
               endingPartitionKey + "\n"  
               endingRowKey  
  

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

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion  
  
Версия от 15.08.2013 до 21.02.2015

Чтобы создать строку для подписывания для хранилища BLOB-объектов или Файлы Azure ресурсов с помощью версий от 2013-08-15 до 2015-02-21, используйте следующий формат. Для Файлы Azure 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 
Версия 12.02.2012

Чтобы создать строку для подписывания для ресурсов хранилища BLOB-объектов для версии 2012-02-12, используйте следующий формат:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion  
Версии, предшествующие 12.02.2012

Чтобы создать строку для подписывания для ресурсов Хранилища BLOB-объектов для версий, предшествующих 12.02.2012, используйте следующий формат:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier  
  

При создании подписываемой строки учитывайте следующее:

  • Если поле является необязательным и не входит в запрос, укажите для него пустую строку. После пустой строки обязательно укажите символ перевода строки (\n).

  • Преобразование строки в знак для таблицы должно включать дополнительные параметры, даже если они являются пустыми строками.

  • Часть signedpermission строки должна содержать обозначения разрешений в фиксированном порядке, который относится к каждому типу ресурсов. Любое сочетание этих разрешений приемлемо, но порядок букв разрешений должен соответствовать порядку, приведенному в следующей таблице.

    Тип ресурса Порядок разрешений
    BLOB-объект racwd
    Контейнер racwdl
    Очередь raup
    File rcwd
    Поделиться rcwdl
    Таблица raud

    Например, примеры допустимых параметров разрешений для контейнера: rw, rd, , rl, wd, wlи rl. Примеры недопустимых параметров: wr, dr, lrи dw. Указание назначения разрешений более одного раза не допускается.

  • Укажите значение для signedIdentifier части строки, если вы связываете запрос с хранимой политикой доступа.

  • Подписанный URL-адрес, указывающий версию службы хранилища, которая является более ранней, чем 2012-02-12, может совместно использовать только большой двоичный объект или контейнер. Кроме того, перед ним необходимо пропустить signedVersion и символ новой строки.

  • Часть canonicalizedResource строки является каноническим путем к подписанному ресурсу. Оно должно включать имя службы (хранилище BLOB-объектов, хранилище таблиц, хранилище очередей или Файлы Azure) версии 2015-02-21 или более поздней версии, имя учетной записи хранения и имя ресурса, а также должно быть декодировано по URL-адресу. Имена больших двоичных объектов должны включать контейнер такого объекта. Имена таблиц должны быть строчными.

Канонизированная строка ресурса для контейнера, очереди, таблицы или общей папки должна пропускать косую черту (/) для 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"  

BLOB-объекты

Для версии 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"  

Файлы

URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"  

Очереди

Для версии 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"  

Таблицы

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

Для версии 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"  

Время существования и отзыв подписанного URL-адреса

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

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

SAS службы может принимать одну из двух форм:

  • Ad hoc SAS. При создании нерегламентированного SAS время начала, срок действия и разрешения для SAS указываются в URI SAS (или подразумеваются, если время начала опущено). SAS любого типа может быть специальным.

    Вы можете управлять временем существования нерегламентированного SAS с помощью signedExpiry поля . Если вы хотите продолжать предоставлять клиенту доступ к ресурсу по истечении срока действия, необходимо выдать новую подпись. Рекомендуется оставить время существования подписанного URL-адреса коротким. До версии 2012-02-12 подписанный URL-адрес, не связанный с хранимой политикой доступа, не мог иметь период активности, превышающий один час.

  • SAS с хранимой политикой доступа. Хранимая политика доступа определяется в контейнере ресурсов, который может быть контейнером BLOB-объектов, таблицей, очередью или общей папкой. Вы можете использовать хранимую политику доступа для управления ограничениями для одной или нескольких подписанных URL-адресов. При связывании SAS с хранимой политикой доступа SAS наследует ограничения (то есть время начала, срок действия и разрешения), определенные для хранимой политики доступа.

    Хранимая политика доступа представлена в URI полем signedIdentifier. Хранимая политика доступа является дополнительным способом управления одной или несколькими подписанными URL-адресами, включая возможность отмены подписи при необходимости.

Отзыв SAS

Так как URI SAS является URL-адресом, любой пользователь, получающий SAS, может использовать его, независимо от того, кто изначально создал его. Размещенный в свободном доступе подписанный URL-адрес сможет использовать любой человек. SAS предоставляет доступ к ресурсам всем, кто обладает ими, до тех пор, пока не произойдет одно из четырех действий:

  • Истек срок действия, указанный для нерегламентированного SAS.

  • Время окончания срока действия, указанное в хранимой политике доступа, на которую ссылается SAS, достигается, если указана ссылка на хранимую политику доступа и политика доступа указывает время окончания срока действия.

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

  • Хранимая политика доступа, на которую ссылается SAS, удаляется, что отменяет SAS. Если службе хранилища Azure не удается найти хранимую политику доступа, указанную в подписанном URL-адресе, клиент не сможет получить доступ к ресурсу, указанному универсальным кодом ресурса (URI).

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

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

Важно!

Универсальный код ресурса (URI) подписанного URL-адреса связан с ключом учетной записи, который используется для создания подписи, и связанной хранимой политикой доступа, если это применимо. Если хранимая политика доступа не указана, то единственный способ отменить подписанный URL-адрес — изменить ключ учетной записи.

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

Пример SAS службы

В следующем примере показан URI большого двоичного объекта с добавленным к нему маркером SAS службы. Маркер SAS службы предоставляет разрешения на чтение и запись большого двоичного объекта.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Каждая часть URI описана в следующей таблице:

Имя Сегмент SAS Описание
Универсальный код ресурса (URI) https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Адрес BLOB-объекта. Настоятельно рекомендуется использовать ПРОТОКОЛ HTTPS.
Разделитель ? Разделитель, предшествующий строке запроса. Разделитель не является частью маркера SAS.
Разрешения sp=rw Разрешения, предоставляемые подписью общего доступа, включают в себя чтение (r) и запись (w).
Время начала st=2023-05-24T01:13:55Z Указывается в формате UTC. Чтобы подпись общего доступа вступала в силу сразу же, не указывайте время начала действия.
Время окончания срока действия se=2023-05-24T09:13:55Z Указывается в формате UTC.
Диапазон IP-адресов sip=168.1.5.60-168.1.5.70 Диапазон IP-адресов, с которых будут приниматься запросы.
Протокол spr=https Разрешены только запросы, использующие ПРОТОКОЛ HTTPS.
Версия службы хранилища Azure sv=2023-05-24 Для службы хранилища Azure версии 2012-02-12 и более поздних этот параметр указывает используемую версию.
Ресурс sr=b Ресурс является BLOB-объектом.
Сигнатура sig=<signature> Используется для авторизации доступа к большому двоичному объекту. Сигнатура — это HMAC, который вычисляется по ключу типа "строка— знак" с помощью алгоритма SHA256, а затем кодируется с помощью кодировки Base64.

См. также раздел