• RocketMQ ACL使用实践


    在自己的虚拟机上验证了一下RocketMQ ACL权限验证,记录一下过程。

    1、配置前的集群装填

    使用了最简单的2m-noslave集群进行测试。配置文件如下:

    vm1(192.168.29.100)

    brokerClusterName=vmlocal
    brokerName=broker-a
    brokerId=0
    deleteWhen=04
    fileReservedTime=48
    brokerRole=ASYNC_MASTER
    flushDiskType=ASYNC_FLUSH
    listenPort=10921
    brokerIP1=192.168.29.100
    namesrvAddr=192.168.29.100:9876;192.168.29.101:9876
    autoCreateTopicEnable=false
    autoCreateSubscriptionGroup=true
    storePathRootDir=/home/data/rocketmq/rootdir-a-m
    storePathCommitLog=/home/data/rocketmq/commitlog-a-m
    storePathConsumerQueue=/home/data/rocketmq/consumequeue-a-m
    storePathIndex=/home/data/rocketmq/index-a-m
    storeCheckpoint=/home/data/rocketmq/checkpoint-a-m

    vm2(192.168.29.101)

    brokerClusterName=vmlocal
    brokerName=broker-b
    brokerId=0
    deleteWhen=04
    fileReservedTime=48
    brokerRole=ASYNC_MASTER
    flushDiskType=ASYNC_FLUSH
    listenPort=10921
    brokerIP1=192.168.29.101
    namesrvAddr=192.168.29.100:9876;192.168.29.101:9876
    autoCreateTopicEnable=false
    autoCreateSubscriptionGroup=true
    storePathRootDir=/home/data/rocketmq/rootdir-b-m
    storePathCommitLog=/home/data/rocketmq/commitlog-b-m
    storePathConsumerQueue=/home/data/rocketmq/consumequeue-b-m
    storePathIndex=/home/data/rocketmq/index-b-m
    storeCheckpoint=/home/data/rocketmq/checkpoint-b-m

    启动命令:

    vm1:nohup sh /home/rocketmq-all-4.6.1/bin/mqnamesrv >/home/rocketmq-all-4.6.1/logs/mqnamesrv.log &
    vm2:nohup sh /home/rocketmq-all-4.6.1/bin/mqnamesrv >/home/rocketmq-all-4.6.1/logs/mqnamesrv.log &
    vm1:nohup sh /home/rocketmq-all-4.6.1/bin/mqbroker -c /home/rocketmq-all-4.6.1/conf/2m-noslave/broker-a.properties >/home/rocketmq-all-4.6.1/logs/broker-a-m.log 2>&1 &
    vm2:nohup sh /home/rocketmq-all-4.6.1/bin/mqbroker -c /home/rocketmq-all-4.6.1/conf/2m-noslave/broker-b.properties >/home/rocketmq-all-4.6.1/logs/broker-b-m.log 2>&1 &

    正常启动之后:

    sh /home/rocketmq-all-4.6.1/bin/mqadmin clusterList -n "192.168.29.100:9876;192.168.29.101:9876"

    验证可以正常生产数据:

    验证可以正常消费数据:

    2、开启权限验证

    修改broker的启动文件。增加配置项:aclEnable=true

    /home/rocketmq-all-4.6.1/conf/2m-noslave/broker-a.properties
    /home/rocketmq-all-4.6.1/conf/2m-noslave/broker-b.properties

    3、确保plain_acl.yml文件存在

    我使用的是rocketmq4.6.1版本,解压缩之后,在conf路径下就已经有了plain_acl.yml文件,不需要单独创建。

    plain_acl.yml文件内容默认如下:

    globalWhiteRemoteAddresses:
    - 10.10.103.*
    - 192.168.0.*
    
    accounts:
    - accessKey: RocketMQ
      secretKey: 12345678
      whiteRemoteAddress:
      admin: false
      defaultTopicPerm: DENY
      defaultGroupPerm: SUB
      topicPerms:
      - topicA=DENY
      - topicB=PUB|SUB
      - topicC=SUB
      groupPerms:
      # the group should convert to retry topic
      - groupA=DENY
      - groupB=PUB|SUB
      - groupC=SUB
    
    - accessKey: rocketmq2
      secretKey: 12345678
      whiteRemoteAddress: 192.168.1.*
      # if it is admin, it could access all resources
      admin: true

    不进行其他修改,重新尝试生产数据,就发现生产失败,权限已经生效

    RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.InternalThreadLocalMap).
    RocketMQLog:WARN Please initialize the logger system properly.
    org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [2688]ms, Topic: t3, BrokersSent: [broker-a, broker-b, broker-a]
    See http://rocketmq.apache.org/docs/faq/ for further details.
        at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:664)
        at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1342)
        at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1288)
        at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:324)
        at normal.Producer.main(Producer.java:29)
    Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 1  DESC: org.apache.rocketmq.acl.common.AclException: No accessKey is configured, org.apache.rocketmq.acl.plain.PlainPermissionManager.validate(PlainPermissionManager.java:394)
    For more information, please visit the url, http://rocketmq.apache.org/docs/faq/
        at org.apache.rocketmq.client.impl.MQClientAPIImpl.processSendResponse(MQClientAPIImpl.java:709)
        at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:505)
        at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:487)
        at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessage(MQClientAPIImpl.java:431)
        at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendKernelImpl(DefaultMQProducerImpl.java:853)
        at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:583)
        ... 4 more

    4、plain_acl.yml配置

    ==globalWhiteRemoteAddresses==

    全局白名单,其类型为数组,即支持多个配置。其支持的配置格式如下:

    空:表示不设置白名单,该条规则默认返回false。

    "*":表示全部匹配,该条规则直接返回true,将会阻断其他规则的判断,请慎重使用。

    192.168.0.{100,101}:多地址配置模式,ip地址的最后一组,使用{},大括号中多个ip地址,用英文逗号(,)隔开。

    192.168.1.100,192.168.2.100:直接使用,分隔,配置多个ip地址。

    192.168..或192.168.100-200.10-20:每个IP段使用 "*" 或"-"表示范围。

    ==accounts==

    配置用户信息,该类型为数组类型。

    【accessKey】

    登录用户名,长度必须大于6个字符。

    【secretKey】

    登录密码。长度必须大于6个字符。

    【whiteRemoteAddress】

    用户级别的IP地址白名单。其类型为一个字符串,其配置规则与globalWhiteRemoteAddresses,但只能配置一条规则。

    【admin】

    boolean类型,设置是否是admin。如下权限只有admin=true时才有权限执行。

    UPDATE_AND_CREATE_TOPIC:更新或创建主题。

    UPDATE_BROKER_CONFIG:更新Broker配置。

    DELETE_TOPIC_IN_BROKER:删除主题。

    UPDATE_AND_CREATE_SUBSCRIPTIONGROUP:更新或创建订阅组信息。

    DELETE_SUBSCRIPTIONGROUP:删除订阅组信息。

    【defaultTopicPerm】

    默认topic权限。该值默认为DENY(拒绝)。

    【defaultGroupPerm】

    默认消费组权限,该值默认为DENY(拒绝),建议值为SUB。

    【topicPerms】

    设置topic的权限。其类型为数组。例如:

    DENY:拒绝

    PUB:拥有发送权限

    SUB:拥有订阅权限

    PUB|SUB:拥有发送及订阅权限

    【groupPerms】

    设置消费组的权限。其类型为数组,其可选择值在下节介绍。可以为每一消费组配置不一样的权限。

     

    【小插曲】

  • 相关阅读:
    JFreeChart生成图片
    itext生成Word
    itext生成PDF
    物理模型name与comment互相转化
    表单序列化为Json(只限input)
    c#多线程同步之EventWaitHandle的应用
    C#多线程之异步编程
    Java环境变量设置
    sharepoint 2013实践
    WPF研究之道——数据驱动UI
  • 原文地址:https://www.cnblogs.com/quchunhui/p/12800404.html
Copyright © 2020-2023  润新知