Azure事件中心REST API:为什么在发送事件时在URL中指定发布者?

时间:2016-02-09 11:19:02

标签: azure azure-eventhub

Send Event的Azure Events Hubs REST API文档指定POST到的请求URI可以是:

https://{serviceNamespace}.servicebus.windows.net/{eventHubPath}/messages

或:

https://{serviceNamespace}.servicebus.windows.net/{eventHubPath}/publishers/{deviceId}/messages

使用后一个URI模板的价值是什么,我们为发布商指定了deviceId

1 个答案:

答案 0 :(得分:1)

TLDR:大规模发件人授权/识别。

发布商政策旨在启用强大的方案。让我解释一下。  我们有两个实体在这里发挥作用:

  1. 拥有eventhub的人(比如设备制造商)。这家伙有兴趣收到这些消息并加以处理。从中提取有趣的信息(如 - 检测设备已准备好进行维修等)
  2. 发件人(比方说,(1)家伙 - 制造设备并销售它们;他嵌入代码以定期将事件推送到云;所以我们(2)是将事件发送到eventHub的实际设备。) LI>

    想象一下,你有100K这样的设备 - 向EventHubs发送遥测数据。让我们说,在EventHub接收器上,您正在计算每个设备发出的消息数量(并使用它来启用关键情况 - 例如:根据使用情况对每个设备进行计费)。让我们看看这些URI如何发挥作用,以实现这种情况:

    1. 使用Uri1 [https:// {serviceNamespace} .servicebus.windows.net / {eventHubPath} / messages] - 为了能够发送到EventHub - 他们需要一个AuthorizationToken。每个设备维护100k sas密钥是不可能的(并且EventHubs支持最多12个SAS密钥)。所以(1) - 设备制造商,为他的所有设备生成一个令牌 - 使用GetSharedAccessSignature API&将消息中的设备内容写入。此令牌有权将任何消息发送到eventHub。这种方法的缺点是,如果有一个设备2找出你如何收费 - 它可以简单地欺骗为device1 - 通过填充不同的名称。如果一个设备被黑客入侵,他们将获得对整个eventhub的访问权限。总体而言,此设备具有比所需要的更高的权限,并且违反了principle of least privilege
    2. 如果你正在使用Uri2(https:// {serviceNamespace} .servicebus.windows.net / {eventHubPath} / publishers / {deviceId} / messages) - 能够安全地发送到EventHub - 设备需要AuthorizationToken。因此,设备制造商会发出特定于此{deviceId}网址的令牌(使用GetPublisherSAS)。现在,设备只能访问此设备特定资源Uri,此设备可以通过密钥EVER实现的唯一操作是发送到自己的URL 。除此之外 - 如果设备制造商想要阻止此设备发送事件 - 它可以发出revokePublisher - 此时此设备将被阻止。 这是他们如何以大规模(按100k的顺序)管理每个发件人级别的安全性
    3. 我选择设备制造商作为例子。此功能在许多情况下都非常方便 - 例如:大型云服务,其中约500台机器将所有关键的遥测事件写入eventHubs,一个大型网站 - 执行每个客户的操作从客户端脚本等..

      HTH! SREE