Руководство. Использование управляемого удостоверения, назначаемого системой, на виртуальной машине Windows для доступа к службе хранилища Azure

Управляемые удостоверения для ресурсов Azure — это функция идентификатора Microsoft Entra. Каждая служба Azure, которая поддерживает управляемые удостоверения для ресурсов Azure, используется в соответствии с собственной временной шкалой. Прежде чем начать работу, обязательно проверьте состояние доступности управляемых удостоверений для своего ресурса и ознакомьтесь с известными проблемами.

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

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

Примечание.

Проверка подлинности Microsoft Entra для служба хранилища Azure доступна в общедоступной предварительной версии.

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

Включить

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

Снимок экрана: вкладка

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

  1. Войдите на портал Azure

  2. Создайте виртуальную машину с включенным удостоверением, назначенным системой.

Предоставление доступа

Создание учетной записи хранения

В этом разделе вы создадите учетную запись хранения.

  1. Нажмите кнопку + Создать ресурс в верхнем левом углу окна портала Azure.

  2. Щелкните Хранилище, а затем — Учетная запись хранения — BLOB-объект, файл, таблица, очередь.

  3. В поле Имя введите имя учетной записи хранения.

  4. Для параметра Модель развертывания выберите Resource Manager, а для поля Тип учетной записиХранилище (версия 1, общего назначения).

  5. Убедитесь, что значения подписки и группы ресурсов соответствуют указанным при создании виртуальной машины на предыдущем шаге.

  6. Нажмите кнопку создания.

    Снимок экрана: создание учетной записи хранения.

Создание контейнера больших двоичных объектов и передача файла в учетную запись хранения

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

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

  2. В разделе Служба BLOB-объектов выберите Контейнеры.

  3. Выберите + Контейнер в верхней части страницы.

  4. В разделе Создание контейнера введите имя контейнера, а в разделе Общедоступный уровень доступа оставьте значение по умолчанию.

    Снимок экрана: создание контейнера хранилища.

  5. С помощью редактора по своему усмотрению создайте на локальном компьютере файл с именем hello world.txt. Откройте его и добавьте текст (без кавычек) "Hello world! :)", а затем сохраните его.

  6. Передайте файл в только что созданный контейнер. Для этого щелкните имя контейнера, а затем нажмите кнопку Отправить.

  7. В области Отправить BLOB-объект под полем Файлы щелкните значок папки и перейдите к файлу hello_world.txt на локальном компьютере, выберите этот файл и нажмите кнопку Отправить. Снимок экрана: экран отправки текстового файла.

Предоставление доступа

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

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

  2. Выберите Управление доступом (IAM) .

  3. Выберите Добавить>Добавить назначение ролей, чтобы открыть страницу "Добавление назначения ролей".

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

    Параметр Значение
    Роль Читатель данных больших двоичных объектов хранилища
    Назначить доступ для Управляемое удостоверение
    Назначаемое системой Виртуальная машина
    Выбрать <ваша виртуальная машина>

    Снимок экрана: страница добавления назначения ролей.

Доступ к данным

служба хранилища Azure изначально поддерживает проверку подлинности Microsoft Entra, поэтому он может напрямую принимать маркеры доступа, полученные с помощью управляемого удостоверения. Этот подход использует интеграцию служба хранилища Azure с идентификатором Microsoft Entra ID и отличается от предоставления учетных данных в строка подключения.

Ниже приведен пример кода .NET для установки подключения к службе хранилища Azure. В примере используется маркер доступа, а затем считывается содержимое ранее созданного файла. Этот код должен выполняться на виртуальной машине, чтобы иметь доступ к конечной точке управляемого удостоверения виртуальной машины. Для использования метода с маркером доступа необходима платформа .NET Framework 4.6 или более поздней версии. Замените значение <URI to blob file> на соответствующее. Вы можете получить это значение, если перейдете в созданный и отправленный в хранилище BLOB-объектов файл и скопируете URL-адрес в разделе свойств страницы обзора.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace StorageOAuthToken
{
    class Program
    {
        static void Main(string[] args)
        {
            //get token
            string accessToken = GetMSIToken("https://storage.azure.com/");

            //create token credential
            TokenCredential tokenCredential = new TokenCredential(accessToken);

            //create storage credentials
            StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);

            Uri blobAddress = new Uri("<URI to blob file>");

            //create block blob using storage credentials
            CloudBlockBlob blob = new CloudBlockBlob(blobAddress, storageCredentials);

            //retrieve blob contents
            Console.WriteLine(blob.DownloadText());
            Console.ReadLine();
        }

        static string GetMSIToken(string resourceID)
        {
            string accessToken = string.Empty;
            // Build request to acquire MSI token
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" + resourceID);
            request.Headers["Metadata"] = "true";
            request.Method = "GET";

            try
            {
                // Call /token endpoint
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Pipe response Stream to a StreamReader, and extract access token
                StreamReader streamResponse = new StreamReader(response.GetResponseStream());
                string stringResponse = streamResponse.ReadToEnd();
                JavaScriptSerializer j = new JavaScriptSerializer();
                Dictionary<string, string> list = (Dictionary<string, string>)j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
                accessToken = list["access_token"];
                return accessToken;
            }
            catch (Exception e)
            {
                string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
                return accessToken;
            }
        }
    }
}

В ответе содержится содержимое файла:

Hello world! :)

Отключить

Чтобы отключить назначенное системой удостоверение на виртуальной машине, задайте значение отключено для состояния назначенного системой удостоверения.

Снимок экрана: вкладка

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

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