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
- 共享访问签名 (SAS)
Microsoft Entra ID提供优于共享访问签名(SAS)的安全性和易用性。 通过使用 Microsoft Entra ID,无需在代码中存储令牌,从而减少潜在的安全漏洞。 尽可能将 Microsoft Entra ID 与 Azure 服务总线应用程序配合使用。
本文介绍如何禁用 SAS 密钥身份验证(或本地身份验证),并仅使用Microsoft Entra ID进行身份验证。
为何禁用本地身份验证?
禁用本地(SAS 密钥)身份验证可以通过多种方式增强服务总线命名空间的安全性:
- 消除静态凭据。 SAS 密钥是长期共享机密。 如果密钥泄漏,则拥有该密钥的任何人都可以访问命名空间,直到你手动轮换密钥。 Microsoft Entra ID 使用自动刷新的短期令牌。
- 启用精细访问控制。 SAS 策略在命名空间或实体级别授予广泛的权限(发送、侦听、管理)。 Microsoft Entra 基于角色的访问控制(RBAC)允许向单个用户、组、服务主体或托管标识分配特定角色(
Azure Service Bus Data Sender、Azure Service Bus Data ReceiverAzure Service Bus Data Owner、)。 - 提供审核线索。 Microsoft Entra 身份验证事件显示在 Microsoft Entra 登录日志中。 SAS 密钥使用情况不会生成可比的标识级审核记录。
- 支持条件访问。 通过使用 Microsoft Entra ID,可以强制实施多重身份验证、受信任的设备要求和位置限制等策略 - 这些策略都无法使用 SAS 密钥。
小窍门
禁用本地身份验证之前,请更新所有应用程序,以使用 Microsoft Entra ID 进行身份验证。 请参阅本文后面的 迁移步骤 部分。
使用门户禁用本地身份验证
本部分介绍如何使用Azure门户禁用本地身份验证。
在 Azure 门户中转到服务总线命名空间。
在“概述”页的“概要”部分中,选择“已启用本地身份验证”。
在“本地身份验证”页上,选择“禁用”,然后选择“确定”。
使用模板禁用本地身份验证
通过将disableLocalAuth属性设置为true,可以禁用服务总线命名空间的本地身份验证,如下模板所示。
@description('Name of the Service Bus namespace')
param namespaceName string
@description('Location for all resources.')
param location string = resourceGroup().location
resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
name: namespaceName
location: location
sku: {
name: 'Standard'
tier: 'Standard'
}
properties: {
disableLocalAuth: true
}
}
使用 Azure CLI 或 PowerShell 禁用本地身份验证
还可以使用现有命名空间的命令行工具禁用本地身份验证。
az servicebus namespace update \
--resource-group <resource-group-name> \
--name <namespace-name> \
--disable-local-auth true
若要重新启用本地身份验证,请执行以下操作:
az servicebus namespace update \
--resource-group <resource-group-name> \
--name <namespace-name> \
--disable-local-auth false
可以通过检查 disableLocalAuth 属性来验证当前状态:
az servicebus namespace show \
--resource-group <resource-group-name> \
--name <namespace-name> \
--query disableLocalAuth
使用 Azure Policy 强制实施
对于租户范围或订阅范围的应用,使用内置的 Azure Policy 服务总线命名空间应禁用本地身份验证方法 (策略 ID:cfb11c26-f069-4c14-8e36-56c394dae5af)。
此策略评估服务总线命名空间并标记已 disableLocalAuth 设置为 false 或未设置的任何命名空间。 可以在管理组、订阅或资源组级别分配它。
策略效果
分配策略时,请选择符合强制要求的效果:
| Effect | 行为 |
|---|---|
| 审核 (默认值) | 已启用本地身份验证的现有命名空间在符合性仪表板中显示为 不合规 。 仍允许新命名空间。 |
| 拒绝 | 阻止创建或更新已启用本地身份验证的任何命名空间。 使用此效果以维护新资源的合规性。 |
分配策略
- 在 Azure 门户中,转到 “策略>定义”。
- 搜索 服务总线命名空间应禁用本地身份验证方法。
- 选择策略定义,然后选择“ 分配”。
- 选择范围(管理组、订阅或资源组)。
- 在“ 参数 ”选项卡上,选择所需的效果(审核 或 拒绝)。
- 选择 “查看 + 创建”,然后选择 “创建”。
分配后,不符合的命名空间将显示在 策略>符合性中。 可以为需要更新的命名空间创建修正任务。
从 SAS 迁移到 Microsoft Entra ID
禁用本地身份验证之前,请更新连接到服务总线命名空间的所有应用程序,以使用 Microsoft Entra ID,而不是连接字符串或 SAS 令牌。 执行以下步骤:
步骤 1:分配 RBAC 角色
将适当的 Azure 服务总线数据角色分配给需要访问的每个标识(用户、服务主体或托管标识):
| 角色 | 许可 |
|---|---|
Azure Service Bus Data Sender |
将消息发送到队列和主题 |
Azure Service Bus Data Receiver |
从队列和订阅接收消息 |
Azure Service Bus Data Owner |
完全访问权限(发送、接收、管理实体) |
可以通过 Azure 门户、Azure CLI 或 Azure PowerShell 分配角色。 有关详细说明,请参阅使用 Azure 门户分配 Azure 角色。
步骤 2:更新应用程序代码
将基于连接字符串的身份验证替换为来自 Azure 标识库的 DefaultAzureCredential(或其他 Microsoft Entra 凭据)。 以下示例显示了每种语言的更改:
// Before (connection string):
await using ServiceBusClient client = new("<connection-string>");
// After (Microsoft Entra ID):
await using ServiceBusClient client = new(
"<your-namespace>.servicebus.chinacloudapi.cn",
new DefaultAzureCredential());
有关每个 SDK 的更多详细信息,请参阅:
- .NET: 示例 - 对客户端进行身份验证
- Java: 示例 - 使用 Azure 标识发送
- Python: 示例 — 服务总线客户端
- JavaScript: 服务总线示例
步骤 3:启用这两种身份验证方法进行测试
在本地身份验证仍处于启用状态时部署更新的应用程序。 验证:
- 已成功发送和接收消息。
- 应用程序日志显示 Microsoft Entra 令牌获取过程(而不是 SAS)。
- 不会显示与身份验证相关的错误。
步骤 4:禁用本地身份验证
确认所有应用程序都使用 Microsoft Entra ID 后,请使用本文前面所述的任何方法(门户、CLI、PowerShell 或模板)禁用本地身份验证。
步骤 5:清理 SAS 策略(可选)
禁用本地身份验证后,命名空间上的现有 SAS 策略将保持不变,但不能用于生成功能令牌。 你可以将其保留到位,也可以将其删除,以便进行更简洁的配置。 如果有人意外重新启用本地身份验证,则删除未使用的策略会减少攻击面。
相关内容
若要了解Microsoft Entra ID 和 SAS 身份验证,请参阅以下文章:
- 使用 SAS 进行身份验证
- 使用 Microsoft Entra ID 进行身份验证
