Создание SAS для делегирования пользователя

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

Каждый SAS подписывается ключом. Чтобы создать SAS для делегирования пользователей, необходимо сначала запросить ключ делегирования пользователя, который затем используется для подписи SAS. Ключ делегирования пользователя аналогиен ключу учетной записи, который используется для подписи SAS службы или SAS учетной записи, за исключением того, что он зависит от ваших учетных данных Microsoft Entra. Чтобы запросить ключ делегирования пользователя, вызовите операцию Получить ключ делегирования пользователя . Затем можно использовать ключ делегирования пользователя для создания SAS.

SAS для делегирования пользователей поддерживается для Хранилище BLOB-объектов Azure и Azure Data Lake Storage 2-го поколения. Хранимые политики доступа не поддерживаются для SAS делегирования пользователей.

Внимание!

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

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

Поддержка SAS делегирования пользователей для доступа на уровне каталога

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

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

Поддержка SAS делегирования пользователей для пользовательского идентификатора OID

SAS для делегирования пользователей поддерживает необязательный идентификатор объекта пользователя (OID), который находится в параметре saoid или suoid , если версия авторизации (sv) — 2020-02-10 или более поздняя. Этот необязательный параметр предоставляет расширенную модель авторизации для рабочих нагрузок многопользовательского кластера, таких как Hadoop и Spark.

Маркеры SAS могут быть ограничены определенной операцией файловой системы и пользователем, что обеспечивает менее уязвимый маркер доступа, который безопаснее распространять между многопользовательским кластером. Одним из вариантов использования этих функций является интеграция драйвера Hadoop ABFS с Apache Ranger.

Авторизация SAS для делегирования пользователей

Когда клиент обращается к ресурсу Хранилища BLOB-объектов с помощью SAS делегирования пользователей, запрос к службе хранилища Azure авторизоваться с помощью учетных данных Microsoft Entra, которые использовались для создания SAS. Разрешения на управление доступом на основе ролей (RBAC), предоставленные для этой учетной записи Microsoft Entra, вместе с разрешениями, явно предоставленными для SAS, определяют доступ клиента к ресурсу. Такой подход обеспечивает дополнительный уровень безопасности и помогает избежать необходимости хранить ключ доступа учетной записи в коде приложения. По этим причинам рекомендуется создать SAS с помощью учетных данных Microsoft Entra.

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

Чтобы создать SAS для делегирования пользователей, выполните следующие действия.

  1. Используйте RBAC, чтобы предоставить нужные разрешения субъекту безопасности, который будет запрашивать ключ делегирования пользователя.
  2. Получение маркера OAuth 2.0 из Microsoft Entra ID.
  3. Используйте маркер для запроса ключа делегирования пользователя, вызвав операцию Получить ключ делегирования пользователя .
  4. Используйте ключ делегирования пользователя, чтобы создать маркер SAS с соответствующими полями.

Назначение разрешений с помощью RBAC

Субъект безопасности, запрашивающий ключ делегирования пользователя, должен иметь соответствующие разрешения для этого. Microsoft Entra ID субъектом безопасности может быть пользователь, группа, субъект-служба или управляемое удостоверение.

Чтобы запросить ключ делегирования пользователя, необходимо назначить субъекту безопасности действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Следующие встроенные роли RBAC включают действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey явным образом или в составе определения с подстановочным знаком:

Так как операция Получения ключа делегирования пользователя действует на уровне учетной записи хранения, действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey должно быть задано на уровне учетной записи хранения, группы ресурсов или подписки. Если субъекту безопасности назначена какая-либо из перечисленных ранее встроенных ролей или настраиваемая роль, которая включает действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey на уровне учетной записи хранения, группы ресурсов или подписки, субъект безопасности может запросить ключ делегирования пользователя.

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

Дополнительные сведения о ролях RBAC для службы хранилища Azure см. в статье Авторизация с помощью Azure Active Directory.

