Harsha,

I was thinking of the Rest Proxy. I didn't see your design yet, but in
our proxy, we have a set of producers, which will serve multiple users
going through the proxy. Since these users will have different
privileges, they'll need to authenticate separately, and can't share a
token.

Am I missing anything?

Gwen

On Tue, May 3, 2016 at 2:11 PM, Harsha <ka...@harsha.io> wrote:
> Gwen,
>            On your second point. Can you describe a usecase where
>            mutliple clients ended up sharing a producer and even if they
>            do why can't they not use single token that producer
>            captures. Why would we need multiple clients with different
>            tokens sharing a single instance of producer.  Also in this
>            case other clients have access all the tokens no?
>
> Thanks,
> Harsha
>
>
> On Tue, May 3, 2016, at 11:49 AM, Gwen Shapira wrote:
>> Sorry for the delay:
>>
>> Two questions that we didn't see in the wiki:
>> 1. Is there an expiration for delegation tokens? Renewal? How do we
>> revoke them?
>> 2. If we want to use delegation tokens for "do-as" (say, submit Storm
>> job as my user), we will need a producer for every job (we can't share
>> them between multiple jobs running on same node), since we only
>> authenticate when connecting. Is there a plan to change this for
>> delegation tokens, in order to allow multiple users with different
>> tokens to share a client?
>>
>> Gwen
>>
>> On Tue, May 3, 2016 at 9:12 AM, parth brahmbhatt
>> <brahmbhatt.pa...@gmail.com> wrote:
>> > Bumping this up one more time, can other committers review?
>> >
>> > Thanks
>> > Parth
>> >
>> > On Tue, Apr 26, 2016 at 9:07 AM, Harsha <ka...@harsha.io> wrote:
>> >
>> >> Parth,
>> >>           Overall current design looks good to me. I am +1 on the KIP.
>> >>
>> >> Gwen , Jun can you review this as well.
>> >>
>> >> -Harsha
>> >>
>> >> On Tue, Apr 19, 2016, at 09:57 AM, parth brahmbhatt wrote:
>> >> > Thanks for review Jitendra.
>> >> >
>> >> > I don't like the idea of infinite lifetime but I see the Streaming use
>> >> > case. Even for Streaming use case I was hoping there will be some notion
>> >> > of
>> >> > master/driver that can get new delegation tokens at fixed interval and
>> >> > distribute to workers. If that is not the case for we can discuss
>> >> > delegation tokens renewing them self and the security implications of 
>> >> > the
>> >> > same.
>> >> >
>> >> > I did not want clients to fetch tokens from zookeeper, overall I think
>> >> > its
>> >> > better if clients don't rely on our metadata store and I think we are
>> >> > moving in that direction with all the KIP-4 improvements.  I chose
>> >> > zookeeper as in this case the client will still just talk to broker , 
>> >> > its
>> >> > the brokers that will use zookeeper which we already do for a lot of
>> >> > other
>> >> > usecases + ease of development + and the ability so tokens will survive
>> >> > even a rolling restart/cluster failure. if a majority agrees the added
>> >> > complexity to have controller forwarding keys to all broker is justified
>> >> > as
>> >> > it provides tighter security , I am fine with that option too.
>> >> >
>> >> > Given zookeeper does not support SSL we can not store master keys in
>> >> > zookeeper as master keys will be exposed on wire. To support rotation
>> >> > without affecting current clients is something I need to put more 
>> >> > thought
>> >> > in. My current proposal assumes the rotation will invalidate all current
>> >> > tokens.
>> >> >
>> >> > I request committers to also review and post their comments so we can
>> >> > make
>> >> > progress on this KIP.
>> >> >
>> >> > Thanks
>> >> > Parth
>> >> >
>> >> > On Tue, Apr 19, 2016 at 8:39 AM, Ashish Singh <asi...@cloudera.com>
>> >> > wrote:
>> >> >
>> >> > > On Mon, Apr 18, 2016 at 11:26 AM, Harsha <ka...@harsha.io> wrote:
>> >> > >
>> >> > > > Unifying the two discussion threads on this KIP.
>> >> > > >
>> >> > > > Here is the response from Jitendra
>> >> > > >
>> >> > > > "The need for a large number of clients that are running all over 
>> >> > > > the
>> >> > > > cluster that authenticate with Kafka brokers, is very similar to the
>> >> > > > Hadoop use case of large number of tasks running across the cluster
>> >> that
>> >> > > > need authentication to Hdfs Namenode. Therefore, the delegation 
>> >> > > > token
>> >> > > > approach does seem like a good fit for this use case as we have seen
>> >> it
>> >> > > > working at large scale in HDFS and YARN.
>> >> > > >
>> >> > > >   The proposed design is very much inline with Hadoop approach. A 
>> >> > > > few
>> >> > > >   comments:
>> >> > > >
>> >> > > > 1) Why do you guys want to allow infinite renewable lifetime for a
>> >> > > > token? HDFS restricts a token to a max life time (default 7 days).  
>> >> > > > A
>> >> > > > token's vulnerability is believed to increase with time.
>> >> > > >
>> >> > > I agree that having infinite lifetime might not be the best idea.
>> >> > >
>> >> > > >
>> >> > > > 2) As I understand the tokens are stored in zookeeper as well, and
>> >> can
>> >> > > > be updated there. This is clever as it can allow replacing the 
>> >> > > > tokens
>> >> > > > once they run out of max life time, and clients can download new
>> >> tokens
>> >> > > > from zookeeper. It shouldn't be a big load on zookeeper as a client
>> >> will
>> >> > > > need to get a new token once in several days. In this approach you
>> >> don't
>> >> > > > need infinite lifetime on the token even for long running clients.
>> >> > > >
>> >> > > > 3) The token password are generated using a master key. The master
>> >> key
>> >> > > > should also be periodically changed. In Hadoop, the default renewal
>> >> > > > period is 1 day.?
>> >> > > >
>> >> > > IIUC, this will require brokers maintaining a list of X most recent
>> >> master
>> >> > > keys. This list will have to be persisted somewhere, as if a broker
>> >> goes
>> >> > > down it will have to get that list again and storing master keys on ZK
>> >> is
>> >> > > not the best idea. However, if a broker goes down then we have much
>> >> bigger
>> >> > > issue to deal with and client can always re-authenticate is such
>> >> events.
>> >> > >
>> >> > > Did you happen to take a look at other alternatives this list has
>> >> > > suggested?
>> >> > >
>> >> > > >
>> >> > > > Thanks for a thorough proposal, great work!"
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > > > On Mon, Mar 7, 2016, at 10:28 PM, Gwen Shapira wrote:
>> >> > > > > Makes sense to me. Thanks!
>> >> > > > >
>> >> > > > > On Mon, Mar 7, 2016 at 9:25 PM, Harsha <ka...@harsha.io> wrote:
>> >> > > > > > It doesn't need any release vehicle but still the work can move
>> >> > > > forward.
>> >> > > > > > If anyone is interested in the KIP please do the review and
>> >> provide
>> >> > > the
>> >> > > > > > comments.
>> >> > > > > >
>> >> > > > > > -Harsha
>> >> > > > > >
>> >> > > > > > On Mon, Mar 7, 2016, at 04:59 PM, Ismael Juma wrote:
>> >> > > > > >> I agree that it would be good to have more time to review and
>> >> > > discuss
>> >> > > > > >> KIP-48.
>> >> > > > > >>
>> >> > > > > >> Ismael
>> >> > > > > >>
>> >> > > > > >> On Tue, Mar 8, 2016 at 12:55 AM, Gwen Shapira <
>> >> g...@confluent.io>
>> >> > > > wrote:
>> >> > > > > >>
>> >> > > > > >> > Hi Team,
>> >> > > > > >> >
>> >> > > > > >> > Since KIP-48 depends on KIP-43, which is already a bit of a
>> >> risk
>> >> > > for
>> >> > > > > >> > the next release - any chance we can delay delegation tokens
>> >> to
>> >> > > > Kafka
>> >> > > > > >> > 0.10.1?
>> >> > > > > >> > With the community working on a release every 3 month, this
>> >> is not
>> >> > > > a huge
>> >> > > > > >> > delay.
>> >> > > > > >> >
>> >> > > > > >> > Gwen
>> >> > > > > >> >
>> >> > > > > >> > On Fri, Feb 26, 2016 at 5:11 PM, Ashish Singh <
>> >> > > asi...@cloudera.com>
>> >> > > > wrote:
>> >> > > > > >> > > Parth,
>> >> > > > > >> > >
>> >> > > > > >> > > Thanks again for the awesome write up. Following our
>> >> discussion
>> >> > > > from the
>> >> > > > > >> > > JIRA, I think it will be easier to compare various
>> >> alternatives
>> >> > > > if they
>> >> > > > > >> > are
>> >> > > > > >> > > listed together. I am stating below a few alternatives 
>> >> > > > > >> > > along
>> >> > > with
>> >> > > > a the
>> >> > > > > >> > > current proposal.
>> >> > > > > >> > > (Current proposal) Store Delegation Token, DT, on ZK.
>> >> > > > > >> > >
>> >> > > > > >> > >    1. Client authenticates with a broker.
>> >> > > > > >> > >    2. Once a client is authenticated, it will make a broker
>> >> side
>> >> > > > call to
>> >> > > > > >> > >    issue a delegation token.
>> >> > > > > >> > >    3. The broker generates a shared secret based on
>> >> > > HMAC-SHA256(a
>> >> > > > > >> > >    Password/Secret shared between all brokers, randomly
>> >> > > generated
>> >> > > > > >> > tokenId).
>> >> > > > > >> > >    4. Broker stores this token in its in memory cache.
>> >> Broker
>> >> > > > also stores
>> >> > > > > >> > >    the DelegationToken without the hmac in the zookeeper.
>> >> > > > > >> > >    5. All brokers will have a cache backed by zookeeper so
>> >> they
>> >> > > > will all
>> >> > > > > >> > >    get notified whenever a new token is generated and they
>> >> will
>> >> > > > update
>> >> > > > > >> > their
>> >> > > > > >> > >    local cache whenever token state changes.
>> >> > > > > >> > >    6. Broker returns the token to Client.
>> >> > > > > >> > >
>> >> > > > > >> > > Probable issues and fixes
>> >> > > > > >> > >
>> >> > > > > >> > >    1. Probable race condition, client tries to authenticate
>> >> with
>> >> > > > a broker
>> >> > > > > >> > >    that is yet to be updated with the newly generated DT.
>> >> This
>> >> > > can
>> >> > > > > >> > probably be
>> >> > > > > >> > >    dealt with making dtRequest block until all brokers have
>> >> > > > updated
>> >> > > > > >> > their DT
>> >> > > > > >> > >    cache. Zk barrier or similar mechanism can be used.
>> >> However,
>> >> > > > all such
>> >> > > > > >> > >    mechanisms will increase complexity.
>> >> > > > > >> > >    2. Using a static secret key from config file. Will
>> >> require
>> >> > > yet
>> >> > > > > >> > another
>> >> > > > > >> > >    config and uses a static secret key. It is advised to
>> >> rotate
>> >> > > > secret
>> >> > > > > >> > keys
>> >> > > > > >> > >    periodically. This can be avoided with controller
>> >> generating
>> >> > > > > >> > secretKey and
>> >> > > > > >> > >    passing to brokers periodically. However, this will
>> >> require
>> >> > > > brokers to
>> >> > > > > >> > >    maintain certain counts of secretKeys.
>> >> > > > > >> > >
>> >> > > > > >> > > (Alternative 1) Have controller generate delegation token.
>> >> > > > > >> > >
>> >> > > > > >> > >    1. Client authenticates with a broker.
>> >> > > > > >> > >    2. Once a client is authenticated, it will make a broker
>> >> side
>> >> > > > call to
>> >> > > > > >> > >    issue a delegation token.
>> >> > > > > >> > >    3. Broker forwards the request to controller.
>> >> > > > > >> > >    4. Controller generates a DT and broadcasts to all
>> >> brokers.
>> >> > > > > >> > >    5. Broker stores this token in its memory cache.
>> >> > > > > >> > >    6. Controller responds to broker’s DT req.
>> >> > > > > >> > >    7. Broker returns the token to Client.
>> >> > > > > >> > >
>> >> > > > > >> > > Probable issues and fixes
>> >> > > > > >> > >
>> >> > > > > >> > >    1. We will have to add new APIs to support controller
>> >> pushing
>> >> > > > tokens
>> >> > > > > >> > to
>> >> > > > > >> > >    brokers on top of the minimal APIs that are currently
>> >> > > proposed.
>> >> > > > > >> > >    2. We will also have to add APIs to support the
>> >> bootstrapping
>> >> > > > case,
>> >> > > > > >> > i.e,
>> >> > > > > >> > >    when a new broker comes up it will have to get all
>> >> delegation
>> >> > > > tokens
>> >> > > > > >> > from
>> >> > > > > >> > >    the controller.
>> >> > > > > >> > >    3. In catastrophic failures where all brokers go down,
>> >> the
>> >> > > > tokens will
>> >> > > > > >> > >    be lost even if servers are restarted as tokens are not
>> >> > > > persisted
>> >> > > > > >> > anywhere.
>> >> > > > > >> > >    If this happens, then there are more important things to
>> >> > > worry
>> >> > > > about
>> >> > > > > >> > and
>> >> > > > > >> > >    maybe it is better to re-authenticate.
>> >> > > > > >> > >
>> >> > > > > >> > > (Alternative 2) Do not distribute DT to other brokers at
>> >> all.
>> >> > > > > >> > >
>> >> > > > > >> > >    1. Client authenticates with a broker.
>> >> > > > > >> > >    2. Once a client is authenticated, it will make a broker
>> >> side
>> >> > > > call to
>> >> > > > > >> > >    issue a delegation token.
>> >> > > > > >> > >    3. The broker generates DT of form, [hmac + (owner,
>> >> renewer,
>> >> > > > > >> > >    maxLifeTime, id, hmac, expirationTime)] and passes back
>> >> this
>> >> > > > DT to
>> >> > > > > >> > client.
>> >> > > > > >> > >    hmac is generated via {HMAC-SHA256(owner, renewer,
>> >> > > > maxLifeTime, id,
>> >> > > > > >> > hmac,
>> >> > > > > >> > >    expirationTime) using SecretKey}. Note that all brokers
>> >> have
>> >> > > > this
>> >> > > > > >> > SecretKey.
>> >> > > > > >> > >    4. Client then goes to any broker and to authenticate
>> >> sends
>> >> > > > the DT.
>> >> > > > > >> > >    Broker recalculates hmac using (owner, renewer,
>> >> maxLifeTime,
>> >> > > > id, hmac,
>> >> > > > > >> > >    expirationTime) info from DT and its SecretKey. If it
>> >> matches
>> >> > > > with
>> >> > > > > >> > hmac of
>> >> > > > > >> > >    DT, client is authenticated. Yes, it will do other
>> >> obvious
>> >> > > > checks of
>> >> > > > > >> > >    timestamp expiry and such.
>> >> > > > > >> > >
>> >> > > > > >> > > Note that secret key will be generated by controller and
>> >> passed
>> >> > > to
>> >> > > > > >> > brokers
>> >> > > > > >> > > periodically.
>> >> > > > > >> > > Probable issues and fixes
>> >> > > > > >> > >
>> >> > > > > >> > >    1. How to delete a DT? Yes, that is a downside here.
>> >> However,
>> >> > > > this can
>> >> > > > > >> > >    be handled with brokers maintaining a blacklist of DTs,
>> >> DTs
>> >> > > > from this
>> >> > > > > >> > list
>> >> > > > > >> > >    can be removed after expiry.
>> >> > > > > >> > >    2. In catastrophic failures where all brokers go down,
>> >> the
>> >> > > > tokens will
>> >> > > > > >> > >    be lost even if servers are restarted as tokens are not
>> >> > > > persisted
>> >> > > > > >> > anywhere.
>> >> > > > > >> > >    If this happens, then there are more important things to
>> >> > > worry
>> >> > > > about
>> >> > > > > >> > and
>> >> > > > > >> > >    maybe it is better to re-authenticate.
>> >> > > > > >> > >
>> >> > > > > >> > >
>> >> > > > > >> > >
>> >> > > > > >> > > On Fri, Feb 26, 2016 at 1:58 PM, Parth Brahmbhatt <
>> >> > > > > >> > > pbrahmbh...@hortonworks.com> wrote:
>> >> > > > > >> > >
>> >> > > > > >> > >> Hi,
>> >> > > > > >> > >>
>> >> > > > > >> > >> I have filed KIP-48 so we can offer hadoop like delegation
>> >> > > > tokens in
>> >> > > > > >> > >> kafka. You can review the design
>> >> > > > > >> > >>
>> >> > > > > >> >
>> >> > > >
>> >> > >
>> >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-48+Delegation+token+support+for+Kafka
>> >> > > > > >> > .
>> >> > > > > >> > >> This KIP depends on KIP-43 and we have also discussed an
>> >> > > > alternative to
>> >> > > > > >> > >> proposed design here<
>> >> > > > > >> > >>
>> >> > > > > >> >
>> >> > > >
>> >> > >
>> >> https://issues.apache.org/jira/browse/KAFKA-1696?focusedCommentId=15167800&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15167800
>> >> > > > > >> > >> >.
>> >> > > > > >> > >>
>> >> > > > > >> > >> Thanks
>> >> > > > > >> > >> Parth
>> >> > > > > >> > >>
>> >> > > > > >> > >
>> >> > > > > >> > >
>> >> > > > > >> > >
>> >> > > > > >> > > --
>> >> > > > > >> > >
>> >> > > > > >> > > Regards,
>> >> > > > > >> > > Ashish
>> >> > > > > >> >
>> >> > > >
>> >> > >
>> >> > >
>> >> > >
>> >> > > --
>> >> > >
>> >> > > Regards,
>> >> > > Ashish
>> >> > >
>> >>

Reply via email to