.NET용 Azure SDK를 사용하여 Azure 리소스에 Azure 호스트형 앱 인증

Azure App Service, Azure Virtual Machines 또는 Azure Container Instances와 같은 서비스를 사용하여 Azure에서 앱을 호스트된 경우 Azure 리소스에 대해 앱을 인증하는 데 권장되는 방식은 관리 ID를 사용하는 것입니다.

관리 ID는 비밀 키나 다른 애플리케이션 비밀을 사용할 필요 없이 다른 Azure 리소스에 연결할 수 있도록 앱에 대한 ID를 제공합니다. 내부적으로 Azure는 앱의 ID와 연결이 허용되는 리소스를 알고 있습니다. Azure는 이 정보를 사용하여 애플리케이션 비밀을 관리할 필요 없이 앱이 다른 Azure 리소스에 연결할 수 있도록 허용하는 Microsoft Entra 토큰을 자동으로 가져옵니다.

관리 ID 유형

두 가지 종류의 관리 ID가 있습니다.

  • 시스템 할당 - 이 유형의 관리 ID는 Azure 리소스에 의해 제공되며 Azure 리소스에 직접 연결됩니다. Azure 리소스에서 관리 ID를 사용하도록 설정하면 해당 리소스에 대해 시스템이 할당한 관리 ID를 가져오게 됩니다. 시스템 할당 관리 ID는 연결된 Azure 리소스의 수명 주기에 연결됩니다. 리소스가 삭제되면 Azure에서 자동으로 ID를 삭제합니다. 코드를 호스팅하는 Azure 리소스에 대해 관리 ID를 사용하도록 설정하기만 하면 되므로 관리 ID 유형을 사용하기 가장 쉬운 방법입니다.
  • 사용자 할당 - 관리 ID를 독립 실행형 Azure 리소스로 만들 수도 있습니다. 이는 솔루션에 동일한 ID와 동일한 권한을 공유해야 하는 여러 Azure 리소스에서 실행되는 여러 워크로드가 있는 경우 가장 자주 사용됩니다. 예를 들어, 솔루션에 동일한 Azure 리소스 집합에 대한 액세스가 필요한 여러 App Service 및 가상 머신 인스턴스에서 실행되는 구성 요소가 있는 경우 해당 리소스 전체에서 사용자 할당 관리 ID를 만들고 사용하는 것이 좋습니다.

이 문서에서는 앱에 대해 시스템 할당 관리 ID를 사용하도록 설정하고 사용하는 단계를 설명합니다. 사용자 할당 관리 ID를 사용해야 하는 경우 사용자 할당 관리 ID 관리 문서를 참조하여 사용자 할당 관리 ID를 만드는 방법을 알아봅니다.

1 - 앱을 호스팅하는 Azure 리소스에서 관리 ID 사용

첫 번째 단계는 앱을 호스팅하는 Azure 리소스에서 관리 ID를 사용하도록 설정하는 것입니다. 예를 들어 Azure App Service를 사용하여 .NET 앱을 호스트하는 경우 앱을 호스트하는 App Service 웹앱에 대해 관리 ID를 사용하도록 설정해야 합니다. 가상 머신을 사용하여 앱을 호스팅하는 경우 VM에서 관리 ID를 사용할 수 있습니다.

Azure Portal 또는 Azure CLI를 사용하여 Azure 리소스에 관리 ID를 사용할 수 있습니다.

지침 스크린샷
Azure Portal에서 애플리케이션 코드를 호스트하는 리소스로 이동합니다. 예를 들어 페이지 맨 위에 있는 검색 상자에 리소스 이름을 입력하고 대화 상자에서 선택하여 해당 리소스로 이동할 수 있습니다. Azure Portal에서 위쪽 검색 창을 사용하여 Azure 리소스를 찾고 탐색하는 방법을 보여 주는 스크린샷.
리소스 페이지의 왼쪽 메뉴에서 ID 메뉴 항목을 선택합니다. 메뉴 레이아웃이 약간 다를 수는 있지만 관리 ID 지원 기능이 있는 모든 Azure 리소스에는 ID 메뉴 항목이 있습니다. Azure 리소스의 왼쪽 메뉴에 있는 ID 메뉴 항목의 위치를 보여 주는 스크린샷.
ID 페이지에서:
  1. 상태 슬라이더를 켜기로 변경합니다.
  2. 저장을 선택합니다.
확인 대화 상자에서 서비스에 대해 관리 ID를 사용하도록 설정할지 확인합니다. 로 대답하면 Azure 리소스에 대해 관리 ID가 사용하도록 설정됩니다.
리소스의 ID 페이지에서 Azure 리소스에 대해 관리 ID를 사용하도록 설정하는 방법을 보여 주는 스크린샷.

2 - 관리 ID에 역할 할당

다음으로, 앱에 필요한 역할(권한)을 결정하고 Azure에서 해당 역할에 관리 ID를 할당합니다. 관리 ID에는 리소스, 리소스 그룹 또는 구독 범위에서 역할을 할당할 수 있습니다. 이 예에서는 대부분의 애플리케이션이 모든 Azure 리소스를 단일 리소스 그룹으로 그룹화하므로 리소스 그룹 범위에서 역할을 할당하는 방법을 보여 줍니다.

지침 스크린샷
Azure Portal 상단에 있는 검색 상자를 통해 리소스 그룹 이름을 검색하여 앱에 대한 리소스 그룹을 찾습니다.

