1

Nous utilisons HBase comme choix de stockage dans un environnement Hortonworks. Nous avons un nœud en cours d'exécution et prévoyons de mettre à niveau vers plusieurs nœuds si tout fonctionne correctement. Actuellement, nous utilisons Knox SSO pour nous connecter aux services.Accès refusé à HBase (Hortonworks)

Pour accéder aux données de HBase, nous utilisons l'API WebHBase. Connexion via Knox SSO fonctionne très bien. L'utilisateur que nous utilisons pour faire ceci ("testuser") a tous les droits d'accès sur Hbase, configurés dans Ranger. Cependant, quelque chose ne va pas lorsque nous traversons Knox et arrivons à Hbase. Non, nous obtenons l'exception de cet utilisateur "root". Comment se fait-il qu'il demande l'utilisateur "root" alors que nous voulons récupérer des données avec "testuser"? De toute évidence, nous pouvons rendre un utilisateur "root" et lui donner une autorisation complète, mais cela est hautement indésirable. Nous pensons qu'il doit y avoir une erreur avec l'autorisation de l'utilisateur au sein de Ranger/Knox concernant les services.

Voici le stacktrace que nous obtenons lorsque vous accédez à l'API webhbase via notre passerelle Knox:

Interdite org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security. AccessDeniedException: Insuffisant autorisations pour l'utilisateur 'root', action: scannerOpen, tableName: testtable, famille: r. à org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess (RangerAuthorizationCoprocessor.java:511) à org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:901) à org. apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:856) à org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost $ 50.call (RegionCoprocessorHost.java:1267) à org.apache.hadoop .hbase.regionserver.RegionCoprocessorHost $ RegionOperation.call (RegionCoprocessorHost.java:1638) at org.apache.hadoop.hbase.regionserver .RegionCoprocessorHost.execOperation (RegionCoprocessorHost.java:1712) à org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperationWithResult (RegionCoprocessorHost.java:1687) à 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.call (RpcServer.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 (natif Method) à sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) à sun.reflect .DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance (Constructeur.java:423) at org.apache.hadoop.ipc.RemoteException.instantiateException (RemoteException.java:106) à org.apache.hadoop.ipc.RemoteException.unwrapRemoteException (RemoteException.java:95) à org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException (ProtobufUtil. java: 333) à org.apache.hadoop.hbase.client.ScannerCallable.openScanner (ScannerCallable.java:387) à org.apache.hadoop.hbase.client.ScannerCallable.call (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 (ScannerCallableWithReplicas.java:364) à org.apache.hadoop.hbase.client.ScannerCallableWithReplicas $ RetryingRPC.call (ScannerCallableWithReplicas.java:338) à org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries (RpcRetryingCaller.java:126) à org.apache.hadoop.hbase.client.ResultBoundedCompletionService $ QueueingFuture.run (ResultBoundedCompletionService.java:65) à java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) au java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) at java.lang.Thread.run (Thread.java:745) Causé par: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException (org.apache.hadoop.hbase.security.AccessDeniedException): org.apache. hadoop.hbase.security.AccessDeniedException: Insuffisant autorisations pour l'utilisateur 'root', action: scannerOpen, tableName: rowphyste, famille: r. à org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.authorizeAccess (RangerAuthorizationCoprocessor.java:511) à org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:901) à org. apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor.preScannerOpen (RangerAuthorizationCoprocessor.java:856) à org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost $ 50.call (RegionCoprocessorHost.java:1267) à org.apache.hadoop .hbase.regionserver.RegionCoprocessorHost $ RegionOperation.call (RegionCoprocessorHost.java:1638) at org.apache.hadoop.hbase.regionserver .RegionCoprocessorHost.execOperation (RegionCoprocessorHost.java:1712) à org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.execOperationWithResult (RegionCoprocessorHost.java:1687) à 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.call (RpcServer.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) au org.apache.hadoop.hbase.ipc.RpcClientImpl.call (RpcClientImpl.java:1225) à org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod (AbstractRpcClient.java:213) à org.apache.hadoop.hbase.ipc.AbstractRpcClient $ BlockingRpcChannelImplementation.callBlockingMethod (AbstractRpcClient.java:287) à org.apache.hadoop.hbase.protobuf.generated.ClientProtos $ ClientService $ BlockingStub.scan (ClientProtos.java:32741) à org.apache.hadoop.hbase.client.ScannerCallable.openScanner (ScannerCallable.java:379) ... 10 plus

Nous sommes actuellement ne pas effectuer de mappage utilisateur (ie mappage principal) dans les topologies Knox. Ma porte-audit.log ressemble à ceci:

17/05/05 11:58:33 || aac40856-3c3f-46a5-8b90-970d54bc0a21 | vérification | accès de WEBHBASE | uri |/gateway/default/hbase/testdatabase/| indisponible | Demande méthode: GET 17/05/05 11:58:33 || aac40856-3c3f-46a5-8b90-970d54bc0a21 | audit | WEBHBASE |||| accès | uri |/passerelle/default/HBase/testdatabase/ | réussite | Réponse état: 302 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO |||| accès | uri |/passerelle/knoxsso/api/v1/websso? originalUrl = mondomaine/passerelle/par défaut/hbase/testdatabase /% 2A | indisponible | Demande méthode: GET 17/05/05 11:58: 33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO | testuser ||| authentification | uri |/passerelle/knoxsso/api/v1/websso? OriginalUrl = mondomaine/gateway/default/hbase/testdatabase /% 2A | succès | 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO | testuser ||| authentification | uri |/passerelle/knoxsso/api/v1/websso? OriginalUrl = mydomaine/gateway/default/hbase/testdatabase /% 2A | succès | Groupes: [] 17/05/05 11:58:33 || 5737b75b-9082-44e5-9afd-9675e9c36c43 | audit | KNOXSSO | testuser ||| accès | uri |/passerelle/knoxsso/api/v1/websso? originalUrl = mondomaine/passerelle/défaut/hbase/testdatabase /% 2A | succès | réponse status: 303 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | audit | WEBHBASE |||| accès | uri |/gateway/default/hbase/testdatabase/| indisponible | Demande méthode: GET 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | audit | WEBHBASE |||| envoi | uri | mydomaine: 60080/testdatabase/? User.name = testuser | indisponible | Demande méthode: GET 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | audit | WEBHBASE |||| envoi | uri | mydomain : 60080/testdatabase/? User.name = testuser | success | Réponse status: 403 17/05/05 11:58:33 || 53594522-40b6-4040-ad2e-07e71a8ae112 | audit | WEBHBASE |||| accès | uri |/passerelle/default/HBase/testdatabase/ | réussite | Réponse état: 403

+0

Cela semble étrange, pouvez-vous regarder le gateway-audit.log, là vous pouvez voir les détails sur l'utilisateur Knox voit. En outre, faites-vous le mappage d'utilisateur dans la topologie Knox? –

+0

Nous ne faisons pas de mappage utilisateur actuellement. Je mets à jour mon message pour contenir gateway-audit.log. Souhaitez-vous nous suggérer d'ajouter la cartographie principale? – bigdatadev

Répondre

0

Merci pour l'info supplémentaire, il me semble, en regardant l'audit-journal Knox voit la '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- 

Vous pouvez vérifier le fichier hbase-site.xml pour les paramètres associés. C'est un link to Knox documentation qui parle des paramètres.

+0

J'ai téléchargé mes paramètres ici: https://community.hortonworks.com/questions/100385/webhbase-access-denied-exception.html Je ne peux pas encore détecter d'erreur. – bigdatadev