Page1 © Hortonworks Inc. 2014
Kafka Security
SSL, Kerberos & Authorization
Page2 © Hortonworks Inc. 2014
Page3 © Hortonworks Inc. 2014
Who Are We?
Sriharsha Chintalapani
Apache Kafka Committer
Apache Storm Committer & PMC
Parth Brahmbhatt
Apache Kafka Contributor
Apache Storm Committer & PMC
Page4 © Hortonworks Inc. 2014
Kafka Security
• SSL ( wire encryption)
• SASL ( Kerberos )
• Authorizer (Topic/Host/User level Authorization)
Page5 © Hortonworks Inc. 2014
SSL
Page6 © Hortonworks Inc. 2014
Kafka Security – SSL
• Kafka networking
• A TCP server listening for incoming connections
• Uses Non-blocking network I/O
• When a client connects to a server it opens a socket channel on
server side and hands it over selector.
• Selector gets polled in a loop. It will wake up whenever there are
connections ready with data to be read or write.
• Long – living connections , once established it will be used to
read/write data until client closed or an exception occurs.
Page7 © Hortonworks Inc. 2014
Kafka Security – SSL
• Kafka networking
Page8 © Hortonworks Inc. 2014
Kafka Security – SSL
• Kafka SSL / SASL requirements
• No User-level API changes to clients
• Retain length-encoded Kafka protocols
• Client must authenticate before sending/receiving requests
• Kafka Channel
• Instead of using socket channel, we added KafkaChannel
which consists a TransportLayer, Authenticator.
Page9 © Hortonworks Inc. 2014
Kafka Security – SSL
• TransportLayer
• Handles network level byte transfers
• PlaintextTransportLayer
• SSLTransportLayer
• Authenticator
• A pluggable interface for authentication implementations
• SaslAuthenticator – Provides SASL handshake and
authenticated user.
Page10 © Hortonworks Inc. 2014
Kafka Security – SSL
KafkaChannel
TransportLayer
Authenticator
Kafka Server
handshake
authenticate
Page11 © Hortonworks Inc. 2014
Kafka Security – SSL
• SSL - Handshake
• Kafka Server configures with Keystore and Truststore
• Kafka Client also needs a truststore with Kafka Server
certificate added to the truststore.
• Keystore configuration on client side is optional unless user wants
client side authentication.
Page12 © Hortonworks Inc. 2014
Kafka Security – SSL
• KafkaChannel
• Before write or read application data , checks if the
channel.ready()
• A channel is ready if its established a connection and
authenticated. No-OP of PlaintextTransportLayer
• If a channel is not ready it goes through channel.prepare()
which internally calls transportLayer.handshake()
Page13 © Hortonworks Inc. 2014
Kafka Security – SSL
• SSLTransportLayer
• Before sending any application data, both client and server
needs to go though SSL handshake
• SSLTransportLayer uses SSLEngine to establish a non-
blocking handshake.
• SSLEngine provides a state machine to go through several
steps of SSLhandshake
Page14 © Hortonworks Inc. 2014
Kafka Security – SSL
Page15 © Hortonworks Inc. 2014
Kafka Security – SSL
• SSLTransportLayer
• SocketChannel read
• Returns encrypted data
• Decrypts the data and returns the length of the data from Kafka protocols
• SocketChannel Write
• Writes encrypted data onto channel
• Regular socketChannel returns length of the data written to socket.
• Incase of SSL since we encrypt the data we can’t return exact length written to
socket which will be more than actual data
• Its important to keep track length of data written to network. This signifies if we
successfully written data to the network or not and move on to next request.
Page16 © Hortonworks Inc. 2014
Kafka Security – SSL
• Principal Builder
• SSLTransportLayer gives hostname as authenticated user
• X509Certificate has lot more information about a client
identity.
• PrincipalBuilder provides interface to plug in a custom
PrincipalBuilder that has access to X509Certificate and can
construct a user string out of it.
• Authenticator can use this custom principal to add ACLs
Page17 © Hortonworks Inc. 2014
Kafka Security – SSL
• Performance Impact
• Decrease in throughput by 20%.
• Latency increased by 30 %
• KAFKA-2481 (Ben Stopford) has more details
Page18 © Hortonworks Inc. 2014
Kafka Security – SSL
• listeners=SSL://host.name:port
• ssl.keystore.location
• ssl.keystore.password
• ssl.key.password
• ssl.truststore.location
• ssl.truststore.password
• security.inter.broker.protocol (optional)
Page19 © Hortonworks Inc. 2014
SASL/ Kerberos
Page20 © Hortonworks Inc. 2014
Kafka Security – SASL
• Simple Authentication and Security Layer, or SASL
• Provides flexibility in using Login Mechanisms
• One can use Kerberos , LDAP or simple passwords to authenticate.
• JAAS Login
• Before client & server can handshake , they need to authenticate with
Kerberos or other Identity Provider.
• JAAS provides a pluggable way of providing user credentials. One can
easily add LDAP or other mechanism just by changing a config file.
Page21 © Hortonworks Inc. 2014
Kafka Security – SASL
• JAAS Config file
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName="kafka"
keyTab="/vagrant/keytabs/kafka1.keytab"
principal="kafka/host@EXAMPLE.COM";
};
KafkaConfig {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName="kafka"
keyTab="/vagrant/keytabs/client1.keytab"
principal=”client/host@EXAMPLE.COM";
};
Page22 © Hortonworks Inc. 2014
Kafka Security – SASL
• SASL Authenticator
• Uses configured login credentials of JAAS config.
• Non-blocking handshake to establish clients identity
• Once handshake established , Kerberos principal name will be the
authenticated user.
• Can be layered with SSL for wire encryption or Plaintext incase of wire
encryption not needed.
• SASL can provide encryption but it has huge performance penalties
Page23 © Hortonworks Inc. 2014
Kafka Security – SASL
Client Broker
Connection
Mechanism list
Selected Mechanism & sasl data
Evaluate and Response
Sasl data
Client Authenticated
Page24 © Hortonworks Inc. 2014
Kafka Security – SASL
• Pass JAAS config file as jvm parameter
• -Djava.security.auth.login.config
Page25 © Hortonworks Inc. 2014
Kafka Security – Resources
• SSL
• https://cwiki.apache.org/confluence/display/KAFKA/Deploying+SSL+for+Kafka
• SASL
• https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=61326390
• Vagrant Setup
• SASL
• https://github.com/harshach/kafka-vagrant/tree/master/
Page26 © Hortonworks Inc. 2014
Authorization
Page27 © Hortonworks Inc. 2014
Authorizer
• Controls who can do what
• Pluggable
• Acl based approach
Page28 © Hortonworks Inc. 2014
Acl
• Alice is Allowed to Read from Orders-topic from Host-1
Principal Permission Operation Resource Host
Alice Allow Read Orders Host-1
Page29 © Hortonworks Inc. 2014
Principal
• PrincipalType:Name
• Supported types: User and Group
• Extensible so users can add their own types
• Wild Card User:*
Page30 © Hortonworks Inc. 2014
Operation
• Read, Write, Create, Delete, Alter, Describe,
ClusterAction, All
• Each API as an Operation VS Classification that maps to
APIs.
Page31 © Hortonworks Inc. 2014
Resource
• ResourceType:ResourceName
• Topic, Cluster and ConsumerGroup
• Wild card resource ResourceType:*
Page32 © Hortonworks Inc. 2014
Permissions
• Allow and Deny
• Anyone without an explicit Allow ACL is denied
• Then why do we have Deny?
• Deny works as negation
• Deny takes precedence over Allow Acls
Page33 © Hortonworks Inc. 2014
Hosts
• Why provide this granularity?
• Allows authorizer to provide firewall type security even in
non secure environment.
• * as Wild card.
Page34 © Hortonworks Inc. 2014
Configuration
• Authorizer class
• Super users
• Authorizer properties
• Default behavior for resources with no ACLs
Page35 © Hortonworks Inc. 2014
SimpleAclAuthorizer
• Out of box authorizer implementation.
• Stores all of its ACLs in zookeeper.
• In built ACL cache to avoid performance penalty.
• Provides authorizer audit log.
Page38 © Hortonworks Inc. 2014
CLI
• Add, Remove and List acls
• Convenience options:
--producer and --consumer.
Page39 © Hortonworks Inc. 2014
Ranger Policy
Page40 © Hortonworks Inc. 2014
Ranger Auditing
Page41 © Hortonworks Inc. 2014
Ranger ACL management Audit
Page42 © Hortonworks Inc. 2014
Unsecure zookeeper
Page43 © Hortonworks Inc. 2014
Zookeeper
• Kafka’s metadata store
• Has its own security mechanism that supports SASL and
MD5-DIGEST for establishing identity and ACL based
authorization
• Create , Delete directly interacts with zookeeper
Page44 © Hortonworks Inc. 2014
Securing zookeeper
• Acl on zk nodes: user:cdrwa
• Zookeeper.set.acl
• ZkSecurityMigrator script
• Credit where its due: Flavio Junqueira
Page45 © Hortonworks Inc. 2014
Client JAAS
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName="zookeeper"
keyTab="/vagrant/keytabs/kafka.keytab"
principal="kafka/kafka@WITZEND.COM";
};
Page46 © Hortonworks Inc. 2014
Future
• KIP-4: Move everything to server side, no direct
interactions with zookeeper
• Group Support (PR already available)
• Pluggable Auditor
Page47 © Hortonworks Inc. 2014
Summary
• SSL for wire encryption
• Sasl for authentication
• Authorization
• Secure Zookeeper
Thanks to the community for participation.

