[Pulsar] 使用 Proxy 进行认证和鉴权
在 Pulsar 中,我们可以在 Broker 端设置认证和鉴权,同时也可以在 Proxy 端设置认证和鉴权,或者在 Proxy 上认证而在 Broker 上鉴权。本文将介绍如何在 Proxy 上进行认证和鉴权,以及如何将 Proxy 认证的 principal 传递给 Broker 并由 Broker 进行鉴权。
Proxy 设置认证
在 Pulsar Proxy 上设置认证的方法和在 Broker 上的一样,在proxy.conf
中,我们首先需要开启认证,并设置所需要的AuthenticationProvider
,我们也可以自定义实现AuthenticationProvider
。如下是设置 JWT 认证方式的例子:
我们往往也会在 Broker 中设置认证,方法同上。而 Proxy 对于 Broker 只不过是一个客户端,Proxy 在与 Broker 建立连接的时候仍然需要进行认证,所以我们需要为 Proxy 设置所需要的 BrokerClient 的认证参数。如下设置了 JWT 认证的相关参数:
这样我们就完成了从 Client 到 Proxy 再到 Broker 的认证。
Proxy 设置鉴权
我们可以在 Proxy 中像设置 Broker 的鉴权一样设置鉴权,如下使用的是 Pulsar 默认的鉴权方式(我们也可以自定义鉴权方式):
Proxy 会与 Zookeeper 建立连接直接获取权限信息,而不会经过 Broker。
但是有时候我们已经在 Broker 设置好了鉴权,只需要让 Proxy 完成认证,并将客户的 AuthData 转发给 Broker,Broker 利用这个 AuthData 进行鉴权。此时我们需要通过如下的设置完成这个转发操作:
这时 Broker 在进行认证和鉴权时,除了有 Proxy 与 Broker 所建立的连接的 authRole,也有 Client 的 originalPrincipal。在鉴权的过程中,会首先完成对 Client 所提供的 originalPrincipal 的鉴权,然后再进行 Proxy 所携带的 authRole 的鉴权,如果forwardAuthorizationCredentials
为 false,即 Proxy 不将 Client 的 AuthData 转发给 Broker,那么这时 Broker 只对 Proxy 的 authRole 鉴权。
我们也可以通过在 Broker 设置 ProxyRole,来强制让 Proxy 与 Broker 的连接都需要携带 Client 的 originalPrincipal,如下:
如果没有携带 originalPrincipal,则 Broker 会返回错误。
通过本文,我们介绍了如何在 Proxy 上设置认证和鉴权,以及如何与 Broker 配合完成认证和鉴权,我们还可以自定义认证和鉴权的方式,具体的设置还需要参考实际的业务。
版权声明: 本文为 InfoQ 作者【Zike Yang】的原创文章。
原文链接:【http://xie.infoq.cn/article/96f12b5bc49defb77487ff3d9】。文章转载请联系作者。
评论