Руководство. Использование виртуальной машины и виртуальной машины Windows для доступа к ресурсам Azure

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

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

Получение доступа к Azure Data Lake Storage с помощью назначаемого системой управляемого удостоверения на виртуальной машине Windows

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

В этой статье вы узнаете, как выполнять следующие задачи.

  • Предоставление виртуальной машине доступа к Azure Data Lake Store.
  • Получение маркера доступа с использованием удостоверения виртуальной машины и получение доступа к Azure Data Lake Store с его помощью.

Включить

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

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

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

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

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

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

Вы можете предоставить виртуальной машине доступ к файлам и папкам в Azure Data Lake Store. Для выполнения этого шага можно использовать имеющееся хранилище Azure Data Lake Store или создать новое.

Чтобы создать хранилище озера данных с помощью портал Azure, ознакомьтесь с кратким руководством по Azure Data Lake Store. В документации по Azure Data Lake Store также есть краткие руководства, описывающие использование Azure CLI и Azure PowerShell.

В Azure Data Lake Store создайте новую папку и предоставьте ей разрешение для назначаемого системой удостоверения виртуальной машины. Удостоверению требуются права на чтение, запись и выполнение файлов в этой папке:

  1. На портале Azure щелкните Data Lake Store в области навигации слева.
  2. Выберите хранилище Data Lake Store, которое следует использовать для этого руководства.
  3. Щелкните Обозреватель данных на панели ввода команд.
  4. Выбрана корневая папка Data Lake Store. На панели команд щелкните Доступ.
  5. Выберите Добавить. В поле Выбор введите имя виртуальной машины, например DevTestVM. Выберите виртуальную машину из результатов поиска, а затем нажмите кнопку "Выбрать".
  6. Выберите " Выбрать разрешения", а затем "Чтение " и "Выполнить". Добавьте в эту папку и выберите только разрешение на доступ.
  7. Нажмите кнопку "ОК", а затем закройте колонку Access . Разрешения должны быть успешно добавлены.
  8. Затем создайте новую папку. Выберите новую папку на панели команд и присвойте новой папке имя. Например, TestFolder, а затем нажмите кнопку "ОК".
  9. Выберите созданную папку, а затем выберите Access на панели команд.
  10. Нажмите кнопку "Добавить", а затем в поле "Выбрать" введите имя виртуальной машины и нажмите кнопку "Выбрать".
  11. Выберите "Выбрать разрешения", а затем "Чтение", "Запись" и "Выполнить". Добавьте в эту папку и добавьте в качестве записи разрешения доступа и записи разрешений по умолчанию.
  12. Щелкните ОК. Разрешение должно быть успешно добавлено.

Теперь назначаемое системой управляемое удостоверение виртуальной машины сможет выполнять все операции с файлами в созданной папке. Сведения об управлении доступом к Data Lake Store см. в контроль доступа в Data Lake Store.

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

Azure Data Lake Store изначально поддерживает проверку подлинности Microsoft Entra, чтобы они могли напрямую принимать маркеры доступа, полученные с помощью управляемых удостоверений для ресурсов Azure. Чтобы пройти проверку подлинности в файловой системе Data Lake Store, вы отправляете маркер доступа, выданный идентификатором Microsoft Entra, в конечную точку файловой системы Data Lake Store в заголовке авторизации. Заголовок имеет формат Bearer <ACCESS_TOKEN_VALUE>.

Дополнительные сведения о поддержке Data Lake Store для проверки подлинности Microsoft Entra см. в статье "Проверка подлинности с помощью Data Lake Store с помощью идентификатора Microsoft Entra".

Примечание.

Клиентские пакеты SDK файловой системы Data Lake Storage пока не поддерживают управляемые удостоверения для ресурсов Azure.

