当前位置: 首页 > 工具软件 > Pulsar Manger > 使用案例 >

Pulsar集群和PulsarManager添加JWT认证

仲孙飞文
2023-12-01

本文将介绍Pulsar集群添加JWT认证及Pulsar的管理界面pulsar-manager的相关配置,加密方式采用的非对称加密,Pulsar的版本为v2.9.1,pulsar-manger的版本为v0.2.0。

一、Pulsar添加JWT认证

Pulsar官网对这块的描述很详细,可以进行参考。

1. 生成秘钥对

bin/pulsar tokens create-key-pair --output-private-key jwt-private.key --output-public-key jwt-public.key

2. 生成用于超级管理员的 token

bin/pulsar tokens create --private-key jwt-private.key --subject admin

以下为管理员的示例token

eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA

3. 生成给测试用户的 token

可通过--expiry-time设置token的有效期,1y有效期为1年。

bin/pulsar tokens create --private-key jwt-private.key --subject test-user --expiry-time 1y

以下为测试用户的示例token

eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxB

4.配置集群broker的broker.conf

broker的配置和官网描述的有所不同,注意不要配置错误,否则无法使用。
集群中的每个节点的broker的配置都要修改,并且将public.key文件分发到各个节点。
brokerClientAuthenticationParameters配置的为超级管理员的token

# 开启认证
authenticationEnabled=true
# 认证提供者
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken
# 开启授权
authorizationEnabled=true
# 超级管理员
superUserRoles=admin
# broker Client 使用等认证插件
brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
# broker Client 通讯使用的 token(需要 admin role)
brokerClientAuthenticationParameters={"token":"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA"}
# 使用 tokenPublicKey 的公钥文件位置
tokenPublicKey=/usr/local/apache-pulsar-2.9.1/jwt-public.key

5. 重启 broker

bin/pulsar-daemon stop broker
bin/pulsar-daemon start broker

二、分配权限并验证

1.给普通用户赋生产和消费权限

--auth-params为超级管理员的token

bin/pulsar-admin \
--admin-url "http://127.0.0.1:8080/" \
--auth-params {"token":"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA"} \
--auth-plugin "org.apache.pulsar.client.impl.auth.AuthenticationToken" \
namespaces grant-permission public/default --role test-user --actions produce,consume

2.验证token

验证超级管理员的token

bin/pulsar tokens validate -pk  /usr/local/apache-pulsar-2.9.1/jwt-public.key -i "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA"

验证普通用户的token

bin/pulsar tokens validate -pk  /usr/local/apache-pulsar-2.9.1/jwt-public.key -i "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxB"

3.验证生产数据

验证超级管理员生产数据

bin/pulsar-client \
--url "pulsar://127.0.0.1:6650" \
--auth-plugin "org.apache.pulsar.client.impl.auth.AuthenticationToken" \
--auth-params {"token":"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA"} \
produce public/default/test-token -m "hello pulsar" -n 10

验证普通用户生产数据

bin/pulsar-client \
--url "pulsar://127.0.0.1:6650" \
--auth-plugin "org.apache.pulsar.client.impl.auth.AuthenticationToken" \
--auth-params {"token":"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxB"} \
produce public/default/test-token -m "hello pulsar" -n 10

4.普通用户回收权限

--auth-params为超级管理员的token

bin/pulsar-admin \
--admin-url "http://127.0.0.1:8080/" \
--auth-params {"token":"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA"} \
--auth-plugin "org.apache.pulsar.client.impl.auth.AuthenticationToken" \
namespaces revoke-permission public/default --role test-user 

5.修改client配置

修改集群中所有节点的client.conf,这样在pulsar集群中执行pulsar-client命令时,就不用带许多参数了。修改完成之后需要重启broker
authParams为超级管理员的token

webServiceUrl=http://localhost:8080/
brokerServiceUrl=pulsar://localhost:6650/
authPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
authParams=token:eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA

6.查看命名空间权限配置

bin/pulsar-admin namespaces permissions public/default

三、修改pulsar-manger的配置

在给Pulsar添加了认证相关的配置后,发现pulsar-manger的管理页面是无法使用的,需要我们也进行token相关的配置。
修改pulsar-manager目录下的application.properties文件中jwt相关的配置。
backend.jwt.token为超级管理员的token

backend.jwt.token=eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA
jwt.broker.token.mode=PRIVATE
jwt.broker.public.key=/usr/local/apache-pulsar-2.9.1/jwt-public.key
jwt.broker.private.key=/usr/local/apache-pulsar-2.9.1/jwt-private.key

修改完配置后,重启pulsar-manger即可。

 类似资料: