HBase (Hortonworks) доступ запрещен исключение
Мы используем HBase в качестве нашего хранилища в среде Hortonworks. У нас работает один узел, и мы планируем перейти на несколько узлов, если все будет работать нормально. В настоящее время мы используем Knox SSO для входа в сервисы.
Для доступа к данным в HBase мы используем API WebHBase. Вход через Knox SSO работает просто отлично. Пользователь, которого мы используем для этого ("testuser"), имеет полные права доступа на Hbase, настроенные в Ranger.
Однако что-то идет не так, когда мы через Нокс и прибыли в Hbase. Нет, мы получаем исключение, что пользователь "root". Как получилось, что он запрашивает пользователя "root", а мы хотим получить данные с помощью "testuser"? Очевидно, что мы можем сделать пользователя "root" и дать ему полное разрешение, но это крайне нежелательно. Мы считаем, что должна быть какая-то ошибка с авторизацией пользователя в Ranger/Knox в отношении сервисов.
Вот трассировка стека, которую мы получаем при доступе к API webhbase через наш шлюз Knox:
Forbidden 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.preScannerOpen(RangerAgnor.oror).hbase.RangerAuthorizationCoprocessor.preScannerOpen(RangerAuthorizationCoprocessor.java:856) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$50.call(RegionCoprocessorHost.java:1267) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$RegionOperation. Вызов (RegionCoprocessorHost.java:1638) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperation(RegionCoprocessorHost.java:1712) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.RoCostorWorcessHost в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preScannerOpen(RegionCoprocessorHost.java:1262) в org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:2279) в org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32295) в org.apache.hadoop.hbase.ipc.RpcServer.all. Java:2127) в org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107) в org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133) в org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108) в java.lang.Thread.run(Thread.java:745)
в sun.reflect.NativeConstructorAccessorImpl.newInstance0(собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) в sun.reflect.DelegatingConstructorAccessorImpl.avarestructorImpl.j.Instructor (javl).newInstance(Constructor.java:423) в org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) в org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:95) в орг.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException(ProtobufUtil.java:333) в org.apache.hadoop.hbase.client.ScannerCallable.openScanner(ScannerCallable.java:387) в org.apache.bache.ScannerCallable.call(ScannerCallable.java:201) по адресу org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:63) по адресу org.apache.hadoop.hbase.client.RpcRetringCaller.jithWareRalringRcry 200) в org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetriedRPC.call(ScannerCallableWithReplicas.java:364) в org.apache.hadoop.hbase.client.ScannerCallableWithReplicas $ RetringRPC.call(ScannerCallableWithReplicas.jallh.cli.RalClayRacRacRacRacR_Rac_Rac_Rac_Rac_Rack_R_C_Cr_D_C_Ar_D_C_A_C_A_C_P_C_L_C_P_C_D_C_D_C_D_W_C_A_D_W_D_W_C_A_D_W_W_R_P_C_A__A_D_W_W_C_A_D_W_W_C_W_W_W_W_W_W_W__C_W_CF_- / / / / / / / / / / / / / / / / / / / / / / / / / / / R / R /. Ракбатка): в состоянии. RpcRetringCaller.java:126) в org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:65) в java.util.concurrent.ThreadPoolExavaerl..concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:617) в java.lang.Thread.run(Thread.java:745) Причина: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.security.AccessDeniedException): org.apache.hadoop.hbase.security.AccessDeniedException: недостаточно прав для пользователя root,action: scannerOpen, tableName:rowphyste, семейство: r. в org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess(RangerAuthorizationCoprocessor.java:511) в org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen(RangerAgnor.oror).hbase.RangerAuthorizationCoprocessor.preScannerOpen(RangerAuthorizationCoprocessor.java:856) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$50.call(RegionCoprocessorHost.java:1267) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$RegionOperation. Вызов (RegionCoprocessorHost.java:1638) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperation(RegionCoprocessorHost.java:1712) в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.RoCostorWorcessHost в org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preScannerOpen(RegionCoprocessorHost.java:1262) в org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:2279) в org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32295) в org.apache.hadoop.hbase.ipc.RpcServer.all. Java:2127) в org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107) в org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133) в org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108) в java.lang.Thread.run(Thread.java:745) в org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1225) at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:213) at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelholig.jlc (.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:32741) в org.apache.hadoop.hbase.client.ScannerCallable.openScanner(ScannerCallable.java:379) Больше
В настоящее время мы не выполняем сопоставление пользователей (то есть сопоставление принципалов) в топологиях Knox. Мой gateway-audit.log выглядит так:
17/05/05 11:58:33 || aac40856-3c3f-46a5-8b90-970d54bc0a21 | аудит |WEBHBASE|||| доступ |uri|/gateway/ default / hbase / testdatabase / | недоступен | Метод запроса: GET 17/05/05 11:58:33 ||aac40856-3c3f-46a5-8b90-970d54bc0a21| аудит |WEBHBASE|||| доступ |uri|/gateway/ default / hbase / testdatabase / | success | Статус ответа: 302 17/05/05 11:58:33 ||5737b75b-9082-44e5-9afd-9675e9c36c43| аудит |KNOXSSO|||| доступ |uri|/gateway/knoxsso/api/v1/websso? OriginalUrl=mydomain/gateway/default/hbase/testdatabase/%2A| недоступен | Метод запроса: GET 17/05/05 11:58:33 ||5737b75b-9082-44e5-9afd-9675e9c36c43| аудит |KNOXSSO|testuser||| аутентификация |uri|/gateway/? knoxsso / API / v1 / websso originalUrl = MYDOMAIN / шлюз / по умолчанию / HBase / testdatabase /% 2A | успех | 17/05/05 11:58:33 ||5737b75b-9082-44e5-9afd-9675e9c36c43| аудит | KNOXSSO | тестер пользователя ||| аутентификация |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| аудит | KNOXSSO | тестпользователь ||| доступ |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 / | недоступен | Метод запроса: GET 17/05/05 11:58:33 ||53594522-40b6-4040-ad2e-07e71a8ae112| аудит |WEBHBASE|||| рассылка | uri | mydomain: 60080 / testdatabase /? User.name=testuser| недоступен | Метод запроса: GET 17/05/05 11:58:33 || 53594522-40b6-4040 -ad2e-07e71a8ae112 | аудит |WEBHBASE|||| рассылка | uri | mydomain: 60080 / testdatabase / ? user.name=testuser| success | Статус ответа: 403 17/05/05 11:58:33 ||53594522-40b6-4040-ad2e-07e71a8ae112| аудит |WEBHBASE|||| доступа | URI | / gateway / default / hbase / testdatabase / | success | Статус ответа: 403
1 ответ
Спасибо за дополнительную информацию, мне кажется, просматривая журнал аудита, что Knox видит "testuser"
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-
4040-ad2e-07e71a8ae112|audit|WEBHBASE||||dispatch|uri|mydomain:60080/testdatabase/?user.name=testuser|success|Response status: 403 17/05/05 11:58:33 ||53594522-40b6-4040-ad2e-
Возможно, вы захотите проверить файл hbase-site.xml на предмет соответствующих настроек. Это ссылка на документацию Knox, в которой рассказывается о настройках.