В этом руководстве выполняется аутентификация в файловой системе Data Lake Store посредством REST API с использованием PowerShell для выполнения запросов REST. Чтобы использовать назначаемое системой управляемое удостоверение виртуальной машины для проверки подлинности, нужно отправлять запросы с виртуальной машины.

  1. На портале перейдите к Виртуальные машины, перейдите на виртуальную машину Windows. Затем в разделе "Обзор" выберите "Подключиться".

  2. Введите имя пользователя и пароль , добавленные при создании виртуальной машины Windows.

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

  4. С помощью командлета PowerShell Invoke-WebRequest выполните запрос к локальным управляемым удостоверениям для конечной точки ресурсов Azure, чтобы получить маркер доступа для Azure Data Lake Store. Идентификатор ресурса для Data Lake Store: https://datalake.azure.net/. Data Lake точно соответствует идентификатору ресурса, поэтому косая черта важна.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Преобразуйте ответ из объекта JSON в объект PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Извлеките маркер доступа из ответа.

    $AccessToken = $content.access_token
    
  5. Убедитесь, что все настроено правильно. С помощью командлета PowerShell Invoke-WebRequest выполните запрос к конечной точке REST Data Lake Store, чтобы получить список папок в корневой папке. Важно, чтобы строка Bearer в заголовке авторизации содержит заглавную букву "B". Имя хранилища Data Lake Store можно найти в разделе Обзор области Data Lake Store на портале Azure.

    Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
    

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

    StatusCode        : 200
    StatusDescription : OK
    Content           : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..."
    RawContent        : HTTP/1.1 200 OK
                        Pragma: no-cache
                        x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict-Transport-Security: ma...
    Forms             : {}
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528],
                        [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        : System.__ComObject
    RawContentLength  : 556
    
  6. Теперь попробуйте отправить файл в Data Lake Store. Сначала создайте файл для передачи.

    echo "Test file." > Test1.txt
    
  7. С помощью командлета PowerShell Invoke-WebRequest отправьте запрос в конечную точку REST Data Lake Store для отправки файла в созданную ранее папку. Этот запрос выполняется в два этапа.

    1. Выполните запрос и получите перенаправление в место отправки файла.
    2. Отправьте файл . Не забудьте задать имя папки и файла соответствующим образом, если вы использовали разные значения, отличные от указанных в этом руководстве.
    $HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

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

    PS C:\> $HdfsRedirectResponse
    
    StatusCode        : 307
    StatusDescription : Temporary Redirect
    Content           : {}
    RawContent        : HTTP/1.1 307 Temporary Redirect
                        Pragma: no-cache
                        x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosn...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], 
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

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

    Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

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

    StatusCode        : 201
    StatusDescription : Created
    Content           : {}
    RawContent        : HTTP/1.1 201 Created
                        Pragma: no-cache
                        x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307],
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

Наконец, вы можете использовать другие API файловой системы Data Lake Store для добавления и скачивания файлов и многого другого.

Отключить

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

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

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

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

  • создать контейнер больших двоичных объектов в учетной записи хранения;
  • предоставить виртуальной машине Windows доступ на основе управляемого удостоверения, назначаемого системой, к учетной записи хранения;
  • получить доступ и использовать его для вызова службы хранилища 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 с помощью учетных данных SAS

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

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

Вы изучите следующие темы:

  • Создание учетной записи хранилища
  • предоставлять виртуальной машине доступ к подписанным URL-адресам учетной записи хранения в Resource Manager;
  • получать маркер доступа с помощью удостоверения виртуальной машины и использовать его для извлечения SAS из Resource Manager.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

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

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

  1. Выберите хранилище, а затем учетную запись хранения.

  2. На панели "Создание учетной записи хранения" введите имя учетной записи хранения.

  3. Убедитесь, что для модели развертывания и типа учетной записи задано значение Resource Manager и Общего назначения.

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

  5. Выберите "Создать", чтобы создать учетную запись хранения.

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

Создание контейнера

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

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

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

  3. Выберите +Контейнер в верхней части страницы, а затем появится панель нового контейнера .

  4. Присвойте контейнеру имя, определите уровень доступа, а затем нажмите кнопку "ОК". Указанное здесь имя используется далее в руководстве.

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

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

