限定 Pub/Sub 主题访问权限

    Namespaces or component scopes can be used to limit component access to particular applications. 添加到组件的这些应用程序作用域仅限制具有特定 ID 的应用程序才能使用该组件。

    除了此常规组件范围外,对于 pub/sub 组件,还可以限制以下操作:

    • 哪些主题可以使用(发布或订阅)
    • 哪些应用程序被允许发布到特定主题

    这称为 pub/sub 主题作用域限定

    为每个 pub/sub 组件定义发布/订阅范围。 您可能有一个名为 pubsub 的 pub/sub 组件,它有一组范围设置,另一个 pubsub2 另有一组范围设置。

    要使用这个主题范围,可以设置一个 pub/sub 组件的三个元数据属性:

    • spec.metadata.publishingScopes
      • 分号分隔应用程序列表& 逗号分隔的主题列表允许该 app 发布信息到主题列表
      • 如果在 publishingScopes (缺省行为) 中未指定任何内容,那么所有应用程序可以发布到所有主题
      • 要拒绝应用程序发布信息到任何主题,请将主题列表留空 (app1=;app2=topic2)
      • 例如, 允许 app1 发布信息至 topic1 ,app2 允许发布信息到 topic2 和 topic3 ,app3 不允许发布信息到任何主题。
    • spec.metadata.subscriptionScopes
      • 分号分隔应用程序列表& 逗号分隔的主题列表允许该 app 订阅主题列表
      • 如果在 subscriptionScopes (缺省行为) 中未指定任何内容,那么所有应用程序都可以订阅所有主题
    • spec.metadata.allowedTopics
      • 一个逗号分隔的允许主题列表,对所有应用程序。
      • 如果未设置 allowedTopics (缺省行为) ,那么所有主题都有效。 和 publishingScopes 如果存在则仍然生效。
      • publishingScopessubscriptionScopes 可用于与 allowedTopics 的 conjuction ,以添加限制粒度

    这些元数据属性可用于所有 pub/sub 组件。 以下示例使用 Redis 作为 pub/sub 组件。

    示例 1: 限制主题访问权限

    它还可以用于所有主题,以始终具有应用程序使用哪些主题作为发布者/订阅者的“基本事实”。

    以下是三个应用程序和三个主题的示例:

    下表显示哪些应用程序允许在主题中发布:

    下表显示哪些应用程序可以订阅主题:

    当 Dapr 应用程序给主题发送信息时,主题将自动创建。 在某些情况下,这个主题的创建应该得到管理。 例如:

    • Dapr 应用程序中有关生成主题名称的错误可能会导致创建无限数量的主题
    • 简化主题名称和总数,防止主题无限增长

    以下是三个允许的主题的示例:

    所有应用程序都可以使用这些主题,但仅允许这些主题,不允许其他主题。

    示例 3: 组合 allowedTopics 和范围

    有时,您希望合并这两个作用域,从而仅具有固定的一组允许主题,并指定对某些应用程序的作用域限定。

    以下是三个应用程序和两个主题的示例:

    注意: 第三个应用程序未列出,因为如果在作用域内未指定应用程序,那么允许使用所有主题。

    下表显示允许哪些应用程序发布到主题中:

    相关链接