Hi Piyush, It is possible to configure PrincipalBuilder for SASL ( https://cwiki.apache.org/confluence/display/KAFKA/KIP-189%3A+Improve+principal+builder+interface+and+add+support+for+SASL). If that satisfies your requirements, perhaps we can move wildcarded principals out of this KIP and focus on wildcarded resources?
On Tue, May 15, 2018 at 7:15 PM, Piyush Vijay <piyushvij...@gmail.com> wrote: > Hi Colin, > > Escaping at this level is making sense to me but let me think more and get > back to you. > > But should we not just get rid of one of AclBinding or AclBindingFilter > then? Is there a reason to keep both given that AclBindingFilter and > AclBinding look exact copy of each other after this change? This will be a > one-time breaking change in APIs marked as "Evolving", but makes sense in > the long term? Am I missing something here? > > > > Piyush Vijay > > On Tue, May 15, 2018 at 9:01 AM, Colin McCabe <cmcc...@apache.org> wrote: > > > Hi Piyush, > > > > I think AclBinding should operate the same way as AclBindingFilter. > > > > So you should be able to do something like this: > > > AclBindingFilter filter = new AclBindingFiler(new > > ResourceFilter(ResourceType.GROUP, "foo*")) > > > AclBinding binding = new AclBinding(new Resource(ResourceType.GROUP, > > "foo*")) > > > assertTrue(filter.matches(binding)); > > > > Thinking about this more, it's starting to feel really messy to create > new > > "pattern" constructors for Resource and ResourceFilter. I don't think > > people will be able to figure this out. Maybe we should just have a > > limited compatibility break here, where it is now required to escape > weird > > consumer group names when creating ACLs for them. > > > > To future-proof this, we should reserve a bunch of characters at once, > > like *, @, $, %, ^, &, +, [, ], etc. If these characters appear in a > > resource name, it should be an error, unless they are escaped with a > > backslash. That way, we can use them in the future. We should create a > > Resource.escapeName function which adds the correct escape characters to > > resource names (so it would translate foo* into foo\*, foo+bar into > > foo\+bar, etc. etc. > > > > best, > > Colin > > > > > > On Mon, May 14, 2018, at 17:08, Piyush Vijay wrote: > > > Colin, > > > > > > createAcls take a AclBinding, however, instead of AclBindingFilter. > What > > > are your thoughts here? > > > > > > public abstract DescribeAclsResult describeAcls(AclBindingFilter > > > filter, DescribeAclsOptions options); > > > > > > public abstract CreateAclsResult createAcls(Collection<AclBinding> > > > acls, CreateAclsOptions options); > > > > > > public abstract DeleteAclsResult > > > deleteAcls(Collection<AclBindingFilter> filters, DeleteAclsOptions > > > options); > > > > > > > > > Thanks > > > > > > Piyush Vijay > > > > > > On Mon, May 14, 2018 at 9:26 AM, Andy Coates <a...@confluent.io> > wrote: > > > > > > > +1 > > > > > > > > On 11 May 2018 at 17:14, Colin McCabe <cmcc...@apache.org> wrote: > > > > > > > > > Hi Andy, > > > > > > > > > > I see what you mean. I guess my thought here is that if the fields > > are > > > > > private, we can change it later if we need to. > > > > > > > > > > I definitely agree that we should use the scheme you describe for > > sending > > > > > ACLs over the wire (just the string + version number) > > > > > > > > > > cheers, > > > > > Colin > > > > > > > > > > > > > > > On Fri, May 11, 2018, at 09:39, Andy Coates wrote: > > > > > > i think I'm agreeing with you. I was merely suggesting that > having > > an > > > > > > additional field that controls how the current field is > > interpreted is > > > > > more > > > > > > flexible / extensible in the future than using a 'union' style > > > > approach, > > > > > > where only one of several possible fields should be populated. > But > > > > it's a > > > > > > minor thing. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 10 May 2018 at 09:29, Colin McCabe <cmcc...@apache.org> > wrote: > > > > > > > > > > > > > Hi Andy, > > > > > > > > > > > > > > The issue that I was trying to solve here is the Java API. > Right > > > > now, > > > > > > > someone can write "new ResourceFilter(ResourceType. > > TRANSACTIONAL_ID, > > > > > > > "foo*") and have a ResourceFilter that applies to a > > Transactional ID > > > > > named > > > > > > > "foo*". This has to continue to work, or else we have broken > > > > > compatibility. > > > > > > > > > > > > > > I was proposing that there would be something like a new > function > > > > like > > > > > > > ResourceFilter.fromPattern(ResourceType.TRANSACTIONAL_ID, > > "foo*") > > > > > which > > > > > > > would create a ResourceFilter that applied to transactional IDs > > > > > starting > > > > > > > with "foo", rather than transactional IDs named "foo*" > > specifically. > > > > > > > > > > > > > > I don't think it's important whether the Java class has an > > integer, > > > > an > > > > > > > enum, or two string fields. The important thing is that > there's > > a > > > > new > > > > > > > static function, or new constructor overload, etc. that works > for > > > > > patterns > > > > > > > rather than literal strings. > > > > > > > > > > > > > > On Thu, May 10, 2018, at 03:30, Andy Coates wrote: > > > > > > > > Rather than having name and pattern fields on the > > ResourceFilter, > > > > > where > > > > > > > > it’s only valid for one to be set, and we want to restrict > the > > > > > character > > > > > > > > set in case future enhancements need them, we could instead > > add a > > > > new > > > > > > > > integer ‘nameType’ field, and use constants to indicate how > the > > > > name > > > > > > > > field should be interpreted, e.g. 0 = literal, 1 = wildcard. > > This > > > > > would > > > > > > > > be extendable, e.g we can later add 2 = regex, or what ever, > > and > > > > > > > > wouldn’t require any escaping. > > > > > > > > > > > > > > This is very user-unfriendly, though. Users don't want to have > > to > > > > > > > explicitly supply a version number when using the API, which is > > what > > > > > this > > > > > > > would force them to do. I don't think users are going to want > to > > > > > memorize > > > > > > > that version 4 supprted "+", whereas version 3 only supported > > > > "[0-9]", > > > > > or > > > > > > > whatever. > > > > > > > > > > > > > > Just as an example, do you remember which versions of > > FetchRequest > > > > > added > > > > > > > which features? I don't. I always have to look at the code to > > > > > remember. > > > > > > > > > > > > > > Also, escaping is still required any time you overload a > > character to > > > > > mean > > > > > > > two things. Escaping is required in the current proposal to be > > able > > > > to > > > > > > > create a pattern that matches only "foo*". You have to type > > "foo\*" > > > > > It > > > > > > > would be required if we forced users to specify a version, as > > well. > > > > > > > > > > > > > > best, > > > > > > > Colin > > > > > > > > > > > > > > > > > > > > > > > Sent from my iPhone > > > > > > > > > > > > > > > > > On 7 May 2018, at 05:16, Piyush Vijay < > > piyushvij...@gmail.com> > > > > > wrote: > > > > > > > > > > > > > > > > > > Makes sense. I'll update the KIP. > > > > > > > > > > > > > > > > > > Does anyone have any other comments? :) > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > > > > > > > > > > Piyush Vijay > > > > > > > > > > > > > > > > > >> On Thu, May 3, 2018 at 11:55 AM, Colin McCabe < > > > > cmcc...@apache.org > > > > > > > > > > > > > wrote: > > > > > > > > >> > > > > > > > > >> Yeah, I guess that's a good point. It probably makes > sense > > to > > > > > > > support the > > > > > > > > >> prefix scheme for consumer groups and transactional IDs as > > well > > > > as > > > > > > > topics. > > > > > > > > >> > > > > > > > > >> I agree that the current situation where anything goes in > > > > consumer > > > > > > > group > > > > > > > > >> names and transactional ID names is not ideal. I wish we > > could > > > > > > > rewind the > > > > > > > > >> clock and impose restrictions on the names. However, it > > doesn't > > > > > seem > > > > > > > > >> practical at the moment. Adding new restrictions would > > break a > > > > > lot of > > > > > > > > >> existing users after an upgrade. It would be a really bad > > > > upgrade > > > > > > > > >> experience. > > > > > > > > >> > > > > > > > > >> However, I think we can support this in a compatible way. > > From > > > > > the > > > > > > > > >> perspective of AdminClient, we just have to add a new > field > > to > > > > > > > > >> ResourceFilter. Currently, it has two fields, > resourceType > > and > > > > > name: > > > > > > > > >> > > > > > > > > >>> /** > > > > > > > > >>> * A filter which matches Resource objects. > > > > > > > > >>> * > > > > > > > > >>> * The API for this class is still evolving and we may > break > > > > > > > > >> compatibility in minor releases, if necessary. > > > > > > > > >>> */ > > > > > > > > >>> @InterfaceStability.Evolving > > > > > > > > >>> public class ResourceFilter { > > > > > > > > >>> private final ResourceType resourceType; > > > > > > > > >>> private final String name; > > > > > > > > >> > > > > > > > > >> We can add a third field, pattern. > > > > > > > > >> > > > > > > > > >> So the API will basically be, if I create a > > > > > > > ResourceFilter(resourceType=GROUP, > > > > > > > > >> name=foo*, pattern=null), it applies only to the consumer > > group > > > > > named > > > > > > > > >> "foo*". If I create a ResourceFilter(resourceType=GROUP, > > > > > name=null, > > > > > > > > >> pattern=foo*), it applies to any consumer group starting > in > > > > "foo". > > > > > > > name > > > > > > > > >> and pattern cannot be both set at the same time. This > > preserves > > > > > > > > >> compatibility at the AdminClient level. > > > > > > > > >> > > > > > > > > >> It's possible that we will want to add more types of > > pattern in > > > > > the > > > > > > > > >> future. So we should reserve "special characters" such as > > +, /, > > > > > &, > > > > > > > %, #, > > > > > > > > >> $, etc. These characters should be treated as special > > unless > > > > > they are > > > > > > > > >> prefixed with a backslash to escape them. This will allow > > us to > > > > > add > > > > > > > > >> support for using these characters in the future without > > > > breaking > > > > > > > > >> compatibility. > > > > > > > > >> > > > > > > > > >> At the protocol level, we need a new API version for > > > > > > > CreateAclsRequest / > > > > > > > > >> DeleteAclsRequest. The new API version will send all > > special > > > > > > > characters > > > > > > > > >> over the wire escaped rather than directly. (So there is > no > > > > need > > > > > for > > > > > > > the > > > > > > > > >> equivalent of both "name" and "pattern"-- we translate > name > > > > into a > > > > > > > validly > > > > > > > > >> escaped pattern that matches only one thing, by adding > > escape > > > > > > > characters as > > > > > > > > >> appropriate.) The broker will validate the new API > version > > and > > > > > reject > > > > > > > > >> malformed of unsupported patterns. > > > > > > > > >> > > > > > > > > >> At the ZK level, we can introduce a protocol version to > the > > data > > > > > in > > > > > > > ZK-- > > > > > > > > >> or store it under a different root. > > > > > > > > >> > > > > > > > > >> best, > > > > > > > > >> Colin > > > > > > > > >> > > > > > > > > >> > > > > > > > > >>> On Wed, May 2, 2018, at 18:09, Piyush Vijay wrote: > > > > > > > > >>> Thank you everyone for the interest and, prompt and > > valuable > > > > > > > feedback. I > > > > > > > > >>> really appreciate the quick turnaround. I’ve tried to > > organize > > > > > the > > > > > > > > >> comments > > > > > > > > >>> into common headings. See my replies below: > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> *Case of ‘*’ might already be present in consumer groups > > and > > > > > > > > >> transactional > > > > > > > > >>> ids* > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - We definitely need wildcard ACLs support for > resources > > like > > > > > > > consumer > > > > > > > > >>> groups and transactional ids for the reason Andy > > mentioned. A > > > > > big > > > > > > > win > > > > > > > > >> of > > > > > > > > >>> this feature is that service providers don’t have to > > track > > > > and > > > > > keep > > > > > > > > >>> up-to-date all the consumer groups their customers are > > using. > > > > > > > > >>> - I agree with Andy’s thoughts on the two possible > ways. > > > > > > > > >>> - My vote would be to do the breaking change because we > > > > should > > > > > > > > >> restrict > > > > > > > > >>> the format of consumer groups and transactional ids > > sooner > > > > than > > > > > > > later. > > > > > > > > >>> - Consumer groups and transactional ids are basic > > Kafka > > > > > > > concepts. > > > > > > > > >>> There is a lot of value in having a defined naming > > > > > convention on > > > > > > > > >> these > > > > > > > > >>> concepts. > > > > > > > > >>> - This will help us not run into more issues down > the > > > > line. > > > > > > > > >>> - I’m not sure if people actually use ‘*’ in their > > > > consumer > > > > > > > group > > > > > > > > >>> names anyway. > > > > > > > > >>> - Escaping ‘*’ isn’t trivial because ‘\’ is an > allowed > > > > > character > > > > > > > > >> too. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> *Why introduce two new APIs?* > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - It’s possible to make this change without introducing > > new > > > > > APIs > > > > > > > but > > > > > > > > >> new > > > > > > > > >>> APIs are required for inspection. > > > > > > > > >>> - For example: If I want to fetch all ACLs that match > > > > > ’topicA*’, > > > > > > > it’s > > > > > > > > >>> not possible without introducing new APIs AND > maintaining > > > > > backwards > > > > > > > > >>> compatibility. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> *Matching multiple hosts* > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - Rajini is right that wildcard ACLs aren’t the correct > > fit > > > > for > > > > > > > > >>> specifying range of hosts. > > > > > > > > >>> - We will rely on KIP-252 for the proper functionality > ( > > > > > > > > >>> > > > > > > > > >>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > > > > > > > > >> 252+-+Extend+ACLs+to+allow+filtering+based+on+ip+ranges+ > > > > > and+subnets > > > > > > > > >>> ) > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> *Implementation of matching algorithm and performance > > concerns* > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - Updated the KIP with an implementation. > > > > > > > > >>> - Andy, you’re right. The length doesn’t play a part. > The > > > > > request > > > > > > > will > > > > > > > > >>> be authorized *iff* there is at least one matching > ALLOW > > and > > > > no > > > > > > > > >> matching > > > > > > > > >>> DENY irrespective of the prefix length. Included this > > detail > > > > > in the > > > > > > > > >> KIP. > > > > > > > > >>> - Since everything is stored in memory, the performance > > hit > > > > > isn’t > > > > > > > > >> really > > > > > > > > >>> significantly worse than the current behavior. > > > > > > > > >>> - Stephane’s performance improvement suggestion is a > > great > > > > > idea but > > > > > > > > >>> orthogonal. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> *Why extend this for principal?* > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - Thanks for the amazing points Rajini. > > > > > > > > >>> - There is a use case where ALL principals from an org > > might > > > > > want > > > > > > > to > > > > > > > > >>> access fix set of topics. > > > > > > > > >>> - User group functionality is currently missing. > > > > > > > > >>> - IIRC SASL doesn’t use custom principal builder. > > > > > > > > >>> - However, prefixing is not the right choice in all > > cases. > > > > > Agreed. > > > > > > > > >>> - Thoughts? > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> *Changes to AdminClient to support wildcard ACLs* > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - Thanks Colin for the implementation. It’s good to > have > > you > > > > > and > > > > > > > > >>> others > > > > > > > > >>> here for the expert opinions. > > > > > > > > >>> - The current implementation uses two classes: > > AclBinding and > > > > > > > > >>> AclBindingFilter. ( > > > > > > > > >>> > > > > > > > > >>> https://github.com/apache/kafka/blob/trunk/clients/src/ > > > > > > > > >> main/java/org/apache/kafka/common/acl/AclBinding.java > > > > > > > > >>> and > > > > > > > > >>> > > > > > > > > >>> https://github.com/apache/kafka/blob/trunk/clients/src/ > > > > > > > > >> main/java/org/apache/kafka/common/acl/AclBindingFilter. > java > > > > > > > > >>> ) > > > > > > > > >>> - AclBinding is definition of an Acl. It’s used to > create > > > > ACLs. > > > > > > > > >>> - AclBindingFilter is used to fetch or delete > “matching’ > > > > ACLs. > > > > > > > > >>> - In the context of wildcard suffixed ACLs, a stored > ACL > > may > > > > > have > > > > > > > ‘*’ > > > > > > > > >>> in > > > > > > > > >>> it. *It really removes the distinction between these > two > > > > > classes.* > > > > > > > > >>> - The current implementation uses ‘null’ to define > > wildcard > > > > ACL > > > > > > > > >>> (‘*’). I > > > > > > > > >>> think it’s not a good pattern and we should use ‘*’ for > > the > > > > > > > wildcard > > > > > > > > >>> ACL ( > > > > > > > > >>> > > > > > > > > >>> https://github.com/apache/kafka/blob/trunk/clients/src/ > > > > > > > > >> main/java/org/apache/kafka/common/acl/AclBindingFilter. > > java#L39 > > > > > > > > >>> and > > > > > > > > >>> > > > > > > > > >>> https://github.com/apache/kafka/blob/trunk/clients/src/ > > > > > > > > >> main/java/org/apache/kafka/common/resource/ > > > > > ResourceFilter.java#L37 > > > > > > > > >>> ). > > > > > > > > >>> - However, the above two changes are breaking change > but > > it > > > > > should > > > > > > > be > > > > > > > > >>> acceptable because the API is marked with > > > > > > > > >>> @InterfaceStability.Evolving. > > > > > > > > >>> - If everyone agrees to the above two changes (merging > > the > > > > two > > > > > > > > >>> classes > > > > > > > > >>> and using non-null values for blanket access), the only > > other > > > > > > > change > > > > > > > > >>> is > > > > > > > > >>> using the matching algorithm from the KIP to match > ACLs. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> Other comments: > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - > It may be worth excluding delegation token ACLs > from > > > > using > > > > > > > > >> prefixed > > > > > > > > >>> wildcards since it doesn't make much sense. > > > > > > > > >>> > > > > > > > > >>> I want to ask for clarification on what delegation token > > ACLs > > > > are > > > > > > > before > > > > > > > > >>> commenting. Wildcard suffixed ACLs are supported only for > > > > > resource > > > > > > > and > > > > > > > > >>> principal names. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> - A quick read makes me believe that I’ve fixed the > > > > formatting > > > > > > > issues > > > > > > > > >>> reported by Ted. Let me know if something is still > wrong > > and > > > > I > > > > > > > would > > > > > > > > >> be > > > > > > > > >>> happy to fix it. > > > > > > > > >>> - I’ve fixed the mismatch in signature reported by Ron. > > > > > > > > >>> - Andy, I’ve updated the KIP with the security hole > > related > > > > to > > > > > DENY > > > > > > > > >>> wildcard ACLs ‘*’ on the downgrade path. > > > > > > > > >>> - Wrt naming, wildcard suffixed ACLs sound reasonable > to > > me > > > > > until > > > > > > > > >>> someone raise a major objection. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> Let me know your thoughts. Looking forward to the next > > > > iteration. > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> Best, > > > > > > > > >>> > > > > > > > > >>> Piyush > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> Piyush Vijay > > > > > > > > >>> > > > > > > > > >>> On Wed, May 2, 2018 at 1:33 PM, Andy Coates < > > a...@confluent.io > > > > > > > > > > > > wrote: > > > > > > > > >>> > > > > > > > > >>>>> Perhaps there is a simpler way. It seems like the > > resource > > > > > that > > > > > > > > >> people > > > > > > > > >>>> really want to use prefixed ACLs with is topic names. > > Because > > > > > topic > > > > > > > > >> names > > > > > > > > >>>> can't contain "*", there is no ambiguity there, > either. I > > > > think > > > > > > > maybe > > > > > > > > >> we > > > > > > > > >>>> should restrict the prefix handling to topic resources. > > > > > > > > >>>> > > > > > > > > >>>> The KIP should cover consumer groups for sure, otherwise > > we're > > > > > back > > > > > > > to > > > > > > > > >> the > > > > > > > > >>>> situation users need to know, up front, the set of > > consumer > > > > > groups > > > > > > > an > > > > > > > > >>>> KStreams topology is going to use. > > > > > > > > >>>> > > > > > > > > >>>> I'm assuming transactional producer Ids would be the > same. > > > > > > > > >>>> > > > > > > > > >>>> The cleanest solution would be to restrict the > characters > > in > > > > > group > > > > > > > and > > > > > > > > >>>> transaction producer ids, but that's a breaking change > > that > > > > > might > > > > > > > > >> affect a > > > > > > > > >>>> lot of people. > > > > > > > > >>>> > > > > > > > > >>>> Another solution might be to add a protocol version to > the > > > > `Acl` > > > > > > > type, > > > > > > > > >> (not > > > > > > > > >>>> the current `version` field used for optimistic > > concurrency > > > > > > > control), > > > > > > > > >>>> defaulting it to version 1 if it is not present, and > > releasing > > > > > this > > > > > > > > >> change > > > > > > > > >>>> as version 2. This would at least allow us to leave the > > > > > version 1 > > > > > > > ACLs > > > > > > > > >>>> as-is, (which makes for a cleaner storey if a cluster is > > > > > > > downgraded). > > > > > > > > >> There > > > > > > > > >>>> is then potential to escape '*' when writing version 2 > > ACLs. > > > > > (And > > > > > > > > >> introduce > > > > > > > > >>>> code to check for supported ACL versions going forward). > > > > > Though... > > > > > > > how > > > > > > > > >> do > > > > > > > > >>>> we escape? If the consumer group is free form, then any > > escape > > > > > > > > >> sequence is > > > > > > > > >>>> also valid. Aren't there metrics that use the group > > name? > > > > If > > > > > > > there > > > > > > > > >> are, > > > > > > > > >>>> I'd of thought we'd need to restrict the char set > anyway. > > > > > > > > >>>> > > > > > > > > >>>>> On 2 May 2018 at 18:57, charly molter < > > > > charly.mol...@gmail.com > > > > > > > > > > > > > wrote: > > > > > > > > >>>>> > > > > > > > > >>>>> The fact that consumer groups and > transactionalProducerId > > > > don't > > > > > > > have > > > > > > > > >> a > > > > > > > > >>>>> strict format is problematic (we have problems with > > people > > > > with > > > > > > > empty > > > > > > > > >>>>> spaces at the end of their consumer group for example). > > > > > > > > >>>>> With 2.0 around the corner and the possibility to fix > > these > > > > > errors > > > > > > > > >> from > > > > > > > > >>>> the > > > > > > > > >>>>> past should we create a KIP to restrict these names > like > > we > > > > do > > > > > for > > > > > > > > >>>> topics? > > > > > > > > >>>>> > > > > > > > > >>>>> Thanks! > > > > > > > > >>>>> Charly > > > > > > > > >>>>> > > > > > > > > >>>>> On Wed, May 2, 2018 at 6:22 PM Colin McCabe < > > > > > cmcc...@apache.org> > > > > > > > > >> wrote: > > > > > > > > >>>>> > > > > > > > > >>>>>> Hi Piyush, > > > > > > > > >>>>>> > > > > > > > > >>>>>> Thanks for the KIP! It seems like it will be really > > useful. > > > > > > > > >>>>>> > > > > > > > > >>>>>> As Rajini commented, the names for some resources > (such > > as > > > > > > > consumer > > > > > > > > >>>>>> groups) can include stars. So your consumer group > > might be > > > > > named > > > > > > > > >>>> "foo*". > > > > > > > > >>>>>> We need a way of explicitly referring to that consumer > > group > > > > > name, > > > > > > > > >>>> rather > > > > > > > > >>>>>> than to the foo prefix. A simple way would be to > > escape the > > > > > star > > > > > > > > >> with > > > > > > > > >>>> a > > > > > > > > >>>>>> backslash: "foo\*" During the software upgrade > > process, we > > > > > also > > > > > > > > >> need > > > > > > > > >>>> to > > > > > > > > >>>>>> translate all ACLs that refer to "foo*" into "foo\*". > > > > > Otherwise, > > > > > > > > >> the > > > > > > > > >>>>>> upgrade could create a security hole by granting more > > access > > > > > than > > > > > > > > >> the > > > > > > > > >>>>>> administrator intended. > > > > > > > > >>>>>> > > > > > > > > >>>>>> Perhaps there is a simpler way. It seems like the > > resource > > > > > that > > > > > > > > >> people > > > > > > > > >>>>>> really want to use prefixed ACLs with is topic names. > > > > Because > > > > > > > > >> topic > > > > > > > > >>>>> names > > > > > > > > >>>>>> can't contain "*", there is no ambiguity there, > > either. I > > > > > think > > > > > > > > >> maybe > > > > > > > > >>>> we > > > > > > > > >>>>>> should restrict the prefix handling to topic > resources. > > > > > > > > >>>>>> > > > > > > > > >>>>>> Are the new "getMatchingAcls" methods needed? It > seems > > like > > > > > they > > > > > > > > >> break > > > > > > > > >>>>>> encapsulation. All that the calling code really needs > > to do > > > > > is > > > > > > > > >> call > > > > > > > > >>>>>> Authorizer#authorize(session, operation, resource). > The > > > > > > > authorizer > > > > > > > > >>>> knows > > > > > > > > >>>>>> that if it has an ACL allowing access to topics > starting > > > > with > > > > > > > > >> "foo" and > > > > > > > > >>>>>> someone calls authorize(foobar), it should allow > access. > > > > > It's not > > > > > > > > >>>>>> necessary for the calling code to know exactly what > the > > > > rules > > > > > are > > > > > > > > >> for > > > > > > > > >>>>>> authorization. The Authorizer#getAcls, APIs are only > > needed > > > > > when > > > > > > > > >> the > > > > > > > > >>>>>> AdminClient wants to list ACLs. > > > > > > > > >>>>>> > > > > > > > > >>>>>> best, > > > > > > > > >>>>>> Colin > > > > > > > > >>>>>> > > > > > > > > >>>>>> > > > > > > > > >>>>>>> On Wed, May 2, 2018, at 03:31, Rajini Sivaram wrote: > > > > > > > > >>>>>>> Hi Piyush, > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> Thanks for the KIP for this widely requested feature. > > A few > > > > > > > > >>>>>>> comments/questions: > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> 1. Some resource names can contain '*'. For example, > > > > consumer > > > > > > > > >> groups > > > > > > > > >>>> or > > > > > > > > >>>>>>> transactional ids. I am wondering whether we need to > > > > restrict > > > > > > > > >>>>> characters > > > > > > > > >>>>>>> for these entities or provide a way to distinguish > > > > wildcarded > > > > > > > > >>>> resource > > > > > > > > >>>>>> from > > > > > > > > >>>>>>> a resource containing the wildcard character. > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> 2. I am not sure we want to do wildcarded principals. > > It > > > > > feels > > > > > > > > >> like a > > > > > > > > >>>>>>> workaround in the absence of user groups. In the > longer > > > > > term, I > > > > > > > > >> think > > > > > > > > >>>>>>> groups (without wildcards) would be a better option > to > > > > > configure > > > > > > > > >> ACLs > > > > > > > > >>>>> for > > > > > > > > >>>>>>> groups of users, rather than building user principals > > which > > > > > have > > > > > > > > >>>> common > > > > > > > > >>>>>>> prefixes. In the shorter term, since a configurable > > > > > > > > >> PrincipalBuilder > > > > > > > > >>>> is > > > > > > > > >>>>>>> used to build the principal used for authorization, > > perhaps > > > > > > > > >> using the > > > > > > > > >>>>>>> prefix itself as the principal would work (unless > > different > > > > > > > > >> quotas > > > > > > > > >>>> are > > > > > > > > >>>>>>> required for the full user name)? User principal > > strings > > > > take > > > > > > > > >>>> different > > > > > > > > >>>>>>> formats for different security protocols (eg. > > > > > CN=xxx,O=org,C=UK > > > > > > > > >> for > > > > > > > > >>>>> SSL) > > > > > > > > >>>>>>> and simple prefixing isn't probably the right > grouping > > in > > > > > many > > > > > > > > >> cases. > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> 3. I am assuming we don't want to do wildcarded hosts > > in > > > > > this KIP > > > > > > > > >>>> since > > > > > > > > >>>>>>> wildcard suffix doesn't really work for hosts. > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> 4. It may be worth excluding delegation token ACLs > from > > > > using > > > > > > > > >>>> prefixed > > > > > > > > >>>>>>> wildcards since it doesn't make much sense. > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> Regards, > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> Rajini > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> On Wed, May 2, 2018 at 2:05 AM, Stephane Maarek < > > > > > > > > >>>>>>> steph...@simplemachines.com.au> wrote: > > > > > > > > >>>>>>> > > > > > > > > >>>>>>>> Hi, thanks for this badly needed feature > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> 1) Why introduce two new APIs in authorizer instead > of > > > > > > > > >> replacing > > > > > > > > >>>> the > > > > > > > > >>>>>>>> implementation for simple ACL authorizer with adding > > the > > > > > > > > >> wildcard > > > > > > > > >>>>>>>> capability? > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> 2) is there an impact to performance as now we're > > > > evaluating > > > > > > > > >> more > > > > > > > > >>>>>> rules ? A > > > > > > > > >>>>>>>> while back I had evaluated the concept of cached Acl > > > > result > > > > > so > > > > > > > > >>>>> swallow > > > > > > > > >>>>>> the > > > > > > > > >>>>>>>> cost of computing an authorisation cost once and > then > > > > doing > > > > > in > > > > > > > > >>>> memory > > > > > > > > >>>>>>>> lookups. CF: https://issues.apache.org/ > > > > > jira/browse/KAFKA-5261 > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> 3) is there any need to also extend this to consumer > > group > > > > > > > > >>>> resources > > > > > > > > >>>>> ? > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> 4) create topics KIP as recently moved permissions > > out of > > > > > > > > >> Cluster > > > > > > > > >>>>> into > > > > > > > > >>>>>>>> Topic. Will wildcard be supported for this action > too? > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> Thanks a lot for this ! > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> On Wed., 2 May 2018, 1:37 am Ted Yu, < > > yuzhih...@gmail.com > > > > > > > > > > > > > >> wrote: > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>>> w.r.t. naming, we can keep wildcard and drop > > 'prefixed' > > > > (or > > > > > > > > >>>>>> 'suffixed') > > > > > > > > >>>>>>>>> since the use of regex would always start with > > > > non-wildcard > > > > > > > > >>>>> portion. > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> Cheers > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> On Tue, May 1, 2018 at 12:13 PM, Andy Coates < > > > > > > > > >> a...@confluent.io> > > > > > > > > >>>>>> wrote: > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>>> Hi Piyush, > > > > > > > > >>>>>>>>>> > > > > > > > > >>>>>>>>>> Can you also document in the Compatibility section > > what > > > > > > > > >> would > > > > > > > > >>>>>> happen > > > > > > > > >>>>>>>>> should > > > > > > > > >>>>>>>>>> the cluster be upgraded, wildcard-suffixed ACLs > are > > > > added, > > > > > > > > >> and > > > > > > > > >>>>>> then the > > > > > > > > >>>>>>>>>> cluster is rolled back to the previous version. > On > > > > > > > > >> downgrade > > > > > > > > >>>> the > > > > > > > > >>>>>>>> partial > > > > > > > > >>>>>>>>>> wildcard ACLs will be treated as literals and > hence > > > > never > > > > > > > > >> match > > > > > > > > >>>>>>>> anything. > > > > > > > > >>>>>>>>>> This is fine for ALLOW ACLs, but some might > consider > > > > this > > > > > a > > > > > > > > >>>>>> security > > > > > > > > >>>>>>>> hole > > > > > > > > >>>>>>>>>> if a DENY ACL is ignored, so this needs to be > > > > documented, > > > > > > > > >> both > > > > > > > > >>>> in > > > > > > > > >>>>>> the > > > > > > > > >>>>>>>> KIP > > > > > > > > >>>>>>>>>> and the final docs. > > > > > > > > >>>>>>>>>> > > > > > > > > >>>>>>>>>> For some reason I find the term 'prefixed wildcard > > ACLs' > > > > > > > > >> easier > > > > > > > > >>>>> to > > > > > > > > >>>>>> grok > > > > > > > > >>>>>>>>>> than 'wildcard suffixed ACLs'. Probably because in > > the > > > > > > > > >> former > > > > > > > > >>>> the > > > > > > > > >>>>>>>>>> 'wildcard' term comes after the positional > > adjective, > > > > > which > > > > > > > > >>>>>> matches the > > > > > > > > >>>>>>>>>> position of the wildcard char in the resource > name, > > i.e. > > > > > > > > >>>> "some*". > > > > > > > > >>>>>> It's > > > > > > > > >>>>>>>>>> most likely a person thing, but I thought I'd > > mention it > > > > > as > > > > > > > > >>>>> naming > > > > > > > > >>>>>> is > > > > > > > > >>>>>>>>>> important when it comes to making this initiative > > for > > > > > > > > >> users. > > > > > > > > >>>>>>>>>> > > > > > > > > >>>>>>>>>> On 1 May 2018 at 19:57, Andy Coates < > > a...@confluent.io> > > > > > > > > >> wrote: > > > > > > > > >>>>>>>>>> > > > > > > > > >>>>>>>>>>> Hi Piyush, > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> Thanks for raising this KIP - it's very much > > > > appreciated. > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> I've not had chance to digest it yet, but... > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> 1. you might want to add details of how the > > internals > > > > of > > > > > > > > >> the > > > > > > > > >>>>>>>>>>> `getMatchingAcls` is implemented. We'd want to > make > > > > sure > > > > > > > > >> the > > > > > > > > >>>>>>>> complexity > > > > > > > > >>>>>>>>>> of > > > > > > > > >>>>>>>>>>> the operation isn't adversely affected. > > > > > > > > >>>>>>>>>>> 2. You might want to be more explicit that the > > length > > > > of > > > > > > > > >> a > > > > > > > > >>>>> prefix > > > > > > > > >>>>>>>> does > > > > > > > > >>>>>>>>>> not > > > > > > > > >>>>>>>>>>> play a part in the `authorize` call, e.g. given > > ACLs > > > > > > > > >> {DENY, > > > > > > > > >>>>>> some.*}, > > > > > > > > >>>>>>>>>> {ALLOW, > > > > > > > > >>>>>>>>>>> some.prefix.*}, the longer, i.e. more specific, > > allow > > > > ACL > > > > > > > > >>>> does > > > > > > > > >>>>>> _not_ > > > > > > > > >>>>>>>>>>> override the more general deny ACL. > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> Thanks, > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> Andy > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> On 1 May 2018 at 16:59, Ron Dagostino < > > > > rndg...@gmail.com > > > > > > > > >>> > > > > > > > > >>>>> wrote: > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> Hi Piyush. I appreciated your talk at Kafka > > Summit > > > > and > > > > > > > > >>>>>> appreciate > > > > > > > > >>>>>>>> the > > > > > > > > >>>>>>>>>> KIP > > > > > > > > >>>>>>>>>>>> -- thanks. > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> Could you explain these mismatching references? > > Near > > > > > > > > >> the > > > > > > > > >>>> top > > > > > > > > >>>>>> of the > > > > > > > > >>>>>>>>> KIP > > > > > > > > >>>>>>>>>>>> you refer to these proposed new method > signatures: > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> def getMatchingAcls(resource: Resource): > Set[Acl] > > > > > > > > >>>>>>>>>>>> def getMatchingAcls(principal: KafkaPrincipal): > > > > > > > > >>>> Map[Resource, > > > > > > > > >>>>>>>>> Set[Acl]] > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> But near the bottom of the KIP you refer to > > different > > > > > > > > >> method > > > > > > > > >>>>>>>>>>>> signatures that don't seem to match the above > > ones: > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> getMatchingAcls(topicRegex) > > > > > > > > >>>>>>>>>>>> getMatchingAcls(principalRegex) > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> Ron > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> On Tue, May 1, 2018 at 11:48 AM, Ted Yu < > > > > > > > > >>>> yuzhih...@gmail.com> > > > > > > > > >>>>>>>> wrote: > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> The KIP was well written. Minor comment on > > > > formatting: > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> https://github.com/apache/ > > kafka/blob/trunk/core/src/ > > > > > > > > >>>>>>>>>>>>> main/scala/kafka/admin/AclCommand.scala > > > > > > > > >>>>>>>>>>>>> to > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> Leave space between the URL and 'to' > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> Can you describe changes for the AdminClient ? > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> Thanks > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> On Tue, May 1, 2018 at 8:12 AM, Piyush Vijay < > > > > > > > > >>>>>>>>> piyushvij...@gmail.com> > > > > > > > > >>>>>>>>>>>>> wrote: > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>>> Hi all, > > > > > > > > >>>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>>> I just opened a KIP to add support for > wildcard > > > > > > > > >> suffixed > > > > > > > > >>>>>> ACLs. > > > > > > > > >>>>>>>>> This > > > > > > > > >>>>>>>>>> is > > > > > > > > >>>>>>>>>>>>> one > > > > > > > > >>>>>>>>>>>>>> of the feature I talked about in my Kafka > summit > > > > > > > > >> talk > > > > > > > > >>>> and > > > > > > > > >>>>> we > > > > > > > > >>>>>>>>>> promised > > > > > > > > >>>>>>>>>>>> to > > > > > > > > >>>>>>>>>>>>>> upstream it :) > > > > > > > > >>>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>>> The details are here - > > > > > > > > >>>>>>>>>>>>>> https://cwiki.apache.org/ > > > > > > > > >> confluence/display/KAFKA/KIP- > > > > > > > > >>>>>>>>>>>>>> 290%3A+Support+for+wildcard+suffixed+ACLs > > > > > > > > >>>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>>> There is an open question about the way to add > > the > > > > > > > > >>>> support > > > > > > > > >>>>>> in > > > > > > > > >>>>>>>> the > > > > > > > > >>>>>>>>>>>>>> AdminClient, which I can discuss here in more > > detail > > > > > > > > >>>> once > > > > > > > > >>>>>>>> everyone > > > > > > > > >>>>>>>>>> has > > > > > > > > >>>>>>>>>>>>>> taken a first look at the KIP. > > > > > > > > >>>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>>> Looking forward to discuss the change. > > > > > > > > >>>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>>> Best, > > > > > > > > >>>>>>>>>>>>>> Piyush Vijay > > > > > > > > >>>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>>> > > > > > > > > >>>>>>>>>>>> > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>>> > > > > > > > > >>>>>>>>>> > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>> > > > > > > > > >>>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> -- > > > > > > > > >>>>> Charly Molter > > > > > > > > >>>>> > > > > > > > > >>>> > > > > > > > > >> > > > > > > > > > > > > > > > > > > >