Azure Service Bus 엔터티에 액세스하려면 Microsoft Entra ID로 애플리케이션을 인증하고 권한을 부여합니다.

Azure Service Bus는 Microsoft Entra ID를 사용하여 Service Bus 엔터티(큐, 항목, 구독 또는 필터)에 대한 요청에 권한을 부여하는 것을 지원합니다. Microsoft Entra ID를 사용하면 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 보안 주체에 권한을 부여할 수 있습니다. 보안 주체는 Azure 리소스에 대한 사용자, 그룹, 애플리케이션 서비스 주체 또는 관리 ID일 수 있습니다.

Azure Service Bus에서 Microsoft Entra ID를 사용하는 주요 이점은 더 이상 코드에 자격 증명을 저장할 필요가 없다는 것입니다. 대신 Microsoft ID 플랫폼에서 OAuth 2.0 액세스 토큰을 요청할 수 있습니다. 인증에 성공하면 Microsoft Entra ID는 애플리케이션에 대한 액세스 토큰을 반환합니다. 그런 다음 애플리케이션은 액세스 토큰을 사용하여 Service Bus 리소스에 대한 요청에 권한을 부여할 수 있습니다.

Service Bus 네임스페이스에 대해 SAS(로컬 또는 공유 액세스 서명) 키 인증을 사용하지 않도록 설정하고 Microsoft Entra 인증만 허용할 수 있습니다. 단계별 지침은 로컬 인증 사용 안 함을 참조하세요.

개요

보안 주체(사용자, 그룹 또는 애플리케이션)가 Service Bus 엔터티에 액세스하려고 하는 경우 요청에 권한이 부여되어야 합니다. Microsoft Entra ID를 사용하면 리소스에 대한 액세스는 2단계 프로세스입니다.

  1. 보안 주체의 ID가 인증되고 OAuth 2.0 토큰이 반환됩니다. 토큰을 요청하는 리소스 이름은 https://servicebus.azure.net입니다.
  2. 토큰은 지정된 리소스에 대한 액세스 권한을 부여하기 위해 Service Bus 서비스에 대한 요청의 일부로 전달됩니다.

인증 단계를 수행하려면 런타임 시 애플리케이션 요청에 OAuth 2.0 액세스 토큰을 포함해야 합니다. 애플리케이션이 Azure 가상 머신, 가상 머신 확장 집합 또는 함수 앱과 같은 Azure 엔터티 내에서 실행되는 경우 관리 ID를 사용하여 리소스에 액세스할 수 있습니다. 관리 ID가 Service Bus 서비스에 대해 만드는 요청을 인증하는 방법을 알아보려면 Azure Service Bus에서 관리 ID 사용을 참조하세요.

권한 부여 단계를 수행하려면 하나 이상의 Azure 역할을 보안 주체에 할당해야 합니다. Service Bus는 Service Bus 리소스에 대한 권한 집합을 포함하는 Azure 역할을 제공합니다. 보안 주체에 할당된 역할은 보안 주체가 Service Bus 리소스에 대해 갖는 권한을 결정합니다. Service Bus에 Azure 역할을 할당하는 방법에 대한 자세한 내용은 Azure Service Bus에 대한 Azure 기본 제공 역할을 참조하세요.

Service Bus에 요청하는 네이티브 애플리케이션 및 웹 애플리케이션도 Microsoft Entra ID를 사용하여 권한을 부여할 수 있습니다. 이 문서에서는 액세스 토큰을 요청하고 이를 사용하여 Service Bus 리소스에 대한 요청에 권한을 부여하는 방법을 보여 줍니다.

Azure Service Bus에 대한 Azure 기본 제공 역할

Microsoft Entra는 Azure RBAC를 통해 보안 리소스에 대한 액세스 권한을 부여합니다. Azure Service Bus는 Service Bus 엔터티에 액세스하는 데 사용되는 일반 권한 집합을 포함하는 Azure 기본 제공 역할의 집합을 정의합니다. 데이터에 액세스하기 위한 사용자 지정 역할을 정의할 수도 있습니다.

