Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подписанная ссылка (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 делегирования пользователей для контейнера или объекта Blob с помощью клиентской библиотеки хранилища Azure для Python.
Общие сведения о SAS для делегирования пользователей
Маркер SAS для доступа к контейнеру или большому двоичному объекту может быть защищен с помощью учетных данных Microsoft Entra или ключа учетной записи. SAS, защищенный учетными данными Microsoft Entra, называется SAS делегирования пользователей, так как маркер OAuth 2.0, используемый для подписи SAS, запрашивается от имени пользователя.
Корпорация Майкрософт рекомендует использовать учетные данные Microsoft Entra, если это возможно, как рекомендации по безопасности, а не использовать ключ учетной записи, который может быть проще скомпрометирован. Если в дизайне вашего приложения требуются подписи для совместного доступа, используйте учетные данные Microsoft Entra для создания SAS делегирования пользователя для обеспечения большей безопасности. Дополнительные сведения о SAS для делегирования пользователей см. в статье Создание SAS для делегирования пользователей.
Внимание
Любой клиент, обладающий действительным SAS, может получить доступ к данным в вашей учетной записи хранения в соответствии с тем, как это допускается этим SAS. Важно обеспечить для SAS защиту от вредоносного или непреднамеренного использования. Распространять SAS нужно с осторожность и следует подготовить план для отзыва скомпрометированного SAS.
Дополнительные сведения о разделяемых ключах доступа см. в статье Предоставление ограниченного доступа к ресурсам хранилища Azure с использованием ключей SAS.
Назначение ролей Azure для доступа к данным
Когда субъект безопасности Microsoft Entra пытается получить доступ к данным, этот субъект безопасности должен иметь разрешения на ресурс. Независимо от того, является ли субъект безопасности управляемым удостоверением в Azure или учетной записи пользователя Microsoft Entra, выполняющей код в среде разработки, субъект безопасности должен быть назначен роли Azure, которая предоставляет доступ к данным. Дополнительные сведения о предоставлении разрешений в Azure RBAC см. в статье Назначение роли Azure для доступа к данным BLOB-объектов.
Настройка проекта
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Установка пакетов
Установите следующие пакеты с помощью pip install
:
pip install azure-storage-blob azure-identity
Настройка кода приложения
Затем добавьте следующие import
директивы:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
ContainerClient,
BlobClient,
BlobSasPermissions,
ContainerSasPermissions,
UserDelegationKey,
generate_container_sas,
generate_blob_sas
)
Получение аутентифицированных учетных данных токена
Чтобы получить учетные данные токена, которые ваш код может использовать для авторизации запросов к хранилищу Blob, создайте экземпляр класса DefaultAzureCredential. Дополнительные сведения об использовании класса DefaultAzureCredential для авторизации управляемого удостоверения для доступа к хранилищу BLOB-объектов см. в разделе Клиентская библиотека Azure Identity для Python.
В следующем фрагменте кода показано, как получить учетные данные аутентифицированного токена и использовать их для создания клиента службы для хранилища объектов Blob.
# Construct the blob endpoint from the account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
#Create a BlobServiceClient object using DefaultAzureCredential
blob_service_client = BlobServiceClient(account_url, credential=DefaultAzureCredential())
Дополнительные сведения о авторизации доступа к хранилищу BLOB-объектов из приложений с помощью пакета SDK для Python см. в статье "Проверка подлинности приложений Python в службах Azure".
Получение ключа для делегирования пользователей
Каждый SAS подписывается ключом. Чтобы создать SAS для делегирования пользователей, необходимо сначала запросить ключ для делегирования пользователей, который позже нужно будет использовать для подписания SAS. Ключ делегирования пользователей аналогичен ключу учетной записи, используемому для подписи SAS службы или SAS учетной записи, но он использует учетные данные Microsoft Entra. Когда клиент запрашивает ключ делегирования пользователя с помощью токена OAuth 2.0, хранилище блобов возвращает ключ делегирования от имени пользователя.
После получения ключа делегирования пользователей, этот ключ можно использовать, чтобы создать любое количество подписей общего доступа для делегирования пользователей на протяжении срока действия ключа. Ключ делегирования пользователей не зависит от маркера OAuth 2.0, используемого для его получения, поэтому маркер не должен быть продлен, если ключ по-прежнему действителен. Можно указать срок действия ключа до семи дней.
Используйте один из следующих методов, чтобы запросить ключ для делегирования пользователей:
В следующем примере кода показано, как запросить ключ делегирования пользователей:
def request_user_delegation_key(self, blob_service_client: BlobServiceClient) -> UserDelegationKey:
# Get a user delegation key that's valid for 1 day
delegation_key_start_time = datetime.datetime.now(datetime.timezone.utc)
delegation_key_expiry_time = delegation_key_start_time + datetime.timedelta(days=1)
user_delegation_key = blob_service_client.get_user_delegation_key(
key_start_time=delegation_key_start_time,
key_expiry_time=delegation_key_expiry_time
)
return user_delegation_key
Создание SAS для делегирования пользователя
Вы можете создать SAS пользовательской делегации для контейнера или BLOB, исходя из потребностей вашего приложения.
Получив ключ делегирования пользователей, можно создать SAS делегирования пользователей. Вы можете создать пользовательское делегирование SAS, чтобы делегировать ограниченный доступ к ресурсу контейнера с помощью следующего способа:
Ключ делегирования пользователей для подписи SAS передается методу в качестве аргумента user_delegation_key
. Разрешенные разрешения передаются методу в качестве аргумента permission
и определяются в классе ContainerSasPermissions .
В следующем примере кода показано, как создать SAS с делегированием прав для пользователей для контейнера.
def create_user_delegation_sas_container(self, container_client: ContainerClient, user_delegation_key: UserDelegationKey):
# Create a SAS token that's valid for one day, as an example
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
sas_token = generate_container_sas(
account_name=container_client.account_name,
container_name=container_client.container_name,
user_delegation_key=user_delegation_key,
permission=ContainerSasPermissions(read=True),
expiry=expiry_time,
start=start_time
)
return sas_token
Использование SAS делегирования пользователей для авторизации объекта клиента
Токен делегирования пользователя SAS можно использовать для авторизации клиентского объекта, чтобы производить операции с контейнером или BLOB-данными на основе разрешений, предоставленных SAS.
В следующем примере кода показано, как использовать SAS делегирования пользователя, созданную в предыдущем примере, для авторизации объекта ContainerClient. Этот клиентский объект можно использовать для выполнения операций с ресурсом контейнера на основе разрешений, предоставленных SAS.
# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{container_client.url}?{sas_token}"
# Create a ContainerClient object with SAS authorization
container_client_sas = ContainerClient.from_container_url(container_url=sas_url)
Ресурсы
Дополнительные сведения о создании делегированного SAS для пользователей с помощью клиентской библиотеки Azure Blob Storage для Python, см. в следующих ресурсах.
Примеры кода
Операции REST API
Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Метод клиентской библиотеки для получения ключа делегирования пользователей использует следующие операции REST API:
- Получение ключа делегирования пользователей (REST API)
Ресурсы клиентской библиотеки
См. также
- Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS)
- Создание SAS для делегирования пользователя
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Python. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Python.