Azure ID 라이브러리 개요를 사용하여 Azure 서비스에 .NET 앱 인증
앱이 Azure 리소스에 액세스해야 하는 경우 앱을 Azure에 인증해야 합니다. 이는 Azure에 배포되거나, 온-프레미스에 배포되거나, 로컬 개발자 워크스테이션에서 개발 중인 모든 앱에 적용됩니다. 이 문서에서는 Azure SDK 클라이언트 라이브러리를 사용할 때 Azure에 앱을 인증하는 권장 방법을 설명합니다.
권장되는 앱 인증 방법
앱은 Azure 리소스에 인증할 때 연결 문자열 대신 토큰 기반 인증을 사용하는 것이 좋습니다. Azure ID 라이브러리 토큰 기반 인증을 지원하고 앱이 로컬 개발에 있거나, Azure에 배포되거나, 온-프레미스 서버에 배포되었는지 여부에 관계없이 Azure 리소스에 원활하게 인증할 수 있도록 하는 클래스를 제공합니다.
앱이 Azure 리소스에 인증하는 데 사용해야 하는 특정 유형의 토큰 기반 인증은 앱이 실행되는 위치에 따라 달라지고 다음 다이어그램에 표시됩니다.
앱이 다음과 같은 경우:
- 개발 동안 로컬로 실행되는앱은 로컬 개발을 위해 애플리케이션 서비스 주체를 사용하거나 개발자의 Azure 자격 증명을 사용하여 Azure에 인증할 수 있습니다. 각 옵션은 로컬 개발 동안인증에 대해 자세히 다룹니다.
- azure 호스트되는앱은 관리 ID를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 서버 환경의인증에 대해 자세히 설명합니다.
- 온-프레미스 호스트되고 배포된앱은 애플리케이션 서비스 주체를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 서버 환경의인증에 대해 자세히 설명합니다.
DefaultAzureCredential
Azure ID 라이브러리에서 제공하는 DefaultAzureCredential 클래스를 사용하면 앱이 실행되는 환경에 따라 다른 인증 방법을 사용할 수 있습니다. 이렇게 하면 코드를 변경하지 않고 로컬 개발에서 테스트 환경으로 앱을 승격할 수 있습니다. 각 환경에 대해 적절한 인증 방법을 구성하면 DefaultAzureCredential
자동으로 해당 인증 방법을 검색하고 사용합니다. 서로 다른 환경에서 다양한 인증 방법을 사용하기 위해 조건부 논리나 기능 플래그를 수동으로 코딩하는 것보다 DefaultAzureCredential
사용을 선호하는 것이 좋습니다.
DefaultAzureCredential
사용에 대한 자세한 내용은 에서 다루어지며, 애플리케이션에서 DefaultAzureCredential
를 사용하십시오.
토큰 기반 인증의 장점
토큰 기반 인증은 연결 문자열 인증보다 다음과 같은 이점을 제공합니다.
- 아래에 설명된 토큰 기반 인증 방법을 사용하면 Azure 리소스에서 앱에 필요한 특정 권한을 설정할 수 있습니다. 이는 최소 권한 원칙을 따릅니다. 반면, 연결 문자열은 Azure 리소스에 대한 모든 권한을 부여합니다.
- 연결 문자열이 있는 모든 앱이 Azure 리소스에 연결할 수 있는 반면 토큰 기반 인증 방법은 리소스에 액세스하려는 앱으로만 리소스에 대한 액세스를 범위로 지정합니다.
- 관리 ID의 경우 저장할 애플리케이션 비밀이 없습니다. 이렇게 하면 손상될 수 있는 연결 문자열 또는 애플리케이션 비밀이 없으므로 앱이 더 안전해집니다.
- Azure.Identity 패키지는 Microsoft Entra 토큰을 획득하고 관리합니다. 이렇게 하면 토큰 기반 인증을 연결 문자열로 사용하기 쉽습니다.
연결 문자열의 사용은 프로덕션 또는 중요한 데이터에 액세스하지 않는 초기 개념 증명 앱 또는 개발 프로토타입으로 제한되어야 합니다. 그렇지 않으면 Azure 리소스에 인증할 때 Azure ID 라이브러리에서 사용할 수 있는 토큰 기반 인증 클래스를 항상 선호해야 합니다.
서버 환경에서 인증
서버 환경에서 호스팅할 때 각 앱에는 앱이 실행되는 환경별로 고유한 애플리케이션 ID 할당되어야 합니다. Azure에서 애플리케이션 ID는 서비스 주체, Azure에 대한 앱을 식별하고 인증하기 위한 특수한 유형의 보안 주체 나타냅니다. 앱에 사용할 서비스 주체 유형은 앱이 실행되는 위치에 따라 달라집니다.
인증 방법 | 묘사 |
---|---|
Azure에서 호스트되는 앱 | Azure에서 호스트되는 앱은 관리 ID 서비스 주체사용해야 합니다. 관리 ID는 Azure에서 호스트되는 앱의 ID를 나타내도록 설계되었으며 Azure 호스팅 앱에서만 사용할 수 있습니다. 예를 들어 Azure App Service에서 호스트되는 .NET 웹앱에는 관리 ID가 할당됩니다. 그러면 앱에 할당된 관리 ID를 사용하여 다른 Azure 서비스에 앱을 인증합니다. Azure 호스팅 앱 인증에 대해 알아보기 |
Azure 외부에서 호스트되는 앱 (예: 온-프레미스 앱) |
Azure 서비스에 연결해야 하는 Azure 외부에서 호스트되는 앱(예: 온-프레미스 앱)은 애플리케이션 서비스 주체사용해야 합니다. 애플리케이션 서비스 주체는 Azure에서 앱의 ID를 나타내며 애플리케이션 등록 프로세스를 통해 생성됩니다. 예를 들어 Azure Blob Storage를 사용하는 온-프레미스에서 호스트되는 .NET 웹앱을 고려해 보세요. 앱 등록 프로세스를 사용하여 앱에 대한 애플리케이션 서비스 주체를 만듭니다. AZURE_CLIENT_ID , AZURE_TENANT_ID 및 AZURE_CLIENT_SECRET 모두 런타임에 애플리케이션에서 읽을 환경 변수로 저장되고 앱이 애플리케이션 서비스 주체를 사용하여 Azure에 인증할 수 있도록 합니다.Azure 외부에서 호스트되는 앱의 인증에 대해 알아봅니다. |
로컬 개발 중 인증
로컬 개발 중에 개발자의 워크스테이션에서 앱을 실행하는 경우 앱에서 사용하는 모든 Azure 서비스에 여전히 인증해야 합니다. 로컬 개발 중에 Azure에 앱을 인증하기 위한 두 가지 주요 전략은 다음과 같습니다.
인증 방법 | 묘사 |
---|---|
로컬 개발 중에 사용할 전용 애플리케이션 서비스 주체 개체 만들기 | 이 메서드에서 전용 애플리케이션 서비스 주체 개체는 로컬 개발 중에 사용할 앱 등록 프로세스를 사용하여 설정됩니다. 그런 다음 서비스 주체의 ID는 로컬 개발에서 실행될 때 앱에서 액세스할 환경 변수로 저장됩니다. 이 방법을 사용하면 로컬 개발 중에 개발자가 사용하는 서비스 주체 개체에 앱에 필요한 특정 리소스 권한을 할당할 수 있습니다. 이렇게 하면 애플리케이션이 필요한 특정 리소스에만 액세스할 수 있고 앱이 프로덕션에 부여할 권한을 복제합니다. 이 방법의 단점은 애플리케이션에서 작동하는 각 개발자에 대해 별도의 서비스 주체 개체를 만들어야 한다는 것입니다. Azure 호스팅 앱 인증에 대해 알아보기 |
로컬 개발 중에 개발자의 자격 증명을 사용하여 Azure에 앱 인증 | 이 메서드에서 개발자는 Visual Studio, VS Code용 Azure Tools 확장, Azure CLI 또는 로컬 워크스테이션의 Azure PowerShell에서 Azure에 로그인해야 합니다. 그런 다음 애플리케이션은 자격 증명 저장소에서 개발자의 자격 증명에 액세스하고 해당 자격 증명을 사용하여 앱에서 Azure 리소스에 액세스할 수 있습니다. 이 메서드는 개발자가 Visual Studio, VS Code 또는 Azure CLI에서 Azure 계정에 로그인하기만 하면 되므로 더 쉽게 설정할 수 있다는 장점이 있습니다. 이 방법의 단점은 개발자의 계정에 애플리케이션에 필요한 것보다 더 많은 권한이 있다는 것입니다. 따라서 이 방법은 앱이 프로덕션 환경에서 실행할 권한을 정확하게 복제하지 않습니다. Azure 호스팅 앱 인증에 대해 알아보기 |
애플리케이션에서 DefaultAzureCredential 사용
DefaultAzureCredential은 Microsoft Entra ID에 인증하기 위한 주관적이고 정해진 순서의 메커니즘 시퀀스입니다. 각 인증 메커니즘은 TokenCredential 클래스에서 파생된 클래스이며 자격 증명알려져 있습니다. 런타임에 DefaultAzureCredential
첫 번째 자격 증명을 사용하여 인증을 시도합니다. 해당 자격 증명이 액세스 토큰을 획득하지 못하면 액세스 토큰을 성공적으로 가져올 때까지 시퀀스의 다음 자격 증명이 시도됩니다. 이러한 방식으로 앱은 환경별 코드를 작성하지 않고도 다양한 환경에서 다른 자격 증명을 사용할 수 있습니다.
DefaultAzureCredential
사용하려면 Azure.Identity 추가하고 필요에 따라 Microsoft.Extensions.Azure 패키지를 애플리케이션에 추가합니다.
선택한 터미널에서 애플리케이션 프로젝트 디렉터리로 이동하고 다음 명령을 실행합니다.
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Azure 서비스는 다양한 Azure SDK 클라이언트 라이브러리의 특수 클라이언트 클래스를 사용하여 액세스합니다. 이러한 클래스 및 사용자 지정 서비스는 앱 전체에서 종속성 주입을 통해 액세스할 수 있도록 등록되어야 합니다.
Program.cs
에서 다음 단계를 완료하여 클라이언트 클래스를 등록하고, DefaultAzureCredential
을(를) 수행하세요.
-
using
지시문을 통해Azure.Identity
및Microsoft.Extensions.Azure
네임스페이스를 포함합니다. - 해당
Add
접두사 확장 메서드를 사용하여 Azure 서비스 클라이언트를 등록합니다. -
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 구성을 검색하여 다른 서비스에 자동으로 인증할 수 있습니다.
.NET