Получение токена OAuth 2.0

Чтобы получить ключ делегирования пользователя, сначала запросите маркер OAuth 2.0 из Microsoft Entra ID. Предоставьте маркер со схемой носителя, чтобы авторизовать вызов операции Получения ключа делегирования пользователя . Дополнительные сведения о запросе маркера OAuth из Microsoft Entra ID см. в статье Потоки проверки подлинности и сценарии приложений.

Запрос ключа делегирования пользователя

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

Когда клиент запрашивает ключ делегирования пользователя с помощью маркера OAuth 2.0, служба хранилища Azure возвращает ключ делегирования пользователя от имени субъекта безопасности. SAS, созданный с помощью ключа делегирования пользователя, получает разрешения, предоставленные субъекту безопасности.

Получив ключ делегирования пользователя, вы можете использовать его для создания любого количества подписанных url-адресов делегирования пользователей в течение времени существования ключа. Ключ делегирования пользователя не зависит от маркера OAuth 2.0, который вы используете для его получения, поэтому его не нужно продлевать до тех пор, пока ключ еще действителен. Можно указать, что ключ действителен в течение семи дней.

Создание SAS для делегирования пользователей

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

Имя поля SAS Параметр маркера SAS Обязательный или необязательный Поддерживаемые версии Описание
signedVersion sv Обязательно 09.11.2018 и более поздние версии Указывает версию службы, которая используется для создания поля сигнатуры. Он также указывает версию службы, которая обрабатывает запросы, выполненные с помощью этого SAS.
signedResource sr Обязательно Все Указывает, какие ресурсы BLOB-объектов доступны через подписанный URL-адрес.
signedStart st Необязательно Все Необязательный элемент. Время, когда подписанный URL-адрес становится действительным, выраженный в одном из принятых форматов ISO 8601 UTC. Если это значение опущено, в качестве времени начала используется текущее время в формате UTC. Дополнительные сведения о принятых форматах UTC см. в разделе Форматирование значений DateTime.
signedExpiry se Обязательно Все Время, когда подписанный URL-адрес становится недействительным, выраженный в одном из принятых форматов ISO 8601 UTC. Дополнительные сведения о принятых форматах UTC см. в разделе Форматирование значений DateTime.
signedPermissions sp Обязательно Все Указывает, какие операции клиент, обладающий SAS, может выполнять с ресурсом. Разрешения могут быть объединены.
signedIp sip Необязательно 05.04.2015 и более поздние версии Указывает IP-адрес или инклюзивный диапазон IP-адресов, с которых будут приниматься запросы. При указании диапазона следует помнить, что диапазон является инклюзивным. Поддерживаются только IPv4-адреса.

