zoukankan      html  css  js  c++  java
  • 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】

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

     

    【小插曲】

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/quchunhui/p/12800404.html
Copyright © 2011-2022 走看看