служба хранилища Azure изначально не поддерживает проверку подлинности Microsoft Entra. Тем не менее управляемое удостоверение службы можно использовать для извлечения SAS хранилища из Resource Manager и последующего доступа к этому хранилищу. На этом шаге мы предоставим управляемому удостоверению, назначаемому системой, виртуальной машины доступ к SAS учетной записи хранения.

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

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

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

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

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

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

Получение маркера доступа с помощью удостоверения виртуальной машины и его использование для вызова Azure Resource Manager

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

  1. В портал Azure перейдите к Виртуальные машины, перейдите к виртуальной машине Windows, а затем на странице обзора выберите "Подключиться" вверху.

  2. Введите имя пользователя и пароль, добавленные при создании виртуальной машины Windows.

  3. Установите подключение к удаленному рабочему столу с виртуальной машиной.

  4. Откройте PowerShell в удаленном сеансе, а затем используйте командлет PowerShell Invoke-WebRequest , чтобы получить маркер Azure Resource Manager из локального управляемого удостоверения для конечной точки ресурсов Azure.

       $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Method GET -Headers @{Metadata="true"}
    

    Примечание.

    Значение resource параметра должно совпадать с ожидаемым идентификатором Microsoft Entra ID. Если используется идентификатор ресурса Resource Manager, добавьте косую черту после универсального кода ресурса (URI).

    Затем извлеките content элемент, который хранится в формате нотации объектов JavaScript (JSON) в объекте $response .

    $content = $response.Content | ConvertFrom-Json
    

    Затем извлеките маркер доступа из ответа.

    $ArmToken = $content.access_token
    

Получение учетных данных SAS из Azure Resource Manager для обращения к хранилищу

Наконец, используйте PowerShell для вызова Resource Manager с помощью маркера доступа, полученного в предыдущем разделе. Этот маркер используется для создания учетных данных SAS хранилища. После получения учетных данных SAS можно вызвать другие операции хранения.

Для этого запроса используйте следующие параметры HTTP-запроса для создания учетных данных SAS:

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

Параметры, приведенные здесь, включены в текст POST запроса учетных данных SAS. Дополнительные сведения о параметрах для создания учетных данных SAS см. в справочнике по REST службы списков.

  1. Преобразуйте параметры в JSON, а затем вызовите конечную точку хранилища listServiceSas , чтобы создать учетные данные SAS:

    $params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
    $jsonParams = $params | ConvertTo-Json
    
    $sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}
    

    Примечание.

    URL-адрес учитывает регистр, поэтому убедитесь, что вы используете тот же случай, используемый при именовавшемся группе ресурсов, включая верхний регистр "G" в resourceGroups.

  2. Затем извлеките учетные данные SAS из ответа:

    $sasContent = $sasResponse.Content | ConvertFrom-Json
    $sasCred = $sasContent.serviceSasToken
    
  3. При проверке учетных данных SAS вы увидите следующее:

    PS C:\> $sasCred
    sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D
    
  4. Создайте файл с именем test.txt. Затем используйте учетные данные SAS для проверки подлинности с помощью командлета New-AzStorageContent , отправьте файл в контейнер BLOB-объектов, а затем скачайте файл.

    echo "This is a test text file." > test.txt
    
  5. Сначала установите командлеты службы хранилища Azure с помощью Install-Module Azure.Storage, Затем отправьте созданный большой двоичный объект с помощью командлета PowerShell Set-AzStorageBlobContent :

    $ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
    Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx
    

    Ответ:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    
  6. Можно также скачать отправленный большой двоичный объект с помощью командлета PowerShell Get-AzStorageBlobContent.

    Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx
    

    Ответ:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    

Использование управляемого удостоверения, назначаемого системой виртуальной машины Windows, для доступа к База данных SQL Azure

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

