The last paragraph of the motivation section is a bit confusing. I guess
you want to say "This issue can be addressed if the Session class stores
the Principal object extracted from a request".

I like the approach of changing Session class to be case class
*Session(principal:
KafkaPrincipal, clientAddress: InetAddress)* under the assumption that the
Session class doesn't really need principalType of the KafkaPrincipal. I am
wondering if anyone in the open source mailing list knows why we need to
have principalType in KafkaPrincipal.

For the record, I actually prefer that we use the existing configure() to
provide properties to PrincipalBuilder instead of adding the method
*buildPrincipal(Map<String,
?> principalConfigs)* in the PrincipalBuilder interface. But this is not a
blocking issue for me.




On Wed, Feb 1, 2017 at 2:54 PM, Mayuresh Gharat <gharatmayures...@gmail.com>
wrote:

> Hi All,
>
> I have updated the KIP as per our discussion here.
> It would be great if you can take another look and let me know if there are
> any concerns.
>
> Thanks,
>
> Mayuresh
>
> On Sat, Jan 28, 2017 at 6:10 PM, Mayuresh Gharat <
> gharatmayures...@gmail.com
> > wrote:
>
> > I had offline discussions with Joel, Dong and Radai.
> >
> > I agree that we can replace the KafkaPrincipal in Session with the
> > ChannelPrincipal.
> > KafkaPrincipal can be provided as an out of box implementation.
> >
> > The only gotcha will be users will have to implement there own
> Authorizer,
> > if they decide to use there own PrincipalBuilder in kafka-acls.sh.
> >
> > I will update the KIP accordingly.
> >
> > Thanks,
> >
> > Mayuresh
> >
> > On Thu, Jan 26, 2017 at 6:01 PM, Mayuresh Gharat <
> > gharatmayures...@gmail.com> wrote:
> >
> >> Hi Dong,
> >>
> >> Thanks for the review. Please see the replies inline.
> >>
> >>
> >> 1. I am not sure we need to add the method buildPrincipal(Map<String, ?>
> >> principalConfigs). It seems that user can simply do
> >> principalBuilder.configure(...).buildPrincipal(...) without using that
> >> method.
> >> ---------> I am not sure if I understand the question.
> >> buildPrincipal(Map<String, ?> principalConfigs) will be used to build
> >> individual Principals from the passed in configs. Each Principal can be
> >> different type and the PrincipalBuilder is responsible for handling
> those
> >> configs correctly and build those Principals.
> >>
> >> 2. Is there any reason specific reason that we should put the
> >> channelPrincipal in KafkaPrincipal class instead of the Session class?
> If
> >> they work equally well to serve the use-case of this KIP, then it seems
> >> better to put this field in the Session class to avoid changing
> interface
> >> that needs to be implemented by custom principal.
> >> ---------> Doing this might be backwards incompatible as we need to
> >> preserve the existing behavior of kafka-acls.sh. Also as we have field
> of
> >> PrincipalType which can be used in future if Kafka decides to support
> >> different Principal types (currently it just says "User"), we might
> loose
> >> that functionality.
> >>
> >> Thanks,
> >>
> >> Mayuresh
> >>
> >>
> >> On Tue, Jan 24, 2017 at 3:35 PM, Dong Lin <lindon...@gmail.com> wrote:
> >>
> >>> Hey Mayuresh,
> >>>
> >>> Thanks for the KIP. I actually like the suggestions by Ismael and Jun.
> >>> Here
> >>> are my comments:
> >>>
> >>> 1. I am not sure we need to add the method buildPrincipal(Map<String,
> ?>
> >>> principalConfigs). It seems that user can simply do
> >>> principalBuilder.configure(...).buildPrincipal(...) without using that
> >>> method.
> >>>
> >>> 2. Is there any reason specific reason that we should put the
> >>> channelPrincipal in KafkaPrincipal class instead of the Session class?
> If
> >>> they work equally well to serve the use-case of this KIP, then it seems
> >>> better to put this field in the Session class to avoid changing
> interface
> >>> that needs to be implemented by custom principal.
> >>>
> >>> Dong
> >>>
> >>>
> >>> On Mon, Jan 23, 2017 at 5:55 PM, Mayuresh Gharat <
> >>> gharatmayures...@gmail.com
> >>> > wrote:
> >>>
> >>> > Hi Rajini,
> >>> >
> >>> > Thanks a lot for the review. Please see the comments inline :
> >>> >
> >>> > It feels like the goal is to expose custom Principal as an
> >>> > opaque object between PrincipalBuilder and Authorizer so that Kafka
> >>> doesn't
> >>> > really need to know anything about additional stuff added for
> >>> > customization. But kafka-acls.sh is expecting a key-value map from
> >>> which
> >>> > Principal is constructed. This is a breaking change to the
> >>> PrincipalBuilder
> >>> > interface - and I am not sure what it achieves.
> >>> > -----> kafka-acls is a commandline tool where in currently we just
> >>> specify
> >>> > the "names" of the principal that are allowed or denied.
> >>> > The Principal generated by PrincipalBuilder is still opaque and Kafka
> >>> as
> >>> > such does not need to know the details.
> >>> > The key-value map that is been passed in, will be used specifically
> by
> >>> the
> >>> > user PrincipalBuilder to create the Principal. The main motivation of
> >>> the
> >>> > KIP is that, the Principal built by the PrincipalBuilder can have
> other
> >>> > fields apart from the "name", which are ignored currently. Allowing a
> >>> > key-value pair to be passed in will enable the PrincipalBuilder to
> >>> create
> >>> > such type of Principal.
> >>> >
> >>> > 1. A custom Principal is (a) created during authentication using
> custom
> >>> > PrincipalBuilder (b) checked during authorization using
> >>> Principal.equals()
> >>> > and (c) stored in Zookeeper using Principal.toString(). Is that
> >>> correct?
> >>> > -----> The authorization will be done as per the user supplied
> >>> Authorizer.
> >>> > As not everyone might be using zookeeper for storing ACLs, its
> storage
> >>> is
> >>> > again Authorizer  implementation dependent.
> >>> >
> >>> > 2. Is the reason for the new parameters in kafka-acls.sh and the
> >>> breaking
> >>> > change in PrincipalBuilder interface to enable users to specify a
> >>> Principal
> >>> > using properties rather than create the String in 1c) themselves?
> >>> > -----> Please see the explanation above.
> >>> >
> >>> > 3. Since the purpose of the new PrincipalBuilder method
> >>> > buildPrincipal(Map<String,
> >>> > ?> principalConfigs) is to create a new Principal from command line
> >>> > parameters, perhaps Properties or Map<String, String> would be more
> >>> > appropriate?
> >>> > -----> Yes we can, but I actually prefer to keep it similar to
> >>> > configure(Map<String, ?> configs) API.
> >>> >
> >>> >
> >>> > Hi Ismael,
> >>> >
> >>> > Thanks a lot for the review. Please see the comments inline.
> >>> >
> >>> > 1. PrincipalBuilder implements Configurable and gets a map of
> >>> properties
> >>> > via the `configure` method. Do we really need a new `buildPrincipal`
> >>> method
> >>> > given that?
> >>> > ------> The configure() API will actually be used to configure the
> >>> > PrincipalBuilder in the same way as the Authorizer. The
> >>> buildPrincipal()
> >>> > API will be used by the PrincipalBuilder to build individual
> >>> principals.
> >>> > Each of these principals can be of different custom types like
> >>> > GroupPrincipals, ServicePrincipals and so on, based on the
> Map<String,
> >>> ?>
> >>> > principalConfigs provided to the buildPrincipal() API.
> >>> >
> >>> > 2. Jun suggested in the JIRA that it may make sense to pass the
> >>> > `channelPrincipal` as a field in `Session` instead of
> >>> `KafkaPrincipal`. It
> >>> > would be good to understand why this was rejected.
> >>> > -----> Now I understand what Jun meant by "Perhaps, we could extend
> the
> >>> > Session object with channelPrincipal instead.". Actually thinking
> more
> >>> on
> >>> > this, there is a PrincipalType in KafkaPrincipal, that was inserted
> >>> for a
> >>> > specific purpose when it was created for the first time, I think. I
> >>> thought
> >>> > that we should preserve it, if its useful for future.
> >>> >
> >>> > Thanks,
> >>> >
> >>> > Mayuresh
> >>> >
> >>> >
> >>> >
> >>> >
> >>> >
> >>> > On Mon, Jan 23, 2017 at 8:56 AM, Ismael Juma <ism...@juma.me.uk>
> >>> wrote:
> >>> >
> >>> > > Hi Mayuresh,
> >>> > >
> >>> > > Thanks for updating the KIP. A couple of questions:
> >>> > >
> >>> > > 1. PrincipalBuilder implements Configurable and gets a map of
> >>> properties
> >>> > > via the `configure` method. Do we really need a new
> `buildPrincipal`
> >>> > method
> >>> > > given that?
> >>> > >
> >>> > > 2. Jun suggested in the JIRA that it may make sense to pass the
> >>> > > `channelPrincipal` as a field in `Session` instead of
> >>> `KafkaPrincipal`.
> >>> > It
> >>> > > would be good to understand why this was rejected.
> >>> > >
> >>> > > Ismael
> >>> > >
> >>> > > On Thu, Jan 12, 2017 at 7:07 PM, Ismael Juma <ism...@juma.me.uk>
> >>> wrote:
> >>> > >
> >>> > > > Hi Mayuresh,
> >>> > > >
> >>> > > > Thanks for the KIP. A quick comment before I do a more detailed
> >>> > analysis,
> >>> > > > the KIP says:
> >>> > > >
> >>> > > > `This KIP is a pure addition to existing functionality and does
> not
> >>> > > > include any backward incompatible changes.`
> >>> > > >
> >>> > > > However, the KIP is proposing the addition of a method to the
> >>> > > > PrincipalBuilder pluggable interface, which is not a compatible
> >>> change.
> >>> > > > Existing implementations would no longer compile, for example. It
> >>> would
> >>> > > be
> >>> > > > good to make this clear in the KIP.
> >>> > > >
> >>> > > > Ismael
> >>> > > >
> >>> > > > On Thu, Jan 12, 2017 at 5:44 PM, Mayuresh Gharat <
> >>> > > > gharatmayures...@gmail.com> wrote:
> >>> > > >
> >>> > > >> Hi all.
> >>> > > >>
> >>> > > >> We created KIP-111 to propose that Kafka should preserve the
> >>> Principal
> >>> > > >> generated by the PrincipalBuilder while processing the request
> >>> > received
> >>> > > on
> >>> > > >> socket channel, on the broker.
> >>> > > >>
> >>> > > >> Please find the KIP wiki in the link
> >>> > > >> https://cwiki.apache.org/confluence/pages/viewpage.
> >>> > > action?pageId=67638388
> >>> > > >> .
> >>> > > >> We would love to hear your comments and suggestions.
> >>> > > >>
> >>> > > >>
> >>> > > >> Thanks,
> >>> > > >>
> >>> > > >> Mayuresh
> >>> > > >>
> >>> > > >
> >>> > > >
> >>> > >
> >>> >
> >>> >
> >>> >
> >>> > --
> >>> > -Regards,
> >>> > Mayuresh R. Gharat
> >>> > (862) 250-7125
> >>> >
> >>>
> >>
> >>
> >>
> >> --
> >> -Regards,
> >> Mayuresh R. Gharat
> >> (862) 250-7125
> >>
> >
> >
> >
> > --
> > -Regards,
> > Mayuresh R. Gharat
> > (862) 250-7125
> >
>
>
>
> --
> -Regards,
> Mayuresh R. Gharat
> (862) 250-7125
>

Reply via email to