Руководство. Использование управляемого удостоверения, назначаемого системой, на виртуальной машине Windows для доступа к службе хранилища Azure
Управляемые удостоверения для ресурсов Azure — это функция идентификатора Microsoft Entra. Каждая служба Azure, которая поддерживает управляемые удостоверения для ресурсов Azure, используется в соответствии с собственной временной шкалой. Прежде чем начать работу, обязательно проверьте состояние доступности управляемых удостоверений для своего ресурса и ознакомьтесь с известными проблемами.
В этом руководстве описывается, как получить доступ к службе хранилища Azure, используя управляемое удостоверение, назначаемое системой, на виртуальной машине Windows. Узнайте следующие темы:
- создать контейнер больших двоичных объектов в учетной записи хранения;
- предоставить виртуальной машине Windows доступ на основе управляемого удостоверения, назначаемого системой, к учетной записи хранения;
- получить доступ и использовать его для вызова службы хранилища Azure.
Примечание.
Проверка подлинности Microsoft Entra для служба хранилища Azure доступна в общедоступной предварительной версии.
Необходимые компоненты
- См. дополнительные сведения об управляемых удостоверениях для ресурсов Azure.
- Если у вас нет учетной записи Azure, зарегистрируйтесь для получения бесплатной учетной записи, прежде чем продолжить.
- Для выполнения требуемых операций создания ресурсов и управления ролями учетной записи нужно предоставить разрешения роли "Владелец" в соответствующей области (подписка или группа ресурсов). Если нуждаетесь в помощи с назначением ролей, прочитайте статью Назначение ролей Azure с помощью портала Azure.
Включить
Включить управляемое удостоверение, назначаемое системой, можно одним щелчком мыши. Это можно сделать при создании виртуальной машины или в свойствах существующей виртуальной машины.
Чтобы включить управляемое удостоверение, назначаемое системой, для новой виртуальной машины, сделайте следующее:
Войдите на портал Azure
Создайте виртуальную машину с включенным удостоверением, назначенным системой.
Предоставление доступа
Создание учетной записи хранения
В этом разделе вы создадите учетную запись хранения.
Нажмите кнопку + Создать ресурс в верхнем левом углу окна портала Azure.
Щелкните Хранилище, а затем — Учетная запись хранения — BLOB-объект, файл, таблица, очередь.
В поле Имя введите имя учетной записи хранения.
Для параметра Модель развертывания выберите Resource Manager, а для поля Тип учетной записи — Хранилище (версия 1, общего назначения).
Убедитесь, что значения подписки и группы ресурсов соответствуют указанным при создании виртуальной машины на предыдущем шаге.
Нажмите кнопку создания.
Создание контейнера больших двоичных объектов и передача файла в учетную запись хранения
Так как файлам необходимо хранилище BLOB-объектов, нужно создать контейнер больших двоичных объектов, в котором будет храниться файл. Затем файл отправляется в контейнер больших двоичных объектов в новой учетной записи хранения.
Вернитесь к только что созданной учетной записи хранения.
В разделе Служба BLOB-объектов выберите Контейнеры.
Выберите + Контейнер в верхней части страницы.
В разделе Создание контейнера введите имя контейнера, а в разделе Общедоступный уровень доступа оставьте значение по умолчанию.
С помощью редактора по своему усмотрению создайте на локальном компьютере файл с именем hello world.txt. Откройте его и добавьте текст (без кавычек) "Hello world! :)", а затем сохраните его.
Передайте файл в только что созданный контейнер. Для этого щелкните имя контейнера, а затем нажмите кнопку Отправить.
В области Отправить BLOB-объект под полем Файлы щелкните значок папки и перейдите к файлу hello_world.txt на локальном компьютере, выберите этот файл и нажмите кнопку Отправить.
Предоставление доступа
В этом разделе показано, как предоставить виртуальной машине доступ к контейнеру службы хранилища Azure Вы можете использовать управляемое удостоверение, назначаемое системой, на виртуальной машине, чтобы извлечь данные в большом двоичном объекте службы хранилища Azure.
Вернитесь к только что созданной учетной записи хранения.
Выберите Управление доступом (IAM) .
Выберите Добавить>Добавить назначение ролей, чтобы открыть страницу "Добавление назначения ролей".
Назначьте следующую роль. Подробные инструкции см. в статье Назначение ролей 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 см. в статье ниже.