Kafka Security

  • 1.
    Page1 © HortonworksInc. 2014 Kafka Security SSL, Kerberos & Authorization
  • 2.
  • 3.
    Page3 © HortonworksInc. 2014 Who Are We? Sriharsha Chintalapani Apache Kafka Committer Apache Storm Committer & PMC Parth Brahmbhatt Apache Kafka Contributor Apache Storm Committer & PMC
  • 4.
    Page4 © HortonworksInc. 2014 Kafka Security • SSL ( wire encryption) • SASL ( Kerberos ) • Authorizer (Topic/Host/User level Authorization)
  • 5.
    Page5 © HortonworksInc. 2014 SSL
  • 6.
    Page6 © HortonworksInc. 2014 Kafka Security – SSL • Kafka networking • A TCP server listening for incoming connections • Uses Non-blocking network I/O • When a client connects to a server it opens a socket channel on server side and hands it over selector. • Selector gets polled in a loop. It will wake up whenever there are connections ready with data to be read or write. • Long – living connections , once established it will be used to read/write data until client closed or an exception occurs.
  • 7.
    Page7 © HortonworksInc. 2014 Kafka Security – SSL • Kafka networking
  • 8.
    Page8 © HortonworksInc. 2014 Kafka Security – SSL • Kafka SSL / SASL requirements • No User-level API changes to clients • Retain length-encoded Kafka protocols • Client must authenticate before sending/receiving requests • Kafka Channel • Instead of using socket channel, we added KafkaChannel which consists a TransportLayer, Authenticator.
  • 9.
    Page9 © HortonworksInc. 2014 Kafka Security – SSL • TransportLayer • Handles network level byte transfers • PlaintextTransportLayer • SSLTransportLayer • Authenticator • A pluggable interface for authentication implementations • SaslAuthenticator – Provides SASL handshake and authenticated user.
  • 10.
    Page10 © HortonworksInc. 2014 Kafka Security – SSL KafkaChannel TransportLayer Authenticator Kafka Server handshake authenticate
  • 11.
    Page11 © HortonworksInc. 2014 Kafka Security – SSL • SSL - Handshake • Kafka Server configures with Keystore and Truststore • Kafka Client also needs a truststore with Kafka Server certificate added to the truststore. • Keystore configuration on client side is optional unless user wants client side authentication.
  • 12.
    Page12 © HortonworksInc. 2014 Kafka Security – SSL • KafkaChannel • Before write or read application data , checks if the channel.ready() • A channel is ready if its established a connection and authenticated. No-OP of PlaintextTransportLayer • If a channel is not ready it goes through channel.prepare() which internally calls transportLayer.handshake()
  • 13.
    Page13 © HortonworksInc. 2014 Kafka Security – SSL • SSLTransportLayer • Before sending any application data, both client and server needs to go though SSL handshake • SSLTransportLayer uses SSLEngine to establish a non- blocking handshake. • SSLEngine provides a state machine to go through several steps of SSLhandshake
  • 14.
    Page14 © HortonworksInc. 2014 Kafka Security – SSL
  • 15.
    Page15 © HortonworksInc. 2014 Kafka Security – SSL • SSLTransportLayer • SocketChannel read • Returns encrypted data • Decrypts the data and returns the length of the data from Kafka protocols • SocketChannel Write • Writes encrypted data onto channel • Regular socketChannel returns length of the data written to socket. • Incase of SSL since we encrypt the data we can’t return exact length written to socket which will be more than actual data • Its important to keep track length of data written to network. This signifies if we successfully written data to the network or not and move on to next request.
  • 16.
    Page16 © HortonworksInc. 2014 Kafka Security – SSL • Principal Builder • SSLTransportLayer gives hostname as authenticated user • X509Certificate has lot more information about a client identity. • PrincipalBuilder provides interface to plug in a custom PrincipalBuilder that has access to X509Certificate and can construct a user string out of it. • Authenticator can use this custom principal to add ACLs
  • 17.
    Page17 © HortonworksInc. 2014 Kafka Security – SSL • Performance Impact • Decrease in throughput by 20%. • Latency increased by 30 % • KAFKA-2481 (Ben Stopford) has more details
  • 18.
    Page18 © HortonworksInc. 2014 Kafka Security – SSL • listeners=SSL://host.name:port • ssl.keystore.location • ssl.keystore.password • ssl.key.password • ssl.truststore.location • ssl.truststore.password • security.inter.broker.protocol (optional)
  • 19.
    Page19 © HortonworksInc. 2014 SASL/ Kerberos
  • 20.
    Page20 © HortonworksInc. 2014 Kafka Security – SASL • Simple Authentication and Security Layer, or SASL • Provides flexibility in using Login Mechanisms • One can use Kerberos , LDAP or simple passwords to authenticate. • JAAS Login • Before client & server can handshake , they need to authenticate with Kerberos or other Identity Provider. • JAAS provides a pluggable way of providing user credentials. One can easily add LDAP or other mechanism just by changing a config file.
  • 21.
    Page21 © HortonworksInc. 2014 Kafka Security – SASL • JAAS Config file KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true serviceName="kafka" keyTab="/vagrant/keytabs/kafka1.keytab" principal="kafka/host@EXAMPLE.COM"; }; KafkaConfig { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true serviceName="kafka" keyTab="/vagrant/keytabs/client1.keytab" principal=”client/host@EXAMPLE.COM"; };
  • 22.
    Page22 © HortonworksInc. 2014 Kafka Security – SASL • SASL Authenticator • Uses configured login credentials of JAAS config. • Non-blocking handshake to establish clients identity • Once handshake established , Kerberos principal name will be the authenticated user. • Can be layered with SSL for wire encryption or Plaintext incase of wire encryption not needed. • SASL can provide encryption but it has huge performance penalties
  • 23.
    Page23 © HortonworksInc. 2014 Kafka Security – SASL Client Broker Connection Mechanism list Selected Mechanism & sasl data Evaluate and Response Sasl data Client Authenticated
  • 24.
    Page24 © HortonworksInc. 2014 Kafka Security – SASL • Pass JAAS config file as jvm parameter • -Djava.security.auth.login.config
  • 25.
    Page25 © HortonworksInc. 2014 Kafka Security – Resources • SSL • https://cwiki.apache.org/confluence/display/KAFKA/Deploying+SSL+for+Kafka • SASL • https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=61326390 • Vagrant Setup • SASL • https://github.com/harshach/kafka-vagrant/tree/master/
  • 26.
    Page26 © HortonworksInc. 2014 Authorization
  • 27.
    Page27 © HortonworksInc. 2014 Authorizer • Controls who can do what • Pluggable • Acl based approach
  • 28.
    Page28 © HortonworksInc. 2014 Acl • Alice is Allowed to Read from Orders-topic from Host-1 Principal Permission Operation Resource Host Alice Allow Read Orders Host-1
  • 29.
    Page29 © HortonworksInc. 2014 Principal • PrincipalType:Name • Supported types: User and Group • Extensible so users can add their own types • Wild Card User:*
  • 30.
    Page30 © HortonworksInc. 2014 Operation • Read, Write, Create, Delete, Alter, Describe, ClusterAction, All • Each API as an Operation VS Classification that maps to APIs.
  • 31.
    Page31 © HortonworksInc. 2014 Resource • ResourceType:ResourceName • Topic, Cluster and ConsumerGroup • Wild card resource ResourceType:*
  • 32.
    Page32 © HortonworksInc. 2014 Permissions • Allow and Deny • Anyone without an explicit Allow ACL is denied • Then why do we have Deny? • Deny works as negation • Deny takes precedence over Allow Acls
  • 33.
    Page33 © HortonworksInc. 2014 Hosts • Why provide this granularity? • Allows authorizer to provide firewall type security even in non secure environment. • * as Wild card.
  • 34.
    Page34 © HortonworksInc. 2014 Configuration • Authorizer class • Super users • Authorizer properties • Default behavior for resources with no ACLs
  • 35.
    Page35 © HortonworksInc. 2014 SimpleAclAuthorizer • Out of box authorizer implementation. • Stores all of its ACLs in zookeeper. • In built ACL cache to avoid performance penalty. • Provides authorizer audit log.
  • 36.
    Page38 © HortonworksInc. 2014 CLI • Add, Remove and List acls • Convenience options: --producer and --consumer.
  • 37.
    Page39 © HortonworksInc. 2014 Ranger Policy
  • 38.
    Page40 © HortonworksInc. 2014 Ranger Auditing
  • 39.
    Page41 © HortonworksInc. 2014 Ranger ACL management Audit
  • 40.
    Page42 © HortonworksInc. 2014 Unsecure zookeeper
  • 41.
    Page43 © HortonworksInc. 2014 Zookeeper • Kafka’s metadata store • Has its own security mechanism that supports SASL and MD5-DIGEST for establishing identity and ACL based authorization • Create , Delete directly interacts with zookeeper
  • 42.
    Page44 © HortonworksInc. 2014 Securing zookeeper • Acl on zk nodes: user:cdrwa • Zookeeper.set.acl • ZkSecurityMigrator script • Credit where its due: Flavio Junqueira
  • 43.
    Page45 © HortonworksInc. 2014 Client JAAS Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true serviceName="zookeeper" keyTab="/vagrant/keytabs/kafka.keytab" principal="kafka/kafka@WITZEND.COM"; };
  • 44.
    Page46 © HortonworksInc. 2014 Future • KIP-4: Move everything to server side, no direct interactions with zookeeper • Group Support (PR already available) • Pluggable Auditor
  • 45.
    Page47 © HortonworksInc. 2014 Summary • SSL for wire encryption • Sasl for authentication • Authorization • Secure Zookeeper Thanks to the community for participation.