hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "jiraposter@reviews.apache.org (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-2742) Provide strong authentication with a secure RPC engine
Date Thu, 17 Nov 2011 23:03:53 GMT

    [ https://issues.apache.org/jira/browse/HBASE-2742?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13152429#comment-13152429
] 

jiraposter@reviews.apache.org commented on HBASE-2742:
------------------------------------------------------


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/1991/#review3322
-----------------------------------------------------------

Ship it!


Pretty crazy patch Gary.  I tried reviewing the security code but my eyes started to glaze
over and besides it looks like a bunch of copy/paste; in other words, it don't look like you
wrote it.  I skipped ahead after a while to core changes.  There are a few questions below
but as long as all tests pass, I'm fine w/ commit (even fine w/ the bit of pollution of core
w/ security mentions).


pom.xml
<https://reviews.apache.org/r/1991/#comment7409>

    Whats going on here?  Why would we exclude the test hbase-site.xml?  I thought it had
all configs. for test running?  Or is this in the security profile?  I see you then add it
back in later under the plugin section.   Did we have it in wrong place?



security/src/main/java/org/apache/hadoop/hbase/ipc/SecureClient.java
<https://reviews.apache.org/r/1991/#comment7424>

    This is a number?



security/src/main/java/org/apache/hadoop/hbase/ipc/SecureClient.java
<https://reviews.apache.org/r/1991/#comment7413>

    Could we get an enum we don't know about?
    
    If copied from hadoop code, don't worry about this comment.



security/src/main/java/org/apache/hadoop/hbase/ipc/SecureClient.java
<https://reviews.apache.org/r/1991/#comment7414>

    Man, this is kinda ugly... its a data member in a super class?  Cryptic!
    
    (This is hadoop code?)



security/src/main/java/org/apache/hadoop/hbase/ipc/SecureRpcEngine.java
<https://reviews.apache.org/r/1991/#comment7422>

    This stuff is hard to review since seems to be mostly hadoop copy paste code.



security/src/main/java/org/apache/hadoop/hbase/ipc/SecureServer.java
<https://reviews.apache.org/r/1991/#comment7423>

    Funny.  Above we compare on State.SUCCESS.state.   What if there is a FATAL here?  Anything
special we should do?



security/src/main/java/org/apache/hadoop/hbase/ipc/SecureServer.java
<https://reviews.apache.org/r/1991/#comment7430>

    This ain't you but crazy stuff here...  You'd think hadoop would at least log it?  I suppose
notthing you can do about these on close anyways?



src/assembly/all.xml
<https://reviews.apache.org/r/1991/#comment7431>

    This will add the 'security' on the end if we are building w/ the security profile?



src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
<https://reviews.apache.org/r/1991/#comment7433>

    So, in insecure hbase, is user provided?  If not, this message will be all over our logs?




src/main/java/org/apache/hadoop/hbase/ipc/HBaseClient.java
<https://reviews.apache.org/r/1991/#comment7434>

    Good.



src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java
<https://reviews.apache.org/r/1991/#comment7436>

    Say what to use instead?



src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java
<https://reviews.apache.org/r/1991/#comment7438>

    This seems like an odd one to expose to subclasses.



src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java
<https://reviews.apache.org/r/1991/#comment7439>

    Is this 'fix' copied from hadoop?  Seems sensible.



src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
<https://reviews.apache.org/r/1991/#comment7440>

    Whats happening here?  Do we have to do this -- security pollution of base hbase interface?
    



src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java
<https://reviews.apache.org/r/1991/#comment7441>

    ditto
    
    Not a problem if this is the way it has to be...



src/main/java/org/apache/hadoop/hbase/master/HMaster.java
<https://reviews.apache.org/r/1991/#comment7442>

    this a new call we have to make?



src/main/resources/hbase-default.xml
<https://reviews.apache.org/r/1991/#comment7443>

    This stuff should be in here and not in an hbase-security-default.xml that comes in only
when running security?
    
    Its ok this stuff is here... just wondering if could be shown only when a security context.


- Michael


On 2011-11-17 07:27:20, Gary Helmling wrote:
bq.  
bq.  -----------------------------------------------------------
bq.  This is an automatically generated e-mail. To reply, visit:
bq.  https://reviews.apache.org/r/1991/
bq.  -----------------------------------------------------------
bq.  
bq.  (Updated 2011-11-17 07:27:20)
bq.  
bq.  
bq.  Review request for hbase.
bq.  
bq.  
bq.  Summary
bq.  -------
bq.  
bq.  This patch creates a new secure RPC engine for HBase, which provides Kerberos based authentication
of clients, and a token-based authentication mechanism for mapreduce jobs.  Primary components
of the patch are:
bq.  
bq.  - a new maven profile for secure Hadoop/HBase: hadoop-0.20S
bq.    - Secure Hadoop dependent classes are separated under a pseudo-module in the security/
directory.  These source and test directories are only including if building the secure Hadoop
profile
bq.    - Currently the security classes get packaged with the regular HBase build artifacts.
 We need a way to at least override project.version, so we can append something like a "-security"