Например, sip=168.1.5.65 или sip=168.1.5.60-168.1.5.70.
signedProtocol spr Необязательно 05.04.2015 и более поздние версии Указывает протокол, разрешенный для запроса, выполненного с помощью SAS. Включите это поле, чтобы требовать, чтобы запросы, выполненные с маркером SAS, использовали ПРОТОКОЛ HTTPS.
signedObjectId skoid Обязательно 09.11.2018 и более поздние версии Определяет субъект безопасности Microsoft Entra.
signedTenantId sktid Обязательно 09.11.2018 и более поздние версии Указывает Microsoft Entra клиента, в котором определен субъект безопасности.
signedKeyStartTime skt Необязательный элемент. 09.11.2018 и более поздние версии Значение возвращается операцией Получить ключ делегирования пользователя . Указывает начало времени существования ключа делегирования пользователя, выраженное в одном из принятых форматов ISO 8601 UTC. Если значение опущено, предполагается текущее время. Дополнительные сведения о допустимых форматах UTC см. в разделе Форматирование значений даты и времени.
signedKeyExpiryTime ske Обязательно 09.11.2018 и более поздние версии Значение возвращается операцией Получить ключ делегирования пользователя . Указывает окончание времени существования ключа делегирования пользователя, выраженное в одном из принятых форматов ISO 8601 UTC. Дополнительные сведения о допустимых форматах UTC см. в разделе Форматирование значений даты и времени.
signedKeyVersion skv Обязательно 09.11.2018 и более поздние версии Значение возвращается операцией Получить ключ делегирования пользователя . Указывает версию службы хранилища, которая использовалась для получения ключа делегирования пользователя. В этом поле должна быть указана версия 2018-11-09 или более поздняя.
signedKeyService sks Обязательно 09.11.2018 и более поздние версии Указывает службу, для которой действителен ключ делегирования пользователя. В настоящее время поддерживается только Хранилище BLOB-объектов.
signedAuthorizedObjectId saoid Необязательно 10.02.2020 и более поздние версии Указывает идентификатор объекта для Microsoft Entra субъекта безопасности, авторизованного владельцем ключа делегирования пользователя для выполнения действия, предоставленного маркером SAS. Дополнительные проверка разрешений для списков управления доступом (ACL) портативного интерфейса операционной системы (POSIX) не выполняются.
signedUnauthorizedObjectId suoid Необязательно 10.02.2020 и более поздние версии Указывает идентификатор объекта для субъекта безопасности Microsoft Entra, если включено иерархическое пространство имен. Служба хранилища Azure выполняет проверка списка управления доступом POSIX к идентификатору объекта, прежде чем авторизовать операцию.
signedCorrelationId scid Необязательно 10.02.2020 и более поздние версии Сопоставляйте журналы аудита хранилища с журналами аудита, которые используются субъектом, создающим и распространяющим SAS.
signedDirectoryDepth sdd Требуется, если sr=d 10.02.2020 и более поздние версии Указывает количество каталогов в корневой папке каталога, указанного в canonicalizedResource поле строки для знака.
signedEncryptionScope ses Необязательно 06.12.2020 и более поздние версии Указывает область шифрования для шифрования содержимого запроса.
signature sig Обязательно Все Сигнатура — это код проверки подлинности сообщения на основе хэша (HMAC), который вычисляется по ключу типа "строка—знак" с помощью алгоритма SHA256, а затем кодируется с помощью кодировки Base64.
Cache-Control заголовок ответа rscc Необязательно 15.08.2013 и более поздние версии Служба хранилища Azure задает для Cache-Control заголовка ответа значение, указанное в маркере SAS.
Content-Disposition заголовок ответа rscd Необязательно 15.08.2013 и более поздние версии Служба хранилища Azure задает для Content-Disposition заголовка ответа значение, указанное в маркере SAS.
Content-Encoding заголовок ответа rsce Необязательно 15.08.2013 и более поздние версии Служба хранилища Azure задает для Content-Encoding заголовка ответа значение, указанное в маркере SAS.
Content-Language заголовок ответа rscl Необязательно 15.08.2013 и более поздние версии Служба хранилища Azure задает для Content-Language заголовка ответа значение, указанное в маркере SAS.
Content-Type заголовок ответа rsct Необязательно 15.08.2013 и более поздние версии Служба хранилища Azure задает для Content-Type заголовка ответа значение, указанное в маркере SAS.

Укажите поле "Подписанная версия"

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

Указание поля подписанного ресурса

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) также является обязательным. Каталог всегда находится в контейнере.

Указание срока действия подписи

Поля signedStart (st) и signedExpiry (se) указывают время начала и окончания срока действия SAS. Поле signedExpiry является обязательным. Поле signedStart является необязательным. Если он опущен, в качестве времени начала используется текущее время в формате UTC.

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

Дополнительные сведения о допустимых форматах UTC см. в разделе Форматирование значений даты и времени.

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

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

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

racwdxltmeop

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

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

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

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

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

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

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

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

