I just realized there was one place in the KIP that stated that retries could occur indefinitely (when a client attempts to change identity, which we arbitrarily disallow). This was a mistake, a holdover from a prior draft of the KIP. This is now fixed. Retries are never allowed indefinitely.
<<<if a connection originally authenticates as User:user1, an attempt to re-authenticate as anything else (e.g. User:user2) will fail. <<<Retry is allowed indefinitely in this case. >>>if a connection originally authenticates as User:user1, an attempt to re-authenticate as anything else (e.g. User:user2) will fail. >>>Retry is allowed in this case (still subject to the expiration of the original credential as described above) Ron On Mon, Sep 3, 2018 at 5:35 PM Ron Dagostino <rndg...@gmail.com> wrote: > Thanks for the feedback, Stanislav. > > <<<I am not too familiar with the networking code to evaluate your > solution. > Yeah, I wasn't familiar with it when I started, either, and I am hoping > people who are intimately familiar with it will take a close look. Some of > that code seems to be very central to the core of Kafka, and injecting > re-authentication attempts into the flow of replica fetching, sending > transaction markers, and producing or consuming messages is not something I > am convinced is acceptable under all circumstances. To be clear, though, I > am not saying it is problematic, either -- I just don't have enough > experience or familiarity to know. I really do want additional eyes on > this if possible. > > Regarding your question about retries, here's the part of the KIP that > deals with those: > > If a re-authentication attempt should fail then the connection will be >> told to retry after some delay depending on how many retries have been >> attempted so far: after some small amount of time for the first retry (e.g. >> 1 minute), double that for the second retry, and 4 times the initial delay >> for every retry thereafter. Retry attempts generally occur at least until >> the current credential expires (but not indefinitely – and of course they >> won't continue if one of them actually succeeds). There are certain errors >> that result in retries not being attempted (i.e. if some internal state >> doesn't make sense, which generally should not happen). > > > <<<Would we retry endlessly? > No. There may be at most one retry after the client token expires. So if > a token expires after an hour, and several retry attempts fail including > one at minute 59, then one last attempt will be made at the 63-minute mark. > > <<<Since the functionality for brokers to close connections is outside the > scope of this KIP, what effect would > <<<success/failure in re-authentication have > Practically speaking, unless authorization is based on the contents of the > token rather than ACLs, the ultimate success or failure of > re-authentication has no effect. The intent is definitely to follow this > KIP with another one to add the ability for brokers to close connections > that use expired credentials, and then at that point the client would have > to successfully re-authenticate to avoid the connection being forcibly > closed. > > Ron > > > On Mon, Sep 3, 2018 at 12:58 PM Stanislav Kozlovski < > stanis...@confluent.io> wrote: > >> Hi Ron, >> >> I really like this KIP, it is very needed. >> I am still looking through it but unfortunately I am not too familiar with >> the networking code to evaluate your solution. >> >> I'd like to ask what happens if re-authentication consistently fails. >> Would >> we retry endlessly? Since the functionality for brokers to close >> connections is outside the scope of this KIP, what effect would >> success/failure in re-authentication have? I think it's worth noting in >> the >> KIP >> >> I also think the rejected alternative of initiating a new connection >> should >> stay rejected. I am not aware of anything currently limiting the client to >> connect to the same broker, but I think it would be best if we kept >> Kafka's >> options open (e.g addition of a load balancer in the future) and not >> introduce additional client-broker statefulness. >> >> Thanks, >> Stanislav >> >> On Tue, Aug 28, 2018 at 5:28 PM Ron Dagostino <rndg...@gmail.com> wrote: >> >> > Hi everyone. I created KIP 368: Allow SASL Connections to Periodically >> > Re-Authenticate >> > < >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-368%3A+Allow+SASL+Connections+to+Periodically+Re-Authenticate >> > > >> > ( >> > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-368%3A+Allow+SASL+Connections+to+Periodically+Re-Authenticate >> > ). >> > The motivation for this KIP is as follows: >> > >> > The adoption of KIP-255: OAuth Authentication via SASL/OAUTHBEARER >> > < >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=75968876 >> > >> > in >> > release 2.0.0 creates the possibility of using information in the bearer >> > token to make authorization decisions. Unfortunately, however, Kafka >> > connections are long-lived, so there is no ability to change the bearer >> > token associated with a particular connection. Allowing SASL >> connections >> > to periodically re-authenticate would resolve this. In addition to this >> > motivation there are two others that are security-related. First, to >> > eliminate access to Kafka for connected clients, the current >> requirement is >> > to remove all authorizations (i.e. remove all ACLs). This is necessary >> > because of the long-lived nature of the connections. It is >> operationally >> > simpler to shut off access at the point of authentication, and with the >> > release of KIP-86: Configurable SASL Callback Handlers >> > < >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-86%3A+Configurable+SASL+callback+handlers >> > > >> > it >> > is going to become more and more likely that installations will >> > authenticate users against external directories (e.g. via LDAP). The >> > ability to stop Kafka access by simply disabling an account in an LDAP >> > directory (for example) is desirable. The second motivating factor for >> > re-authentication related to security is that the use of short-lived >> tokens >> > is a common OAuth security recommendation, but issuing a short-lived >> token >> > to a Kafka client (or a broker when OAUTHBEARER is the inter-broker >> > protocol) currently has no benefit because once a client is connected >> to a >> > broker the client is never challenged again and the connection may >> remain >> > intact beyond the token expiration time (and may remain intact >> indefinitely >> > under perfect circumstances). This KIP proposes adding the ability for >> > clients (and brokers when OAUTHBEARER is the inter-broker protocol) to >> > re-authenticate their connections to brokers and have the new bearer >> token >> > appear on their session rather than the old one. >> > >> > The description of this KIP is actually quite straightforward from a >> > functionality perspective; from an implementation perspective, though, >> the >> > KIP is not so straightforward, so it includes a pull request with a >> > proposed implementation. See https://github.com/apache/kafka/pull/5582 >> . >> > >> > Ron >> > >> >> >> -- >> Best, >> Stanislav >> >