Руководств по доступу к службам 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, где злоумышленники смогут его найти. Есть более безопасный способ предоставить веб-приложению доступ к данным — применить управляемое удостоверение.

Управляемое удостоверение из Azure Active Directory (Azure AD) позволяет Службам приложений получать доступ к ресурсам через управление доступом на основе ролей (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
    Производительность Стандартный
    Тип учетной записи StorageV2 (учетная запись общего назначения версии 2)
    Репликация Геоизбыточное хранилище с доступом на чтение (RA-GRS)
    Уровень доступа Горячий
  8. Выберите Просмотр и создание, чтобы просмотреть настройки учетной записи хранения и создать учетную запись.

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

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

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

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

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

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

  5. Задайте для контейнера уровень общего доступа. Уровень по умолчанию — Private (no anonymous access) (Частный (не разрешать анонимный доступ)).

  6. Нажмите кнопку ОК, чтобы создать контейнер.

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

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

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

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

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

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

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

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

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

Установите пакет NuGet для хранилища BLOB-объектов, чтобы организовать работу с хранилищем BLOB-объектов, и пакет NuGet клиентской библиотеки службы удостоверений Azure для .NET, чтобы выполнять проверку подлинности с учетными данными Azure AD. Для установки клиентских библиотек можно использовать интерфейс командной строки .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.

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

Удаление регистрации приложения

В меню портала выберите Azure Active Directory>Регистрация приложений. Затем выберите созданное вами приложение. Screenshot that shows selecting app registration.

В разделе общих сведений регистрации приложения выберите Удалить. Screenshot that shows deleting the app registration.

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

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

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