Использование хранимых политик доступа для делегирования доступа к службе хранилища Azure
Подписанный URL-адрес — это безопасный способ предоставить клиентам доступ, не раскрывая им учетные данные Azure. Обратная сторона такой простоты использования состоит в том, что любой пользователь с правильным SAS может получить доступ к файлу, пока SAS остается действительным. Единственный способ отозвать доступ к хранилищу — повторно создать ключи доступа. Чтобы использовать новый ключ, нужно обновить все приложения, которые используют старый общий ключ. Другой вариант — связать SAS с хранимой политикой доступа.
Когда вы добавили функциональность SAS в свое приложение, это выявило недостатки подхода с созданием SAS для каждого изображения (каждый со своим сроком действия и элементами управления доступом). Вы хотите обновить приложение, чтобы использовать хранимую политику доступа для контейнера хранилища. После установки политики следует протестировать, будет ли обновление срока действия затрагивать все созданные токены SAS.
В этом уроке вы узнаете, как:
- использование хранимой политики доступа;
- использование API служба хранилища C# для создания маркеров SAS, связанных с новой политикой доступа;
- проверка того, меняет ли обновление хранимой политики доступа на портале Azure все маркеры SAS.
Что такое хранимые политики доступа?
Хранимую политику доступа можно создать для четырех типов ресурсов хранилища:
- контейнеров BLOB-объектов;
- общих папок;
- Очереди
- Таблицы
Хранимую политику доступа, созданную для контейнера BLOB-объектов, можно использовать для всех содержащихся в контейнере BLOB-объектов и самого контейнера. Хранимая политика доступа создается со следующими свойствами:
- Идентификатор: имя, используемое для ссылки на хранимую политику доступа.
- Время начала: значение DateTimeOffset для даты и времени начала использования политики. Это значение может быть равно NULL.
- Время истечения срока действия: значение DateTimeOffset для даты и времени истечения срока действия политики. После этого времени запросы к хранилищу будут выдавать ошибку с кодом 403.
- Разрешения: список разрешений в виде строки, которая может быть одной или всеми acdlrw.
Создание хранимых политик доступа
Хранимую политику доступа можно создать, используя код C#, посредством портала Azure или команд Azure CLI.
С помощью кода C# .NET
BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
Id = "stored access policy identifier",
AccessPolicy = new BlobAccessPolicy
{
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
Permissions = "rw"
}
};
blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });
С помощью портала
На портале перейдите к учетной записи хранения, а затем к контейнеру хранилища BLOB-объектов. Слева выберите Политика доступа. Чтобы добавить новую хранимую политику доступа, выберите + Добавить политику.
Затем можно ввести все необходимые параметры.
С помощью команд Azure CLI
az storage container policy create \
--name <stored access policy identifier> \
--container-name <container name> \
--start <start time UTC datetime> \
--expiry <expiry time UTC datetime> \
--permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
--account-key <storage account key> \
--account-name <storage account name> \
Создайте токены SAS и свяжите их с хранимыми политиками доступа
Созданную хранимую политику доступа можно связать с любыми новыми маркерами SAS. Обновите код веб-приложения с диагностическими изображениями пациентов, добавив приведенный выше код. Затем в методе, создающем маркер SAS, сошлитесь на новую хранимую политику доступа.
Весь код, необходимый для создания маркера SAS:
BlobSasBuilder sas = new BlobSasBuilder
{
BlobContainerName = blob.BlobContainerName,
BlobName = blob.Name,
Resource = "b",
ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);
Его можно заменить ссылкой на новую политику доступа.
// Create a user SAS that only allows reading for a minute
BlobSasBuilder sas = new BlobSasBuilder
{
Identifier = "stored access policy identifier"
};
Для одного контейнера BLOB-объектов можно использовать до пяти хранимых политик доступа.