자습서: 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 인증은 공개 미리 보기 상태입니다.
필수 조건
- Azure 리소스에 대한 관리 ID 기능이 익숙하지 않은 경우 개요를 참조하세요.
- Azure 계정이 없으면 계속하기 전에 체험 계정에 등록합니다.
- 필요한 리소스 생성 및 역할 관리를 수행하려면 적절한 범위(사용자 구독 또는 리소스 그룹)에서 계정에 "소유자" 권한이 필요합니다. 역할 할당에 관한 도움이 필요한 경우 Azure 역할을 할당하여 Azure 구독 리소스에 대한 액세스 관리를 참조하세요.
Enable
한 번의 클릭으로 시스템 할당 관리 ID를 활성화할 수 있습니다. VM을 만드는 동안 또는 기존 VM의 속성에서 이 기능을 활성화할 수 있습니다.
기존 VM에서 시스템 할당 관리 ID를 사용하도록 설정하려면 다음을 수행합니다.
액세스 허가
스토리지 계정 만들기
이 섹션에서는 스토리지 계정을 만듭니다.
Azure Portal의 왼쪽 위 모서리에서 + 리소스 만들기 단추를 선택합니다.
스토리지를 선택한 다음, 스토리지 계정 - Blob, 파일, 테이블, 큐를 선택합니다.
이름 아래에서 스토리지 계정의 이름을 입력합니다.
배포 모델 및 계정 종류는 리소스 관리자 및 스토리지(범용 v1)로 설정해야 합니다.
구독 및 리소스 그룹은 이전 단계에서 VM을 만들 때 지정한 것과 일치합니다.
만들기를 실행합니다.
Blob 컨테이너 만들기 및 스토리지 계정에 파일 업로드
파일에 Blob Storage가 필요하므로 파일을 저장할 Blob 컨테이너를 만들어야 합니다. 그런 다음, 새 스토리지 계정에서 Blob 컨테이너에 파일을 업로드합니다.
새로 만든 스토리지 계정으로 다시 이동합니다.
Blob Service 아래에서 컨테이너를 선택합니다.
페이지 맨 위에서 + 컨테이너를 선택합니다.
새 컨테이너 아래에서 컨테이너에 대한 이름을 입력하고 공용 액세스 수준 아래에서 기본값을 유지합니다.
선택한 편집기를 사용하여 로컬 컴퓨터에서 hello world.txt라는 파일을 만듭니다. 파일을 열고 "Hello world! :)"라는 텍스트(따옴표 제외)를 추가한 다음, 저장합니다.
컨테이너 이름을 클릭한 다음, 업로드를 클릭하여 새로 만든 컨테이너에 파일을 추가합니다.
Blob 업로드 창의 파일 아래에서 폴더 아이콘을 선택하고 로컬 컴퓨터에서 hello_world.txt라는 파일을 찾고, 파일을 선택한 다음, 업로드를 선택합니다.
액세스 허가
이 섹션에서는 VM에 Azure Storage 컨테이너에 대한 액세스 권한을 부여하는 방법을 보여줍니다. VM의 시스템 할당 관리 ID를 사용하여 Azure Storage Blob에서 데이터를 검색할 수 있습니다.
새로 만든 스토리지 계정으로 다시 이동합니다.
액세스 제어(IAM) 를 선택합니다.
역할 할당 추가>를 선택하여 역할 할당 추가 페이지를 엽니다.
다음 역할을 할당합니다. 세부 단계에 대해서는 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에 대한 자세한 내용은 다음을 참조하세요.