rocketmq之ACL权限配置

一.权限控制特性介绍

权限控制(ACL)主要为RocketMQ提供Topic资源级别的用户访问控制。用户在使用RocketMQ权限控制时,可以在Client客户端通过 RPCHook注入AccessKey和SecretKey签名;同时,将对应的权限控制属性(包括Topic访问权限、IP白名单和AccessKey和SecretKey签名等)设置在distribution/conf/plain_acl.yml的配置文件中。Broker端对AccessKey所拥有的权限进行校验,校验不过,抛出异常; ACL客户端可以参考:org.apache.rocketmq.example.simple包下面的AclClient代码。

二. 权限控制的定义与属性值

2.1 权限定义

对RocketMQ的Topic资源访问权限控制定义主要如下表所示,分为以下四种

权限含义
DENY拒绝
ANYPUB 或者 SUB 权限
PUB发送权限
SUB订阅权限

2.2 权限定义的关键属性

字段取值含义
globalWhiteRemoteAddresses;192.168..*;192.168.0.1全局IP白名单
accessKey字符串Access Key
secretKey字符串Secret Key
whiteRemoteAddress;192.168..*;192.168.0.1用户IP白名单
admintrue;false是否管理员账户
defaultTopicPermDENY;PUB;SUB;PUBSUB
defaultGroupPermDENY;PUB;SUB;PUBSUB
topicPermstopic=权限各个Topic的权限
groupPermsgroup=权限各个ConsumerGroup的权限

具体可以参考distribution/conf/plain_acl.yml配置文件

三. 权限控制主要流程

ACL主要流程分为两部分,主要包括权限解析和权限校验。

3.1 权限解析

Broker端对客户端的RequestCommand请求进行解析,拿到需要鉴权的属性字段。 主要包括: (1)AccessKey:类似于用户名,代指用户主体,权限数据与之对应; (2)Signature:客户根据 SecretKey 签名得到的串,服务端再用SecretKey进行签名验证;

3.2 权限校验

Broker端对权限的校验逻辑主要分为以下几步: (1)检查是否命中全局 IP 白名单;如果是,则认为校验通过;否则走 2; (2)检查是否命中用户 IP 白名单;如果是,则认为校验通过;否则走 3; (3)校验签名,校验不通过,抛出异常;校验通过,则走 4; (4)对用户请求所需的权限 和 用户所拥有的权限进行校验;不通过,抛出异常; 用户所需权限的校验需要注意已下内容: (1)特殊的请求例如 UPDATE_AND_CREATE_TOPIC 等,只能由 admin 账户进行操作; (2)对于某个资源,如果有显性配置权限,则采用配置的权限;如果没有显性配置权限,则采用默认的权限;

四. 开启acl权限与配置

4.1 开启acl权限控制

在rocketmq broker目录下conf/broker.conf ,修改配置参数aclEnable=true

sh-4.2$ cat broker.conf 
 
# 开启长轮询(默认为 true)
longPollingEnable=true
# 设置长轮询最大等待时间(单位:毫秒,默认为 3000ms)
waitTimeMillsInLongPolling=5000

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 192.0.168.1
autoCreateTopicEnable = true
namesrvAddr = 192.0.168.1:9876
# 开启acl权限
aclEnable=true

4.2 conf/plain_acl.yml权限配置

rocketmq配置如下:

# rocketmq配置
rocketmq: 
  name-server: 192.0.168.1:9876
  topic: booking
  consumer:
    group: queue-consumer-group
    access-key: RocketMQ1
    secret-key: 12345678 
  producer:
    group: queue-producer-group
    send-message-timeout: 10000
    access-key: RocketMQ2
    secret-key: 123456789 
conf/plain_acl.yml配置
[master@java3 conf]# cat plain_acl.yml
globalWhiteRemoteAddresses:
  - 192.0.168.2
  - 172.17.0.*

accounts:
- accessKey: RocketMQ1
  secretKey: 12345678
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: DENY
  topicPerms:
  - booking=SUB
  groupPerms:
  - queue-consumer-group=SUB


- accessKey: RocketMQ2
  secretKey: 123456789
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: DENY
  topicPerms:
  - booking=PUB
  groupPerms:
  - queue-producer-group=PUB 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值