Azure Service Bus 리소스에 액세스하려면 Microsoft Entra ID로 관리 ID를 인증합니다.
Azure 리소스의 관리 ID는 Microsoft Entra ID에서 자동으로 관리되는 ID를 Azure 서비스에 제공합니다. 이 ID를 사용하면 코드에 자격 증명이 없어도 Microsoft Entra 인증을 지원하는 Azure Service Bus와 같은 모든 서비스에 인증할 수 있습니다. 관리 ID에 익숙하지 않은 경우 이 문서를 계속 읽기 전에 Azure 리소스에 대한 관리 ID를 참조하세요.
다음은 관리 ID를 사용하여 Service Bus 엔터티에 액세스하는 대략적인 단계입니다.
클라이언트 앱 또는 환경에 관리 ID를 사용하도록 설정합니다. 예를 들어, Azure App Service 앱, Azure Functions 앱 또는 앱이 실행되는 가상 머신에 대해 관리 ID를 사용하도록 설정합니다. 이 단계에 도움이 되는 문서는 다음과 같습니다.
Azure Service Bus 데이터 소유자, Azure Service Bus 데이터 보낸 사람 또는 Azure Service Bus 데이터 수신자 역할을 적절한 범위(Azure 구독, 리소스 그룹, Service Bus 네임스페이스 또는 Service Bus 큐 또는 토픽)의 관리 ID에 할당합니다. 관리 ID에 역할을 할당하는 방법에 대한 지침은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
애플리케이션에서 관리 ID와 Service Bus 네임스페이스에 대한 엔드포인트를 사용하여 네임스페이스에 연결합니다.
예를 들어, .NET에서는
TokenCredential
및fullyQualifiedNamespace
(문자열, 예:cotosons.servicebus.windows.net
) 매개 변수를 사용하는 ServiceBusClient 생성자를 사용하여 관리 ID를 사용하여 Service Bus에 연결합니다.TokenCredential
에서 파생되고 관리 ID를 사용하는 DefaultAzureCredential을 전달합니다.DefaultAzureCredentialOptions
에서ManagedIdentityClientId
을(를) 클라이언트 관리 ID의 ID로 설정합니다.string fullyQualifiedNamespace = "<your namespace>.servicebus.windows.net>"; string userAssignedClientId = "<your managed identity client ID>"; var credential = new DefaultAzureCredential( new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId }); var sbusClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
Important
Service Bus 네임스페이스에 대한 로컬 또는 SAS 키 인증을 사용하지 않도록 설정하고 Microsoft Entra 인증만 허용할 수 있습니다. 단계별 지침은 로컬 인증 사용 안 함을 참조하세요.
Azure Service Bus에 대한 Azure 기본 제공 역할
Microsoft Entra는 Azure RBAC(역할 기반 액세스 제어)를 통해 보안 리소스에 대한 액세스 권한을 부여합니다. Azure Service Bus는 Service Bus 엔터티에 액세스하는 데 사용되는 일반 권한 집합을 포함하는 Azure 기본 제공 역할의 집합을 정의합니다. 데이터에 액세스하기 위한 사용자 지정 역할을 정의할 수도 있습니다.
Azure는 Service Bus 네임스페이스에 대한 액세스 권한을 부여하기 위해 다음과 같은 Azure 기본 제공 역할을 제공합니다.
- Azure Service Bus 데이터 소유자: 이 역할을 사용하여 Service Bus 네임스페이스 및 해당 엔터티(큐, 토픽, 구독 및 필터)에 대한 전체 액세스를 허용합니다.
- Azure Service Bus 데이터 보낸 사람: 이 역할을 사용하여 Service Bus 큐 및 토픽에 메시지를 보낼 수 있습니다.
- Azure Service Bus Data Receiver: 이 역할을 사용하여 Service Bus 큐 및 구독에서 메시지를 받을 수 있습니다.
Azure Portal에서 관리 ID에 역할을 할당하려면 액세스 제어(IAM) 페이지를 사용합니다. Service Bus 네임스페이스 페이지 또는 Service Bus 큐 페이지 또는 Service Bus 토픽 페이지에서 액세스 제어(IAM)를 선택하여 이 페이지로 이동합니다. 역할 할당에 대한 단계별 지침은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
리소스 범위
관리 ID에 Azure 역할을 할당하기 전에 관리 ID에 있어야 하는 액세스 범위를 결정합니다. 모범 사례에 따르면 항상 가능한 가장 좁은 범위만 부여하는 것이 가장 좋습니다.
다음 목록에서는 Service Bus 리소스에 대한 액세스 범위를 가장 좁은 범위에서 시작하여 지정할 수 있는 수준을 설명합니다.
큐, 토픽 또는 구독: 역할 할당은 특정 Service Bus 엔터티에 적용됩니다.
Service Bus 네임스페이스: 역할 할당은 네임스페이스 아래에 있는 Service Bus의 전체 토폴로지에 걸쳐 있습니다.
리소스 그룹: 역할 할당이 리소스 그룹 아래의 모든 Service Bus 리소스에 적용됩니다.
구독: 역할 할당이 구독의 모든 리소스 그룹에 있는 모든 Service Bus 리소스에 적용됩니다.
참고 항목
Azure 역할 할당을 전파하는 데 최대 5분이 소요될 수 있습니다.
현재 Azure Portal은 해당 토픽의 구독 수준에서 Service Bus Azure 역할에 사용자, 그룹 또는 관리 ID 할당을 지원하지 않습니다. 다음은 Azure CLI 명령을 사용하는 예입니다. az-role-assignment-create를 사용하여 Service Bus Azure 역할에 ID를 할당합니다.
az role assignment create \
--role $service_bus_role \
--assignee $assignee_id \
--scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription
기본 제공 역할이 정의되는 방식에 대한 자세한 내용은 역할 정의 이해를 참조하세요. Azure 사용자 지정 역할 만들기에 대한 자세한 내용은 Azure 사용자 지정 역할을 참조하세요.
SDK 사용
.NET에서 ServiceBusClient 개체는 정규화된 네임스페이스와 TokenCredential
을 사용하는 생성자를 사용하여 초기화됩니다. DefaultAzureCredential
은 앱에 구성된 관리 ID를 자동으로 사용하는 TokenCredential
에서 파생됩니다. Service Bus 및 권한 부여 핸드셰이크에 대한 관리 ID 컨텍스트의 흐름은 토큰 자격 증명에 의해 자동으로 처리합니다. 이 모델은 SAS를 사용하는 방식보다 단순합니다.
var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());
ServiceBusSender 및 ServiceBusReceiver 또는 ServiceBusProcessor를 사용하여 평소와 같이 메시지를 보내고 받습니다.
관리 ID를 사용하여 메시지를 보내고 받는 방법에 대한 전체 단계별 지침은 다음 빠른 시작을 참조하세요. 이러한 빠른 시작에는 서비스 주체를 사용하여 메시지를 보내고 받는 코드가 있지만 코드는 관리 ID를 사용하는 경우와 동일합니다.
참고 항목
관리 ID는 Azure 환경, App 서비스, Azure VM 및 확장 집합 내에서만 작동합니다. .NET 애플리케이션의 경우 Service Bus NuGet 패키지에서 사용되는 Microsoft.Azure.Services.AppAuthentication 라이브러리는 이 프로토콜에 대한 추상화를 제공하고 로컬 개발 환경을 지원합니다. 또한 이 라이브러리를 통해 개발 머신에서 Visual Studio, Azure CLI 2.0 또는 Active Directory 통합 인증의 사용자 계정을 사용하여 코드를 로컬로 테스트할 수 있습니다. 이 라이브러리를 통한 로컬 개발 옵션에 대한 자세한 내용은 .NET을 사용하여 Azure Key Vault에 대한 서비스 간 인증을 참조하세요.
다음 단계
메시지를 보내고 받기 위해 관리 ID를 사용하여 Service Bus에 연결하는 GitHub의 이 .NET 웹 애플리케이션 샘플을 참조하세요. 앱 서비스의 ID를 Azure Service Bus 데이터 소유자 역할에 추가합니다.