Create a service SAS (Создание 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 подписи общего доступа, должен полагаться на версии, понятные клиентскому программному обеспечению, которое выполняет запросы на службу хранилища.

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

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

Ресурс Значение параметра Поддерживаемые версии Описание
BLOB-объект b Все Предоставляет доступ к содержимому и метаданным большого двоичного объекта.
Версия BLOB-объекта Bv 09.11.2018 и более поздние версии Предоставляет доступ к содержимому и метаданным версии BLOB-объекта, но не к базовому BLOB-объекту.
Моментальный снимок большого двоичного объекта bs 09.11.2018 и более поздние версии Предоставляет доступ к содержимому и метаданным snapshot большого двоичного объекта, но не к базовому большому двоичному объекту.
Контейнер с Все Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в контейнере, а также к списку больших двоичных объектов в контейнере.
Directory d 10.02.2020 и более поздние версии Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в каталоге, а также к списку BLOB-объектов в каталоге в учетной записи хранения с включенным иерархическим пространством имен. Если для 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 указывает период времени, в течение которого подписанный URL-адрес действителен, и разрешения, которые должны быть предоставлены пользователю. Части URI, составляющие политику доступа, описаны в следующей таблице:

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

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

startRk2
spk

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

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

endRk2
epk

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

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

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

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

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

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

racwdxltmeop

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

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

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

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

Важно!

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

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

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

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

Разрешение Символ URI Ресурс Поддерживаемые версии Разрешенные операции
Чтение r Контейнер
Каталог
BLOB-объект
Все Чтение содержимого, списка блокировок, свойств и метаданных любого большого двоичного объекта в контейнере или каталоге. Используйте большой двоичный объект в качестве источника операции копирования.
Добавить а Контейнер
Каталог
BLOB-объект
Все Добавление блока в добавочный BLOB-объект.
Создать с Контейнер
Каталог
BLOB-объект
Все Запись нового большого двоичного объекта, snapshot большого двоичного объекта или копирование большого двоичного объекта в новый BLOB-объект.
запись w Контейнер
Каталог
BLOB-объект
Все Создание или запись содержимого, свойств, метаданных или списка блокировок. Создание моментального снимка или аренда большого двоичного объекта. Изменение размера большого двоичного объекта (только для страничных 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 Чтение содержимого, свойств, метаданных. Используйте файл в качестве источника операции копирования.
Создать с Создайте новый файл или скопируйте его в новый файл.
запись w Создание или запись содержимого, свойств, метаданных. Измените размер файла. Используйте файл в качестве места назначения операции копирования.
Удалить d Удаление файла.

Разрешения для общего ресурса

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

Контейнеры

Для версии 21.02.2015 и более поздних:

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-объекты

Для версии 21.02.2015 и более поздних:

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"  

Очереди

Для версии 21.02.2015 и более поздних:

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"  

Таблицы

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

Для версии 21.02.2015 и более поздних:

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 службы может принимать одну из двух форм:

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

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

  • 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.

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