Azure WebJobs 및 Service Bus에서 관리 ID 사용
7631 단어 servicebusterraformazure
이것은 비밀을 올바른 방식으로 처리하기 때문에 매우 유용합니다far from easy.
MSI 작동 방식은 이 문서의 범위를 벗어나며 자세한 정보here를 찾을 수 있지만 간단히 말해서 다음과 같습니다.
제 경우에는 ServiceBus 대기열을 통해 메시지를 처리하는 WebJob이 있으므로 서비스 주체에게 기본 제공Azure Service Bus Data Receiver 역할을 사용하여 대기열에서 읽을 수 있는 권한을 부여했습니다.
WebJob SDK는 설명된 대로here MSI를 사용하여 ServiceBus에 연결하는 것을 지원하므로 다음과 같은 방식으로 WebJob을 구성했습니다.
"ServiceBusConnection__fullyQualifiedNamespace" : "<service_bus_namespace>.servicebus.windows.net"
"QueueName" : "test-queue"
대기열과 권한은 다음과 같이 terraform에서 정의되었습니다.
// Define the queue
resource "azurerm_servicebus_queue" "msi-test-queue" {
name = "test-queue"
namespace_id = azurerm_servicebus_namespace.msi-test-sb.id
enable_partitioning = true
}
// Grant the WebJob Azure Service Bus Data Receiver permissions
resource "azurerm_role_assignment" "consumer_service_bus_read" {
scope = azurerm_servicebus_queue.msi-test-queue.id
role_definition_name = "Azure Service Bus Data Receiver"
principal_id = azapi_resource.consumer_container_app.identity.0.principal_id
depends_on = [azapi_resource.consumer_container_app]
}
C#의 WebJob 정의는 다음과 같습니다.
[FunctionName("Processor")]
public async Task ProcessEvent(
[ServiceBusTrigger("%QueueName%", Connection = "ServiceBusConnection", IsSessionsEnabled = false)]
ServiceBusReceivedMessage message, ServiceBusMessageActions messageActions)
{
....
}
여기서 문자열 ServiceBusConnection은 Service Bus에 대한 연결 문자열을 포함하는 구성 값의 이름을 가리키고 %QueueName% 문자열은 큐 이름을 포함하는 구성 값을 가리킵니다.
If you don't use the percent sign, the string will be the name of the queue and it will be hardcoded, adding the %% allows you to configure dynamically via a configuration lookup.
안타깝게도 작동하지 않았습니다. WebJob은 시작 시 권한에 대해 불평하는 예외를 발생시켰습니다. 메시지는 다음과 같습니다.
Unauthorized access. 'Listen' claim(s) are required to perform this operation
권한이 있었고 Azure Portal에서 두 번 확인했기 때문에 이것은 예상치 못한 일이었습니다.
이 작업을 수행할 수 있는 유일한 방법은 전체 Service Bus 네임스페이스에 대한 Azure Service Bus 데이터 수신기 권한을 부여하는 것이었습니다.
resource "azurerm_role_assignment" "consumer_service_bus_read" {
scope = azurerm_servicebus_namespace.msi-test-sb.id
role_definition_name = "Azure Service Bus Data Receiver"
principal_id = azapi_resource.consumer_container_app.identity.0.principal_id
depends_on = [azapi_resource.consumer_container_app]
}
이 접근 방식의 한 가지 주의 사항은 엄격하게 요구되는 것보다 더 많은 권한을 부여하지만 적어도 차단을 해제할 수 있다는 것입니다.
소스 코드에 관심이 있는 경우 찾을 수 있습니다here.
이 정보가 도움이 되었기를 바라며 질문이나 제안 사항이 있으면 아래에 댓글을 달아주세요!
Reference
이 문제에 관하여(Azure WebJobs 및 Service Bus에서 관리 ID 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maxx_don/using-managed-identity-with-azure-webjobs-and-service-bus-5a1n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)