Кураторская среда обходит настройки Zookeeper ACL - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно настроить аутентификацию user: password для клиентов, обращающихся к данным внутри сервера zookeeper. Я экспериментирую с zkCli и Curator Framework, чтобы выяснить, как это работает, и по какой-то причине код, выполняемый из Curator Framework, обходит все параметры безопасности и ведет себя так, как если бы у него были полные права доступа, когда он не должен их иметь.

Я следил за ответами на эти вопросы:

Использование ACL с куратором

Как получить доступ к защищенному znode из ZooKeeper с помощью zkCli?

zkCli:

[zk: localhost:7999(CONNECTED) 29] create /testpath contents digest:user:smGaoVKd/cQkjm7b88GyorAUz20=:cdrwa
Created /testpath
[zk: localhost:7999(CONNECTED) 4] getAcl /testpath
'digest,'user:smGaoVKd/cQkjm7b88GyorAUz20=
: cdrwa
[zk: localhost:7999(CONNECTED) 30] rmr /testpath  
Authentication is not valid : /testpath
[zk: localhost:7999(CONNECTED) 31]

Вышеуказанный результат, как и ожидалось, мы добавили ограничения ACL и теперь не можем получить доступ к созданному узлу. Однако, когда я пытаюсь получить доступ к этому узлу с помощью Curator Framework, он удаляет его, но не должен.

        String zkConnectString = "hostname:7999";
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

        CuratorFramework client = CuratorFrameworkFactory.builder()
                .connectString(zkConnectString)
                .retryPolicy(retryPolicy)
                .build();
        client.start();
        try {
            client.delete().forPath("/testpath");
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        }

Таким образом, код java Curator Framework удаляет узел успешно, а не выдает ошибки аутентификации. Что я делаю не так?

версии продукта:

Структура куратора: 2.11.1

Сервер Zookeeper: 3.4.5

Java-клиент Zookeeper: 3.4.12

1 Ответ

1 голос
/ 09 июля 2019

В интерфейсе командной строки ZooKeeper вы звоните rmr, что означает «Удалить все».Вы получаете нарушение ACL, потому что ACL применяется к узлам под /testpath, и у вас нет разрешения на удаление / получение (скорее всего, это жалоба) узлов под /testpath.Обратите внимание, что если в CLI вы вместо этого попробуете delete /testpath, то это работает (я сам проверял это), так как узел /testpath принимает ACL своего родителя.TBH Я никогда не могу держать ACL ZooKeeper прямо в моей голове, и я написал куратор.Короче говоря, Куратор делает правильные вещи (то же самое, что делает CLI).

...