suffix indicating the additional security components.
bq.    - The pseudo-module here is really a half-step forward.  It enables the security code
to be optionally included in the build for now, and sets up the structure for a security module.
 But we still will want to pursue full modularization (see HBASE-4336), which will allow packing
the security code in a separate build artifact.
bq.  
bq.  - a new RPC engine providing kerberos and token-based authentication: org.apache.hadoop.hbase.ipc.SecureRpcEngine
bq.    - implementation under security/src/main/java/org/apache/hadoop/hbase/ipc/
bq.    - The implementation classes extend the existing HBaseClient and HBaseServer to share
as much of the RPC code as possible.  The main override is of the connection classes to allow
control over the SASL negotiation of secure connections
bq.  
bq.  - existing RPC changes
bq.    - The existing HBaseClient and HBaseServer have been modified to make subclassing possible
bq.    - All references to Hadoop UserGroupInformation have been replaced with org.apache.hadoop.hbase.security.User
to insulate from future dependencies on specific Hadoop versions
bq.  
bq.  - a coprocessor endpoint for obtaining new authentication tokens: TokenProvider, and
supporting classes for token generation and synchronization (incorporating HBASE-3615)
bq.    - implementation is under security/src/main/java/org/apache/hadoop/hbase/security/token/
bq.    - Secret keys for token generation and verification are synchronized throughout the
cluster in zookeeper, under /hbase/tokenauth/keys
bq.  
bq.  
bq.  To enable secure RPC, add the following configuration to hbase-site.xml:
bq.  
bq.    <property>
bq.     <name>hadoop.security.authorization</name>
bq.     <value>true</value>
bq.    </property>
bq.    <property>
bq.     <name>hadoop.security.authentication</name>
bq.     <value>kerberos</value>
bq.    </property>
bq.    <property>
bq.     <name>hbase.rpc.engine</name>
bq.     <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
bq.    </property>
bq.    <property>
bq.     <name>hbase.coprocessor.region.classes</name>
bq.     <value>org.apache.hadoop.hbase.security.token.TokenProvider</value>
bq.    </property>
bq.  
bq.  In addition, the master and regionserver processes must be configured for kerberos authentication
using the properties:
bq.  
bq.   * hbase.(master|regionserver).keytab.file
bq.   * hbase.(master|regionserver).kerberos.principal
bq.   * hbase.(master|regionserver).kerberos.https.principal
bq.  
bq.  
bq.  This addresses bug HBASE-2742.
bq.      https://issues.apache.org/jira/browse/HBASE-2742
bq.  
bq.  
bq.  Diffs
bq.  -----
bq.  
bq.    conf/hbase-policy.xml PRE-CREATION 
bq.    pom.xml 2847416 
bq.    security/src/main/java/org/apache/hadoop/hbase/ipc/SecureClient.java PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/ipc/SecureConnectionHeader.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/ipc/SecureRpcEngine.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/ipc/SecureServer.java PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/AccessDeniedException.java
PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/HBasePolicyProvider.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/security/HBaseSaslRpcServer.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationKey.java
PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationProtocol.java
PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.java
PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java
PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.java
PRE-CREATION 
bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/TokenProvider.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/TokenUtil.java PRE-CREATION

