Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure 资源托管标识在 Microsoft Entra ID 中为 Azure 服务提供了一个自动托管标识。 可以使用此标识向 Azure 服务总线进行身份验证,而无需在代码中存储凭据。
本文逐步讲解如何启用托管标识、分配适当的服务总线角色,以及从应用程序代码连接到服务总线。
如果不熟悉托管标识,请参阅 Azure 资源的托管标识。
先决条件
若要将托管标识与 Azure 服务总线配合使用,需要:
一份 Azure 订阅。 如果您还没有,请在开始之前创建一个试用订阅。
Azure 服务总线命名空间。 若要创建一个,请参阅 创建服务总线命名空间。
在您的 Azure 计算资源上,启用了托管标识。 See:
可以为服务总线命名空间禁用本地或共享访问签名(SAS)密钥身份验证,并仅允许Microsoft Entra 身份验证。 有关分步说明,请参阅禁用本地身份验证。
将服务总线角色分配给托管标识
Microsoft Entra 通过 Azure 基于角色的访问控制 (RBAC) 授予对受保护资源的访问权限。 Azure 服务总线提供 Azure 内置角色,其中包含用于访问服务总线实体的常见权限集。 还可以定义自定义角色。
下表列出了用于授权访问服务总线命名空间的 Azure 内置角色:
| 角色 | 说明 |
|---|---|
| Azure 服务总线数据所有者 | 完全访问服务总线命名空间及其实体(队列、主题、订阅和筛选器) |
| Azure 服务总线数据发送方 | 能够将消息发送到服务总线队列和主题 |
| Azure 服务总线数据接收器 | 能够从服务总线队列和订阅接收消息 |
选择资源范围
在分配 Azure 角色之前,请确定托管标识所需的访问权限范围。 仅授予尽可能窄的权限范围。
以下列表描述了可将服务总线资源访问权限限定到哪些级别,从最小的范围开始:
- 队列、主题或订阅:角色分配适用于特定的 服务总线 实体。
- 服务总线命名空间:角色分配跨越命名空间下服务总线的整个拓扑。
- 资源组:角色分配适用于资源组下的所有服务总线资源。
- 订阅:角色分配适用于订阅的所有资源组中的所有服务总线资源。
Azure 角色分配可能需要最多五分钟的时间才能传播。
在 Azure 门户中将托管标识分配角色
转到您的服务总线命名空间、队列或主题。
在左侧菜单中,选择“访问控制 (IAM)”。
选择添加>添加角色分配。
在“ 角色 ”选项卡上,选择相应的服务总线数据角色。
在“成员”选项卡上,选择“托管身份”>选择成员。
选择您 Azure 资源的托管标识。
选择审核 + 分配。
有关详细信息,请参阅使用 Azure 门户分配 Azure 角色。
使用 Azure CLI 分配角色
Azure 门户不支持在主题订阅级别将托管标识分配到服务总线角色。 使用 Azure CLI az role assignment create 命令在任何范围内分配角色:
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 自定义角色,请参阅 Azure 自定义角色。
注意
如果在从服务总线 RBAC 角色中删除其托管标识后源服务或应用未重启,则源应用可能会继续向服务总线实体发送或接收消息,直到令牌过期。 (默认令牌有效期为 24 小时。此行为是设计造成的。
从 RBAC 角色中删除源的托管标识后,重启源应用或服务以立即使令牌过期,并阻止它从服务总线实体发送和接收消息。
使用 Azure SDK 中的托管标识连接到服务总线
用于 .NET、Java、JavaScript 和 Python 的 Azure SDK 支持使用服务总线进行托管标识身份验证。 以下示例演示如何使用 .NET SDK 进行连接。
在 .NET 中, ServiceBusClient 对象使用采用完全限定的命名空间和令牌凭据(TokenCredential)的构造函数进行初始化。
DefaultAzureCredential 派生自 TokenCredential,该标识会自动使用为应用配置的托管标识。 令牌凭据会自动处理托管标识上下文到服务总线和授权握手的流。 它比使用 SAS 更简单。
var client = new ServiceBusClient("contoso.servicebus.chinacloudapi.cn", new DefaultAzureCredential());
使用 ServiceBusSender 和 ServiceBusReceiver 或 ServiceBusProcessor 像往常一样发送和接收消息。
有关使用托管标识发送和接收消息的分步说明,请参阅以下快速入门。 这些快速入门包含使用服务主体发送和接收消息的代码,但该代码与使用托管标识时的代码相同。
注意
托管标识只在 Azure 环境中运行,包括 Azure 应用服务、Azure 虚拟机和规模集。 对于 .NET 应用程序, Microsoft.Azure.Services.AppAuthentication 该库提供对此协议的抽象,并支持本地开发体验。 服务总线 NuGet 包使用此库。
还可以使用此库通过 Visual Studio、Azure CLI 或 Microsoft Entra 集成身份验证中的用户帐户在本地测试开发计算机上的代码。 有关此库的本地开发选项的详细信息,请参阅 适用于 .NET 的应用身份验证客户端库 - 版本 1.6.0。