HBort를 Hortonworks 환경에서 스토리지로 선택했습니다. 하나의 노드가 실행 중이며 모든 노드가 정상적으로 작동하면 여러 노드로 업그레이드 할 계획입니다. 현재 Knox SSO를 사용하여 서비스에 로그인합니다.HBase (Hortonworks) 액세스 거부 예외
HBase에서 데이터에 액세스하려면 WebHBase API를 사용하십시오. Knox SSO를 통한 로그인은 정상적으로 작동합니다. 이 작업을 수행하는 데 사용하는 사용자 ("testuser")는 Ranger에 구성된 Hbase에 대한 모든 액세스 권한을가집니다.
그러나 녹스를 거쳐 Hbase에 도착하면 문제가 발생합니다. 아니요, 우리는 사용자 "루트"를 예외로합니다. "testuser"로 데이터를 가져오고 싶을 때 어떻게 사용자에게 "root"를 묻는가? 분명히 우리는 사용자를 "root"로 만들고 완전한 허가를 줄 수 있지만 이것은 매우 바람직하지 않습니다. 우리는 서비스와 관련하여 Ranger/Knox 내의 사용자 인증에 실수가 있어야한다고 생각합니다.
금지 org.apache.hadoop.hbase.security.AccessDeniedException : org.apache.hadoop.hbase.security을 여기
우리 녹스 게이트웨이를 통해 webhbase의 API에 액세스 할 때 우리가 얻을 스택 트레이스입니다. AccessDeniedException : 사용자 'root'에 대한 권한이 충분하지 않습니다. 작업 : scannerOpen, tableName : testtable, 패밀리 : r. 조직에서 org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:901) 에서 org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess (RangerAuthorizationCoprocessor.java:511)에서 . org.apache.hadoop에서 org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost $ 50.call (RegionCoprocessorHost.java:1267) 에서 apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:856) .hbase.regionserver.RegionCoprocessorHost $ RegionOperation.call (RegionCoprocessorHost.java:1638) at org.apache.hadoop.hbase.regionserver org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preScannerOpen에서 .RegionCoprocessorHost.execOperation org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperationWithResult (RegionCoprocessorHost.java:1687)에서 (RegionCoprocessorHost.java:1712) org.apache.hadoop.hbase.protobuf.generated.ClientProtos $ ClientService $을 2 org.apache.hadoop.hbase.regionserver.RSRpcServices.scan (RSRpcServices.java:2279)에서 (RegionCoprocessorHost.java:1262) . callBlockingMethod (ClientProtos.java:32295) at org.apache.hadoop.hbase.ipc.RpcServer.call (RpcServer.java:2127) at org.apache.hadoop.hbase.ipc.CallRunner.run (CallRunner.java : 107) 01시 23,516,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.newInstance (NativeConstructorAccessorImpl.java:62)에서 sun.reflect.NativeConstructorAccessorImpl.newInstance0 (기본 방법) 에서sun.reflect에서 .DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance (Constructor.java:423) at org.apache.hadoop.ipc.RemoteException.instantiateException org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException에서 org.apache.hadoop.ipc.RemoteException.unwrapRemoteException (RemoteException.java:95) 에서 (RemoteException.java:106) (ProtobufUtil. 자바 : 333) org.apache.hadoop.hbase.client.ScannerCallable.call에서 org.apache.hadoop.hbase.client.ScannerCallable.openScanner (ScannerCallable.java:387) (ScannerCallable.java:201)에서 org.apache.hadoop.hbase.client.ScannerCallable.call (ScannerCallable.java:63) 에서 org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries (RpcRetryingCaller.java:200)에서 org.apache.hadoop.hbase.client.ScannerCallableWithReplicas $ RetryingRPC.call에서 org.apache.hadoop.hbase.client.ScannerCallableWithReplicas $ RetryingRPC.call (ScannerCallableWithReplicas.java:364) (ScannerCallableWithReplicas.java:338)에서 org.apache.hadoop.hbase.client.ResultBoundedCompletionService $ QueueingFuture.run (ResultBoundedCompletionService.java:65) 에서 org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries (RpcRetryingCaller.java:126) 에서의 java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) at java.util.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'에 대한 권한이 충분하지 않습니다. 작업 : scannerOpen, tableName : rowphyste, 패밀리 : r. 조직에서 org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:901) 에서 org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess (RangerAuthorizationCoprocessor.java:511)에서 . org.apache.hadoop에서 org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost $ 50.call (RegionCoprocessorHost.java:1267) 에서 apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:856) .hbase.regionserver.RegionCoprocessorHost $ RegionOperation.call (RegionCoprocessorHost.java:1638) at org.apache.hadoop.hbase.regionserver org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preScannerOpen에서 .RegionCoprocessorHost.execOperation org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperationWithResult (RegionCoprocessorHost.java:1687)에서 (RegionCoprocessorHost.java:1712) org.apache.hadoop.hbase.protobuf.generated.ClientProtos $ ClientService $을 2 org.apache.hadoop.hbase.regionserver.RSRpcServices.scan (RSRpcServices.java:2279)에서 (RegionCoprocessorHost.java:1262) . callBlockingMethod (ClientProtos.java:32295) at org.apache.hadoop.hbase.ipc.RpcServer.call (RpcServer.java:2127) at org.apache.hadoop.hbase.ipc.CallRunner.run (CallRunner.java : 107) 01시 23,516,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) at org.apache.hadoop.hbase.ipc.RpcClientImpl.call (RpcClientImpl.java:1225) at org.apache.hadoop.hbase.ipc.AbstractRpcClient. org.apache.hadoop.hbase.protobuf.generated.ClientProtos $에서 org.apache.hadoop.hbase.ipc.AbstractRpcClient $ BlockingRpcChannelImplementation.callBlockingMethod (AbstractRpcClient.java:287) 에서 callBlockingMethod (AbstractRpcClient.java:213) ClientService $ BlockingStub.scan org.apache.hadoop.hbase.client.ScannerCallable.openScanner (ScannerCallable.java:379)에서 (ClientProtos.java:32741) ... 10 개
우리는 현재 녹스 (Knox) 토폴로지에서 사용자 매핑 (예 : 주요 매핑)을 수행하지 않습니다. 내 게이트웨이 audit.log은 다음과 같습니다
17/05/05 11시 58분 33초 || aac40856-3c3f-46a5-8b90-970d54bc0a21 | 감사 | WEBHBASE |||| 액세스 | URI |/게이트웨이/기본/HBase를/testdatabase/| 사용할 수 | 요청 방법 : 17/05/05 11시 58분 33초 || aac40856-3c3f-46a5-8b90-970d54bc0a21 GET | 감사 | WEBHBASE |||| 액세스 | URI |/게이트웨이/기본/HBase를/testdatabase/ | 성공 | 응답 상태 : 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 |/게이트웨이/knoxsso/api/v1/websso? originalUrl = mydomain/gateway/default/hbase/testdatabase/% 2A | 성공 | 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 감사 | KNOXSSO | testuser ||| 인증 | uri |/게이트웨이/knoxsso/api/v1/websso? originalUrl = mydomain/게이트웨이/기본/hbase/testdatabase/% 2A | 성공 | 그룹 : [] 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | 감사 | KNOXSSO | testuser ||| 액세스 | uri |/gateway/knoxsso/api/v1/websso? originalUrl = mydomain/gateway/default/hbase/testdatabase/% 2A 성공 | 응답 상태 : 303 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | 감사 | WEBHBASE |||| 액세스 | uri |/gateway/default/hbase/testdatabase/| 사용할 수 없음 | 방법 요청 : GET 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | 감사 | WEBHBASE |||||||||||||||||||는 60080/testdatabase/? user.name = testuser | unavailable | 요청 방법 : 2005 년 5 월 17 일 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | 감사 | WEBHBASE |||| 파견 | URI | mydomain : 60080/testdatabase/user.name = testuser를 | 성공 | 응답 상태 : 403 17/05/05 11시 58분 33초 || 53594522-40b6-4040-ad2e-07e71a8ae112 | 감사 | WEBHBASE |||| 액세스 | URI |/게이트웨이/기본/HBase를/testdatabase/ | 성공 | 응답 상태 : 추가 정보를 원하시면 (403 개)
이것은 이상하게 보입니다. 게이트웨이 audit.log에서 볼 수 있습니다. 거기에서 Knox가보고있는 사용자에 대한 세부 정보를 볼 수 있습니다. 또한 knox 토폴로지에서 사용자 매핑을 수행하고 있습니까? –
현재 사용자 매핑을 수행하지 않습니다. 게이트웨이-audit.log를 포함하도록 내 게시물을 업데이트합니다. 주 매핑을 추가 할 것을 제안 하시겠습니까? – bigdatadev