Использование хранимых политик доступа для делегирования доступа к службе хранилища Azure

Завершено

Подписанный URL-адрес — это безопасный способ предоставить клиентам доступ, не раскрывая им учетные данные Azure. Обратная сторона такой простоты использования состоит в том, что любой пользователь с правильным SAS может получить доступ к файлу, пока SAS остается действительным. Единственный способ отозвать доступ к хранилищу — повторно создать ключи доступа. Чтобы использовать новый ключ, нужно обновить все приложения, которые используют старый общий ключ. Другой вариант — связать SAS с хранимой политикой доступа.

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

В этом уроке вы узнаете, как:

  • использование хранимой политики доступа;
  • использование API служба хранилища C# для создания маркеров SAS, связанных с новой политикой доступа;
  • проверка того, меняет ли обновление хранимой политики доступа на портале Azure все маркеры SAS.

Что такое хранимые политики доступа?

Хранимую политику доступа можно создать для четырех типов ресурсов хранилища:

  • контейнеров BLOB-объектов;
  • общих папок;
  • Очереди
  • Таблицы

Хранимую политику доступа, созданную для контейнера BLOB-объектов, можно использовать для всех содержащихся в контейнере BLOB-объектов и самого контейнера. Хранимая политика доступа создается со следующими свойствами:

  • Идентификатор: имя, используемое для ссылки на хранимую политику доступа.
  • Время начала: значение DateTimeOffset для даты и времени начала использования политики. Это значение может быть равно NULL.
  • Время истечения срока действия: значение DateTimeOffset для даты и времени истечения срока действия политики. После этого времени запросы к хранилищу будут выдавать ошибку с кодом 403.
  • Разрешения: список разрешений в виде строки, которая может быть одной или всеми acdlrw.

Screenshot of the Azure portal showing a stored access policy.

Создание хранимых политик доступа

Хранимую политику доступа можно создать, используя код 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-объектов. Слева выберите Политика доступа. Чтобы добавить новую хранимую политику доступа, выберите + Добавить политику.

Затем можно ввести все необходимые параметры.

Screenshot of the options for adding an access policy.

С помощью команд 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-объектов можно использовать до пяти хранимых политик доступа.