Azure 服务总线 是一种全托管的企业级消息代理,提供消息队列和发布/订阅主题。 由于服务总线命名空间在分布式应用之间承载关键业务数据,遵循安全最佳实践以保护消息、凭证和消息基础设施非常重要。
本文提供安全建议,帮助您保护您的 Azure 服务总线 部署。
本文中的安全建议实施零信任原则:“显式验证”、“使用最低特权访问”和“假设违规”。 有关全面的零信任指南,请参阅 零信任指南中心。
特定于服务的安全性
服务总线在命名空间层面应用了许多安全控制措施,包括网络访问、本地认证和加密设置。 你还可以对单个队列、主题和订阅设置访问权限。 因此,层级选择和角色分配范围都是安全决策。
- 选择高级层以实现私有网络隔离和密钥控制:私有端点、虚拟网络规则、地理复制和客户管理的密钥加密都需要高级层命名空间。 标准层命名空间支持IP防火墙规则,但不支持可信服务例外。 有关详细信息,请参阅服务总线高级和标准消息传送层。
网络安全
默认情况下,任何提供有效凭证的客户端都可以从公共互联网访问 服务总线 命名空间。 限制网络访问,只有受信任的网络能够访问该命名空间。
- 禁用公共网络访问并使用私有终端:通过 Azure 专用链接 将客户端连接到高级命名空间,使流量通过 Microsoft 骨干网而非公共互联网。 关闭公共网络接入以消除网络暴露。 有关详细信息,请参阅 “允许通过专用终结点访问 Azure 服务总线命名空间”。
- 用IP防火墙规则限制访问:限制访问只能使用特定的IPv4地址或CIDR范围,比如本地NAT网关或Azure ExpressRoute地址,这样命名空间会拒绝来自所有其他地址的连接。 更多信息请参见“配置 服务总线 命名空间的 IP 防火墙规则”。
- 将命名空间绑定到带有服务端点的虚拟网络:使用虚拟网络规则,确保只有授权子网内的工作负载能访问命名空间。 欲了解更多信息,请参见允许从特定虚拟网络访问 服务总线 命名空间。
- 当你不使用地理复制时,将命名空间添加到网络安全边界:将命名空间和其他PaaS资源(如Azure 密钥保管库)置于网络安全边界内,通过显式规则控制公共访问,并允许边界内资源间的通信。 如果你需要 服务总线 地理复制,不要将命名空间与网络安全边界关联。 有关详细信息,请参阅 Azure 服务总线的网络安全外围。
- 强制执行最低TLS版本:在验证客户端兼容性后,配置命名空间的最低TLS版本。 服务总线默认在公共端点使用TLS 1.3,仍允许TLS 1.2以实现向后兼容,并拒绝使用低于配置最低协议版本的请求。 欲了解更多信息,请参见“强制实施 服务总线 命名空间所需的最低 TLS 版本”。
身份和访问管理
服务总线 支持结合 Azure 基于角色的访问控制(RBAC)和共享访问签名(SAS)的 Microsoft Entra ID 身份验证。 优先选择 Microsoft Entra ID,它避免长期共享秘密,并提供身份级审计和条件访问。
- 使用Microsoft Entra ID认证:使用Microsoft Entra ID和OAuth 2.0令牌代替SAS密钥,这样应用程序就不会在代码中存储凭证。 欲了解更多信息,请参见 Azure 服务总线 认证与授权。
-
禁用本地(SAS)认证:在命名空间设置
disableLocalAuth拒绝基于SAS的访问,并要求所有连接使用Microsoft Entra ID,从而消除静态共享秘密。 欲了解更多信息,请参见“禁用 Azure 服务总线 的本地认证。 - 为应用程序使用托管身份:为 Azure 计算资源授予托管身份,使其无需硬编码凭据即可认证 服务总线。 欲了解更多信息,请参见“使用管理身份访问 Azure 服务总线 资源”。
- 分配最小权限的内置角色:为每个主体授予权限范围最小的内置角色:使用 Azure 服务总线 Data Sender 发送,使用 Azure 服务总线 Data Receiver 接收,而 Azure 服务总线 Data Owner 仅在需要完全控制权限时使用。 尽量将分配范围限定到特定的队列、主题或订阅,而不是整个命名空间。 有关详细信息,请参阅 服务总线 的 Azure 内置角色。
- 当SAS认证不可避免时,限制共享访问签名:将每个共享访问策略范围限定在单个队列或主题,仅授予客户端所需的监听或发送权限,并定期轮换主键和副键。 更多信息请参见服务总线 SAS认证。
- 为服务总线管理员强制执行条件访问:应用条件访问策略,要求多因素认证和符合标准的设备,适用于可创建或修改命名空间、网络规则、RBAC角色分配以及该命名空间依赖的密钥保管库中客户管理的密钥的身份。 更多信息请参见《通用条件访问策略:Azure管理要求多重身份验证》。
数据保护
默认情况下,服务总线使用Azure管理的密钥加密静态所有数据,并使用 TLS 加密传输中的数据。 客户管理密钥让你对加密密钥生命周期拥有更多控制权。
- 使用客户管理的密钥加密静态数据:在高级层命名空间中,使用存储在Azure 密钥保管库(或密钥保管库托管 HSM)中的密钥来加密Azure管理的密钥,以便可以轮换、禁用或撤销对密钥的访问权限。 在保管库上启用软删除和清除保护。 有关详细信息,请参阅 配置客户管理的密钥以加密服务总线静态数据。
日志记录和监控
收集资源日志和指标,以便检测异常访问并调查安全事件。
- 将资源日志发送到 Log Analytics 工作区:创建诊断设置以捕获 服务总线 资源日志,并将其路由到 Log Analytics 工作区、存储账户或事件中心以便保留和分析。 欲了解更多信息,请参见 Monitor Azure 服务总线。
- 监控命名空间和实体指标:利用 Azure Monitor 指标和 服务总线 洞察来追踪可能显示滥用的连接、限速和消息活动。 欲了解更多信息,请参见 Azure 服务总线 insights。
合规性和治理
使用Azure Policy在服务总线命名空间中持续执行和审计安全配置。
- 用 Azure Policy 审计并强制配置:分配内置的 服务总线 策略定义,检查命名空间是否使用客户管理的密钥,要求 Microsoft Entra ID 认证,使用私有端点,并启用资源日志。 欲了解更多信息,请参见Azure Policy中服务总线的内置定义。
-
锁定生产命名空间以防止意外更改:应用 Azure 资源管理器
CanNotDelete或ReadOnly锁定生产 服务总线 命名空间,避免用户意外删除或修改网络规则、加密设置和实体。 有关详细信息,请参阅 锁定资源以保护基础结构。
备份和恢复
服务总线 Premium 提供地理弹性功能:Geo-Replication 可以将实体元数据和消息数据复制到次要区域,而 Geo-Disaster Recovery 仅复制元数据。
- 启用高级命名空间 Geo-Replication:持续将命名空间元数据和消息数据复制到次要区域,需要 RPO 0 时选择同步复制。 异步复制的强制升级可能导致数据丢失或重复。 有关详细信息,请参阅 Azure 服务总线异地复制。
- 使用异地灾难恢复实现高级层实体元数据复原能力:如果只需要队列、主题和订阅的元数据复原能力,可将命名空间配对,并通过别名进行故障切换。 在次级命名空间中重新创建RBAC角色分配、网络配置、身份、加密设置和本地认证设置,因为它们没有被复制。 有关详细信息,请参阅 Azure 服务总线异地灾难恢复。