Безопасный доступ к данным приложения

Это руководство представляет собой первую часть цикла. Вы узнаете, как обеспечить безопасность доступа к учетной записи хранения.

В третьей части цикла вы узнаете, как выполнять такие задачи:

  • Использование маркеров SAS для доступа к эскизам изображений
  • Включение шифрования на стороне сервера
  • Включение транспорта только по протоколу HTTPS

Хранилище BLOB-объектов представляет собой надежную службу для хранения файлов для приложений. Это руководство дополняет сведения из предыдущего раздела и описывает процедуру защиты доступа к учетной записи хранения из веб-приложения. По окончании работы изображения шифруются, и для доступа к эскизам веб-приложение использует маркеры безопасности SAS.

Предварительные требования

Для работы с этим руководством необходимо изучить предыдущее руководство по использованию хранилища — Автоматическое изменение размера переданных изображений с помощью Сетки событий.

Установка общего доступа к контейнеру

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

$blobStorageAccount="<blob_storage_account>"

blobStorageAccountKey=(Get-AzStorageAccountKey -ResourceGroupName myResourceGroup -AccountName $blobStorageAccount).Key1

Set-AzStorageAccount -ResourceGroupName "MyResourceGroup" -AccountName $blobStorageAccount -KeyName $blobStorageAccountKey -AllowBlobPublicAccess $false

Настройка маркеров SAS для эскизов

В первой части этой серии учебников в веб-приложении отображались изображения из общедоступного контейнера. В этой части вы будете использовать маркеры SAS для получения изображений эскизов. Маркеры SAS позволяют предоставлять ограниченный доступ к контейнеру или BLOB-объекту на основе IP-адреса, протокола, интервала времени или имеющихся прав. Дополнительные сведения о подписанных URL-адресах см. в статье об использование подписанных URL-адресов SAS в службе хранилища Azure.

В этом примере репозиторий исходного кода использует ветвь sasTokens с примером обновленного кода. Удалите существующее развертывание GitHub с помощью команды az webapp deployment source delete. Затем настройте для веб-приложения развертывание GitHub с помощью команды az webapp deployment source config.

В следующей команде <web-app> — это имя веб-приложения.

az webapp deployment source delete --name <web-app> --resource-group myResourceGroup

az webapp deployment source config --name <web_app> \
    --resource-group myResourceGroup --branch sasTokens --manual-integration \
    --repo-url https://github.com/Azure-Samples/storage-blob-upload-from-webapp
az webapp deployment source delete --name <web-app> --resource-group myResourceGroup

az webapp deployment source config --name <web_app> `
    --resource-group myResourceGroup --branch sasTokens --manual-integration `
    --repo-url https://github.com/Azure-Samples/storage-blob-upload-from-webapp

Ветвь sasTokens репозитория обновляет файл StorageHelper.cs. Она заменяет задачу GetThumbNailUrls на пример кода ниже. Обновленная задача получает URL-адреса эскиза с помощью класса BlobSasBuilder, чтобы указать время начала, время окончания и разрешения для маркера SAS. Развернутое веб-приложение получает эскизы с URL-адресом с помощью токена SAS. В следующем примере показана обновленная задача.

public static async Task<List<string>> GetThumbNailUrls(AzureStorageConfig _storageConfig)
{
    List<string> thumbnailUrls = new List<string>();

    // Create a URI to the storage account
    Uri accountUri = new Uri("https://" + _storageConfig.AccountName + ".blob.core.windows.net/");

    // Create BlobServiceClient from the account URI
    BlobServiceClient blobServiceClient = new BlobServiceClient(accountUri);

    // Get reference to the container
    BlobContainerClient container = blobServiceClient.GetBlobContainerClient(_storageConfig.ThumbnailContainer);

    if (container.Exists())
    {
        // Set the expiration time and permissions for the container.
        // In this case, the start time is specified as a few 
        // minutes in the past, to mitigate clock skew.
        // The shared access signature will be valid immediately.
        BlobSasBuilder sas = new BlobSasBuilder
        {
            Resource = "c",
            BlobContainerName = _storageConfig.ThumbnailContainer,
            StartsOn = DateTimeOffset.UtcNow.AddMinutes(-5),
            ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
        };

        sas.SetPermissions(BlobContainerSasPermissions.All);

        // Create StorageSharedKeyCredentials object by reading
        // the values from the configuration (appsettings.json)
        StorageSharedKeyCredential storageCredential =
            new StorageSharedKeyCredential(_storageConfig.AccountName, _storageConfig.AccountKey);

        // Create a SAS URI to the storage account
        UriBuilder sasUri = new UriBuilder(accountUri);
        sasUri.Query = sas.ToSasQueryParameters(storageCredential).ToString();

        foreach (BlobItem blob in container.GetBlobs())
        {
            // Create the URI using the SAS query token.
            string sasBlobUri = container.Uri + "/" +
                                blob.Name + sasUri.Query;

            //Return the URI string for the container, including the SAS token.
            thumbnailUrls.Add(sasBlobUri);
        }
    }
    return await Task.FromResult(thumbnailUrls);
}

В предыдущей задаче используются следующие классы, свойства и методы:

Class Свойства Методы
StorageSharedKeyCredential
BlobServiceClient GetBlobContainerClient
BlobContainerClient URI Exists
GetBlobs
BlobSasBuilder SetPermissions
ToSasQueryParameters
BlobItem имя;
UriBuilder Запрос
Список Добавление

Шифрование службы хранилища Azure

Шифрование службы хранилища Azure помогает защитить данные путем шифрования неактивных данных и управления шифрованием и расшифровкой. Используется 256-битное шифрование AES, самая надежная технология блочного шифрования на сегодняшний день.

Вы можете делегировать корпорации Майкрософт управление ключами шифрования или использовать собственные ключи с ключами, управляемыми клиентами, хранящимися в Azure Key Vault или на устройстве HSM (Hardware Security Model), управляемом Key Vault (предварительная версия). Дополнительные сведения см. в статье Ключи, управляемые клиентом, для шифрования службы хранилища Azure.

Шифрование службы хранилища Azure автоматически шифрует данные на всех уровнях производительности ("Стандартный" и "Премиум"), во всех моделях развертывания (Azure Resource Manager и классической) и во всех службах хранилища Azure (больших двоичных объектов, очередей, таблиц и файлов).

Включение только HTTPS

Чтобы обеспечить безопасность запросов данных в учетную запись хранения и из нее, можно разрешить только запросы HTTPS. Обновите необходимый протокол для учетной записи хранения с помощью команды az storage account update.

az storage account update --resource-group myresourcegroup --name <storage-account-name> --https-only true

Протестируйте подключение, использующее curl, с помощью протокола HTTP.

curl http://<storage-account-name>.blob.core.windows.net/<container>/<blob-name> -I

Теперь, когда требуется безопасная передача, появляется следующее сообщение:

HTTP/1.1 400 The account being accessed does not support http.

Дальнейшие действия

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

  • Использование маркеров SAS для доступа к эскизам изображений
  • Включение шифрования на стороне сервера
  • Включение транспорта только по протоколу HTTPS

Перейдите к четвертой части, чтобы узнать, как отслеживать приложение облачного хранилища и устранять его неполадки.