Вы изучите следующие темы:

  • Предоставление виртуальной машине доступа к Базе данных SQL Azure
  • Включение проверки подлинности Microsoft Entra
  • Создание в базе данных автономного пользователя, который представляет назначаемое системой удостоверение виртуальной машины
  • Получение маркера доступа с использованием удостоверения виртуальной машины и отправка запроса в Базу данных SQL Azure с его помощью

Включить

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

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

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

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

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

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

Чтобы предоставить виртуальной машине доступ к базе данных в База данных SQL Azure, используйте существующий логический СЕРВЕР SQL Server или создайте новый. Чтобы создать новый сервер и базу данных с помощью портал Azure, выполните краткое руководство по SQL Azure. В документации по SQL Azure также есть краткие руководства, описывающие использование Azure CLI и Azure PowerShell.

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

  1. Включите проверку подлинности Microsoft Entra для сервера.
  2. Создание в базе данных автономного пользователя, который представляет назначаемое системой удостоверение виртуальной машины.

Включение проверки подлинности Microsoft Entra

Чтобы настроить проверку подлинности Microsoft Entra, выполните следующие действия.

  1. В портал Azure выберите SQL Server в области навигации слева.
  2. Выберите SQL Server, который вы хотите включить для проверки подлинности Microsoft Entra.
  3. В разделе колонки Параметры выберите Администратор Active Directory.
  4. На панели команд щелкните Задать администратора.
  5. Выберите учетную запись пользователя Microsoft Entra, чтобы сделать администратора сервера, и нажмите кнопку "Выбрать".
  6. В командной строке выберите Сохранить.

Создание автономного пользователя

В этом разделе показано, как создать автономного пользователя в базе данных, представляющей удостоверение, назначенное системой виртуальной машины. На этом шаге необходимо установить Microsoft SQL Server Management Studio (SSMS). Прежде чем приступить к работе, ознакомьтесь со следующими статьями для фона интеграции Microsoft Entra:

Для баз данных SQL требуются уникальные отображаемые имена идентификатора Microsoft Entra. При этом учетные записи Microsoft Entra, такие как пользователи, группы и субъекты-службы (приложения), а имена виртуальных машин, включенные для управляемого удостоверения, должны быть уникальным образом определены в идентификаторе Microsoft Entra, относящиеся к соответствующим отображаемым именам. SQL проверяет отображаемые имена идентификатора Microsoft Entra во время создания таких пользователей T-SQL. Если отображаемые имена не являются уникальными, команда завершается ошибкой и запрашивает указать уникальное отображаемое имя идентификатора Microsoft Entra для каждой учетной записи.

Создание автономного пользователя

  1. Откройте SQL Server Management Studio.

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

  3. В поле Authentication (Аутентификация) выберите Active Directory — универсальная с поддержкой MFA.

  4. В поле "Имя пользователя" введите имя учетной записи Microsoft Entra, заданной администратором сервера, напримерcjensen@fabrikam.com.

  5. Выберите Параметры.

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

  7. Нажмите кнопку "Подключиться", а затем завершите процесс входа.

  8. В обозревателе объектов разверните папку Базы данных.

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

  10. В окне запроса введите следующую строку и на панели инструментов нажмите кнопку Выполнить:

    Примечание.

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

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    Команда должна завершиться успешно, создав автономного пользователя для удостоверения, назначаемого системой виртуальной машины.

  11. Снимите окно запроса, введите следующую строку и выберите "Выполнить " на панели инструментов:

    Примечание.

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

    Если возникла ошибка "Субъект VMName имеет повторяющееся отображаемое имя", добавьте инструкцию CREATE USER с помощью WITH OBJECT_ID='xxx".

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

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

Теперь код, запущенный на виртуальной машине, может с помощью назначаемого системой управляемого удостоверения получить маркер и использовать его для аутентификации на сервере.

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

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

Ниже приведен пример кода .NET для открытия подключения к SQL с помощью проверки подлинности управляемого удостоверения Active Directory. Этот код должен выполняться на виртуальной машине, чтобы обеспечить возможность доступа к конечной точке назначаемого системой управляемого удостоверения виртуальной машины.

