前面介绍了认证和授权的主要流程,本篇重点说明pulsar授权信息的存储以及怎么结合第三方用户中心实现授权管理。
- 基于pulsar-admin的授权指令
关于cluster、broker、bookie、tenant、namespace、topic的命令。
具体可参考:https://pulsar.apache.org/pulsar-admin-cli/?version=2.8.0
- 授权信息存储
使用pulsar默认的授权管理类(org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider),授权信息会保存到global-zookeeper中,路径如下:
[zk: 172.20.140.11:2184(CONNECTED) 5] ls -R /admin/policies /admin/policies /admin/policies/public /admin/policies/pulsar /admin/policies/tenant_c /admin/policies/tenant_vv /admin/policies/public/default /admin/policies/pulsar/system /admin/policies/tenant_vv/ns1
查看/admin/policies/tenant_vv/ns1的节点内容
{ “auth_policies”: { “destination_auth”: {}, “namespace_auth”: { “vv123”: [ “consume”, “produce” ] }, “subscription_auth_roles”: {} }, “backlog_quota_map”: {}, “bundles”: { “boundaries”: [ “0x00000000”, “0x40000000”, “0x80000000”, “0xc0000000”, “0xffffffff” ], “numBundles”: 4 }, “clusterDispatchRate”: {}, “clusterSubscribeRate”: {}, “deleted”: false, “encryption_required”: false, “is_allow_auto_update_schema”: true, “latency_stats_sample_rate”: {}, “offload_threshold”: -1, “properties”: {}, “publishMaxMessageRate”: {}, “replication_clusters”: [ “vv” ], “replicatorDispatchRate”: {}, “schema_auto_update_compatibility_strategy”: “Full”, “schema_compatibility_strategy”: “UNDEFINED”, “schema_validation_enforced”: false, “subscriptionDispatchRate”: {}, “subscription_auth_mode”: “None”, “subscription_expiration_time_minutes”: 0, “subscription_types_enabled”: [], “topicDispatchRate”: {} }
在auth_policies里可以看到给角色vv123分配了produce和consume权限。
- 授权实现思路
首先需要对所有需要权限的操作进行拦截,pulsar提供了如下两个接口:
// 处理连接认证的 org.apache.pulsar.broker.authentication.AuthenticationProvider
// 处理授权的 org.apache.pulsar.broker.authorization.AuthorizationProvider
定义一组需要进行权限管理的操作,具体如下:
定义好用户和操作之间的关系,并给每一个用户分配唯一的token标识
在一次连接中保存用户的token信息和权限,并定时更新权限
针对用户的每一次操作都根据token进行权限的验证
由此我们可以知道,授权管理的前提是有一个用户管理中心,管理中心负责用户的创建和权限的分配。客户端连接的时候去用户中心获取token信息,然后携带token连接到broker,broker在用户第一次连接是去管理中心获取用户的权限信息并缓存。最后就是对用户的操作进行权限的判断了。
- 用户信息管理中心
结合pulsar的常用操作,我们可以设计几张表保存用户信息和权限信息。