本文将介绍Pulsar集群添加JWT认证及Pulsar的管理界面pulsar-manager的相关配置,加密方式采用的非对称加密,Pulsar的版本为v2.9.1,pulsar-manger的版本为v0.2.0。
Pulsar官网对这块的描述很详细,可以进行参考。
bin/pulsar tokens create-key-pair --output-private-key jwt-private.key --output-public-key jwt-public.key
bin/pulsar tokens create --private-key jwt-private.key --subject admin
以下为管理员的示例token
eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxA
可通过--expiry-time
设置token的有效期,1y有效期为1年。
bin/pulsar tokens create --private-key jwt-private.key --subject test-user --expiry-time 1y
以下为测试用户的示例token
eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.xxxxxxxxxxxxxB
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
bin/pulsar-daemon stop broker
bin/pulsar-daemon start broker
--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
验证超级管理员的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"
验证超级管理员生产数据
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
--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
修改集群中所有节点的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
bin/pulsar-admin namespaces permissions public/default
在给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即可。