signedProtocol Необязательное поле (spr) указывает протокол, разрешенный для запросов, выполняемых с помощью SAS. Параметр может иметь значение HTTPS и HTTP (https,http) или только HTTPS (https). Значение по умолчанию — https,http.

Примечание

Невозможно указать HTTP для spr поля.

Указание идентификатора подписанного объекта

Поле signedObjectId (skoid) является обязательным для SAS делегирования пользователя. Операция Получения ключа делегирования пользователя возвращает это значение в ответе. Подписанный идентификатор объекта — это значение GUID, которое служит неизменяемым идентификатором для субъекта безопасности в платформа удостоверений Майкрософт.

Указание подписанного идентификатора клиента

Поле signedTenantId (sktid) является обязательным для SAS делегирования пользователя. Операция Получения ключа делегирования пользователя возвращает это значение в ответе. Подписанный идентификатор клиента — это значение GUID, представляющее Microsoft Entra клиента, в котором определен субъект безопасности.

Указание времени начала подписанного ключа

signedKeyStartTime Необязательное поле (skt) указывает начало времени существования ключа делегирования пользователя в формате ISO Date. Операция Получения ключа делегирования пользователя возвращает это значение в ответе. Если время начала опущено, предполагается, что время начала подписанного ключа является текущим временем.

Укажите время окончания срока действия подписанного ключа

Поле signedKeyExpiryTime (ske) является обязательным для SAS делегирования пользователя в формате ISO Date. Операция Получения ключа делегирования пользователя возвращает это значение в ответе. Время истечения срока действия подписанного ключа указывает на окончание жизненного цикла ключа делегирования пользователя. Срок действия может составлять не более семи дней с момента начала sas.

Указание службы подписанных ключей

Поле signedKeyService (sks) является обязательным для SAS делегирования пользователя. Операция Получения ключа делегирования пользователя возвращает это значение в ответе. Поле службы подписанного ключа указывает службу, для которой действителен ключ делегирования пользователя. Значение поля службы подписанного ключа для хранилища BLOB-объектов равно b.

Указание версии подписанного ключа

Поле signedkeyversion (skv) является обязательным для SAS делегирования пользователя. Операция Получения ключа делегирования пользователя возвращает это значение в ответе. Поле signedkeyversion указывает версию службы хранилища, которая используется для получения ключа делегирования пользователя. В этом поле должна быть указана версия 2018-11-09 или более поздняя.

Указание подписанного идентификатора объекта для субъекта безопасности

Необязательные signedAuthorizedObjectId поля (saoid) и signedUnauthorizedObjectId (suoid) обеспечивают интеграцию с Apache Hadoop и Apache Ranger для Azure Data Lake Storage 2-го поколения рабочих нагрузок. Используйте одно из следующих полей в маркере SAS, чтобы указать идентификатор объекта для субъекта безопасности:

  • В saoid поле указывается идентификатор объекта для Microsoft Entra субъекта безопасности, авторизованного владельцем ключа делегирования пользователя для выполнения действия, предоставленного маркером SAS. Служба хранилища Azure проверяет маркер SAS и гарантирует, что владелец ключа делегирования пользователя имеет необходимые разрешения, прежде чем служба хранилища Azure предоставит доступ. Дополнительные проверка разрешений для списков управления доступом POSIX не выполняются.
  • Поле suoid указывает идентификатор объекта для субъекта безопасности Microsoft Entra, если для учетной записи хранения включено иерархическое пространство имен. Поле suoid допустимо только для учетных записей с иерархическим пространством имен. suoid Если поле включается в маркер SAS, служба хранилища Azure выполняет проверка списка управления доступом POSIX к идентификатору объекта, прежде чем авторизовать операцию. Если этот проверка ACL не выполняется, операция завершается ошибкой. Для учетной записи хранения должно быть включено иерархическое пространство имен, если suoid поле включено в маркер SAS. В противном случае проверка разрешений завершится ошибкой авторизации.

