Azure 事件中心 REST API : Why specify the publisher in the URL when sending events?

标签 azure azure-eventhub

Send Event 的 Azure 事件中心 REST API 文档指定 POST 的请求 URI 可以是:

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

或者:

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

使用后一个 URI 模板(我们为发布者指定 deviceId)的值(value)是什么?

最佳答案

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

发布商政策旨在实现强大的场景。让我解释一下。 我们有 2 个实体在这里发挥作用:

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

假设您有 100K 个此类设备 - 将遥测数据发送到 EventHub。比方说,在 EventHub 接收器上,您正在计算来自每个设备的消息数量(并使用它来启用关键场景 - 例如:根据使用情况对每个设备进行计费)。让我们看看这些 URI 如何发挥作用来实现此场景:

  1. 使用 Uri1 [https://{serviceNamespace}.servicebus.windows.net/{eventHubPath}/messages] - 能够发送到 EventHub - 他们将需要一个 AuthorizationToken。每个设备不可能维护 100k 个 SAS key (EventHub 最多支持 12 个 SAS key )。因此 (1) - 设备制造商为他的所有设备生成一个 token - 使用 GetSharedAccessSignature API & 将在消息中填充设备 ID。该 token 有权向 eventHub 发送任何消息。这种方法的缺点是,如果有一个 device2 发现你如何对它们计费 - 它可以简单地欺骗为 device1 - 通过填充不同的名称。如果一台设备被黑客攻击,他们将获得对整个事件中心的访问权限。总体而言,该设备的权限比所需的权限高得多,并且违反了 principle of least privilege .
  2. 如果您使用 Uri2 (https://{serviceNamespace}.servicebus.windows.net/{eventHubPath}/publishers/{deviceId}/messages) - 以便能够安全地发送到 EventHub -设备需要一个 AuthorizationToken。因此,设备制造商颁发特定于此 {deviceId} url 的 token (使用 GetPublisherSAS )。现在,设备只能访问该设备特定的资源 Uri,该设备可以使用 key 实现的唯一操作 - 是发送到其自己的 url。除此之外 - 如果设备制造商想要阻止该设备发送事件 - 它可以发出 revokePublisher - 从那时起该设备将被阻止。 这就是他们如何大规模(以 100k 为单位)管理每个发送者级别的安全性

我选择设备制造商只是作为示例。此功能在许多场景中都非常方便 - 例如:拥有大约 500 台机器的大型云服务,将所有关键遥测事件写入 eventHubs,大型网站 - 执行每个客户的操作来自客户端脚本等..

哈! 斯雷

关于Azure 事件中心 REST API : Why specify the publisher in the URL when sending events?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35290685/

相关文章:

azureservicebus - 无法从服务总线资源管理器连接到事件中心

java - 如何使用 Spark 和 Java 来使用来自 Azure eventhub 的数据

azure - 取消自动标记实体的标签

c# - 微软图: how to get all groups reusing the token generated through ADAL

azure - 本地 Azure 部署问题

c# - 一个 eventhub 是否可以触发 2 个 azure 函数?

Azure 流分析 : identify right sizing and best practice to optimize ingestion to DataLaand processing

c# - Encoding.utf8 将逗号转换为 C# 中的某些特殊字符

php - Outlook - OAuth 2 - 无法检索访问 token ,不支持 grant_type=password,仅授权码和刷新 token

java - 如何将 JDBC azure sql 服务器连接到 Android 应用程序?