对目标为事件处理程序的事件传递进行身份验证(Azure 事件网格)

本文介绍如何对目标为事件处理程序的事件传递进行身份验证。

概述

Azure 事件网格使用不同的身份验证方法将事件传递给事件处理程序。 `

身份验证方法 支持的事件处理程序 说明
访问密钥 - 事件中心
- 服务总线
- 存储队列
- 中继混合连接
- Azure Functions
- 存储 Blob(死信)
使用事件网格服务主体的凭据提取访问密钥。 在事件网格的 Azure 订阅中注册事件网格资源提供程序时,会向事件网格授予权限。
托管系统标识
&
基于角色的访问控制
- 事件中心
- 服务总线
- 存储队列
- 存储 Blob(死信)
为主题启用托管系统标识,并将其添加到目标上的相应角色。 有关详细信息,请参阅使用系统分配的标识进行事件传递
使用受 Webhook 保护的 Microsoft Entra 进行持有者令牌身份验证 Webhook 有关详细信息,请参阅对 Webhook 终结点的事件传递进行身份验证部分。
客户端密码作为查询参数 Webhook 有关详细信息,请参阅使用客户端密码作为查询参数部分。

注意

如果使用 Microsoft Entra 应用保护 Azure 函数,则必须采用通用的 Webhook 方法并使用 HTTP 触发器。 添加订阅时,使用 Azure 函数终结点作为 Webhook URL。

使用系统分配的标识进行事件传递

可以为主题或域启用系统分配的托管标识,并使用该标识将事件转发到支持的目标,如服务总线队列和主题、事件中心和存储帐户。

步骤如下:

  1. 使用系统分配的标识创建主题或域,或者更新现有主题或域以启用标识。 有关详细信息,请参阅针对系统主题启用托管标识针对自定义主题或域启用托管标识
  2. 在目标(例如,服务总线队列)上将标识添加到相应角色(例如,服务总线数据发送方)。 有关详细步骤,请参阅授予标识对事件网格目标的访问权限
  3. 创建事件订阅时,请允许使用标识将事件传递到目标。 有关详细信息,请参阅创建使用标识的事件订阅

有关详细的分步说明,请参阅使用托管标识传递事件

对 Webhook 终结点的事件传递进行身份验证

下面各部分介绍了如何对 Webhook 终结点的事件传递进行身份验证。 无论使用何种方法,都请使用验证握手机制。 有关详细信息,请参阅 Webhook 事件传递

使用 Microsoft Entra ID

可以使用 Microsoft Entra ID 保护用于从事件网格接收事件的 Webhook 终结点。 需要创建 Microsoft Entra 应用程序,并在授权事件网格的应用程序中创建角色和服务主体,同时还需要将事件订阅配置为使用 Microsoft Entra 应用程序。 了解如何使用事件网络配置 Microsoft Entra ID

使用客户端密码作为查询参数

还可以通过向在创建事件订阅时指定的 Webhook 目标 URL 添加查询参数来保护 Webhook 终结点。 将其中一个查询参数设置为客户端密码,如访问令牌或共享密码。 事件网格服务会在发往 Webhook 的每个事件传递请求中加入所有查询参数。 Webhook 服务可以检索和验证密码。 如果更新了客户端密码,还需要更新事件订阅。 为了避免在此密码轮换期间出现传递失败,让 Webhook 在有限的时间内同时接受新旧密码,然后再使用新密码更新事件订阅。

由于查询参数可能包含客户端密码,因此需要格外小心地处理它们。 它们以加密的形式存储,并且服务操作员无法访问。 它们不作为服务日志/跟踪的一部分进行记录。 检索事件订阅属性时,默认情况下不会返回目标查询参数。 例如:--include-full-endpoint-url 参数将用于 Azure CLI

若要详细了解如何将事件传递到 Webhook,请参阅 Webhook 事件传递

重要

Azure 事件网格只支持 HTTPS Webhook 终结点。

使用 CloudEvents v1.0 验证终结点

如果熟悉事件网格,你可能会了解用于防止滥用的终结点验证握手。 CloudEvents v1.0 使用 HTTP OPTIONS 方法来实现自己的滥用防护语义。 若要了解有关详细信息,请参阅适用于事件传递的 HTTP 1.1 Webhook - 版本 1.0。 使用 CloudEvents 架构进行输出时,事件网格将使用 CloudEvents v1.0 滥用防护取代事件网格验证事件机制。 有关详细信息,请参阅将 CloudEvents v1.0 架构与事件网格配合使用

后续步骤

请参阅对发布客户端进行身份验证,了解如何对将事件发布到主题或域的客户端进行身份验证。