RabbitMQ -访问拒绝-登录被拒绝

ki1q1bka  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(432)

我正在使用rabbitmq-server,并使用Scala编写的消费者从rabbitmq-server中获取消息。这一直运行得很好,但自从我将RabbitMQ服务器从一个服务器迁移到另一个服务器后,在尝试连接到它时,我得到了以下错误:

com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

此外,rabbitmq-server日志:

=INFO REPORT==== 18-Jul-2018::15:28:05 ===
accepting AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)

=ERROR REPORT==== 18-Jul-2018::15:28:05 ===
Error on AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672, state: starting):
PLAIN login refused: user 'my_personal_user' - invalid credentials

=INFO REPORT==== 18-Jul-2018::15:28:05 ===
closing AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)

我查看了关于身份验证问题的所有问题,发现了以下线索:

  • 我的证件是错的
  • 我正在尝试从远程连接guest
  • 我的RabbitMQ版本与消费者不兼容

所有这些线索都没有帮助我。我的crendetials是好的,我没有使用guest连接,但我创建了一个具有完全访问权限和管理员权限的特权用户,我的RabbitMQ版本在迁移过程中没有改变。
NB:我把我的RabbitMQ服务器从一个单独的服务器迁移到了我的消费者所在的服务器上,所以现在消费者从本地主机上取数据。不知道结果如何,但是我想这可以帮助你们帮助我。

0yg35tkg

0yg35tkg1#

所以我刚有一个类似的问题谷歌的解决方案,这就是我如何找到这个页面.我没有找到一个直接的答案,我的问题,但我最终发现rabbitmq有2个不同的权限集配置,不完全重叠,在我的情况下,我有0权限的1组权限和管理员权限的另一组权限。我想知道如果你可以运行到一个类似的情况。
看代码会使2套权利更自使,但先讲一些背景语境:
我的RMQ托管在Kubernetes上,那里的东西是短暂的,我需要一些用户名和密码来预装一个新的rabbitmq示例,在Kubernetes中,有一个选项可以在第一次启动时注入预配置的代理定义。(当我说代理定义时,我指的是管理Web GUI中的那个位置,有一个选项可以导入和导出代理定义,也就是备份或替换您的RMQ实时配置。)
下面是我的配置的一个简短版本,删除了敏感的东西:

{
  "vhosts": [
      {"name":"/"}
  ],
  "policies": [
    { 
      "name": "ha",
      "vhost": "/",
      "pattern": ".*",
      "definition": { 
        "ha-mode": "all",
        "ha-sync-mode": "automatic",
        "ha-sync-batch-size": 2
      }
    }
  ],
  "users": [
    {
      "name": "guest",
      "password": "guest",
      "tags": "management"
    },
    {
      "name": "admin",
      "password": "PASSWORD",
      "tags": "administrator"
    }
  ],
  "permissions": [
    {
      "user": "guest",
      "vhost": "/",
      "configure": "^$",
      "write": "^$",
      "read": "^$"
    },
    {
      "user": "admin",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    }
  ]
}

当我最初看到tags属性时,我假设没有任意值,我将在那里放置一个自记录标记,这相当于“",这导致我对Web管理GUI/REST API具有0权限,而在下面,我具有全部“.*”,因此该部分具有完全的管理权限。这对我来说真的很困惑,因为(我收到一条虚假的错误消息,说我提供的凭据无效,但凭据是正确的,我只是没有访问权限。)
如果不是这样的话,那么还有一个配置问题,在默认情况下,guest仅限于本地主机访问,但您可以覆盖它。

bvpmtnay

bvpmtnay2#

类似的问题,我们也面临着不同的技术堆栈。在我们的情况下,技术堆栈是:

  • 在高可用性模式下使用Bitnami包在Kubernetes(AKS)中部署RabbitMQ
  • 在使用Java 8和Spring Boot Framework创建的微服务中创建的使用者和生成者,使用Apache Camel,也在同一Kubernetes集群中运行

我们验证了以下几点:

  • 用户和密码正确
  • 与所需VHOST关联的用户
  • 已提供所需权限(管理员标记)
  • 用户能够从RabbitMQ Web控制台登录
  • 从微服务Pod到RabbitMQ服务的主机和端口连接(使用各种工具(如telnet)检查)
  • 所有代码和配置完全相同(因为在较低环境中有相同的配置正常工作)

遇到问题:

com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

经过大量调查和故障排除后,我们发现用户名的大小超过了消费者API所支持的大小。例如,我们使用了用户名“productionappuser”。此用户能够登录管理Web控制台,但无法从微服务登录。我们只是将用户名更改为包含8个字符的新用户,它就开始工作了。
这看起来很奇怪,因为同一用户能够登录,从而共享结果。

相关问题