Azure WebJobs, Service Bus 및 관리 ID: 교훈

2139 단어 csharpazure
오늘 저는 MSI(관리 서비스 ID)를 사용하여 Azure Service Bus에 연결하기 위해 일부 Azure 웹 작업을 변환했습니다.

이 애플리케이션은 주제를 구독하고 데이터베이스에 쓰는 들어오는 메시지를 처리하는 Azure WebJob SDK를 사용하여 빌드된 간단한 C# Azure WebJob입니다.

These are the nuget packages used:

  • Microsoft.Azure.WebJobs v 3.0.33
  • Microsoft.Azure.WebJobs.Extensions.ServiceBus v 5.6.0 Please note that since Azure Functions are built on top of the WebJobs SDK, you may encounter the same issue there, I haven't verified though.


필요한 권한을 부여하기 위해 보안 그룹을 생성하고 앱 서비스의 관리 ID를 그룹에 추가한 다음 이 서비스 그룹에 Azure Service Bus Data Owner 권한 부여를 진행했습니다.

설명에 따르면 이 역할은 전체 Service Bus 네임스페이스에 대한 전체 액세스 권한을 가져야 하므로 애플리케이션을 실행하려고 했을 때 다음과 같은 오류가 발생했을 때 놀랐을 것이라고 상상해 보십시오.

Unauthorized access. 'Listen' claim(s) are required to perform this operation. 
Resource: 'sb://{namespace-name}.servicebus.windows.net/{topic-name}/subscriptions/{service-name}'.
TrackingId:4e956a067b044b1089b5e327c0d08fd0_G9, SystemTracker:gateway7, Timestamp:2022-08-05T15:32:58 


몇 번의 시행착오 끝에 내가 찾은 것은 다음과 같습니다.
  • Azure Service Bus 데이터 소유자 권한을 그룹에 할당하고 애플리케이션의 관리 ID가 그룹의 일부인 경우 어떤 권한을 부여하든 상관없이 작동하지 않습니다 ❌
  • 관리 서비스 ID에 Azure Service Bus 데이터 소유자 권한을 할당하면 작동하지 않습니다. ❌
  • 권한 Azure Service Bus Data Receiver를 그룹에 할당하고 애플리케이션의 관리 ID가 그룹의 일부인 경우 작동합니다 ✅
  • Azure Service Bus Data Receiver 권한을 관리 서비스 ID에 할당하면 작동합니다 ✅

  • Please note it may take up to 5 minutes for the permission changes to be applied, so you may still experience failures after applying them.



    이를 작동시키는 유일한 방법은 관리 ID에 Azure Service Bus 데이터 수신기 역할을 서비스 ID 또는 보안 그룹에 할당하는 것이었습니다.

    이것은 Azure SDK 또는 Service Bus 자체의 버그인 것 같습니다. 이 버그issue를 만난 유일한 사람은 아니므로 여기에서 추가 정보를 찾을 수 있습니다.

    다음 시간까지.

    좋은 웹페이지 즐겨찾기