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

(Updated Jan. 8, 2015, 11:52 p.m.)


Review request for accumulo.


Changes
-------

Addresses the last major open issues:

* Removes use of shortUserName as the accumulo principal. The Accumulo 
principal is now the same as the KRB principal -- we make no distinction.
* Adds user manual chapter: overview, client configuration/use and server 
configuration/use.
* Introduces KerberosAuthorizor and KerberosPermissionHandler. The use of KRB 
principal as our principal means that principals can now contain "/" (e.g. 
`myserver/hostname@REALM`) which doesn't function as expected with ZK. 
Principals (user parent ZNode) are base64 encoded to work around this. The 
Authorizor and PermissionHandler are still essentially shims around the ZK 
variants. This is done at the cost of human readable ZK nodes; however, this 
was already a read-ACL'ed section of ZK, so people couldn't get in there on 
their own. I'm not sure if there is anything else we could actually do to avoid 
this (it didn't seem like I could insert escape chars).


I believe I am happy with the current state of this, so barring any negative 
feedback or requested changes, I'll be applying this one soon. Please let me 
know (here or in private), if you'd like cycles to review before I apply. As 
always, I'm happy to entertain continued review even after this is applied.


Bugs: ACCUMULO-2815
    https://issues.apache.org/jira/browse/ACCUMULO-2815


Repository: accumulo


Description
-------

ACCUMULO-2815 Initial support for Kerberos client authentication.

Leverage SASL transport provided by Thrift which can speak GSSAPI, which 
Kerberos implements. Introduced...

* An Accumulo KerberosToken which is an AuthenticationToken to validate users.
* Custom thrift processor and invocation handler to ensure server RPCs have a 
valid KRB identity and Accumulo authentication.
* A KerberosAuthenticator which extends ZKAuthenticator to support Kerberos 
identities seamlessly.
* New ClientConf variables to use SASL transport and pass Kerberos server 
principal
* Updated ClientOpts and Shell opts to transparently use a KerberosToken when 
SASL is enabled (no extra client work).

I believe this is the "bare minimum" for Kerberos support. They are also 
grossly lacking in unit and integration tests. I believe that I might have 
somehow broken the client address string in the server (I saw log messages with 
client: null, but I'm not sure if it's due to these changes or not). A 
necessary limitation in the Thrift server used is that, like the SSL transport, 
the SASL transport cannot presently be used with the TFramedTransport, which 
means none of the [half]async thrift servers will function with this -- we're 
stuck with the TThreadPoolServer.

Performed some contrived benchmarks on my laptop (while still using it myself) 
to get at big-picture view of the performance impact against "normal" operation 
and Kerberos alone. Each "run" was the duration to ingest 100M records using 
continuous-ingest, timed with `time`, using 'real'.

THsHaServer (our default), 6 runs:

Avg: 10m7.273s (607.273s)
Min: 9m43.395s
Max: 10m52.715s

TThreadPoolServer (no SASL), 5 runs:

Avg: 11m16.254s (676.254s)
Min: 10m30.987s
Max: 12m24.192s

TThreadPoolServer+SASL/GSSAPI (these changes), 6 runs:

Avg: 13m17.187s (797.187s)
Min: 10m52.997s
Max: 16m0.975s

The general takeway is that there's about 15% performance degredation in its 
initial state which is in the realm of what I expected (~10%).


Diffs (updated)
-----

  README ad6f2bf 
  core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java f6ea934 
  core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java 
6fe61a5 
  core/src/main/java/org/apache/accumulo/core/client/impl/ClientContext.java 
e75bec6 
  core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java 
f481cc3 
  core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java 
a9ad8a1 
  
core/src/main/java/org/apache/accumulo/core/client/impl/ThriftTransportKey.java 
6dc846f 
  
core/src/main/java/org/apache/accumulo/core/client/impl/ThriftTransportPool.java
 5da803b 
  
core/src/main/java/org/apache/accumulo/core/client/security/tokens/KerberosToken.java
 PRE-CREATION 
  core/src/main/java/org/apache/accumulo/core/conf/Property.java e054a5f 
  core/src/main/java/org/apache/accumulo/core/rpc/FilterTransport.java 
PRE-CREATION 
  core/src/main/java/org/apache/accumulo/core/rpc/SaslConnectionParams.java 
PRE-CREATION 
  core/src/main/java/org/apache/accumulo/core/rpc/TTimeoutTransport.java 
6eace77 
  core/src/main/java/org/apache/accumulo/core/rpc/ThriftUtil.java 09bd6c4 
  core/src/main/java/org/apache/accumulo/core/rpc/UGIAssumingTransport.java 
PRE-CREATION 
  
core/src/main/java/org/apache/accumulo/core/rpc/UGIAssumingTransportFactory.java
 PRE-CREATION 
  core/src/main/java/org/apache/accumulo/core/security/Credentials.java 525a958 
  core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java ff49bc0 
  
core/src/test/java/org/apache/accumulo/core/client/ClientConfigurationTest.java 
PRE-CREATION 
  
core/src/test/java/org/apache/accumulo/core/client/impl/ThriftTransportKeyTest.java
 PRE-CREATION 
  core/src/test/java/org/apache/accumulo/core/conf/ClientConfigurationTest.java 
40be70f 
  core/src/test/java/org/apache/accumulo/core/rpc/SaslConnectionParamsTest.java 
PRE-CREATION 
  docs/src/main/asciidoc/accumulo_user_manual.asciidoc ec8e538 
  docs/src/main/asciidoc/chapters/clients.txt 64f0e55 
  docs/src/main/asciidoc/chapters/kerberos.txt PRE-CREATION 
  
minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloClusterImpl.java
 27d6b19 
  
minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloConfigImpl.java
 26c23ed 
  pom.xml ae188a0 
  proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java 4b048eb 
  
server/base/src/main/java/org/apache/accumulo/server/AccumuloServerContext.java 
09ae4f4 
  server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java 
046cfb5 
  
server/base/src/main/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingInvocationHandler.java
 PRE-CREATION 
  
server/base/src/main/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingWrapper.java
 PRE-CREATION 
  server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java 
641c0bf 
  
server/base/src/main/java/org/apache/accumulo/server/rpc/ThriftServerType.java 
PRE-CREATION 
  
server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
 5e81018 
  
server/base/src/main/java/org/apache/accumulo/server/security/SecurityUtil.java 
29e4939 
  
server/base/src/main/java/org/apache/accumulo/server/security/SystemCredentials.java
 a59d57c 
  
server/base/src/main/java/org/apache/accumulo/server/security/handler/KerberosAuthenticator.java
 PRE-CREATION 
  
server/base/src/main/java/org/apache/accumulo/server/security/handler/KerberosAuthorizor.java
 PRE-CREATION 
  
server/base/src/main/java/org/apache/accumulo/server/security/handler/KerberosPermissionHandler.java
 PRE-CREATION 
  
server/base/src/main/java/org/apache/accumulo/server/thrift/UGIAssumingProcessor.java
 PRE-CREATION 
  server/base/src/main/java/org/apache/accumulo/server/util/Admin.java ae36f1f 
  server/base/src/main/java/org/apache/accumulo/server/util/ZooZap.java 7fdbf13 
  
server/base/src/test/java/org/apache/accumulo/server/AccumuloServerContextTest.java
 PRE-CREATION 
  
server/base/src/test/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingInvocationHandlerTest.java
 PRE-CREATION 
  
server/base/src/test/java/org/apache/accumulo/server/rpc/ThriftServerTypeTest.java
 PRE-CREATION 
  
server/base/src/test/java/org/apache/accumulo/server/security/SystemCredentialsTest.java
 4202a7e 
  server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java 
93a9a49 
  
server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogsTest.java
 f98721f 
  
server/gc/src/test/java/org/apache/accumulo/gc/SimpleGarbageCollectorTest.java 
99558b8 
  
server/gc/src/test/java/org/apache/accumulo/gc/replication/CloseWriteAheadLogReferencesTest.java
 cad1e01 
  server/master/src/main/java/org/apache/accumulo/master/Master.java 12195fa 
  
server/monitor/src/main/java/org/apache/accumulo/monitor/servlets/trace/Basic.java
 2d98fed 
  server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java 
7e33300 
  server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java 
d5c1d2f 
  
server/tserver/src/main/java/org/apache/accumulo/tserver/replication/ReplicationWorker.java
 1d20e2b 
  shell/src/main/java/org/apache/accumulo/shell/Shell.java 58308ff 
  shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java 8167ef8 
  shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java 0e72c8c 
  shell/src/test/java/org/apache/accumulo/shell/ShellOptionsJCTest.java 
PRE-CREATION 
  test/pom.xml b0a926f 
  test/src/main/java/org/apache/accumulo/test/functional/ZombieTServer.java 
eb84533 
  
test/src/main/java/org/apache/accumulo/test/performance/thrift/NullTserver.java 
2ebc2e3 
  test/src/test/java/org/apache/accumulo/harness/AccumuloClusterIT.java 8f7e1b7 
  test/src/test/java/org/apache/accumulo/harness/MiniClusterHarness.java 
abdb627 
  test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterIT.java 
2380f66 
  test/src/test/java/org/apache/accumulo/harness/TestingKdc.java PRE-CREATION 
  
test/src/test/java/org/apache/accumulo/harness/conf/AccumuloMiniClusterConfiguration.java
 11b7530 
  
test/src/test/java/org/apache/accumulo/server/security/SystemCredentialsIT.java 
fb71f5f 
  test/src/test/java/org/apache/accumulo/test/ArbitraryTablePropertiesIT.java 
aa5c164 
  test/src/test/java/org/apache/accumulo/test/CleanWalIT.java 1fcd5a4 
  test/src/test/java/org/apache/accumulo/test/functional/BatchScanSplitIT.java 
221889b 
  test/src/test/java/org/apache/accumulo/test/functional/KerberosIT.java 
PRE-CREATION 
  test/src/test/java/org/apache/accumulo/test/security/KerberosTokenTest.java 
PRE-CREATION 
  test/src/test/resources/log4j.properties cb35840 

Diff: https://reviews.apache.org/r/29386/diff/


Testing
-------

Ensure existing unit tests still function. Accumulo is functional and ran 
continuous ingest multiple times using a client with only a Kerberos identity 
(no user/password provided). Used MIT Kerberos with Apache Hadoop 2.6.0 and 
Apache ZooKeeper 3.4.5.


Thanks,

Josh Elser

Reply via email to