Azure 역할이 Microsoft Entra 보안 주체에 할당되면 Azure는 해당 보안 주체에 해당 리소스에 대한 액세스 권한을 부여합니다. 액세스 범위는 구독, 리소스 그룹, Service Bus 네임스페이스 또는 엔터티(큐, 토픽 또는 구독) 수준으로 지정할 수 있습니다. Microsoft Entra 보안 주체는 사용자, 그룹, 애플리케이션 서비스 주체 또는 Azure 리소스에 대한 관리 ID일 수 있습니다.

Azure Service Bus의 경우 Azure RBAC 모델은 Azure Portal 및 Azure 리소스 관리 API를 통해 네임스페이스 및 모든 관련 리소스의 관리를 보호합니다. Azure는 Service Bus 네임스페이스에 대한 액세스 권한을 부여하기 위해 다음과 같은 기본 제공 역할을 제공합니다.

리소스 범위

Azure 역할을 보안 주체에 할당하기 전에 보안 주체에게 부여해야 하는 액세스 범위를 결정합니다. 모범 사례에 따르면 항상 가능한 가장 좁은 범위만 부여하는 것이 가장 좋습니다.

다음 목록에서는 Service Bus 리소스에 대한 액세스 범위를 가장 좁은 범위에서 시작하여 지정할 수 있는 수준을 설명합니다.

  • 큐, 토픽 또는 구독: 역할 할당은 특정 Service Bus 엔터티에 적용됩니다. 현재 Azure Portal은 토픽 구독 수준에서 Service Bus Azure 역할에 사용자, 그룹 또는 관리 ID 할당을 지원하지 않습니다.

  • Service Bus 네임스페이스: 역할 할당은 네임스페이스 아래의 Service Bus 토폴로지 전체와 이와 연관된 큐 또는 항목 구독에 걸쳐 적용됩니다.

  • 리소스 그룹: 역할 할당이 리소스 그룹 아래의 모든 Service Bus 리소스에 적용됩니다.

  • Azure 구독: 역할 할당은 구독의 모든 리소스 그룹에 있는 모든 Service Bus 리소스에 적용됩니다.

Azure 역할 할당을 전파하는 데 최대 5분이 걸릴 수 있습니다.

기본 제공 역할이 정의되는 방법에 대한 자세한 내용은 Azure 역할 정의 이해를 참조하세요. Azure 사용자 지정 역할 만들기에 대한 자세한 내용은 Azure 사용자 지정 역할을 참조하세요.

애플리케이션에서 인증

Service Bus와 함께 Microsoft Entra ID를 사용하는 주요 이점은 자격 증명을 더 이상 코드에 저장할 필요가 없다는 것입니다. 대신 Microsoft ID 플랫폼에서 OAuth 2.0 액세스 토큰을 요청할 수 있습니다.

Microsoft Entra는 애플리케이션을 실행하는 보안 주체(사용자, 그룹, 서비스 주체 또는 Azure 리소스에 대한 관리 ID)를 인증합니다. 인증에 성공하면 Microsoft Entra ID는 애플리케이션에 대한 액세스 토큰을 반환합니다. 그런 다음 애플리케이션은 액세스 토큰을 사용하여 Service Bus에 대한 요청에 권한을 부여할 수 있습니다.

다음 섹션에서는 Microsoft ID 플랫폼 2.0 인증을 위해 네이티브 애플리케이션 또는 웹 애플리케이션을 구성하는 방법을 보여 줍니다. 플랫폼에 대한 자세한 내용은 Microsoft ID 플랫폼이란?을 참조하세요.

OAuth 2.0 코드 부여 흐름에 대한 개요는 Microsoft ID 플랫폼 및 OAuth 2.0 권한 부여 코드 흐름을 참조하세요.

Microsoft Entra 테넌트에 애플리케이션 등록

Microsoft Entra ID를 사용하여 Service Bus 엔터티에 권한을 부여하는 첫 번째 단계는 Azure Portal에서 Microsoft Entra 테넌트에 클라이언트 애플리케이션을 등록하는 것입니다. 클라이언트 애플리케이션을 등록할 때 Active Directory에 애플리케이션에 대한 정보를 제공합니다. 그런 다음 Microsoft Entra ID는 애플리케이션을 Microsoft Entra 런타임과 연결하는 데 사용할 수 있는 클라이언트 ID(애플리케이션 ID라고도 함)를 제공합니다. 클라이언트 ID에 대해 자세히 알아보려면 Microsoft Entra ID의 애플리케이션 및 서비스 주체 개체를 참조하세요.