для использования этого метода требуется платформа .NET Framework версии 4.6.2 или более поздней версии или .NET Core 3.1 или более поздней версии. Замените значения AZURE-SQL-SERVERNAME и DATABASE соответствующим образом и добавьте ссылку NuGet в библиотеку Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Примечание.

Управляемые удостоверения можно использовать при программировании на других языках, воспользовавшись нашими пакетами SDK.

Кроме того, используйте PowerShell, чтобы протестировать сквозную настройку без необходимости писать и развертывать приложение на виртуальной машине.

  1. На портале перейдите к Виртуальные машины, перейдите на виртуальную машину Windows, а затем в разделе "Обзор" выберите "Подключиться".

  2. Введите учетные данные администратора виртуальной машины, добавленные при создании виртуальной машины Windows.

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

  4. С помощью командлета PowerShell Invoke-WebRequest выполните запрос к конечной точке локального управляемого удостоверения, чтобы получить маркер доступа для SQL Azure.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Преобразуйте ответ из объекта JSON в объект PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Извлеките маркер доступа из ответа.

    $AccessToken = $content.access_token
    
  5. Установите подключение к серверу. Не забудьте заменить значения AZURE-SQL-SERVERNAME и DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Затем создайте и отправьте запрос на сервер. Не забудьте заменить значение для TABLE.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Наконец, изучите значение $DataSet.Tables[0] для просмотра результатов запроса.

Отключить

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

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

Использование назначенного системой управляемого удостоверения на виртуальной машине Windows для доступа к Azure Key Vault

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

Вы изучите следующие темы:

  • предоставлять виртуальной машине доступ к секрету в Key Vault;
  • получать маркер доступа с помощью удостоверения виртуальной машины и использовать его для получения секрета из Key Vault.

Создание Хранилища ключей

Совет

Действия, описанные в этой статье, могут немного отличаться на портале, с который вы начинаете работу.

В этом разделе показано, как предоставить виртуальной машине доступ к секрету в Key Vault. При использовании управляемых удостоверений для ресурсов Azure код может получить маркеры доступа для проверки подлинности в ресурсах, поддерживающих проверку подлинности Microsoft Entra. 

Однако не все службы Azure поддерживают проверку подлинности Microsoft Entra. Чтобы использовать управляемые удостоверения для ресурсов Azure с такими службами, сохраните учетные данные службы в Azure Key Vault и используйте управляемое удостоверение виртуальной машины для доступа к Key Vault и получения учетных данных.

Сначала необходимо создать Key Vault и предоставить управляемому удостоверению, назначаемого системой, управляемому удостоверению виртуальной машины.

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

  2. В верхней части левой панели навигации нажмите кнопку "Создать ресурс".

  3. В поле "Поиск Marketplace" введите в Key Vault и нажмите клавишу ВВОД.

  4. Выберите Key Vault из результатов и нажмите кнопку "Создать".

  5. Укажите имя нового хранилища ключей.

    Снимок экрана: экран

  6. Заполните все необходимые сведения. Обязательно выберите подписку и группу ресурсов, используемые для работы с этим руководством.

  7. Выберите " Просмотр и создание".

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

Создание секрета

Затем необходимо добавить секрет в Key Vault, чтобы получить его позже с помощью кода, выполняемого на виртуальной машине. В этом разделе вы используете PowerShell, но те же понятия применяются к любому коду, выполняемому на виртуальной машине.

  1. Вернитесь к только что созданному экземпляру Key Vault.

  2. Выберите "Секреты", а затем нажмите кнопку "Добавить".

  3. Выберите Создать/импортировать.

  4. На экране "Создание секрета" в параметрах "Отправить" выберите "Вручную".

  5. Введите имя и значение для секрета. Значение может быть любым. 

  6. Не указывайте дату активации и окончания срока действия и для параметра Включено оставьте значение Да

  7. Щелкните Создать, чтобы создать секрет.

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

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

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

  1. Вернитесь к только что созданному экземпляру Key Vault.

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

  3. Выберите Добавить политику доступа.

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

  4. В разделе "Добавление политики доступа" в разделе "Настройка из шаблона (необязательно)" выберите "Управление секретами" в раскрывающемся меню.

  5. Выберите "Выбрать субъект", а затем в поле поиска введите имя созданной ранее виртуальной машины. 

  6. Выберите виртуальную машину в списке результатов и нажмите кнопку "Выбрать".

  7. Выберите Добавить.

  8. Выберите Сохранить.

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

