Rajini, Thanks for the changes to the KIP. It looks good to me. I think we can move to voting. Thanks, Harsha
On Mon, Feb 29, 2016, at 12:43 AM, Rajini Sivaram wrote: > I have added some more detail to the KIP based on the discussion in the > last KIP meeting to simplify support for multiple mechanisms. Have also > changed the property names to reflect this. > > Also updated the PR in https://issues.apache.org/jira/browse/KAFKA-3149 > to > reflect the KIP. > > Any feedback is appreciated. > > > On Tue, Feb 23, 2016 at 9:36 PM, Rajini Sivaram < > rajinisiva...@googlemail.com> wrote: > > > I have updated the KIP based on the discussion in the KIP meeting today. > > > > Comments and feedback are welcome. > > > > On Wed, Feb 3, 2016 at 7:20 PM, Rajini Sivaram < > > rajinisiva...@googlemail.com> wrote: > > > >> Hi Harsha, > >> > >> Thank you for the review. Can you clarify - I think you are saying that > >> the client should send its mechanism over the wire to the server. Is that > >> correct? The exchange is slightly different in the KIP (the PR matches the > >> KIP) from the one you described to enable interoperability with 0.9.0.0. > >> > >> > >> On Wed, Feb 3, 2016 at 1:56 PM, Harsha <m...@harsha.io> wrote: > >> > >>> Rajini, > >>> I looked at the PR you have. I think its better with your > >>> earlier approach rather than extending the protocol. > >>> What I was thinking initially is, Broker has a config option of say > >>> sasl.mechanism = GSSAPI, PLAIN > >>> and the client can have similar config of sasl.mechanism=PLAIN. Client > >>> can send its sasl mechanism before the handshake starts and if the > >>> broker accepts that particular mechanism than it can go ahead with > >>> handshake otherwise return a error saying that the mechanism not > >>> allowed. > >>> > >>> Thanks, > >>> Harsha > >>> > >>> On Wed, Feb 3, 2016, at 04:58 AM, Rajini Sivaram wrote: > >>> > A slightly different approach for supporting different SASL mechanisms > >>> > within a broker is to allow the same "*security protocol*" to be used > >>> on > >>> > different ports with different configuration options. An advantage of > >>> > this > >>> > approach is that it extends the configurability of not just SASL, but > >>> any > >>> > protocol. For instance, it would enable the use of SSL with mutual > >>> client > >>> > authentication on one port or different certificate chains on another. > >>> > And > >>> > it avoids the need for SASL mechanism negotiation. > >>> > > >>> > Kafka would have the same "*security protocols" *defined as today, but > >>> > with > >>> > (a single) configurable SASL mechanism. To have different > >>> configurations > >>> > of > >>> > a protocol within a broker, users can define new protocol names which > >>> are > >>> > configured versions of existing protocols, perhaps using just > >>> > configuration > >>> > entries and no additional code. > >>> > > >>> > For example: > >>> > > >>> > A single mechanism broker would be configured as: > >>> > > >>> > listeners=SASL_SSL://:9092 > >>> > sasl.mechanism=GSSAPI > >>> > sasl.kerberos.class.name=kafka > >>> > ... > >>> > > >>> > > >>> > And a multi-mechanism broker would be configured as: > >>> > > >>> > listeners=gssapi://:9092,plain://:9093,custom://:9094 > >>> > gssapi.security.protocol=SASL_SSL > >>> > gssapi.sasl.mechanism=GSSAPI > >>> > gssapi.sasl.kerberos.class.name=kafka > >>> > ... > >>> > plain.security.protocol=SASL_SSL > >>> > plain.sasl.mechanism=PLAIN > >>> > .. > >>> > custom.security.protocol=SASL_PLAINTEXT > >>> > custom.sasl.mechanism=CUSTOM > >>> > custom.sasl.callback.handler.class=example.CustomCallbackHandler > >>> > > >>> > > >>> > > >>> > This is still a big change because it affects the currently fixed > >>> > enumeration of security protocol definitions, but one that is perhaps > >>> > more > >>> > flexible than defining every new SASL mechanism as a new security > >>> > protocol. > >>> > > >>> > Thoughts? > >>> > > >>> > > >>> > On Tue, Feb 2, 2016 at 12:20 PM, Rajini Sivaram < > >>> > rajinisiva...@googlemail.com> wrote: > >>> > > >>> > > As Ismael has said, we do not have a requirement to support multiple > >>> > > protocols in a broker. But I agree with Jun's observation that some > >>> > > companies might want to support a different authentication mechanism > >>> for > >>> > > internal users or partners. For instance, we do use two different > >>> > > authentication mechanisms, it just so happens that we are able to use > >>> > > certificate-based authentication for internal users, and hence don't > >>> > > require multiple SASL mechanisms in a broker. > >>> > > > >>> > > As Tao has pointed out, mechanism negotiation is a common usage > >>> pattern. > >>> > > Many existing protocols that support SASL do already use this > >>> pattern. AMQP > >>> > > ( > >>> > > > >>> http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-security-v1.0-os.html#type-sasl-mechanisms > >>> ), > >>> > > which, as a messaging protocol maybe closer to Kafka in use cases > >>> than > >>> > > Zookeeper, is an example. Other examples where the client negotiates > >>> or > >>> > > sends SASL mechanism to server include ACAP that is used as an > >>> example in > >>> > > the SASL RFCs, POP3, LDAP, SMTP etc. This is not to say that Kafka > >>> > > shouldn't use a different type of mechanism selection that fits > >>> better with > >>> > > the existing Kafka design. Just that negotiation is a common pattern > >>> and > >>> > > since we typically turn on javax.net.debug to debug TLS negotiation > >>> issues, > >>> > > having to use Kafka logging to debug SASL negotiation issues is not > >>> that > >>> > > dissimilar. > >>> > > > >>> > > > >>> > > On Tue, Feb 2, 2016 at 6:12 AM, tao xiao <xiaotao...@gmail.com> > >>> wrote: > >>> > > > >>> > >> I am the author of KIP-44. I hope my use case will add some values > >>> to this > >>> > >> discussion. The reason I raised KIP44 is that I want to be able to > >>> > >> implement a custom security protocol that can fulfill the need of my > >>> > >> company. As pointed out by Ismael KIP-43 now supports a pluggable > >>> way to > >>> > >> inject custom security provider to SASL I think it is enough to > >>> cover the > >>> > >> use case I have and address the concerns raised in KIP-44. > >>> > >> > >>> > >> For multiple security protocols support simultaneously it is not > >>> needed in > >>> > >> my use case and I don't foresee it is needed in the future but as i > >>> said > >>> > >> this is my use case only there may be other use cases that need it. > >>> But if > >>> > >> we want to support it in the future I prefer to get it right at the > >>> first > >>> > >> place given the fact that security protocol is an ENUM and if we > >>> stick to > >>> > >> that implementation it is very hard to extend in the future when we > >>> decide > >>> > >> multiple security protocols is needed. > >>> > >> > >>> > >> Protocol negotiation is a very common usage pattern in security > >>> domain. As > >>> > >> suggested in Java SASL doc > >>> > >> > >>> > >> > >>> http://docs.oracle.com/javase/7/docs/technotes/guides/security/sasl/sasl-refguide.html > >>> > >> client > >>> > >> first sends out a packet to server and server responds with a list > >>> of > >>> > >> mechanisms it supports. This is very similar to SSL/TLS negotiation. > >>> > >> > >>> > >> On Tue, 2 Feb 2016 at 06:39 Ismael Juma <ism...@juma.me.uk> wrote: > >>> > >> > >>> > >> > On Mon, Feb 1, 2016 at 7:04 PM, Gwen Shapira <g...@confluent.io> > >>> wrote: > >>> > >> > > >>> > >> > > Looking at "existing solutions", it looks like Zookeeper allows > >>> > >> plugging > >>> > >> > in > >>> > >> > > any SASL mechanism, but the server will only support one > >>> mechanism at > >>> > >> a > >>> > >> > > time. > >>> > >> > > > >>> > >> > > >>> > >> > This was the original proposal from Rajini as that is enough for > >>> their > >>> > >> > needs. > >>> > >> > > >>> > >> > > >>> > >> > > If this is good enough for our use-case (do we actually need to > >>> > >> support > >>> > >> > > multiple mechanisms at once?), it will simplify life a lot for > >>> us ( > >>> > >> > > > >>> > >> > >>> https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zookeeper+and+SASL > >>> > >> > ) > >>> > >> > > > >>> > >> > > >>> > >> > The current thinking is that it would be useful to support > >>> multiple SASL > >>> > >> > mechanisms simultaneously. In the KIP meeting, Jun mentioned that > >>> > >> companies > >>> > >> > sometimes support additional authentication mechanisms for > >>> partners, for > >>> > >> > example. It does make things more complex, as you say, so we need > >>> to be > >>> > >> > sure the complexity is worth it. > >>> > >> > > >>> > >> > Two more points: > >>> > >> > > >>> > >> > 1. It has been suggested that custom security protocol support is > >>> > >> needed by > >>> > >> > some (KIP-44). Rajini enhanced KIP-43 so that a SASL mechanism > >>> with a > >>> > >> > custom provider can be used for this purpose instead. Given this, > >>> it > >>> > >> seems > >>> > >> > a bit inconsistent and restrictive not to allow multiple SASL > >>> mechanisms > >>> > >> > simultaneously (we do allow SSL and SASL authentication > >>> simultaneously, > >>> > >> > after all). > >>> > >> > > >>> > >> > 2. The other option would be to support a single SASL mechanism > >>> > >> > simultaneously to start with and then extend this to multiple > >>> mechanisms > >>> > >> > simultaneously later (if and when needed). It seems like it would > >>> be > >>> > >> harder > >>> > >> > to support the latter in the future if we go down this route, but > >>> maybe > >>> > >> > there are ways around this. > >>> > >> > > >>> > >> > Thoughts? > >>> > >> > > >>> > >> > Ismael > >>> > >> > > >>> > >> > >>> > > > >>> > > > >>> > > > >>> > > -- > >>> > > Regards, > >>> > > > >>> > > Rajini > >>> > > > >>> > > >>> > > >>> > > >>> > -- > >>> > Regards, > >>> > > >>> > Rajini > >>> > >> > >> > >> > >> -- > >> Regards, > >> > >> Rajini > >> > > > > > > > > -- > > Regards, > > > > Rajini > > > > > > -- > Regards, > > Rajini