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

Подписанный 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 CLI.

Общие сведения о 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.

Установите последнюю версию Azure CLI

Чтобы использовать Azure CLI для защиты SAS с помощью учетных данных Microsoft Entra, сначала убедитесь, что установлена последняя версия Azure CLI. Дополнительные сведения см. в статье Установка Azure CLI.

Чтобы создать SAS для делегирования пользователя с помощью Azure CLI, убедитесь, что установлена версия 2.0.78 или более поздняя. Воспользуйтесь командой az --version, чтобы узнать установленную версию.

Вход с помощью учетных данных Microsoft Entra

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

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

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

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

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

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

az role assignment create \
    --role "Storage Blob Data Contributor" \
    --assignee <email> \
    --scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

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

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

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

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

При создании SAS для делегирования пользователя требуются --auth-mode login и --as-user parameters. Укажите имя входа для --auth-mode параметра, чтобы запросы, внесенные в служба хранилища Azure, авторизоваться с учетными данными Microsoft Entra. Задайте параметр --as-user, чтобы указать, что возвращаемый адрес SAS должен быть подписанным URL-адресом делегирования пользователя.

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

Чтобы создать SAS для делегирования пользователя для контейнера с помощью Azure CLI, вызовите команду az storage container generate-sas.

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

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

az storage container generate-sas \
    --account-name <storage-account> \
    --name <container> \
    --permissions acdlrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user

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

se=2019-07-27&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sktid=<sktid>&skt=2019-07-26T18%3A01%3A22Z&ske=2019-07-27T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

Примечание.

Маркер SAS, возвращаемый служба хранилища BLOB-объектов, не включает символ разделителя ('?') для строки запроса URL-адреса. Если вы добавляете маркер SAS к URL-адресу ресурса, не забудьте также добавить символ разделителя.

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

Чтобы создать SAS для делегирования пользователя для большого двоичного объекта с помощью Azure CLI, вызовите команду az storage blob generate-sas.

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

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

az storage blob generate-sas \
    --account-name <storage-account> \
    --container-name <container> \
    --name <blob> \
    --permissions acdrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user \
    --full-uri

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

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?se=2019-08-03&sp=rw&sv=2018-11-09&sr=b&skoid=<skoid>&sktid=<sktid>&skt=2019-08-02T2
2%3A32%3A01Z&ske=2019-08-03T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

Примечание.

Маркер SAS, возвращаемый Azure CLI, не включает символ разделителя ('?') для строки запроса URL-адреса. Если маркер SAS добавляется к URL-адресу ресурса, не забудьте добавить символ разделителя в URL-адрес ресурса перед добавлением маркера SAS.

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

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

Чтобы отозвать SAS для делегирования пользователя из Azure CLI, вызовите команду az storage account revoke-delegation-keys. Эта команда отменяет все ключи делегирования пользователей, связанные с указанной учетной записью хранения. Любые подписи общего доступа, связанные с этими ключами, недействительны.

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

az storage account revoke-delegation-keys \
    --name <storage-account> \
    --resource-group <resource-group>

Важно!

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

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