Microsoft Entra ID로 애플리케이션을 등록하려면 Microsoft Entra ID에 애플리케이션 등록의 단계를 따릅니다.

참고

애플리케이션을 네이티브 애플리케이션으로 등록하는 경우 리디렉션 URI에 유효한 URI를 지정할 수 있습니다. 네이티브 애플리케이션의 경우 이 값이 실제 URL일 필요는 없습니다. 웹 애플리케이션의 경우 리디렉션 URI는 토큰이 제공되는 URL을 지정하므로 유효한 URI여야 합니다.

애플리케이션을 등록하면 애플리케이션(클라이언트) ID디렉터리(테넌트) ID설정 아래에 표시됩니다. 이러한 값을 기록해 둡다. 애플리케이션을 실행하려면 해당 요소가 필요합니다.

앱 등록 창의 애플리케이션 ID 및 테넌트 ID를 보여 주는 스크린샷.

클라이언트 암호 만들기

애플리케이션은 토큰을 요청할 때 해당 ID를 증명하기 위해 클라이언트 암호가 필요합니다. 클라이언트 암호를 추가하려면 다음 단계를 수행합니다.

  1. 아직 페이지에 없는 경우 Azure Portal에서 앱 등록으로 이동합니다.

  2. 왼쪽 메뉴에서 인증서 및 비밀을 선택합니다.

  3. 클라이언트 비밀에서 새 클라이언트 비밀을 선택하여 새 비밀을 만듭니다.

    창에서 인증서 및 비밀에 대한 클라이언트 암호를 만드는 단추를 보여 주는 스크린샷

  4. 비밀에 대한 설명을 제공하고 만료 간격을 선택한 다음 추가를 선택합니다.

    클라이언트 암호를 추가하기 위한 창을 보여 주는 스크린샷.

  5. 새 암호의 값을 안전한 위치에 즉시 복사합니다. 전체 값은 한 번만 나타납니다.

    비밀 복사 단추와 함께 클라이언트 비밀 영역을 보여 주는 스크린샷

Service Bus API에 대한 권한 추가

애플리케이션이 콘솔 애플리케이션인 경우 네이티브 애플리케이션을 등록하고 필요한 권한 집합에 대한 Microsoft.ServiceBus API 권한을 추가해야 합니다.

네이티브 애플리케이션에는 식별자 역할을 하는 Microsoft Entra ID의 리디렉션 URI 도 필요합니다. URI는 네트워크 대상이 될 필요가 없습니다. 이 예제의 경우 샘플 코드가 이미 해당 URI를 사용하므로 https://servicebus.microsoft.com을 사용합니다.

Azure Portal을 통해 Azure 역할 할당

원하는 범위(엔터티, Service Bus 네임스페이스, 리소스 그룹 또는 Azure 구독)에서 Service Bus 역할 중 하나를 애플리케이션의 서비스 주체에 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

역할 및 해당 범위를 정의한 후 GitHub에서 샘플을 사용하여 이 동작을 테스트할 수 있습니다.

Service Bus 클라이언트의 인증

애플리케이션을 등록하고 Azure Service Bus에서 데이터를 보내고 받을 수 있는 권한을 부여한 후에는 클라이언트 비밀 자격 증명으로 클라이언트를 인증할 수 있습니다. 이 인증을 사용하면 Azure Service Bus에 대해 요청할 수 있습니다.

토큰 획득이 지원되는 시나리오 목록은 .NET GitHub 리포지토리용 MSAL(Microsoft 인증 라이브러리)시나리오 섹션을 참조하세요.

최신 Azure.Messaging.ServiceBus 라이브러리를 사용하여 Azure.Identity 라이브러리에 정의된 ClientSecretCredential을 사용하여 ServiceBusClient를 인증할 수 있습니다.

TokenCredential credential = new ClientSecretCredential("<tenant_id>", "<client_id>", "<client_secret>");
var client = new ServiceBusClient("<fully_qualified_namespace>", credential);

이전 .NET 패키지를 사용하는 경우 GitHub의 Service Bus에 대한 Azure RBAC 샘플을 참조하세요.