Поделиться через


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

Важный

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

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

Маркер подписанного URL-адреса (SAS) можно защитить для доступа к контейнеру, каталогу или BLOB-объекту с помощью учетных данных 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. Хранимые политики доступа не поддерживаются для 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 или более поздней версии. Параметры saoid и suoid соответствуют субъекту безопасности для конечного пользователя, который использует SAS, и предоставляет расширенную модель авторизации для рабочих нагрузок кластера с несколькими пользователями, таких как Hadoop и Spark.

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

Дополнительные сведения о необязательных параметрах saoid и suoid см. в статье Указание подписанного идентификатора объекта пользователя.

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

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

  • Разрешения управления доступом на основе ролей (RBAC), предоставляемые субъекту безопасности Microsoft Entra, запрашивающим ключ делегирования пользователей.
  • Разрешения списка управления доступом POSIX (ACL), предоставленные субъекту безопасности, запрашивающим ключ делегирования пользователей. Эта дополнительная проверка происходит только в том случае, если разрешения RBAC не могут предоставлять доступ, и только если иерархическое пространство имен включено в учетной записи хранения.
  • Разрешения, которые явно предоставляются маркеру SAS.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Например, sip=198.51.100.0 или sip=198.51.100.10-198.51.100.20.
signedProtocol spr Необязательный 2015-04-05 и более поздних версий Указывает протокол, разрешенный для запроса, сделанного с помощью SAS. Включите это поле, чтобы требовать, чтобы запросы, сделанные с маркером SAS, использовали ПРОТОКОЛ HTTPS.
signedObjectId skoid Обязательно 2018-11-09 и более поздних версий Указывает идентификатор объекта для субъекта безопасности Microsoft Entra. Этот идентификатор объекта соответствует субъекту безопасности, запрашивающего ключ делегирования пользователей.

Перед авторизацией операции служба хранилища Azure проверяет разрешения RBAC на идентификатор объекта. Если разрешения RBAC не могут предоставить доступ, служба хранилища Azure проверяет разрешения POSIX ACL на идентификатор объекта.
signedTenantId sktid Обязательно 2018-11-09 и более поздних версий Указывает клиент Microsoft Entra, в котором определен субъект безопасности.
signedKeyStartTime skt Обязательно. 2018-11-09 и более поздних версий Значение возвращается операцией получение ключа делегирования пользователей. Указывает начало времени существования ключа делегирования пользователей, выраженное в одном из принятых форматов ISO 8601 UTC. Дополнительные сведения о принятых форматах UTC см. в разделе Формат значений DateTime.
signedKeyExpiryTime ske Обязательно 2018-11-09 и более поздних версий Значение возвращается операцией получение ключа делегирования пользователей. Указывает конец времени существования ключа делегирования пользователей, выраженный в одном из принятых форматов ISO 8601 UTC. Дополнительные сведения о принятых форматах UTC см. в разделе Формат значений DateTime.
signedKeyVersion skv Обязательно 2018-11-09 и более поздних версий Значение возвращается операцией получение ключа делегирования пользователей. Указывает версию службы хранилища, которая использовалась для получения ключа делегирования пользователей. Это поле должно указать версию 2018-11-09 или более позднюю.
signedKeyService sks Обязательно 2018-11-09 и более поздних версий Указывает службу, для которой допустимы ключ делегирования пользователей. В настоящее время поддерживается только хранилище BLOB-объектов.
signedAuthorizedObjectId saoid Необязательный 2020-02-10 и более поздних версий Указывает идентификатор объекта субъекта безопасности Microsoft Entra, авторизованного владельцем ключа делегирования пользователя для выполнения действия, предоставленного маркером SAS. Этот идентификатор объекта соответствует субъекту безопасности для конечного пользователя SAS. Дополнительная проверка разрешений на списки управления доступом POSIX (ACL) не выполняется.
signedUnauthorizedObjectId suoid Необязательный 2020-02-10 и более поздних версий Указывает идентификатор объекта для субъекта безопасности Microsoft Entra при включении иерархического пространства имен. Этот идентификатор объекта соответствует субъекту безопасности для конечного пользователя SAS. Служба хранилища Azure выполняет проверку ACL POSIX по идентификатору объекта перед авторизацией операции.
signedCorrelationId scid Необязательный 2020-02-10 и более поздних версий Сопоставляйте журналы аудита хранилища с журналами аудита, которые используются субъектом, создающим и распространяющим SAS.
signedDirectoryDepth sdd Обязательный при sr=d 2020-02-10 и более поздних версий Указывает количество каталогов в корневой папке каталога, указанного в поле canonicalizedResource строки для входа.
signedEncryptionScope ses Необязательный 2020-12-06 и более поздних версий Указывает область шифрования, используемую для шифрования содержимого запроса.
signature sig Обязательно Все Сигнатура — это хэш-код проверки подлинности сообщений (HMAC), вычисляемый по протоколу string-to-sign and key с помощью алгоритма SHA256, а затем закодированный с помощью кодировки Base64.
заголовок ответа Cache-Control rscc Необязательный 2013-08-15 и более поздних версий Служба хранилища Azure задает заголовок ответа Cache-Control значением, указанным в маркере SAS.
заголовок ответа Content-Disposition rscd Необязательный 2013-08-15 и более поздних версий Служба хранилища Azure задает заголовок ответа Content-Disposition значением, указанным в маркере SAS.
заголовок ответа Content-Encoding rsce Необязательный 2013-08-15 и более поздних версий Служба хранилища Azure задает заголовок ответа Content-Encoding значением, указанным в маркере SAS.
заголовок ответа Content-Language rscl Необязательный 2013-08-15 и более поздних версий Служба хранилища Azure задает заголовок ответа Content-Language значением, указанным в маркере SAS.
заголовок ответа Content-Type rsct Необязательный 2013-08-15 и более поздних версий Служба хранилища Azure задает заголовок ответа Content-Type значением, указанным в маркере SAS.

