Pulsar叢集和PulsarManager添加JWT認證
- 一、Pulsar添加JWT認證
-
- 1. 生成秘鑰對
- 2. 生成用于超級管理者的 token
- 3. 生成給測試使用者的 token
- 4.配置叢集broker的broker.conf
- 5. 重新開機 broker
- 二、配置設定權限并驗證
-
- 1.給普通使用者賦生産和消費權限
- 2.驗證token
- 3.驗證生産資料
- 4.普通使用者回收權限
- 5.修改client配置
- 6.檢視命名空間權限配置
- 三、修改pulsar-manger的配置
本文将介紹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
驗證普通使用者的token
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即可。