Идентификатор объекта для субъекта безопасности, запрашивающего ключ делегирования пользователя, записывается в обязательном skoid поле. Чтобы указать идентификатор объекта в маркере SAS с saoid помощью поля или suoid , субъекту безопасности, определенному в skoid поле, должна быть назначена роль RBAC, включающая Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action или Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action. Дополнительные сведения об этих действиях см. в статье Операции поставщика ресурсов Azure.

Указывая идентификатор объекта в saoid поле или suoid , вы также ограничиваете операции, связанные с владением каталогом или BLOB-объектом, следующими способами:

  • Если операция создает каталог или большой двоичный объект, служба хранилища Azure задает владельцу каталога или большого двоичного объекта значение, указанное идентификатором объекта. Если идентификатор объекта не указан, служба хранилища Azure задает владельцу каталога или большого двоичного объекта значение, указанное параметром skoid .
  • Если в родительском каталоге задан липкий бит, а операция удаляет или переименовывает каталог или большой двоичный объект, идентификатор объекта владельца родительского каталога или владельца ресурса должен соответствовать значению, указанному идентификатором объекта.
  • Если операция задает владельца для каталога или большого x-ms-owner двоичного объекта и указан заголовок, значение, указанное идентификатором объекта, должно соответствовать значению, указанному в заголовке x-ms-owner .
  • Если операция задает группу для каталога или большого x-ms-group двоичного объекта и указан заголовок, значение, указанное идентификатором объекта, должно быть членом группы, указанной в заголовке x-ms-group .
  • Если операция задает разрешения или список ACL для каталога или большого двоичного объекта, необходимо также выполнить одно из следующих двух условий:
    • Значение, указанное для идентификатора объекта, должно быть владельцем каталога или большого двоичного объекта.
    • Значение signedPermissions поля (sp) должно содержать Ownership разрешение (o) в дополнение к разрешению Permissions (p).

Идентификатор объекта, указанный в saoid поле или suoid , включается в журналы диагностики при выполнении запросов с помощью маркера SAS.

Поле saoid или suoid поддерживается только в signedVersion том случае, если для поля (sv) задана версия 2020-02-10 или более поздняя. В маркер SAS может быть включено только одно из этих полей.

Указание идентификатора корреляции

Поле signedCorrelationId (scid) указывает идентификатор корреляции, который можно использовать для сопоставления журналов аудита хранилища с журналами аудита, которые используются субъектом, создающим и распространяющим SAS. Например, доверенная служба авторизации обычно имеет управляемое удостоверение, которое выполняет проверку подлинности и авторизацию пользователей, создает SAS, добавляет запись в локальный журнал аудита и возвращает SAS пользователю, который затем может использовать SAS для доступа к ресурсам службы хранилища Azure. Включив идентификатор корреляции как в локальный журнал аудита, так и в журнал аудита хранилища, вы разрешаете коррелировать эти события позже. Значением является GUID без фигурных скобок и символов в нижнем регистре.

Это поле поддерживается в версии 2020-02-10 и более поздних версиях.

Укажите глубину каталога

Если в 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 и более поздних версиях.

Указание параметров запроса для переопределения заголовков ответов

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

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

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

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

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

В signed encryption scope поле (ses) указывается область шифрования, который используется клиентским приложением при отправке больших двоичных объектов с помощью маркера SAS с помощью операции Put BLOB-объекта. Поле signed encryption scope поддерживается, если поле подписанной версии (sv) в маркере SAS имеет версию 2020-12-06 или более позднюю. Если в поле со знаком указана версия, которая раньше поддерживаемой версии, служба возвращает код ответа об ошибке 403 (запрещено).

Если для контейнера или файловой системы задана область шифрования по умолчанию, ses поле учитывает политику шифрования контейнеров. Если между ses параметром запроса и x-ms-default-encryption-scope заголовком имеется несоответствие, а x-ms-deny-encryption-scope-override заголовок имеет значение true, служба возвращает код ответа об ошибке 403 (запрещено).

