【问题标题】:Allow only authorized endpoints to send events to event grid仅允许授权端点将事件发送到事件网格
【发布时间】:2019-12-05 14:47:34
【问题描述】:

我正在开发一个使用 Azure 事件网格的项目,其中 Web 应用程序将自定义事件发送到事件网格,并且使用单独应用程序中的 Web 挂钩来订阅这些事件。

看起来它在 web-hook 方面是安全的,因为只有您可以添加特定的 web hook 以用作事件网格订阅。 但是,我没有找到太多关于如何限制事件网格仅从特定端点接收事件的信息。现在它只为您提供一个端点和一个主题键,在向主题发送事件时必须使用它们。如果有人设法同时掌握了端点和令牌密钥,则可以将“恶意事件”发送到事件网格。

有没有办法限制事件网格只接受来自特定来源的事件,或者从 Key Vault 存储和检索密钥,这是最安全的选项?

【问题讨论】:

标签: azure azure-eventgrid azure-authentication azure-security


【解决方案1】:

向主题发布消息时,您可以使用密钥或 SAS 令牌authenticate

  1. Using a key 是最简单的身份验证方式,但正如您所提到的,如果被盗,可能会导致发送恶意事件。

    保护这种方法的一种方法是使用您提到的 KeyVault。客户端可以使用 Managed Identity(如果在 Azure 上运行)或 Client Credentials flow 安全地连接到 KeyVault。

  2. Using SAS tokens is the recommended way 保护您的发布端点。为此,您必须在需要时使用密钥生成令牌(与 1 中的密钥相同)

    在这种方法中,您可以使用一个 API(例如 Azure 函数)来代表您的客户生成 SAS 令牌。此 API 仍需要密钥(可能在 KeyVault 中)来生成 SAS 令牌。

  3. 另一种方法是拥有一个 API,它可以在身份验证/授权时将事件转发到事件网格。此 API 仍需要访问密钥。

    这可以通过多种方式实现,例如

【讨论】:

  • 如果我使用 keyvault 或 MSI;无论如何都可以自动轮换密钥,并让发布应用程序自动选择新密钥。我想知道是否让 MSI 直接访问以读取密钥,但看不到 a) 需要哪些权限;或 b) 如何以编程方式读取密钥。如果首先只能为 MSI 授予对密钥的读取访问权限,我看不到在这种情况下使用 keyvault 的优势。您可以使用 SAS 很棒,但我看不出如何在不给系统密钥的情况下实用地创建一个,这会破坏对象
猜你喜欢
  • 2019-08-05
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多