Мы используем HBase в качестве хранилища в среде Hortonworks. У нас работает один узел, и мы планируем перейти на несколько узлов, если все будет работать нормально. В настоящее время мы используем систему единого входа Knox для входа в службы.
Для доступа к данным в HBase мы используем API WebHBase. Вход через систему единого входа Knox работает нормально. Пользователь, которого мы используем для этого («testuser»), имеет полные права доступа к Hbase, настроенные в Ranger.
Однако что-то идет не так, когда мы проходим через Knox и достигаем Hbase. Нет, мы получаем исключение, что пользователь "root". Почему он запрашивает пользователя «root», в то время как мы хотим получить данные с помощью «testuser»? Очевидно, мы можем сделать пользователя «root» и предоставить ему полный доступ, но это крайне нежелательно. Мы считаем, что должна быть какая-то ошибка с авторизацией пользователя в Ranger / Knox в отношении услуг.
Вот трассировка стека, которую мы получаем при доступе к API webhbase через наш шлюз Knox:
Запрещено org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security.AccessDeniedException: недостаточно прав для пользователя «root», действие: scannerOpen, tableName: testtable, family: r. в org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess (RangerAuthorizationCoprocessor.java:511) в org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preannerOpen (orjava.AuthorizationCoprocessor.preannerOpen (orjava.Authorization) .hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:856) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost $ 50.call ($ 50.call ($ RegionCoprocessorHost.java:1267). вызов (RegionCoprocessorHost.java:1638) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperation (RegionCoprocessorHost.java:1712) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorWhite (Regionserver.RegionCoprocessorHost) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preScannerOpen (RegionCoprocessorHost.java:1262) в org.a pache.hadoop.hbase.regionserver.RSRpcServices.scan (RSRpcServices.java:2279) на org.apache.hadoop.hbase.protobuf.generated.ClientProtos $ ClientService $ 2.callBlockingMethod (ClientProtos.java orgoop.java orgoop.protos.java:32295) .hbase.ipc.RpcServer.call (RpcServer.java:2127) на org.apache.hadoop.hbase.ipc.CallRunner.run (CallRunner.java:107) на org.apache.hadoop.hbase.ipc.RpcExecutoop.consumerLinkor.consumer (RpcExecutor.java:133) в org.apache.hadoop.hbase.ipc.RpcExecutor $ 1.run (RpcExecutor.java:108) в java.lang.Thread.run (Thread.java:745)
В настоящее время мы не выполняем сопоставление пользователей (т. Е. Основное сопоставление) в топологиях Knox. Мой журнал gateway-audit.log выглядит так:
17.05.05 11:58:33 || aac40856-3c3f-46a5-8b90-970d54bc0a21 | audit | WEBHBASE |||| доступ | uri | / gateway / default / hbase / testdatabase / | unavailable | Метод запроса : GET 17/05/05 11:58:33 || aac40856-3c3f-46a5-8b90-970d54bc0a21 | audit | WEBHBASE |||| доступ | uri | / gateway / default / hbase / testdatabase / | success | Статус ответа: 302 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO |||| access | uri | / gateway / knoxsso / api / v1 / websso? OriginalUrl = mydomain / gateway / default / hbase / testdatabase /% 2A | unavailable | Метод запроса: GET 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO | testuser ||| аутентификация | uri | / gateway / knoxsso / api / v1 / websso? originalUrl = mydomain / gateway / default / hbase / testdatabase /% 2A | success | 17.05.05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO | testuser ||| authentication | uri | / gateway / knoxsso / api / v1 / websso? OriginalUrl = mydomain / gateway / default / hbase / testdatabase /% 2A | success | Groups: [] 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO | testuser ||| access | uri | / gateway / knoxsso / api / v1 / websso? originalUrl = mydomain / gateway / default / hbase / testdatabase /% 2A | success | Статус ответа: 303 17/05/05 11:58:33 || 53594522-40b6-4040- ad2e-07e71a8ae112 | audit | WEBHBASE |||| access | uri | / gateway / default / hbase / testdatabase / | unavailable | Метод запроса: GET 17/05/05 11:58:33 || 53594522-40b6- 4040-ad2e-07e71a8ae112 | audit | WEBHBASE |||| dispatch | uri | mydomain: 60080 / testdatabase /? User.name = testuser | unavailable | Метод запроса: GET 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | audit | WEBHBASE |||| dispatch | uri | mydomain: 60080 / testdatabase / ? User.name = testuser | success | Статус ответа: 403 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae 112 | audit | WEBHBASE |||| доступ | uri | / gateway / default / hbase / testdatabase / | success | Статус ответа: 403
Спасибо за дополнительную информацию, как мне кажется, глядя в журнал аудита, что Нокс видит 'testuser'