Руководств по доступу к службам Azure из веб-приложения .NET

Узнайте, как с помощью управляемых удостоверений получить доступ к службам, таким как служба хранилища Azure, из веб-приложения (не от имени вошедшего в систему пользователя), выполняемого в Службе приложений Azure. В этом руководстве демонстрируется подключение к службе хранилища Azure в качестве примера.

С помощью этого учебника можно безопасно получить доступ к любой службе, которая поддерживает управляемое удостоверение (B на следующем рисунке):

  • Хранилище Azure
  • База данных SQL Azure
  • Azure Key Vault

Diagram that shows how to access storage.

Предположим, что вам нужен безопасный доступ из веб-приложения к службам Azure (к службе хранилища Azure, Базе данных SQL Azure, Azure Key Vault или другим службам). Вы могли бы использовать общий ключ, но это создаст дополнительные проблемы с оперативной безопасностью, то есть с распределением прав на создание, развертывание секрета и управление им. Также этот ключ может случайно оказаться отправленным в GitHub, где злоумышленники смогут его найти. Есть более безопасный способ предоставить веб-приложению доступ к данным — применить управляемое удостоверение.

Управляемое удостоверение из идентификатора Microsoft Entra позволяет Служба приложений получать доступ к ресурсам с помощью управления доступом на основе ролей (RBAC), не требуя учетных данных приложения. Когда вы назначаете веб-приложению управляемое удостоверение, Azure создает и распространяет сертификат. Вам не придется беспокоиться об управлении секретами или учетными данными приложения.

В этом руководстве описано следующее:

  • создавать для веб-приложения управляемое удостоверение, назначаемое системой;
  • создавать учетную запись хранения и контейнер хранилища BLOB-объектов Azure;
  • обращаться к хранилищу из веб-приложения с помощью управляемых удостоверений.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Необходимые компоненты

Включение управляемого удостоверения в приложении

Если вы создавали и публиковали веб-приложение с помощью Visual Studio, управляемое удостоверение уже включено для этого приложения. В Службе приложений в области слева выберите Удостоверение, а затем — Назначаемое системой. Убедитесь, что для параметра Состояние задано значение Вкл. В противном случае нажмите Вкл, а затем Сохранить. Щелкните Да в диалоговом окне подтверждения, чтобы включить управляемое системой удостоверение. Если управляемое удостоверение включено, для состояния устанавливается значение Вкл. и будет доступен идентификатор объекта.

Screenshot that shows the System assigned identity option.

Это действие создает новый идентификатор объекта, который отличается от идентификатора приложения, созданного на панели Проверка подлинности и авторизация. Скопируйте идентификатор объекта для управляемого удостоверения, назначаемого системой. Оно понадобится вам позже.

Создание учетной записи хранения и контейнера хранилища BLOB-объектов

Теперь вы готовы создать учетную запись хранения и контейнер хранилища BLOB-объектов.

Каждая учетная запись хранения должна принадлежать группе ресурсов Azure. Группа ресурсов — это логический контейнер для группирования служб Azure. При создании учетной записи хранения у вас есть возможность создать новую или использовать имеющуюся группу ресурсов. В этой статье показано, как создать группу ресурсов.

Учетная запись хранения общего назначения версии 2 предоставляет доступ ко всем службам хранилища Azure (большим двоичным объектам, файлам, очередям, таблицам и дискам). С помощью описанной здесь процедуры создается учетная запись хранения общего назначения версии 2, но создание любого типа учетной записи хранения происходит таким же образом.

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

Чтобы создать учетную запись хранения общего назначения версии 2 на портале Azure, сделайте следующее:

  1. В меню портала Azure выберите Все службы. В списке ресурсов введите Учетные записи хранения. Как только вы начнете вводить символы, список отфильтруется соответствующим образом. Выберите Учетные записи хранения.

  2. В появившемся окне Учетные записи хранения выберите Создать.

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

  4. В поле Группа ресурсов выберите из раскрывающегося списка ту группу ресурсов, в которой размещено веб-приложение.

  5. Далее введите имя своей учетной записи хранения. Выбранное вами имя должно быть уникальным в Azure. Также имя должно содержать от 3 до 24 символов и может состоять только из цифр и строчных букв.

  6. Выберите расположение (регион) учетной записи хранения или используйте значение по умолчанию.

  7. Оставьте в следующих полях значения по умолчанию.

    Поле значение
    Модель развертывания Resource Manager
    Производительность Standard
    Тип учетной записи StorageV2 (учетная запись общего назначения версии 2)
    Репликация геоизбыточное хранилище с доступом на чтение (RA-GRS).
    Уровень доступа высокая
  8. Выберите Просмотр и создание, чтобы просмотреть настройки учетной записи хранения и создать учетную запись.

  9. Выберите Создать.

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

  1. Войдите в новую учетную запись хранения на портале Azure.

  2. На странице учетной записи хранения в меню слева перейдите в раздел Хранилище данных и выберите Контейнеры.

  3. Нажмите кнопку + Контейнер.

  4. Введите имя для нового контейнера. Имя контейнера должно содержать символы только буквы нижнего регистра, цифры и символ дефиса (-), и может начинаться только с буквы или цифры.

  5. Задайте уровень общего доступа к контейнеру. По умолчанию используется уровень Частный (без анонимного доступа).

  6. Выберите ОК, чтобы создать контейнер.