Укажите поле подписанной версии

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

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

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

Ресурс Значение параметра Поддерживаемые версии Описание
Капля b Все Предоставляет доступ к содержимому и метаданным большого двоичного объекта.
Версия BLOB-объектов bv 2018-11-09 и более поздних версий Предоставляет доступ к содержимому и метаданным версии большого двоичного объекта, но не к базовому BLOB-объекту.
Моментальный снимок BLOB-объектов bs 2018-11-09 и более поздних версий Предоставляет доступ к содержимому и метаданным моментального снимка BLOB-объектов, но не к базовому BLOB-объекту.
Контейнер c Все Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в контейнере и списку больших двоичных объектов в контейнере.
Каталог d 2020-02-10 и более поздних версий Предоставляет доступ к содержимому и метаданным любого большого двоичного объекта в каталоге, а также к списку BLOB-объектов в каталоге в учетной записи хранения с включенным иерархическим пространством имен. Если для поля signedResource указан каталог, также требуется параметр signedDirectoryDepth (sdd) . Каталог всегда находится в контейнере.

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

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

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

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

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

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

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

racwdxltmeop

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

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

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

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

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

Разрешение Символ URI Ресурс Поддержка версий Разрешенные операции
Читать r Контейнер
Каталог
Капля
Все Чтение содержимого, списка блоков, свойств и метаданных любого большого двоичного объекта в контейнере или каталоге. Используйте большой двоичный объект в качестве источника операции копирования.
Добавлять a Контейнер
Каталог
Капля
Все Добавьте блок в дополнительный большой двоичный объект.
Создавать c Контейнер
Каталог
Капля
Все Создание нового большого двоичного объекта, моментального снимка большого двоичного объекта или копирование большого двоичного объекта в новый большой двоичный объект.
Писать w Контейнер
Каталог
Капля
Все Создание или запись содержимого, свойств, метаданных или блок-списка. Моментальный снимок или аренда большого двоичного объекта. Измените размер большого двоичного объекта (только для страничного большого двоичного объекта). Используйте большой двоичный объект в качестве назначения операции копирования.
Удалить d Контейнер
Каталог
Капля
Все Удаление большого двоичного объекта. Для версии 2017-07-29 и более поздних версий разрешение delete также позволяет нарушить аренду большого двоичного объекта. Дополнительные сведения см. в операции аренды BLOB-объектов.
Удаление версии x Контейнер
Капля
2019-12-12 и более поздних версий Удаление версии большого двоичного объекта.
Постоянное удаление y Капля 2020-02-10 и более поздних версий Окончательно удалите моментальный снимок или версию большого двоичного объекта.
Список l Контейнер
Каталог
Все Вывод списка больших двоичных объектов, не рекурсивно.
Теги t Капля 2019-12-12 и более поздних версий Чтение или запись тегов в большом двоичном объекте.
Двигаться m Контейнер
Каталог
Капля
2020-02-10 и более поздних версий Переместите большой двоичный объект или каталог и его содержимое в новое расположение. Эта операция может быть ограничена владельцем дочернего большого двоичного объекта, каталога или родительского каталога, если параметр saoid включен в маркер SAS, а липкий бит установлен в родительском каталоге.
Исполнять e Контейнер
Каталог
Капля
2020-02-10 и более поздних версий Получите системные свойства и, если иерархическое пространство имен включено для учетной записи хранения, получите ACL POSIX большого двоичного объекта. Если иерархическое пространство имен включено, и вызывающий объект является владельцем большого двоичного объекта, это разрешение предоставляет возможность задавать собственные группы, разрешения POSIX и ACL POSIX большого двоичного объекта. Это не позволяет вызывающему объекту считывать пользовательские метаданные.
Собственность o Контейнер
Каталог
Капля
2020-02-10 и более поздних версий Если иерархическое пространство имен включено, это разрешение позволяет вызывающему объекту задать владельца или группу владельца, или действовать в качестве владельца при переименовании или удалении каталога или большого двоичного объекта в каталоге с липким битом.
Разрешения p Контейнер
Каталог
Капля
2020-02-10 и более поздних версий Если иерархическое пространство имен включено, это разрешение позволяет вызывающей стороне задавать разрешения и списки ACL POSIX для каталогов и больших двоичных объектов.
Настройка политики неизменяемости я Контейнер
Капля
2020-06-12 и более поздних версий Задайте или удалите политику неизменяемости или юридическую удержание большого двоичного объекта.

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

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

