I would accept a coprocessor hook addition for connection establishment, or rejecting same, provided the customary backwards compatibility provisions are made to avoid binary compatibility problems and minimize source level changes for interface implementers. I can’t speak for other committers but you would have my +1.
> On Sep 19, 2024, at 7:07 AM, Charles Connell <cconn...@hubspot.com.invalid> > wrote: > > Hi Andor, > > I don't believe there is a way for a coprocessor or other plugin to > hook into connection establishment and reject connections. If you were > interested, I imagine that contributing this change would be > appreciated by the core team, but I don't speak for them. > > As a workaround for now, you would need to block specific operations > via coprocessor implementations of the various *Observer interfaces > like RegionObserver and others. Once there, you can call > RpcServer.getCurrentCall() to get an RpcCallContext object. > > > Charles > >> On Tue, Aug 27, 2024 at 10:03 AM Andor Molnar <an...@apache.org> wrote: >> >> Hi Andrew / Bryan, >> >> I'm looking at how to implement this client cert user/group >> verification stuff that we talked about here, but I have to admit I >> have no idea how to do this properly. Could you please give me some >> pointers? >> >> In @charlesconnel's PR [1] about adding client cert chain to >> RpcCallContext he mentions that it was needed for some kind of audit >> logging, though in the Jira ticket [2] we'd like to extend the >> authentication flow and prevent users from connecting with invalid >> certificates. >> >> The closest I've found so far is the AccessController coprocessor which >> implements _all_ interface methods to verify access. That is a bit >> scary. Is there a way to catch all login attempts somehow and access >> RpCallContext from there? >> >> Thanks, >> Andor >> >> [1] https://github.com/apache/hbase/pull/5644 >> [2] https://issues.apache.org/jira/browse/HBASE-27326 >> >> >> >> >>> On Mon, 2024-06-10 at 21:46 +0200, Andor Molnar wrote: >>> Awesome. >>> Thanks for all the input folks. >>> >>> Andor >>> >>> >>> >>> On Mon, 2024-06-10 at 15:24 -0400, Bryan Beaudreault wrote: >>>> I'm back at my computer now so was able to find the JIRA: >>>> https://issues.apache.org/jira/browse/HBASE-27326 >>>> >>>> I ended up not tackling it partially for the reason Andrew mentions >>>> -- I >>>> realized that even our use-case did not cleanly fit into the >>>> proposal >>>> there. So instead we ended up exposing the actual certificate chain >>>> [1] in >>>> the RpcCallContext, so that a user can make their own >>>> implementation >>>> using >>>> coprocessors, etc to do whatever they like. >>>> >>>> [1] https://issues.apache.org/jira/browse/HBASE-28317 >>>> >>>> On Mon, Jun 10, 2024 at 3:05 PM Andrew Purtell <apurt...@apache.org >>>>> >>>> wrote: >>>> >>>>> Cool. >>>>> I suggest hbase-examples because different organizations will >>>>> embed >>>>> a user >>>>> name or potenitally other details into certificate fields >>>>> differently, so >>>>> there isn't a one size fits all solution. However HBase could >>>>> provide a >>>>> worked example where the username is in CN. >>>>> >>>>> On Mon, Jun 10, 2024 at 12:32 AM Andor Molnar <an...@apache.org> >>>>> wrote: >>>>> >>>>>> On Sun, 2024-06-09 at 23:10 -0700, Andrew Purtell wrote: >>>>>> >>>>>>> There is middle ground between your position and a blanket >>>>>>> trust of >>>>>>> connection header parameters from any client with a valid >>>>>>> certificate... >>>>>>> Certificates can carry additional information, including >>>>>>> usernames, >>>>>>> which >>>>>>> would be protected by the signature. Sometimes this is done. >>>>>>> HBase >>>>>>> doesn't >>>>>>> implement it (yet) and if you have a trust architecture that >>>>>>> demands >>>>>>> it, it >>>>>>> would establish the username as attested by an authority, >>>>>>> like >>>>>>> a >>>>>>> kerberos >>>>>>> ticket. You'd use a netty API presumably in a coprocessor >>>>>>> hook >>>>>>> to get >>>>>>> it in >>>>>>> order to hand off to UGI. Should someone decide this is >>>>>>> needed >>>>>>> it >>>>>>> would >>>>>>> make a good contribution back to the project, somewhere in >>>>>>> hbase- >>>>>>> examples >>>>>>> perhaps. >>>>>> >>>>>> Exactly. That's what I wanted to clarify and pointed what other >>>>>> projects (like ZooKeeper) are doing under the hood of x509 >>>>>> authentication. I definitely would like to contribute something >>>>>> similar >>>>>> for HBase too. >>>>>> >>>>>> Thanks for the pointer of hbase-examples. >>>>>> >>>>>> Andor >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> On Sun, Jun 9, 2024 at 10:57 PM Andrew Purtell < >>>>>>> apurt...@apache.org> >>>>>>> wrote: >>>>>>> >>>>>>>> Like I said the successful verification of the certificate >>>>>>>> implies >>>>>>>> the >>>>>>>> client is trustworthy, including what the client supplies >>>>>>>> in >>>>>>>> the >>>>>>>> header. >>>>>>>> Now, if within your organization, you are distributing >>>>>>>> trusted >>>>>>>> certificates >>>>>>>> to potentially untrustworthy software, that is a you >>>>>>>> problem, >>>>>>>> as >>>>>>>> they say. >>>>>>>> >>>>>>>> It is absolutely not true that kerberos authentication is >>>>>>>> *required* when >>>>>>>> using mTLS. Frankly I'd prefer you expand on such comments >>>>>>>> to >>>>>>>> explain why >>>>>>>> you might have untrustworthy clients operating in your >>>>>>>> production >>>>>>>> as >>>>>>>> opposed to another organization with competent operations >>>>>>>> and >>>>>>>> better >>>>>>>> controls. Otherwise this flirts with F.U.D. >>>>>>>> >>>>>>>> >>>>>>>> On Sun, Jun 9, 2024 at 10:07 PM Andor Molnar < >>>>>>>> an...@apache.org> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Yeah. I think the key point here is that the client >>>>>>>>> certificate >>>>>>>>> identifies the originating "host" and not the "user", >>>>>>>>> hence >>>>>>>>> we >>>>>>>>> have the >>>>>>>>> client hostname verification built-in. The only thing >>>>>>>>> that >>>>>>>>> you >>>>>>>>> can be >>>>>>>>> sure about when you do mTLS is that the request is coming >>>>>>>>> from a >>>>>>>>> legitimate host. >>>>>>>>> >>>>>>>>> Therefore you still need a secure authentication method >>>>>>>>> in >>>>>>>>> order >>>>>>>>> to >>>>>>>>> prevent legitimate users to impersonate each other. >>>>>>>>> >>>>>>>>> For instance, you have Alice and Bob valid users both >>>>>>>>> having >>>>>>>>> trusted >>>>>>>>> client certificates. They both can make requests from >>>>>>>>> legitimate >>>>>>>>> hosts, >>>>>>>>> but with SIMPLE auth they're free to lie about their >>>>>>>>> valid >>>>>>>>> usernames. >>>>>>>>> >>>>>>>>> As far as I know, the only secure authentication option >>>>>>>>> for >>>>>>>>> HBase >>>>>>>>> is >>>>>>>>> Kerberos, so you still have to use it. Using mTLS will >>>>>>>>> prevent >>>>>>>>> attackers from making requests from ordinary hosts by >>>>>>>>> stoling >>>>>>>>> Kerberos >>>>>>>>> tokens. >>>>>>>>> >>>>>>>>> Andor >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sun, 2024-06-09 at 13:45 -0400, Bryan Beaudreault >>>>>>>>> wrote: >>>>>>>>>> mTLS is totally unrelated to the username. It's >>>>>>>>>> whatever >>>>>>>>>> you'd >>>>>>>>>> typically >>>>>>>>>> have without mTLS. >>>>>>>>>> >>>>>>>>>> On Sun, Jun 9, 2024 at 1:38 PM Andor Molnar < >>>>>>>>>> an...@apache.org> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> That is a completely fair point and I agree that from >>>>>>>>>>> security >>>>>>>>>>> perspective, the approach is safe enough. >>>>>>>>>>> >>>>>>>>>>> I'd just like to figure out what is the username in >>>>>>>>>>> this >>>>>>>>>>> case? >>>>>>>>>>> Linux >>>>>>>>>>> user id? Anything that comes from SASL layer based on >>>>>>>>>>> the >>>>>>>>>>> Hadoop >>>>>>>>>>> stack? >>>>>>>>>>> >>>>>>>>>>> Andor >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Fri, 2024-06-07 at 09:30 -0700, Andrew Purtell >>>>>>>>>>> wrote: >>>>>>>>>>>> Most users who would employ a mTLS authentication >>>>>>>>>>>> scheme >>>>>>>>>>>> would >>>>>>>>>>>> operate with this trust model. The fact the client >>>>>>>>>>>> has a >>>>>>>>>>>> valid >>>>>>>>>>>> signed >>>>>>>>>>>> certificate means it can be trusted, and that trust >>>>>>>>>>>> includes >>>>>>>>>>>> supplied >>>>>>>>>>>> connection metadata like username. Or, if not, then >>>>>>>>>>>> not. >>>>>>>>>>>> So then a lot of security engineering effort goes >>>>>>>>>>>> in >>>>>>>>>>>> to >>>>>>>>>>>> protecting >>>>>>>>>>>> the trust established by certificate distribution, >>>>>>>>>>>> like >>>>>>>>>>>> using >>>>>>>>>>>> short >>>>>>>>>>>> lived certs, and secure distribution methods. >>>>>>>>>>>> >>>>>>>>>>>>> On Jun 7, 2024, at 6:34 AM, Bryan Beaudreault < >>>>>>>>>>>>> bbeaudrea...@apache.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> You're sort of correct. We've been using mTLS in >>>>>>>>>>>>> prod >>>>>>>>>>>>> for a >>>>>>>>>>>>> while >>>>>>>>>>>>> now, ever >>>>>>>>>>>>> since the feature was committed. It's true that >>>>>>>>>>>>> the >>>>>>>>>>>>> actual >>>>>>>>>>>>> HBase >>>>>>>>>>>>> username >>>>>>>>>>>>> is not verified with mTLS, however you still can >>>>>>>>>>>>> authenticate >>>>>>>>>>>>> the >>>>>>>>>>>>> connection. The idea behind mTLS is that the >>>>>>>>>>>>> certificate >>>>>>>>>>>>> carries >>>>>>>>>>>>> the >>>>>>>>>>>>> authentication -- so a client will need a >>>>>>>>>>>>> certificate >>>>>>>>>>>>> which has >>>>>>>>>>>>> been signed >>>>>>>>>>>>> by the same CA (or at least within the CA chain) >>>>>>>>>>>>> which >>>>>>>>>>>>> signed >>>>>>>>>>>>> the >>>>>>>>>>>>> server's >>>>>>>>>>>>> certificate, and vise versa. >>>>>>>>>>>>> >>>>>>>>>>>>> For us, if someone has a valid certificate and >>>>>>>>>>>>> the >>>>>>>>>>>>> mTLS >>>>>>>>>>>>> authentication >>>>>>>>>>>>> succeeds, then we just trust their username. >>>>>>>>>>>>> Based >>>>>>>>>>>>> on how >>>>>>>>>>>>> we >>>>>>>>>>>>> use >>>>>>>>>>>>> HBase in >>>>>>>>>>>>> our environment, this is perfectly secure for our >>>>>>>>>>>>> use- >>>>>>>>>>>>> case. >>>>>>>>>>>>> That >>>>>>>>>>>>> may not >>>>>>>>>>>>> work for everyone, and I did file a jira to add a >>>>>>>>>>>>> feature >>>>>>>>>>>>> for >>>>>>>>>>>>> validating >>>>>>>>>>>>> the username (perhaps pulling from a custom >>>>>>>>>>>>> certificate >>>>>>>>>>>>> property). >>>>>>>>>>>>> But I >>>>>>>>>>>>> haven't actually implemented that, and not sure >>>>>>>>>>>>> that I >>>>>>>>>>>>> will >>>>>>>>>>>>> since >>>>>>>>>>>>> it works >>>>>>>>>>>>> as-is for us. >>>>>>>>>>>>> >>>>>>>>>>>>> I'm on mobile now so I can't find it, but it >>>>>>>>>>>>> should >>>>>>>>>>>>> be >>>>>>>>>>>>> findable >>>>>>>>>>>>> in >>>>>>>>>>>>> jira if >>>>>>>>>>>>> you search the tls-related tickets >>>>>>>>>>>>> >>>>>>>>>>>>>> On Fri, Jun 7, 2024 at 8:53 AM Andor Molnar < >>>>>>>>>>>>>> an...@apache.org >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Bryan / Hbase devs, >>>>>>>>>>>>>> >>>>>>>>>>>>>> Based on the changes when you added mTLS >>>>>>>>>>>>>> support >>>>>>>>>>>>>> in >>>>>>>>>>>>>> HBASE- >>>>>>>>>>>>>> 27280 >>>>>>>>>>>>>> [1], >>>>>>>>>>>>>> only the certificate and hostname verification >>>>>>>>>>>>>> part >>>>>>>>>>>>>> were >>>>>>>>>>>>>> added to >>>>>>>>>>>>>> the >>>>>>>>>>>>>> codebase. HBase doesn't actually authenticates >>>>>>>>>>>>>> the user >>>>>>>>>>>>>> when >>>>>>>>>>>>>> mTLS >>>>>>>>>>>>>> is >>>>>>>>>>>>>> being used. >>>>>>>>>>>>>> >>>>>>>>>>>>>> In other words some other auth method Simple or >>>>>>>>>>>>>> Kerberos is >>>>>>>>>>>>>> still >>>>>>>>>>>>>> needed to identify the HBase user, because mTLS >>>>>>>>>>>>>> doesn't >>>>>>>>>>>>>> extract >>>>>>>>>>>>>> identity information from the client >>>>>>>>>>>>>> certificate >>>>>>>>>>>>>> and >>>>>>>>>>>>>> doesn't >>>>>>>>>>>>>> map >>>>>>>>>>>>>> it to >>>>>>>>>>>>>> an active HBase user. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Is that correct? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>> Andor >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> [1] >>>>>>>>>>>>>> https://issues.apache.org/jira/browse/HBASE-27280 >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>> >>>>> -- >>>>> Best regards, >>>>> Andrew >>>>> >>>>> Unrest, ignorance distilled, nihilistic imbeciles - >>>>> It's what we’ve earned >>>>> Welcome, apocalypse, what’s taken you so long? >>>>> Bring us the fitting end that we’ve been counting on >>>>> - A23, Welcome, Apocalypse >>>>> >