在 Apache Pulsar 中授予命名空间权限

Posted

技术标签:

【中文标题】在 Apache Pulsar 中授予命名空间权限【英文标题】:Granting Namespace Permissions in Apache Pulsar 【发布时间】:2020-09-06 20:18:33 【问题描述】:

我一直在研究 Apache Pulsar 的功能,我很高兴。但是,我刚刚进入身份验证/授权,在 Java 管理客户端遇到了一个奇怪的错误。

虽然我能够执行各种操作,例如创建/删除租户、创建/删除命名空间、创建/删除分区主题、向租户添加管理员角色等,但在尝试向角色授予命名空间权限时使用

org.apache.pulsar.client.admin.Namespaces.grantPermissionOnNamespace()

我得到这个错误:

org.apache.pulsar.client.admin.PulsarAdminException$ServerSideErrorException: HTTP 501 Not Implemented

我不敢相信如此重要的功能不会实现,所以我猜这个错误只是掩盖了其他东西。

我创建了一个具有新命名空间的新租户(没有任何管理员角色)。我试图添加的角色只是虚构的,我不确定它是否必须先在某个地方注册(但我没有找到任何可以这样做的东西)。我尝试分别授予消费或生产操作并同时授予两者,但没有任何效果。

在代理上没有配置超级用户,但考虑到我可以在没有它的情况下执行所有其他操作,只有超级用户才能执行此操作似乎有些牵强。目前,所有呼叫都未经过身份验证。这会是个问题吗?但这会引发同样的问题:为什么我可以做其他所有事情,只是不授予权限?

那么我错过了什么?

我们正在运行 Pulsar 2.5.0 版以及 Java pulsar-client-admin Maven 工件 2.5.0 版。

【问题讨论】:

【参考方案1】:

好的,所以当尝试执行相同的操作时,使用 pulsar admin CLI 会显示更多信息:

授权未启用

原因:HTTP 501 未实现

显然我错过了在代理配置中实际启用授权。因为我很好奇第一行是从哪里来的(因为我在我的实现中没有得到它)​​,我浏览了 CLI 源代码,结果发现 CLI 从 PulsarAdminException 中打印了 2 行:

System.err.println(e.getHttpError());
System.err.println();
System.err.println("Reason: " + e.getMessage());

好吧,getHttpError() 返回“授权未启用”和 getMessage()“HTTP 501 未实现”对我来说似乎相反,但至少我现在知道发生了什么......

【讨论】:

以上是关于在 Apache Pulsar 中授予命名空间权限的主要内容,如果未能解决你的问题,请参考以下文章

Pulsar 消息概念2

在 Apache 中授予 PHP 写权限

如何在gke中为用户授予名称空间访问权限?

尝试通过 Windows 上的 Alias 向 Dropbox 文件夹上的 Apache 授予权限

更改Apache虚拟目录并授予权限

如何授予 apache 使用 NTFS 分区上的目录的权限?