Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Общая подпись доступа (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 на Java.
О делегировании пользователей 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 Storage с использованием подписей для совместного доступа (SAS).
Назначение ролей Azure для доступа к данным
Когда субъект безопасности Microsoft Entra пытается получить доступ к данным, этот субъект безопасности должен иметь разрешения на ресурс. Независимо от того, является ли субъект безопасности управляемым удостоверением в Azure или аккаунтом пользователя Microsoft Entra для выполнения кода в среде разработки, субъект безопасности должен быть назначен на роль Azure, которая предоставляет доступ к данным. Дополнительные сведения о предоставлении разрешений в Azure RBAC см. в статье Назначение роли Azure для доступа к данным BLOB-объектов.
Настройка проекта
Чтобы работать с примерами кода в этой статье, добавьте следующие директивы импорта:
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;
Получите проверенные учетные данные токена
Чтобы получить токен доступа, который код может использовать для авторизации запросов к хранилищу BLOB-объектов, создайте экземпляр класса DefaultAzureCredential. Дополнительные сведения об использовании класса DefaultAzureCredential для авторизации управляемой идентичности для доступа к хранилищу Blob можно найти в клиентской библиотеке удостоверений Azure для Java.
В следующем фрагменте кода показано, как получить учетные данные аутентифицированного токена и использовать их для создания клиента службы для хранилища BLOB.
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.windows.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Дополнительные сведения о авторизации доступа к хранилищу BLOB-объектов из приложений с помощью пакета SDK для Java см. в статье azure authentication with Java and Azure Identity.
Получение ключа для делегирования пользователей
Каждый SAS подписывается ключом. Чтобы создать SAS для делегирования пользователей, необходимо сначала запросить ключ для делегирования пользователей, который позже нужно будет использовать для подписания SAS. Ключ делегирования пользователей аналогичен ключу учетной записи, используемому для подписи SAS службы или SAS учетной записи, за исключением того, что он использует учетные данные Microsoft Entra. Когда клиент запрашивает ключ делегирования с помощью токена OAuth 2.0, хранилище BLOB-объектов возвращает его от имени пользователя.
После того как у вас есть ключ делегирования пользователей, вы можете использовать этот ключ для создания любого количества подписей с ограниченным доступом для делегирования пользователей на протяжении всего срока действия ключа. Ключ делегирования пользователей не зависит от маркера OAuth 2.0, используемого для его получения, поэтому маркер не должен быть продлен, если ключ по-прежнему действителен. Можно указать срок действия ключа до семи дней.
Используйте один из следующих методов, чтобы запросить ключ для делегирования пользователей:
В следующем примере кода показано, как запросить ключ делегирования пользователей:
public UserDelegationKey requestUserDelegationKey(BlobServiceClient blobServiceClient) {
// Request a user delegation key that's valid for 1 day, as an example
UserDelegationKey userDelegationKey = blobServiceClient.getUserDelegationKey(
OffsetDateTime.now().minusMinutes(5),
OffsetDateTime.now().plusDays(1));
return userDelegationKey;
}
Создание SAS для делегирования пользователя
Вы можете создать SAS делегирования пользователя для контейнера или объекта бинарных данных в зависимости от потребностей вашего приложения.
Получив ключ делегирования пользователей, можно создать SAS делегирования пользователей. Можно создать пользовательский делегированный SAS, чтобы предоставить ограниченный доступ к ресурсу контейнера, используя следующий метод из экземпляра BlobContainerClient.
- generateUserDelegationSas (генерация SAS для делегирования пользователя)
Ключ делегирования пользователей для подписывания SAS передается этому методу вместе с указанными значениями для BLOBServiceSasSignatureValues. Разрешения указываются как объект BlobContainerSasPermission.
В следующем примере кода показано, как создать SAS делегирования пользователей для контейнера:
public String createUserDelegationSASContainer(BlobContainerClient containerClient, UserDelegationKey userDelegationKey) {
// Create a SAS token that's valid for 1 day, as an example
OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
// Assign read permissions to the SAS token
BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
.setReadPermission(true);
BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
.setStartTime(OffsetDateTime.now().minusMinutes(5));
String sasToken = containerClient.generateUserDelegationSas(sasSignatureValues, userDelegationKey);
return sasToken;
}
Использование SAS делегирования пользователей для авторизации клиентского объекта
SAS делегирования пользователей можно использовать для авторизации объекта клиента для выполнения операций с контейнером или BLOB-объектом на основе разрешений, заданных SAS.
В следующем примере кода показано, как использовать делегированный SAS пользователя, созданный в предыдущем примере, чтобы авторизовать объект BlobContainerClient. Этот клиентский объект можно использовать для выполнения операций с ресурсом контейнера на основе разрешений, предоставленных SAS.
// Create a SAS token for a container
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("sample-container");
String sasToken = createUserDelegationSASContainer(containerClient, userDelegationKey);
// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
.endpoint(containerClient.getBlobContainerUrl())
.sasToken(sasToken)
.buildClient();
Ресурсы
Дополнительные сведения о создании SAS делегирования пользователей с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Java см. в следующих ресурсах.
Примеры кода
Операции REST API
Пакет SDK Azure для Java содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы Java. Метод клиентской библиотеки для получения ключа делегирования пользователей использует следующую операцию REST API:
- Получение ключа делегирования пользователей (REST API)
Ресурсы клиентской библиотеки
См. также
- Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS)
- Создание SAS для делегирования пользователя
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Java. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Java.