자습서: Windows VM 시스템 할당 관리 ID를 사용하여 Azure Storage에 액세스

Azure 리소스에 대한 관리 ID는 Microsoft Entra ID의 기능입니다. Azure 리소스에 대한 관리 ID를 지원하는 각 Azure 서비스는 자체 타임라인을 따릅니다. 시작하기 전에 리소스의 관리 ID 가용성 상태와 알려진 문제를 검토하세요.

이 자습서에서는 Windows VM(가상 머신)에 대한 시스템 할당 관리 ID를 사용하여 Azure Storage에 액세스하는 방법을 보여줍니다. 다음 방법에 대해 설명합니다.

  • 스토리지 계정에 Blob 컨테이너 만들기
  • 스토리지 계정에 Windows VM의 시스템 할당 관리 ID 액세스 부여
  • 액세스 가져오기 및 액세스를 사용하여 Azure Storage 호출

참고 항목

Azure Storage에 대한 Microsoft Entra 인증은 공개 미리 보기 상태입니다.

필수 조건

Enable

한 번의 클릭으로 시스템 할당 관리 ID를 활성화할 수 있습니다. VM을 만드는 동안 또는 기존 VM의 속성에서 이 기능을 활성화할 수 있습니다.

스크린샷은 시스템 할당 상태 켤 수 있는 가상 머신에 대한 시스템 할당 탭을 보여줍니다.

기존 VM에서 시스템 할당 관리 ID를 사용하도록 설정하려면 다음을 수행합니다.

  1. Azure 포털

  2. 시스템 할당 ID가 설정된 가상 머신 만들기

액세스 허가

스토리지 계정 만들기

이 섹션에서는 스토리지 계정을 만듭니다.

  1. Azure Portal의 왼쪽 위 모서리에서 + 리소스 만들기 단추를 선택합니다.

  2. 스토리지를 선택한 다음, 스토리지 계정 - Blob, 파일, 테이블, 큐를 선택합니다.

  3. 이름 아래에서 스토리지 계정의 이름을 입력합니다.

  4. 배포 모델계정 종류리소스 관리자스토리지(범용 v1)로 설정해야 합니다.

  5. 구독리소스 그룹은 이전 단계에서 VM을 만들 때 지정한 것과 일치합니다.

  6. 만들기를 실행합니다.

    새 스토리지 계정을 만드는 방법을 보여 주는 스크린샷

Blob 컨테이너 만들기 및 스토리지 계정에 파일 업로드

파일에 Blob Storage가 필요하므로 파일을 저장할 Blob 컨테이너를 만들어야 합니다. 그런 다음, 새 스토리지 계정에서 Blob 컨테이너에 파일을 업로드합니다.

  1. 새로 만든 스토리지 계정으로 다시 이동합니다.

  2. Blob Service 아래에서 컨테이너를 선택합니다.

  3. 페이지 맨 위에서 + 컨테이너를 선택합니다.

  4. 새 컨테이너 아래에서 컨테이너에 대한 이름을 입력하고 공용 액세스 수준 아래에서 기본값을 유지합니다.

    스토리지 컨테이너를 만드는 방법을 보여 주는 스크린샷

  5. 선택한 편집기를 사용하여 로컬 컴퓨터에서 hello world.txt라는 파일을 만듭니다. 파일을 열고 "Hello world! :)"라는 텍스트(따옴표 제외)를 추가한 다음, 저장합니다.

  6. 컨테이너 이름을 클릭한 다음, 업로드를 클릭하여 새로 만든 컨테이너에 파일을 추가합니다.

  7. Blob 업로드 창의 파일 아래에서 폴더 아이콘을 선택하고 로컬 컴퓨터에서 hello_world.txt라는 파일을 찾고, 파일을 선택한 다음, 업로드를 선택합니다. 텍스트 파일 업로드 화면을 보여 주는 스크린샷.

액세스 허가

이 섹션에서는 VM에 Azure Storage 컨테이너에 대한 액세스 권한을 부여하는 방법을 보여줍니다. VM의 시스템 할당 관리 ID를 사용하여 Azure Storage Blob에서 데이터를 검색할 수 있습니다.

  1. 새로 만든 스토리지 계정으로 다시 이동합니다.

  2. 액세스 제어(IAM) 를 선택합니다.

  3. 역할 할당 추가>를 선택하여 역할 할당 추가 페이지를 엽니다.

  4. 다음 역할을 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

    설정
    역할 Storage Blob 데이터 읽기 권한자
    다음에 대한 액세스 할당 관리 ID
    시스템 할당 가상 머신
    선택 <가상 머신>

    역할 할당 추가 페이지를 보여 주는 스크린샷.

데이터 액세스

Azure Storage는 기본적으로 Microsoft Entra 인증을 지원하므로 관리 ID를 사용하여 획득한 액세스 토큰을 직접 수락할 수 있습니다. 이 접근 방법은 Azure Storage와 Microsoft Entra ID의 통합을 사용하며, 연결 문자열에서 자격 증명을 제공하는 것과는 다릅니다.

다음은 Azure Storage에 대한 연결을 여는 .NET 코드 예제입니다. 이 예제에서는 액세스 토큰을 사용한 다음, 이전에 만든 파일의 내용을 읽습니다. VM의 관리 ID 엔드포인트에 액세스하기 위해서는 VM에 대해 이 코드를 실행해야 합니다. 액세스 토큰 방법을 사용하려면 .NET Framework 4.6 이상이 필요합니다. <URI to blob file>의 값을 적절하게 바꿉니다. 만들고 Blob Storage로 업로드한 파일로 이동하고 속성 아래의 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! :)

사용 안 함

VM에서 시스템이 할당 ID를 사용하지 않도록 설정하려면 시스템 할당 ID의 상태를 해제로 설정합니다.

스크린샷은 시스템 할당 상태 끌 수 있는 가상 머신에 대한 시스템 할당 탭을 보여줍니다.

다음 단계

이 자습서에서는 Windows VM의 시스템 할당 ID를 활성화하여 Azure Storage에 액세스하는 방법을 알아보았습니다. Azure Storage에 대한 자세한 내용은 다음을 참조하세요.