В этом разделе показано, как получить маркер доступа с помощью удостоверения виртуальной машины и использовать его для получения секрета из Key Vault. Если вы не установили версию PowerShell 4.3.1 или выше, загрузите и установите последнюю версию.

Примечание.

Метод использования PowerShell для проверки подлинности и извлечения секрета предпочтителен в сценариях, когда управляемые удостоверения требуются специально или при внедрении процесса в код приложения.

Во-первых, используйте управляемое удостоверение, назначаемое системой виртуальной машины, чтобы получить маркер доступа для проверки подлинности в Key Vault:

  1. На портале перейдите к Виртуальные машины и перейдите к виртуальной машине Windows, а затем в разделе "Обзор" выберите "Подключиться".
  2. Введите имя пользователя и пароль, добавленные при создании виртуальной машины Windows.
  3. Теперь, когда вы создали подключение к удаленному рабочему столу с виртуальной машиной, откройте PowerShell в удаленном сеансе.
  4. Отправьте веб-запрос к клиенту в PowerShell, чтобы получить токен для локального узла на конкретный порт для виртуальной машины.

Примечание.

При использовании суверенного облака, например GCC-H, используйте конечную точку vault.usgovcloudapi.net вместо vault.azure.net командлета PowerShell.

Пример запроса PowerShell:

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"} 

Примечание.

При работе с суверенными облаками необходимо внести корректировки в конечную точку, указанную в конце командлета.

Например, vault.usgovcloudapi.net следует использовать при работе с облаком Azure для государственных организаций с этим конечным результатом:

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.usgovcloudapi.net' -Method GET -Headers @{Metadata="true"

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

Результат должен выглядеть следующим образом:

Снимок экрана: запрос с ответом маркера.

Затем извлеките маркер доступа из ответа.

   $KeyVaultToken = $Response.access_token

Наконец, используйте командлет PowerShell Invoke-WebRequest для получения секрета, созданного ранее в Key Vault, передав маркер доступа в заголовке авторизации. Вам потребуется URL-адрес вашего хранилища ключей, который находится в разделе Основные компоненты на странице Обзор в этом хранилище.

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

Ответ должен выглядеть следующим образом:

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

После получения секрета из хранилища Key Vault, его можно использовать для аутентификации в службе, требующей имя пользователя и пароль.

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

Наконец, когда вы хотите очистить ресурсы, войдите в портал Azure, выберите группы ресурсов, а затем найдите и выберите группу ресурсов, созданную в процессе этого руководства (напримерmi-test). Затем используйте команду "Удалить группу ресурсов".

Кроме того, можно очистить ресурсы с помощью PowerShell или ИНТЕРФЕЙСА командной строки.

Использование управляемого удостоверения, назначаемого системой виртуальной машины Windows, для доступа к диспетчеру ресурсов

Совет

Действия, описанные в этой статье, могут немного отличаться на портале, с который вы начинаете работу.

В этом руководстве объясняется, как создать назначаемое системой удостоверение, назначить его виртуальной машине Windows, а затем использовать это удостоверение для доступа к API Azure Resource Manager . Управляемые удостоверения службы автоматически управляются платформой Azure. Они позволяют выполнять проверку подлинности в службах, поддерживающих проверку подлинности Microsoft Entra, не требуя внедрения учетных данных в код.

