Hi,

In the first phase, we are trying implement the components/design discussed
in the KIP.
Yes, we can definitely improve some of the components to be more
extensible.
We are planning to implement in future KIPs/PRs.

Thanks


On Fri, Oct 27, 2017 at 8:22 PM, Sönke Liebau <
soenke.lie...@opencore.com.invalid> wrote:

> Hi Manikumar,
>
> I've looked over the KIP and had a quick look at the code in the PR as
> well. In principle I think this would help Peter along depending on how
> plugable some of the components are. Since Peter wants to generate Tokens
> not in Kafka but in an external System the entire part in Kafka of
> generating DelegationTokens would simply not be used, which I think would
> be fine. To validate externally generated tokens an option to substitute
> for example the TokenCache for a custom implementation or/and substitute
> the method of authenticating a delegation token for a custom class.
>
> Apologies for asking questions I could look up in the code myself, but at a
> first glance I haven't seen any indications of this token system being
> extendable, do you plan to allow extending the system to different external
> token providers? OAuth would come to mind as a fairly wide spread candidate
> that could probably be implemented fairly easily.
>
> Kind regards,
> Sönke
>
> On Fri, Oct 27, 2017 at 11:17 AM, Manikumar <manikumar.re...@gmail.com>
> wrote:
>
> > Hi,
> >
> > We have a accepted KIP for adding delegation token support for Kafka.
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > 48+Delegation+token+support+for+Kafka
> >
> > currently the PR is under review process. Maybe this can used be as
> > starting point for your requirement.
> >
> > https://github.com/apache/kafka/pull/3616
> >
> >
> >
> > On Fri, Oct 27, 2017 at 2:34 PM, Sönke Liebau <
> > soenke.lie...@opencore.com.invalid> wrote:
> >
> > > Hi Peter,
> > >
> > > thanks for the explanation, it all makes sense now :)
> > >
> > > I can't say that I immediately see an easy way forward though to be
> > honest.
> > > The big issue, I think, is getting the token to Kafka (and hopefully
> > there
> > > is an easy way that I simply don't know of and someone will correct
> me) -
> > > implementing a custom principalbuilder and authorizer should be almost
> > > trivial.
> > >
> > > If transmitting the token as part of the ssl certificate or a Kerberos
> > > ticket is out though the air gets a bit thin if you don't want to
> > maintain
> > > your own fork of Kafka. The only potential solution that I can come up
> > with
> > > is to piggyback on SASL and provide your own LoginModule in Kafka's
> jaas
> > > file. If you use the SASL_SSL endpoint certificate checking should
> still
> > > have occured before the SASL handshake is initialized, so you
> > authenticated
> > > the user at that point. You could then use that handshake to transmit
> > your
> > > token, have your custom principalbuilder extract the topics from that
> and
> > > your custom authorizer authorize based on the extracted topicnames.
> > > A word of caution though: this is based on a few minutes looking at
> code
> > > and my dangerous half knowledge of SASL, so there are any number of
> > things
> > > that could make this impossible, either with SASL or in the Kafka
> > codebase
> > > itself. Might be a direction to explore though.
> > >
> > > Hopefully that makes sense and is targeted at least in the vicinity of
> > whet
> > > you are looking for?
> > >
> > > Kind regards,
> > > Sönke
> > >
> > > On Fri, Oct 27, 2017 at 9:33 AM, Postmann, P. (Peter) <
> > > peter.postm...@ing.com.invalid> wrote:
> > >
> > > > Hi Sönke,
> > > >
> > > > Thanks for your feedback, sorry that I didn’t gave you the whole
> > picture
> > > > in first place:
> > > >
> > > > We are using an Architecture, which tries to avoid to fetch or pull
> > > > anything from a 3rd party during runtime. Therefore we are using
> > > > self-contained tokens and client side load balancing with a micro
> > service
> > > > alike architecture.
> > > >
> > > > In this architecture we have two tokens:
> > > > - the manifest which enabled services to provide APIs
> > > > - the peer token which enables services to call APIs
> > > >
> > > > API providers publish their APIs in a Portal. API consumers subscribe
> > to
> > > > those APIs. The portal generates a manifest for the provider and a
> peer
> > > > token for the consumer. Both tokens contain a list of endpoints and
> are
> > > > signed by the portal. The tokens are valid for a certain amount of
> > time.
> > > >
> > > > Furthermore we use a Service Registry to discover those services. The
> > > flow
> > > > works as follows:
> > > >
> > > > - A service instance registers itself (endpoint --> IP:Port) at the
> > > > Service Discovery (SD) using the manifest.
> > > > - A client queries SD for instances of a specific Endpoint and
> > receives a
> > > > list of IP:Port combinations
> > > > - The client connects to the service and provides its peer token
> > > >
> > > > The client and the service use mutual TLS for authentication and the
> > peer
> > > > token for authorization. The token is signed to check its integrity
> and
> > > > linked to the CN of the client certificate to check its validity (and
> > > > prevent forwarding of the token).
> > > >
> > > > The benefit is, that we do not have any critical runtime
> dependencies:
> > SD
> > > > results can be cached and the tokens are valid for a certain amount
> of
> > > > time. A client can perform client side load balancing and call a
> > service
> > > > even if the SD or the Portal are currently unavailable. Furthermore
> we
> > > > avoid bottlenecks like load balancers.
> > > >
> > > > If you have 20mins time, our Principal Architect for API Design gave
> a
> > > > talk about this: https://www.youtube.com/watch?v=Yke6Vut2Shc
> > > >
> > > > We want to use the same mechanism with Kafka:
> > > > - Connect via Mutual TLS
> > > > - Provide a peer token which contains metod:topics
> > > >
> > > > I understood that it should be possible to get the details from the
> > > > certificate, but we also need the token. The combination of
> > certificate +
> > > > token is need to prevent impersonation of APIs (one could easily
> > forward
> > > a
> > > > token, if it wasn’t bound to a certificate).
> > > >
> > > > I agree with the revocation part, but we are only looking at internal
> > > > clients. The process would be to revoke access in the Portal which
> > > prevents
> > > > new instances to connect to the service. If we really encounter
> > malicious
> > > > behaviour, the prefer way is to shut down the misbehaving client.
> > > >
> > > > Kind Regards,
> > > > Peter
> > > >
> > > >
> > > > -----Original Message-----
> > > > From: Sönke Liebau [mailto:soenke.lie...@opencore.com.INVALID]
> > > > Sent: Donnerstag, 26. Oktober 2017 14:59
> > > > To: dev@kafka.apache.org
> > > > Subject: Re: Use self contained tokens instead of ACL
> > > >
> > > > Hi Peter,
> > > >
> > > > I am not entirely sure that I understand what you mean when you say
> "at
> > > > application level" to be honest, but I do understand that you want to
> > > > forego 3rd party tools. However, this would mean that you have to
> > > implement
> > > > some form of trust between your portal which issues the tokens and
> > Kafka
> > > > which checks the tokens. I am not sure that I'd recommend rolling
> your
> > > own
> > > > solution here, authentication has a lot of pitfalls that can turn
> > around
> > > to
> > > > bite you.
> > > > Same thing as what I proposed with Kerberos could be done via
> > > certificates
> > > > of course. If your user requests access to a topic in the portal he
> > > uploads
> > > > a certificate signing request with the topic name encoded in some
> field
> > > > (lots of extensions to pick from). The portal signs the request and
> > > returns
> > > > it to the user. When the user now connects to Kafka he does so using
> > this
> > > > certificate and it should be fairly easy for you to extend the
> > > > KafkaPrincipalBuilder class and extract the list of these topics from
> > the
> > > > certificate. Then you'd need to also extend SimpleAclAuthorizer to
> > check
> > > > for these topics in the principal name and allow access if the topic
> is
> > > > present in the certificate.
> > > >
> > > > I am unsure of the benefits of this system over for example having
> the
> > > > portal create ACLs in Kafka, when the user is granted access to a
> > topic.
> > > > One scenario that comes to mind is if you dynamically spin up new
> > > > clusters, if these new clusters all trust the same ca they would also
> > > > accept these tokens right away, no need to create ACLs in fresh
> > clusters.
> > > > But this could also be solved by having a central repository for ACLs
> > > that
> > > > are applied to all clusters regularly..
> > > > A drawback of this system is that you'd need to revoke certificates
> if
> > > you
> > > > want to withdraw access to a topic, which is significantly harder
> that
> > > just
> > > > deleting an ACL.
> > > >
> > > > Anyway, not sure if this helps you at all, just some random musings -
> > if
> > > > you explain your specific needs a bit more we can discuss further.
> > > >
> > > > Kind regards,
> > > > Sönke
> > > >
> > > > On Wed, Oct 25, 2017 at 1:10 PM, Postmann, P. (Peter) <
> > > > peter.postm...@ing.com.invalid> wrote:
> > > >
> > > > > Hi Sönke,
> > > > >
> > > > > Thanks for the fast replay. We don’t want to use Kerberos since we
> > > > > want to do the authorization on Application level and without
> > > > > involvement of a 3rd party during runtime.
> > > > >
> > > > > -----Original Message-----
> > > > > From: Sönke Liebau [mailto:soenke.lie...@opencore.com.INVALID]
> > > > > Sent: Mittwoch, 25. Oktober 2017 12:37
> > > > > To: dev@kafka.apache.org
> > > > > Subject: Re: Use self contained tokens instead of ACL
> > > > >
> > > > > The concept you describe sounds similar to what Microsoft calls
> > > > > "claims based authorization".
> > > > >
> > > > > At a high level I should think that using Kerberos as a vehicle to
> > > > > transport the information would be the way to go, as it is
> > established
> > > > > and already supported by Kafka. I believe tickets have a field that
> > > > > can be used for authorization information, so if information about
> > the
> > > > > topics that a user has access to were to be encoded in this field
> you
> > > > > could probably extend Kafka to extract that information and use it
> > > > instead of ACLs.
> > > > >
> > > > > I am not well versed in what exactly Microsoft does and how you can
> > > > > control the granting side of things, but I do believe that AD
> server
> > > > > has support for something along those lines already.
> > > > >
> > > > > The upside of this would be that you don't have to implement
> anything
> > > > > around security, trust, encryption, etc. because everything is
> > > > > provided by Kerberos.
> > > > >
> > > > > Not much information in here I am afraid, but maybe a useful
> > direction
> > > > > for future research.
> > > > >
> > > > > Kind regards,
> > > > > Sönke
> > > > >
> > > > > On Wed, Oct 25, 2017 at 11:55 AM, Postmann, P. (Peter) <
> > > > > peter.postm...@ing.com.invalid> wrote:
> > > > >
> > > > > > Hi everyone,
> > > > > >
> > > > > > I´m working on a concept to use Kafka with self-contained tokens
> > > > > > (instead of ACL).
> > > > > >
> > > > > > The idea:
> > > > > >
> > > > > > -          A client requests access to a certain topic (in some
> > kind
> > > of
> > > > > > portal)
> > > > > >
> > > > > > -          The owner of the topic approves the request (in some
> > kind
> > > of
> > > > > > portal)
> > > > > >
> > > > > > -          The client receives a signed tokens which contains the
> > > topic
> > > > > > (in some kind of portal)
> > > > > >
> > > > > > -          The client sends the token when he connects to Kafka
> > > > > >
> > > > > > -          Kafka validates the token and grants access
> > > > > >
> > > > > > Token Format:
> > > > > >
> > > > > > -          List of Topics and methods
> > > > > >
> > > > > > o   E.g. read /topic1
> > > > > >
> > > > > > -          Expire Date
> > > > > >
> > > > > > -          Signature
> > > > > >
> > > > > > Implementation Idea:
> > > > > >
> > > > > > -          Create a custom Authorization Class which checks the
> > > > signature
> > > > > >
> > > > > > -          Implement the possibility to send arbitrary data
> > > > (key->value)
> > > > > > along with the request when the client connects to the cluster
> > > > > >
> > > > > > I´m looking forward for feedback on this approach and would be
> > happy
> > > > > > if you could give me a starting where to start with the
> > > > > > implementation (or if there already is a way to send arbitrary
> data
> > > > > > to a custom
> > > > > Authorizer).
> > > > > >
> > > > > > Kind Regards,
> > > > > > Peter
> > > > > >
> > > > > > ------------------------------------------------------------
> -----
> > > > > > ATTENTION:
> > > > > > The information in this e-mail is confidential and only meant for
> > > > > > the intended recipient. If you are not the intended recipient,
> > don't
> > > > > > use or disclose it in any way. Please let the sender know and
> > delete
> > > > > > the message immediately.
> > > > > > ------------------------------------------------------------
> -----
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Sönke Liebau
> > > > > Partner
> > > > > Tel. +49 179 7940878
> > > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel -
> Germany
> > > > >
> > > > > -----------------------------------------------------------------
> > > > > ATTENTION:
> > > > > The information in this e-mail is confidential and only meant for
> the
> > > > > intended recipient. If you are not the intended recipient, don't
> use
> > > > > or disclose it in any way. Please let the sender know and delete
> the
> > > > > message immediately.
> > > > > -----------------------------------------------------------------
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Sönke Liebau
> > > > Partner
> > > > Tel. +49 179 7940878
> > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - Germany
> > > >
> > > > -----------------------------------------------------------------
> > > > ATTENTION:
> > > > The information in this e-mail is confidential and only meant for the
> > > > intended recipient. If you are not the intended recipient, don't use
> or
> > > > disclose it in any way. Please let the sender know and delete the
> > message
> > > > immediately.
> > > > -----------------------------------------------------------------
> > > >
> > >
> > >
> > >
> > > --
> > > Sönke Liebau
> > > Partner
> > > Tel. +49 179 7940878
> > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - Germany
> > >
> >
>
>
>
> --
> Sönke Liebau
> Partner
> Tel. +49 179 7940878
> OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - Germany
>

Reply via email to