bq.    security/src/main/java/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java
PRE-CREATION 
bq.    security/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java
PRE-CREATION 
bq.    security/src/test/java/org/apache/hadoop/hbase/security/token/TestZKSecretWatcher.java
PRE-CREATION 
bq.    security/src/test/resources/hbase-site.xml PRE-CREATION 
bq.    src/assembly/all.xml 3ad8ab3 
bq.    src/main/java/org/apache/hadoop/hbase/HServerAddress.java f28240c 
bq.    src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java cba7bd1 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/ConnectionHeader.java 904c107 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HBaseClient.java 4086829 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java 054b92b 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java 337da78 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java d9ba0ea 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java 9e0535e 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HMasterRegionInterface.java 0dc5bea 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/HRegionInterface.java e8b2c9e 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/RequestContext.java PRE-CREATION 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/RpcEngine.java 1b5629a 
bq.    src/main/java/org/apache/hadoop/hbase/ipc/WritableRpcEngine.java c8e030c 
bq.    src/main/java/org/apache/hadoop/hbase/mapred/TableMapReduceUtil.java db07ed1 
bq.    src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java ad88b76 
bq.    src/main/java/org/apache/hadoop/hbase/master/HMaster.java 19ed5b8 
bq.    src/main/java/org/apache/hadoop/hbase/security/KerberosInfo.java PRE-CREATION 
bq.    src/main/java/org/apache/hadoop/hbase/security/TokenInfo.java PRE-CREATION 
bq.    src/main/java/org/apache/hadoop/hbase/security/User.java 00bd06d 
bq.    src/main/java/org/apache/hadoop/hbase/zookeeper/ZKLeaderManager.java PRE-CREATION 
bq.    src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java 4c5e844 
bq.    src/main/resources/hbase-default.xml 6f98f5d 
bq.    src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java c0634f4 
bq.    src/test/java/org/apache/hadoop/hbase/PerformanceEvaluation.java bb9ea45 
bq.    src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.java PRE-CREATION

bq.  
bq.  Diff: https://reviews.apache.org/r/1991/diff
bq.  
bq.  
bq.  Testing
bq.  -------
bq.  
bq.  A full test suite run showed failures in TestMasterFailover (timeout) and TestAvroServer.
 I'll look into those.
bq.  
bq.  Cluster testing (1 master + 3 slaves in ec2) with Kerberos authentication and map reduce
token authentication, using YCSB, RowCounter, PerformanceEvaluation.
bq.  
bq.  
bq.  Thanks,
bq.  
bq.  Gary
bq.  
bq.


                
> Provide strong authentication with a secure RPC engine
> ------------------------------------------------------
>
>                 Key: HBASE-2742
>                 URL: https://issues.apache.org/jira/browse/HBASE-2742
>             Project: HBase
>          Issue Type: Improvement
>          Components: ipc
>            Reporter: Gary Helmling
>            Priority: Critical
>             Fix For: 0.92.0
>
>
> The HBase RPC code (org.apache.hadoop.hbase.ipc.*) was originally forked off of Hadoop
RPC classes, with some performance tweaks added.  Those optimizations have come at a cost
in keeping up with Hadoop RPC changes however, both bug fixes and improvements/new features.
 
> In particular, this impacts how we implement security features in HBase (see HBASE-1697
and HBASE-2016).  The secure Hadoop implementation (HADOOP-4487) relies heavily on RPC changes
to support client authentication via kerberos and securing and mutual authentication of client/server
connections via SASL.  Making use of the built-in Hadoop RPC classes will gain us these pieces
for free in a secure HBase.
> So, I'm proposing that we drop the HBase forked version of RPC and convert to direct
use of Hadoop RPC, while working to contribute important fixes back upstream to Hadoop core.
 Based on a review of the HBase RPC changes, the key divergences seem to be:
> HBaseClient:
>  - added use of TCP keepalive (HBASE-1754)
>  - made connection retries and sleep configurable (HBASE-1815)
>  - prevent NPE if socket == null due to creation failure (HBASE-2443)
> HBaseRPC:
>  - mapping of method names <-> codes (removed in HBASE-2219)
> HBaseServer:
>  - use of TCP keep alives (HBASE-1754)
>  - OOME in server does not trigger abort (HBASE-1198)
> HbaseObjectWritable:
>  - allows List<> serialization
>  - includes it's own class <-> code mapping (HBASE-328)
> Proposed process is:
> 1. open issues with patches on Hadoop core for important fixes/adjustments from HBase
RPC (HBASE-1198, HBASE-1815, HBASE-1754, HBASE-2443, plus a pluggable ObjectWritable implementation
in RPC.Invocation to allow use of HbaseObjectWritable).
> 2. ship a Hadoop version with RPC patches applied -- ideally we should avoid another
copy-n-paste code fork, subject to ability to isolate changes from impacting Hadoop internal
RPC wire formats
> 3. if all Hadoop core patches are applied we can drop back to a plain vanilla Hadoop
version
> I realize there are many different opinions on how to proceed with HBase RPC, so I'm
hoping this issue will kick off a discussion on what the best approach might be.  My own motivation
is maximizing re-use of the authentication and connection security work that's already gone
into Hadoop core.  I'll put together a set of patches around #1 and #2, but obviously we need
some consensus around this to move forward.  If I'm missing other differences between HBase
and Hadoop RPC, please list as well.  Discuss!

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message