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 리소스에 대한 요청에 권한을 부여할 수 있습니다.

Important

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 VM, 가상 머신 확장 집합 또는 Azure Function 앱과 같은 Azure 엔터티 내에서 애플리케이션이 실행되는 경우 관리 ID를 사용하여 리소스에 액세스할 수 있습니다. Service Bus 서비스에 대한 관리 ID의 요청을 인증하는 방법을 알아보려면 Microsoft Entra ID 및 Azure 리소스용 관리 ID를 사용하여 Azure Service Bus 리소스에 대한 액세스 인증을 참조하세요.

권한 부여 단계에서는 보안 주체에 하나 이상의 Azure 역할을 할당해야 합니다. Azure Service Bus는 Service Bus 리소스에 대한 권한 집합을 포함하는 Azure 역할을 제공합니다. 보안 주체에 할당된 역할에 따라 보안 주체가 가지는 권한이 Service Bus 리소스에 부여됩니다. Azure 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 Portal 및 Azure 리소스 관리 API를 통한 네임스페이스 및 관련된 모든 리소스의 관리는 이미 Azure RBAC 모델을 사용하여 보호되고 있습니다. Azure는 Service Bus 네임스페이스에 대한 액세스 권한을 부여하기 위해 다음과 같은 기본 제공 역할을 제공합니다.

리소스 범위

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

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

  • , 토픽 또는 구독: 역할 할당은 특정 Service Bus 엔터티에 적용됩니다. 현재 Azure Portal은 구독 수준에서 사용자/그룹/관리 ID를 Service Bus Azure 역할에 할당하는 것을 지원하지 않습니다.
  • Service Bus 네임스페이스: 역할 할당이 네임스페이스 아래에 있는 Service Bus의 전체 토폴로지 및 이와 관련된 소비자 그룹에 적용됩니다.
  • 리소스 그룹: 역할 할당이 리소스 그룹 아래의 모든 Service Bus 리소스에 적용됩니다.
  • 구독: 역할 할당이 구독의 모든 리소스 그룹에 있는 모든 Service Bus 리소스에 적용됩니다.

참고 항목

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

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

애플리케이션에서 인증

Service Bus와 함께 Microsoft Entra ID를 사용하는 주요 이점은 자격 증명을 더 이상 코드에 저장할 필요가 없다는 것입니다. 대신 Microsoft ID 플랫폼에서 OAuth 2.0 액세스 토큰을 요청할 수 있습니다. Microsoft Entra는 애플리케이션을 실행하는 보안 주체(사용자, 그룹, 서비스 주체 또는 Azure 리소스에 대한 관리 ID)를 인증합니다. 인증이 성공하면 Microsoft Entra ID는 애플리케이션에 액세스 토큰을 반환하고, 애플리케이션은 액세스 토큰을 사용하여 Azure Service Bus에 대한 요청에 권한을 부여할 수 있습니다.

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

OAuth 2.0 코드 부여 흐름에 대한 개요는 OAuth 2.0 코드 부여 흐름을 사용하여 Microsoft Entra 웹 애플리케이션에 대한 액세스 권한 부여를 참조하세요.

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

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

빠른 시작: Microsoft ID 플랫폼에 애플리케이션 등록의 단계에 따라 Microsoft Entra ID에 애플리케이션을 등록합니다.

참고 항목

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

애플리케이션을 등록한 후에는 설정 아래에 애플리케이션(클라이언트) ID디렉터리(테넌트) ID가 표시됩니다.

Important

TenantIdApplicationId를 적어 둡니다. 애플리케이션을 실행하려면 이러한 값이 필요합니다.

Screenshot showing the App registration page showing the Application ID and Tenant ID.

Microsoft Entra ID로 애플리케이션을 등록하는 방법에 대한 자세한 내용은 Microsoft Entra ID로 애플리케이션 통합을 참조하세요.

클라이언트 암호 만들기

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

  1. 아직 해당 페이지로 이동하지 않은 경우 Azure Portal에서 앱 등록으로 이동합니다.

  2. 왼쪽 메뉴에서 인증서 및 암호를 선택합니다.

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

    Screenshot showing the Certificates and secrets page with New client secret button selected.

  4. 암호에 대한 설명을 제공하고 원하는 만료 기간을 선택한 다음, 추가를 선택합니다.

    Screenshot showing the Add a client secret page.

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

    Screenshot showing the Client secrets section with the secret you added.

Service Bus API에 대한 사용 권한

사용 중인 애플리케이션은 콘솔 애플리케이션이므로 네이티브 애플리케이션을 등록하고 Microsoft.ServiceBus에 대한 API 사용 권한을 필요한 권한 집합에 추가해야 합니다. 또한 네이티브 애플리케이션은 ID 역할을 하는 Microsoft Entra ID의 리디렉션 URI가 필요합니다. URI가 네트워크 대상일 필요는 없습니다. 이 예제의 경우 샘플 코드가 이미 해당 URI를 사용하므로 https://servicebus.microsoft.com을 사용합니다.

Azure Portal을 사용하여 Azure 역할 할당

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

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

Service Bus 클라이언트 인증

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

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

최신 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 패키지를 사용하는 경우 azure-service-bus 샘플 리포지토리의 RoleBasedAccessControl 샘플을 참조하세요.

다음 단계

Service Bus 메시징에 대해 자세히 알아보려면 다음 항목을 참조하세요.