Создание SAS для делегирования пользователей для контейнера или большого двоичного объекта с помощью PowerShell

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

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

  • С помощью ключа, созданного с помощью учетных данных Microsoft Entra. SAS, подписанный учетными данными Microsoft Entra, — это SAS делегирования пользователей. Клиенту, создающему SAS делегирования пользователей, должна быть назначена роль Azure RBAC, которая включает действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Дополнительные сведения см. в статье "Создание SAS делегирования пользователей".
  • Ключом учетной записи хранения. Как SAS службы, так и SAS учетной записи подписываются ключом учетной записи хранения. Клиент, создающий SAS службы, должен иметь прямой доступ к ключу учетной записи или ему должно быть назначено разрешение Microsoft.Storage/storageAccounts/listkeys/action. Дополнительные сведения см. в статье "Создание SAS службы" или "Создание SAS учетной записи".

Примечание.

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

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

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

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

Корпорация Майкрософт рекомендует использовать учетные данные Microsoft Entra, если это возможно, как рекомендации по безопасности, а не использовать ключ учетной записи, который может быть проще скомпрометирован. Если для разработки приложения требуются подписанные URL-адреса, используйте учетные данные Microsoft Entra для создания SAS делегирования пользователей для обеспечения повышенной безопасности. Дополнительные сведения о SAS для делегирования пользователей см. в статье Создание SAS для делегирования пользователей.

Внимание

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

Дополнительные сведения о подписанных URL-адресах см. в статье об использование подписанных URL-адресов SAS в службе хранилища Azure.

Установка модуля PowerShell

Чтобы создать SAS для делегирования пользователей с помощью PowerShell, установите версию 1.10.0 или более позднюю версию модуля Az.Storage. Выполните следующие действия, чтобы установить последнюю версию модуля.

  1. Удалите все ранее установленные версии Azure PowerShell.

    • Удалите все предыдущие установки Azure PowerShell из Windows с помощью параметра Apps & features (Приложения и компоненты) в разделе Параметры.
    • Удалите все модули Azure из %Program Files%\WindowsPowerShell\Modules.
  2. Убедитесь, что у вас установлена последняя версия PowerShellGet. Откройте окно Windows PowerShell и выполните следующую команду, чтобы установить последнюю версию:

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. После установки PowerShellGet закройте и снова откройте окно PowerShell.

  4. Установите Azure PowerShell последней версии:

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Убедитесь, что вы установили Azure PowerShell версии 3.2.0 или более поздней. Выполните следующую команду, чтобы установить последнюю версию модуля PowerShell службы хранилища Azure:

    Install-Module -Name Az.Storage -Repository PSGallery -Force
    
  6. Закройте и снова откройте окно PowerShell.

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

Get-Module -ListAvailable -Name Az.Storage -Refresh

Дополнительные сведения об установке Azure PowerShell см. в статье Установка Azure PowerShell с помощью PowerShellGet.

Войдите в Azure PowerShell с помощью идентификатора Microsoft Entra

Вызовите команду Подключение-AzAccount, чтобы войти с помощью учетной записи Microsoft Entra:

Connect-AzAccount

Дополнительные сведения о входе в систему с помощью PowerShell см. в разделе Вход с помощью Azure PowerShell.

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

Чтобы создать SAS делегирования пользователей из Azure PowerShell, учетная запись Microsoft Entra, используемая для входа в PowerShell, должна быть назначена роль, включающую Microsoft.служба хранилищаДействие /storageAccounts/blobServices/generateUserDelegationKey. Это разрешение позволяет учетной записи Microsoft Entra запрашивать ключ делегирования пользователей. Ключ делегирования пользователя используется для подписи SAS для делегирования пользователя. Роль, обеспечивающая действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, должна быть назначена на уровне учетной записи хранения, группы ресурсов или подписки. Дополнительные сведения о разрешениях Azure RBAC для создания SAS делегирования пользователей см. в разделе Назначение разрешений с помощью Azure RBAC статьи Создание SAS для делегирования пользователей.

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

В следующем примере назначается роль Участник для данных BLOB-объектов хранилища, которая включает действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Роль определяется на уровне учетной записи хранения.

Не забудьте заменить значения заполнителей в угловых скобках собственными значениями.

New-AzRoleAssignment -SignInName <email> `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Дополнительные сведения о встроенных ролях, которые включают действие Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, см. в статье Встроенные роли Azure.

Использование учетных данных Microsoft Entra для защиты SAS

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

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

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

Не забудьте заменить значения заполнителей в угловых скобках собственными значениями.

$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount

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

Чтобы вернуть маркер SAS делегирования пользователя для контейнера, вызовите команду New-AzStorageContainerSASToken, передав объект контекста службы хранилища Azure, который вы создали ранее.

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

New-AzStorageContainerSASToken -Context $ctx `
    -Name <container> `
    -Permission racwdl `
    -ExpiryTime <date-time>

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

?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl

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

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

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

New-AzStorageBlobSASToken -Context $ctx `
    -Container <container> `
    -Blob <blob> `
    -Permission racwd `
    -ExpiryTime <date-time>
    -FullUri

Возвращаемый URI SAS для делегирования пользователя будет аналогичен приведенному ниже.

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd

Примечание.

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

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

Чтобы отменить делегирование SAS пользователя из Azure PowerShell, вызовите команду Revoke-AzStorageAccountUserDelegationKeys. Эта команда отменяет все ключи делегирования пользователей, связанные с указанной учетной записью хранения. Любые подписи общего доступа, связанные с этими ключами, недействительны.

Не забудьте заменить значения заполнителей в угловых скобках собственными значениями.

Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
    -StorageAccountName <storage-account>

Важно!

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

Следующие шаги