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


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

Общий ключ доступа (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 для доступа к контейнеру или объекту BLOB может быть защищен с помощью учетных данных Microsoft Entra или ключа учетной записи. SAS, защищенный учетными данными Microsoft Entra, называется пользовательским делегированным SAS, так как токен OAuth 2.0, используемый для подписи SAS, запрашивается от имени пользователя.

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

Осторожность

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

Для получения дополнительных сведений о подписях общего доступа см. Предоставление ограниченного доступа к ресурсам хранилища Azure с использованием подписей общего доступа (SAS).

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

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

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

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

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

  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

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

Connect-AzAccount

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

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

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

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

Следующий синтаксис возвращает SAS делегирования пользователей для большого двоичного объекта. В примере указывается параметр -FullUri, который возвращает URI BLOB с добавленным маркером 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 делегирования пользователей становится недействительным.

Дальнейшие действия