Предоставление доступа к учетной записи хранения

Чтобы получить возможность создавать, считывать и удалять большие двоичные объекты, вам необходимо предоставить веб-приложению доступ к учетной записи хранения. На предыдущем шаге вы настроили управляемое удостоверение для веб-приложения, которое выполняется в Службе приложений. С помощью Azure RBAC вы можете предоставить этому управляемому удостоверению доступ к ресурсу, как и любому другому субъекту безопасности. Роль "Участник для данных BLOB-объектов хранилища" предоставляет веб-приложению (которое представлено этим управляемым удостоверением, назначаемым системой) доступ на чтение, запись и удаление самого контейнера больших двоичных объектов и данных в нем.

Примечание.

Некоторые операции с частными контейнерами BLOB-объектов не поддерживаются Azure RBAC, например просмотр больших двоичных объектов или копирование больших двоичных объектов между учетными записями. Контейнер BLOB-объектов с частным уровнем доступа требует маркер SAS для любой операции, которая не авторизована Azure RBAC. Дополнительные сведения см. в разделе "Когда следует использовать подписанный URL-адрес".

На портале Azure откройте страницу учетной записи хранения, чтобы предоставить доступ веб-приложению. В области слева выберите Управление доступом (IAM), а затем — Назначение ролей. Вы увидите список субъектов, которым разрешен доступ к учетной записи хранения. Теперь вам нужно добавить назначение роли для робота, то есть службы приложений, которая будет обращаться к этой учетной записи хранения. Выберите Добавить>Добавить назначение ролей, чтобы открыть страницу Добавление назначения ролей.

Назначьте роль Участник данных BLOB-объектов хранилищаслужбе приложений в области подписки. Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

Теперь веб-приложение сможет обращаться к этой учетной записи хранения.

Доступ к хранилищу BLOB-объектов

Класс DefaultAzureCredential используется для получения учетных данных токена для кода, чтобы авторизовать запросы в службу хранилища Azure. Создайте экземпляр класса DefaultAzureCredential, который использует управляемое удостоверение для получения токенов и их подключения к клиенту службы. Приведенный ниже пример кода получает учетные данные токена с пройденной проверкой подлинности и использует их для создания объекта клиента службы, который отправляет новый большой двоичный объект.

Просмотреть этот код как часть примера приложения можно на сайте GitHub.

Установка пакетов клиентских библиотек

Установите пакет NuGet служба хранилища BLOB-объектов для работы с служба хранилища BLOB-объектов и клиентской библиотекой удостоверений Azure для пакета NuGet для .NET, чтобы пройти проверку подлинности с помощью учетных данных Microsoft Entra. Для установки клиентских библиотек можно использовать интерфейс командной строки .NET Core или консоль диспетчера пакетов в Visual Studio.

Командная строка .NET Core

  1. Откройте командную строку и перейдите в каталог с файлом проекта.

  2. Выполните команды установки.

    dotnet add package Azure.Storage.Blobs
    
    dotnet add package Azure.Identity
    

Консоль диспетчера пакетов

  1. Откройте проект или решение в Visual Studio, а затем — консоль с помощью команды Средства>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  2. Выполните команды установки.

    Install-Package Azure.Storage.Blobs
    
    Install-Package Azure.Identity
    

Пример .NET

using System;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using System.IO;
using Azure.Identity;

// Some code omitted for brevity.

static public async Task UploadBlob(string accountName, string containerName, string blobName, string blobContents)
{
    // Construct the blob container endpoint from the arguments.
    string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);

    // Get a credential and create a client object for the blob container.
    BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

    try
    {
        // Create the container if it does not exist.
        await containerClient.CreateIfNotExistsAsync();

        // Upload text to a new block blob.
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            await containerClient.UploadBlobAsync(blobName, stream);
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

Очистка ресурсов

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

Удаление группы ресурсов

В меню портала Azure щелкните Группы ресурсов и выберите группу ресурсов, содержащую службу приложений и план службы приложений.

Щелкните Удалить группу ресурсов. Одновременно с группой ресурсов удаляются все содержащиеся в ней ресурсы.

Screenshot that shows deleting the resource group.

Выполнение этой команды может занять несколько минут.

Следующие шаги

Из этого руководства вы узнали, как:

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