대화 상자의 리소스 그룹 제목 아래에서 리소스 그룹 이름을 선택하여 리소스 그룹으로 이동합니다.
Azure Portal에서 위쪽 검색 창을 사용하여 Azure에서 리소스 그룹을 찾고 탐색하는 방법을 보여 주는 스크린샷. 역할(권한)을 할당할 리소스 그룹입니다.
리소스 그룹 페이지의 왼쪽 메뉴에서 액세스 제어(IAM)를 선택합니다. Azure 리소스 그룹의 왼쪽 메뉴에 있는 액세스 제어(IAM) 메뉴 항목의 위치를 보여 주는 스크린샷.
액세스 제어(IAM) 페이지에서 다음을 수행합니다.
  1. 역할 할당 탭을 선택합니다.
  2. 위쪽 메뉴에서 + 추가를 선택한 다음, 드롭다운 메뉴에서 역할 할당 추가를 선택합니다.
역할 할당 탭으로 이동하는 방법 및 리소스 그룹에 역할 할당을 추가하는 데 사용되는 단추의 위치를 보여 주는 스크린샷.
역할 할당 추가 페이지에는 리소스 그룹에 할당할 수 있는 모든 역할이 나열됩니다.
  1. 검색 상자를 사용하여 목록을 보다 관리하기 쉬운 크기로 필터링합니다. 이 예에서는 Storage Blob 역할을 필터링하는 방법을 보여 줍니다.
  2. 할당하려는 역할을 선택합니다.
다음 화면으로 이동하려면 다음을 선택합니다.
리소스 그룹에 추가할 역할 할당을 필터링하고 선택하는 방법을 보여 주는 스크린샷.
다음 역할 할당 추가 페이지에서는 역할을 할당할 사용자를 할당할 수 있습니다.
  1. 다음에 대한 액세스 할당에서 관리 ID를 선택합니다.
  2. 멤버에서 + 멤버 선택을 선택합니다.
Azure Portal의 오른쪽에 대화 상자가 열립니다.
역할 할당 추가 페이지에서 역할(권한)을 할당하려는 사용자 유형으로 관리 ID를 선택하는 방법을 보여 주는 스크린샷.
관리 ID 선택 대화 상자에서 다음을 수행합니다.
  1. 관리 ID 드롭다운 및 선택 텍스트 상자를 사용하여 구독의 관리 ID 목록을 필터링할 수 있습니다. 이 예에서는 App Service를 선택하면 App Service와 연결된 관리 ID만 표시됩니다.
  2. 앱을 호스트하는 Azure 리소스에 대한 관리 ID를 선택합니다.
계속하려면 대화 상자 하단에서 선택을 선택합니다.
관리 ID 선택 대화 상자를 사용하여 역할을 할당할 관리 ID를 필터링하고 선택하는 방법을 보여 주는 스크린샷.
이제 관리 ID가 역할 할당 추가 화면에서 선택된 것으로 표시됩니다.

검토 + 할당을 선택하여 최종 페이지로 이동한 다음 다시 검토 + 할당을 선택하여 프로세스를 완료합니다.
사용자가 역할 할당을 완료하기 위해 검토 + 할당 단추를 선택해야 하는 마지막 역할 할당 추가 화면의 스크린샷.

3 - 애플리케이션에 DefaultAzureCredential 구현

DefaultAzureCredential은 Microsoft Entra에 인증하기 위한 순서가 지정된 독자적 메커니즘 시퀀스입니다. 각 인증 메커니즘은 TokenCredential 클래스에서 파생된 클래스이며 자격 증명이라고 합니다. 런타임 시 DefaultAzureCredential은 첫 ​​번째 자격 증명을 사용하여 인증을 시도합니다. 해당 자격 증명이 액세스 토큰을 획득하지 못하면 액세스 토큰을 성공적으로 가져올 때까지 시퀀스의 다음 자격 증명이 시도됩니다. 이러한 방식을 통해 앱은 환경별 코드를 작성하지 않고도 다양한 환경에서 여러 자격 증명을 사용할 수 있습니다.

DefaultAzureCredential이 자격 증명을 찾는 순서와 위치는 DefaultAzureCredential에서 확인할 수 있습니다.

DefaultAzureCredential을 사용하려면 Azure.Identity 및 필요에 따라 Microsoft.Extensions.Azure 패키지를 애플리케이션에 추가합니다.

원하는 터미널에서 애플리케이션 프로젝트 디렉터리로 이동하고 다음 명령을 실행합니다.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Azure 서비스는 다양한 Azure SDK 클라이언트 라이브러리의 특수 클라이언트 클래스를 사용하여 액세스됩니다. 이러한 클래스와 자체 사용자 지정 서비스는 등록되어야 앱 전체에서 종속성 주입을 통해 액세스할 수 있습니다. Program.cs에서 다음 단계를 완료하여 클라이언트 클래스와 DefaultAzureCredential을 등록합니다.

  1. using 지시문을 통해 Azure.IdentityMicrosoft.Extensions.Azure 네임스페이스를 포함합니다.
  2. 해당하는 Add 접두사 확장 메서드를 사용하여 Azure 서비스 클라이언트를 등록합니다.
  3. DefaultAzureCredential 인스턴스를 UseCredential 메서드에 전달합니다.

예시:

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

UseCredential의 대안은 DefaultAzureCredential을 직접 인스턴스화하는 것입니다.

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

위 코드가 로컬 개발 워크스테이션에서 실행되면 환경 변수에서 애플리케이션 서비스 주체를 찾거나 로컬에 설치된 개발자 도구(예: Visual Studio)에서 개발자 자격 증명 집합을 찾습니다. 두 방법 중 하나를 사용하여 로컬 개발 중에 Azure 리소스에 앱을 인증할 수 있습니다.

Azure에 배포되면 이 동일한 코드는 다른 Azure 리소스에 대해 앱을 인증할 수도 있습니다. DefaultAzureCredential은 환경 설정 및 관리 ID 구성을 검색하여 다른 서비스에 자동으로 인증할 수 있습니다.