При указании диапазона IP-адресов диапазон включается включительно. Например, указание sip=198.51.100.0 или sip=198.51.100.10-198.51.100.20 в SAS ограничивает запрос на эти IP-адреса.

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

Клиентская среда Расположение учетной записи хранения Рекомендация
Клиент, работающий в 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. Используйте одно из этих полей в маркере SAS, чтобы указать идентификатор объекта для субъекта безопасности:

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

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

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

  • Если операция создает каталог или большой двоичный объект, служба хранилища 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-адреса, указывающего заголовки ответов в качестве параметров запроса, необходимо включить эти заголовки ответа в подписи, которая используется для создания строки подписи. Дополнительные сведения см. в разделе "Указаниеподписи".

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

Поле 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) используется для авторизации запроса, сделанного клиентом с подписью общего доступа. Строка —это уникальная строка, созданная из полей, которые должны быть проверены для авторизации запроса. Сигнатура — это 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

Версия 2020-02-10

Строковый вход для авторизации версии 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

Версии ранее 2020-02-10

Строка входа для версий авторизации, предшествующих версии 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-объектов (хранилище BLOB-объектов Azure)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Пример контейнера (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Пример каталога (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Пример BLOB-объектов (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

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

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

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

В следующем примере показан URI BLOB-объектов с маркером 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=198.51.100.10-198.51.100.20&spr=https&sv=2022-11-02&sr=b&sig=<signature>

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

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

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

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

Важный

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

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

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

Изменение или удаление назначений ролей или списков управления доступом

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

См. также