You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure函数的Service Bus触发器配置RBAC授权(非SAS密钥)?

问题描述

已将Azure Service Bus配置为使用RBAC,并为自身分配了Azure Service Bus Data Owner角色,可通过以下代码成功向队列发送消息:

ServiceBusClient client = new ServiceBusClient("mynamespace.servicebus.windows.net", new AzureCliCredential());
ServiceBusMessage serviceBusMessage = new ServiceBusMessage("my message");
await client.CreateSender("myqueue").SendMessageAsync(serviceBusMessage);

但本地运行带有Service Bus触发器的Azure函数时出现启动失败错误,函数代码如下:

[Function(nameof(MyTrigger))]
public async Task Run(
    [ServiceBusTrigger("myqueue", Connection = "MyServiceBusNamespace")]
    ServiceBusReceivedMessage message,
    ServiceBusMessageActions messageActions)
{
    _logger.LogInformation("Message Body: {body}", message.Body);
    await messageActions.CompleteMessageAsync(message);
    await Task.CompletedTask;
}

本地配置文件local.settings.json内容:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "AzureWebJobsSecretStorageType": "Files",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "MyServiceBusNamespace": "mynamespace.servicebus.windows.net"
    }
}

错误信息:

[2025-02-17T17:22:14.636Z] The listener for function 'Functions.MyTrigger' was unable to start.
[2025-02-17T17:22:14.636Z] The listener for function 'Functions.MyTrigger' was unable to start. Azure.Messaging.ServiceBus: The connection string could not be parsed; either it was malformed or contains no well-known tokens.

需解决:如何在Azure函数中使用基于RBAC(而非SAS密钥)的Service Bus触发器?

解决方案

要让Azure Service Bus触发器使用RBAC认证,需调整配置和依赖,具体步骤如下:

  • 修改local.settings.json连接配置
    不能直接将命名空间地址作为连接值,需配置为指定身份认证的格式。将MyServiceBusNamespace的值修改为:

    Endpoint=sb://mynamespace.servicebus.windows.net/;Authentication=ManagedIdentity
    

    该格式会告知函数运行时使用托管身份完成认证,本地开发时自动复用Azure CLI的登录身份。

  • 确认本地Azure CLI登录状态
    本地运行函数时,会自动使用当前Azure CLI的登录身份,需确保已通过az login登录到拥有Service Bus权限的账号,且该账号已分配Azure Service Bus Data Receiver或Azure Service Bus Data Owner角色(已分配Data Owner则无需额外操作,仅需确认登录账号正确)。

  • 检查包依赖版本
    对于.NET Isolated模式的函数,需确保Microsoft.Azure.Functions.Worker.Extensions.ServiceBus包版本不低于5.11.0(此版本开始支持RBAC认证)。项目文件中的依赖示例:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.11.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.1" />
    
  • 多租户环境下指定租户ID(可选)
    若Azure账号属于多个租户,需在local.settings.json的Values中添加AZURE_TENANT_ID配置,指定目标租户ID:

    "AZURE_TENANT_ID": "你的租户ID"
    

完成上述配置后,重新运行函数,触发器即可通过RBAC认证连接到Service Bus队列并处理消息。

内容的提问来源于stack exchange,提问作者tridy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:57:25