x-ms-encryption-scope Если заголовок и ses параметр запроса указаны в запросе PUT и есть несоответствие, служба возвращает код ответа об ошибке 400 (недопустимый запрос).

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

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

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

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

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

Строка для подписи для авторизации версии 2020-12-06 и более поздних версий имеет следующий формат:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Версия 10.02.2020

Строка для подписи для авторизации версии 2020-02-10 имеет следующий формат:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Версии, предшествующие 10.02.2020

Строка для подписи для версий авторизации, предшествующих 2020-02-10, имеет следующий формат:

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Канонический ресурс

Часть canonicalizedResource строки является каноническим путем к подписанному ресурсу. Он должен включать конечную точку Хранилища BLOB-объектов и имя ресурса, а также должен быть декодирован по URL-адресу. Путь к большому двоичному объекту должен содержать его контейнер. Путь к каталогу должен включать количество подкаталогов, соответствующих параметру sdd .

Канонизированная строка ресурса для контейнера должна пропускать косую черту в конце (/) для SAS, предоставляющего доступ к такому контейнеру.

В следующих примерах показано, как создать canonicalizedResource часть строки в зависимости от типа ресурса.

Пример контейнера (Хранилище BLOB-объектов Azure)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Пример большого двоичного объекта (Хранилище BLOB-объектов Azure)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Пример контейнера (Azure Data Lake Storage 2-го поколения)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Пример каталога (Azure Data Lake Storage 2-го поколения)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Пример большого двоичного объекта (Azure Data Lake Storage 2-го поколения)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Необязательные поля

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

Пример 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&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&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.
Идентификатор объекта. skoid=<object-id> Субъект безопасности Microsoft Entra.
Tenant ID sktid=<tenant-id> Клиент Microsoft Entra, в котором зарегистрирован субъект безопасности.
Время начала ключа skt=2023-05-24T01:13:55Z Начало времени существования ключа делегирования пользователя.
Время истечения срока действия ключа ske=2023-05-24T09:13:55Z Окончание времени существования ключа делегирования пользователя.
Служба ключей sks=b Для значения службы поддерживается только служба BLOB-объектов.
Версия ключа skv=2022-11-02 Версия службы хранилища, которая использовалась для получения ключа делегирования пользователя.
Диапазон IP-адресов sip=168.1.5.60-168.1.5.70 Диапазон IP-адресов, с которых будут приниматься запросы.
Протокол spr=https Разрешены только запросы, использующие HTTPS.
Версия службы BLOB-объектов sv=2022-11-02 Для службы хранилища Azure версии 2012-02-12 и более поздних этот параметр указывает используемую версию.
Ресурс sr=b Ресурс является BLOB-объектом.
Сигнатура sig=<signature> Используется для авторизации доступа к большому двоичному объекту. Сигнатура — это HMAC, который вычисляется по ключу типа "строка—знак" с помощью алгоритма SHA256, а затем кодируется с помощью кодировки Base64.

Отзыв SAS для делегирования пользователя

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

Важно!

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

Отзыв ключа делегирования пользователя

Ключ делегирования пользователя можно отозвать, вызвав операцию Отозвать ключи делегирования пользователей . При отмене ключа делегирования пользователя все подписанные URL-адреса, которые используют этот ключ, становятся недействительными. Затем можно снова вызвать операцию Получить ключ делегирования пользователя и использовать ключ для создания новых подписанных URL-адресов. Это самый быстрый способ отозвать SAS делегирования пользователей.

Изменение или удаление назначений ролей

Вы можете изменить или удалить назначение роли RBAC для субъекта безопасности, используемого для создания SAS. Когда клиент использует SAS для доступа к ресурсу, служба хранилища Azure проверяет, имеет ли субъект безопасности, учетные данные которого использовались для защиты SAS, необходимые разрешения для ресурса.

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