Вы изучите следующие темы:

  • Предоставьте виртуальной машине доступ к Azure Resource Manager.
  • Получите маркер доступа с помощью назначаемого системой управляемого удостоверения виртуальной машины для доступа к Resource Manager.
  1. Войдите в портал Azure с учетной записью администратора.

  2. Перейдите на вкладку "Группы ресурсов".

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

  4. На левой панели выберите элемент управления доступом (IAM).

  5. Нажмите + Добавить и выберите Добавить назначение ролей.

  6. На вкладке "Роль" выберите "Читатель". Эта роль позволяет просматривать все ресурсы, но не позволяет вносить изменения.

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

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

  9. В раскрывающемся списке "Управление удостоверениями " выберите виртуальную машину.

  10. Для выбора выберите виртуальную машину в раскрывающемся списке, а затем нажмите кнопку "Сохранить".

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

Получение маркера доступа.

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

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

  1. На портале перейдите к виртуальной машине Linux и в разделе "Обзор" выберите "Подключиться".
  2. Подключитесь к виртуальной машине с помощью выбранного клиента SSH.
  3. В окне curlтерминала выполните запрос к локальным управляемым удостоверениям для конечной точки ресурсов Azure, чтобы получить маркер доступа для Azure Resource Manager.   Запрос curl маркера доступа приведен ниже.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

Примечание.

Значение resource параметра должно совпадать с ожидаемым идентификатором Microsoft Entra ID. В случае идентификатора ресурса Resource Manager необходимо включить конечную косую черту в URI.

Ответ включает маркер доступа, необходимый для доступа к Azure Resource Manager.

Ответ:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

Используйте этот маркер доступа для доступа к Azure Resource Manager; Например, чтобы прочитать сведения о группе ресурсов, к которой вы ранее предоставили доступ к этой виртуальной машине. Замените значения <SUBSCRIPTION-ID>, <RESOURCE-GROUP> и <ACCESS-TOKEN> созданными ранее значениями.

Примечание.

URL-адрес учитывает регистр, поэтому убедитесь, что вы используете точный случай, используемый ранее при именовав группе ресурсов, и прописную букву G в resourceGroup.

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

Ответ обратно со сведениями о конкретной группе ресурсов:

{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

Получение доступа к Azure Resource Manager с помощью назначаемого пользователем управляемого удостоверения на виртуальной машине Windows

В этом руководстве объясняется, как создать назначаемое пользователем удостоверение, назначить его виртуальной машине Windows, а затем использовать это удостоверение для доступа к API Azure Resource Manager . Управляемые удостоверения службы автоматически управляются платформой Azure. Они позволяют выполнять проверку подлинности в службах, поддерживающих проверку подлинности Microsoft Entra, не требуя внедрения учетных данных в код.

Вы изучите следующие темы:

  • Создание управляемого удостоверения, назначаемого пользователем
  • Назначение пользовательского удостоверения виртуальной машине Windows.
  • Предоставление назначаемому пользователем удостоверению доступа к группе ресурсов в Azure Resource Manager.
  • Получение маркера доступа и вызов Azure Resource Manager с помощью назначаемого пользователем удостоверения
  • Чтение свойств группы ресурсов.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Настройка Azure PowerShell в локальной среде

Чтобы запустить скрипты в этом примере, у вас есть два варианта:

  • Используйте службу Azure Cloud Shell, которую можно открыть с помощью кнопки Попробовать в правом верхнем углу блоков кода.
  • выполните скрипты локально с помощью Azure PowerShell, как описано в следующем разделе.

Чтобы использовать Azure PowerShell локально для этого руководства (а не с помощью Cloud Shell), выполните следующие действия.

  1. Установите последнюю версию Azure PowerShell, если вы еще не сделали этого.

  2. Войдите в Azure.

    Connect-AzAccount
    
  3. Установите PowerShellGet последней версии.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

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

  4. Установите выпущенную версию Az.ManagedServiceIdentity модуля. Это необходимо для выполнения операций управляемого удостоверения, назначаемых пользователем, в этом руководстве:

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Включить

Для сценариев на основе удостоверения, назначаемого пользователем, необходимо выполнить следующие действия в этом разделе:

  1. Создайте удостоверение.
  2. Назначьте только что созданное удостоверение.

Создание удостоверения

В этом разделе показано, как создать назначаемое пользователем удостоверение, которое создается как автономный ресурс Azure. С помощью командлета New-AzUserAssignedIdentity Azure создает удостоверение в клиенте Microsoft Entra, которое можно назначить одному или нескольким экземплярам службы Azure.

Внимание

При создании управляемых удостоверений, назначаемых пользователем, имя должно начинаться с буквы или числа, а также может включать сочетание буквенно-цифровых символов, дефисов (-) и символов подчеркивания (_). Для корректной работы назначения для виртуальной машины или масштабируемого набора виртуальных машин имя должно содержать не более 24 символов. Дополнительные сведения см. в разделе Часто задаваемые вопросы и известные проблемы.

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

Ответ содержит сведения о созданном удостоверении, назначаемом пользователем, как показано в следующем примере. Определите Id и ClientId значения для назначаемого пользователем удостоверения, так как они используются в последующих шагах:

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: aaaabbbb-0000-cccc-1111-dddd2222eeee
PrincipalId: aaaaaaaa-bbbb-cccc-1111-222222222222
ClientId: 00001111-aaaa-2222-bbbb-3333cccc4444
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-bbbb-cccc-1111-222222222222&aid=00001111-aaaa-2222-bbbb-3333cccc4444
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

Присвоить удостоверение

В этом разделе показано, как назначить удостоверение, назначаемое пользователем, виртуальной машине Windows. Клиенты могут использовать назначаемое пользователем удостоверение для целого ряда ресурсов Azure. Чтобы назначить пользовательское удостоверение отдельной виртуальной машине, используйте следующие команды. Используйте свойство Id, возвращенное на предыдущем шаге, для параметра -IdentityID.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

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

В этом разделе показано, как предоставить пользователю доступ к группе ресурсов в Azure Resource Manager. Управляемые удостоверения для ресурсов Azure предоставляют удостоверения, которые код может использовать для запроса маркеров доступа для проверки подлинности в API ресурсов, поддерживающих проверку подлинности Microsoft Entra. В этом руководстве код получит доступ к API Azure Resource Manager.

Чтобы ваш код мог получить доступ к API, необходимо сначала предоставить удостоверению доступ к ресурсу в Azure Resource Manager. В этом случае вы обращаетесь к группе ресурсов, для которой содержится виртуальная машина. Измените значение <SUBSCRIPTIONID> в соответствии с вашей средой.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

Ответ содержит подробные сведения о созданном назначении роли, подобные следующему примеру.

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: 00000000-0000-0000-0000-000000000000
ObjectId: aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType: ServicePrincipal
CanDelegate: False

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

Совет

Действия, описанные в этой статье, могут немного отличаться на портале, с который вы начинаете работу.

Получение маркера доступа.

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

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

  2. На портале перейдите к Виртуальные машины и перейдите на виртуальную машину Windows. В разделе "Обзор" выберите "Подключиться".

  3. Введите имя пользователя и пароль, используемые при создании виртуальной машины Windows.

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

  5. С помощью командлета PowerShell Invoke-WebRequest выполните запрос к локальным управляемым удостоверениям для конечной точки ресурсов Azure, чтобы получить маркер доступа для Azure Resource Manager. Значение client_id возвращается при создании назначаемого пользователем управляемого удостоверения.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

Читать свойства

Наконец, используйте маркер доступа, полученный на предыдущем шаге, чтобы получить доступ к Azure Resource Manager, а затем прочитать свойства группы ресурсов, предоставленной пользователем. Замените <SUBSCRIPTION ID> идентификатором подписки своей среды.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/80c696ff-5efa-4909-a64d-f1b616f423ca/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

Ответ содержит сведения об определенной группе ресурсов, подобные следующему примеру:

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

Подробнее