Thanks! Makes sense. Tom
On Wednesday, April 22, 2015 1:25 PM, Parth Brahmbhatt <pbrahmbh...@hortonworks.com> wrote: You are right , I forgot to mention the ―operation option in CLI , I just added it. Sorry for about the confusion. Thanks Parth On 4/22/15, 11:22 AM, "Parth Brahmbhatt" <pbrahmbh...@hortonworks.com> wrote: >Sorry I missed your last questions. I am +0 on adding ―host option for >―list, we could add it for symmetry. Again if this is only a CLI change it >can be added later if you mean adding this in authorizer interface then we >should make a decision now. > >Given a choice I would like to actually keep only one option which is >resource based get (remove even the get based on principal). I see those >(getAcl for principal or host) as special filtering case which can easily >be achieved by a third party tool by doing "list all topics" and calling >getAcls for each topic and applying filtering logic on that. I really >don’t see the need to make those first class citizens of the authorizer >interface given these kind of queries will be issued outside of broker JVM >so they will not benefit from the caching and because the storage will be >indexed on resource both these options even as a first class API will just >scan all topic acls and apply filtering logic. > >Thanks >Parth > >On 4/22/15, 11:08 AM, "Parth Brahmbhatt" <pbrahmbh...@hortonworks.com> >wrote: > >>Please see all the available options here >>https://cwiki.apache.org/confluence/display/KAFKA/KIP-11+-+Authorization+ >>I >>nterface#KIP-11-AuthorizationInterface-AclManagement(CLI) . I think it >>covers both hosts and operations and allows to specify a list for both. >> >>Thanks >>Parth >> >>From: Tom Graves <tgraves...@yahoo.com<mailto:tgraves...@yahoo.com>> >>Reply-To: Tom Graves <tgraves...@yahoo.com<mailto:tgraves...@yahoo.com>> >>Date: Wednesday, April 22, 2015 at 11:02 AM >>To: Parth Brahmbhatt >><pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com>>, >>"dev@kafka.apache.org<mailto:dev@kafka.apache.org>" >><dev@kafka.apache.org<mailto:dev@kafka.apache.org>> >>Subject: Re: [DISCUSS] KIP-11- Authorization design for kafka security >> >>Thanks for the explanations Parth. >> >>On the configs questions, the way I see it is its more likely to >>accidentally give everyone access, especially since you have to run a >>separate command to change the acls. If there was some config for >>defaults, a cluster admin could change that to be nobody or certain set >>of users, then grant others permissions. This would also remove the race >>between commands. This is something you can always add later though if >>people request it. >> >>So in kafka-acl.sh how do I actually tell it what the operation is? >>kafka-acl.sh --topic testtopic --add --grandprincipal user:joe,user:kate >> >>where does READ, WRITE, etc go? Can specify as a list so I don't have to >>run this a bunch of times for each. >> >>Do you want to have a --host option for --list so that admins could see >>what acls apply to specific host(s)? >> >>Tom >> >> >> >>On Wednesday, April 22, 2015 11:38 AM, Parth Brahmbhatt >><pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com>> wrote: >> >> >> >>FYI, I have modified the KIP to include group as resource. In order to >>access “joinGroup” and “commitOFfset” APIs the user will need a read >>permission on topic and WRITE permission on group. >> >>I plan to open a VOTE thread by noon if there are no more concerns. >> >>Thanks >>Parth >> >>On 4/22/15, 9:03 AM, "Tom Graves" >><tgraves...@yahoo.com.INVALID<mailto:tgraves...@yahoo.com.INVALID>> >>wrote: >> >>>Hey everyone, >>>Sorry to jump in on the conversation so late. I'm new to Kafka. I'll >>>apologize in advance if you have already covered some of my questions. >>>I >>>read through the wiki and had some comments and questions. >>>1) public enum Operation needs EDIT changed to ALTER >> >>> Done. >> >>>2) Does the Authorizer class need a setAcls? Rather then just add to be >>>able to set to explicit list and overwrite what was there? I see the >>>kafka-acl.sh lists a removeall so I guess you could do removeall and >>>then >>>add. I also don't see a removeall in the Authorizer class, is it going >>>to loop through them all to remove each one? >> >> There is an overloaded version of removeAcls in the interface that >>takes >>in resource as the only input and as described in the javadoc all the >>acls >>attached to that resource will be deleted. To cover the setAcl use case >>the caller can first call remove and then add. >> >>>3) Can someone tell me what the use case to do acls based on the hosts? >>>I can see some possibilities just wondering if we can concrete ones >>>where >>>one user is allowed from one host but not another. >> >> I am not sure if I understand the question given the use case you >>described in your question is what we are trying to cover with use of >>hosts in Acl. There are some additional use cases like “allow access to >>any user from host1,host2” but I think primarily it gives the admins the >>ability to define acls at a more granular level. >> >>>4) I'm a bit unclear how the "resource" works in the Authorizer class. >>>From what I see we have 2 resources - topics and cluster. If I want to >>>add an acl to allow "joe" to CREATE for the cluster then I call addAcls >>>with Acl("user: joe", ALLOW, Set(*), Set(CREATE)) and "cluster"? What >>>if I want to call addAcls for DESCRIBE on a topic? Is the resource then >>>"topic" or is it the topic name? >> >> We now have 3 resources(added group), please see the updated doc. The >>CREATE acl that you described is correct. For any topic operation you >>should use topic name as the resource name and for group the user will >>provide groupId as resource name. >> >>>5) reassigning partitions is a CLUSTER_ACTION or superuser? Its not >>>totally clear to me the differences between these. what about >>>increasing >>># of partitions? >> >> I see this as an alter topic operation so it is at topic level and >>the >>user must have alter permissions on topic. >> >>>6) groups are mentioned, are we supporting right away or is that a >>>follow >>>on item? (is there going to be a kafka.supergroups) >> >> I think it can be a separate jira just for braking down the code >>review >>in smaller chunk. We will support it in first version but I think if we >>can not do it for any reason that should not block a release with all the >>other authZ work. We made deliberate design choices (like introducing a >>principalType in KafkaPrinciapl) to allow supporting groups as an >>incremental change. >> >>>7) Are there config options for setting acls when I create my topic? Or >>>do I have to create my topic and then run the kafka-acl.sh script to set >>>them? Although its very small, there would be possible race there that >>>someone could start producing to topic before acls are set. >> >> We discussed this yesterday and we agreed to go with kafka-acl.sh. >>Yes >>there is a very very small window of vulnerability but I think that >>really >>does not warrant to change the decision in this case. >> >>>8) are there configs for cluster level acl defaults? Or does it default >>>to superusers on bringing up new cluster and you have to modify with >>>cli. >>>thanks,Tom >> >> No defaults, the default is superusers will have full access. I don’t >>think making assumptions about ones security requirement should be our >>burden. >> >> >>> >>> On Tuesday, April 21, 2015 7:10 PM, Parth Brahmbhatt >>><pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com>> wrote: >>> >>> >>> I have added the notes to KIP-11 Open question sections. >>> >>>Thanks >>>Parth >>> >>>On 4/21/15, 4:49 PM, "Gwen Shapira" >>><gshap...@cloudera.com<mailto:gshap...@cloudera.com>> wrote: >>> >>>>Adding my notes from today's call to the thread: >>>> >>>>** Deny or Allow all by default? We will add a configuration to >>>>control this. The configuration will default to “allow” for backward >>>>compatibility. Security admins can set it to "deny" >>>> >>>>** Storing ACLs for default authorizers: We'll store them in ZK. We'll >>>>support pointing the authorizer to any ZK. >>>>The use of ZK will be internal to the default authorizer. Authorizer >>>>reads ACLs from cache every hour. We proposed having mechanism >>>>(possibly via new ZK node) to tell broker to refresh the cache >>>>immediately. >>>> >>>>** Support deny as permission type - we agreed to keep this. >>>> >>>>** Mapping operations to API: We may need to add Group as a resource, >>>>with JoinGroup and OffsetCommit require privilege on the consumer >>>>group. >>>>This can be something we pass now and authorizers can support in >>>>future. - Jay will write specifics to the mailing list discussion. >>>> >>>>On Tue, Apr 21, 2015 at 4:32 PM, Jay Kreps >>>><jay.kr...@gmail.com<mailto:jay.kr...@gmail.com>> wrote: >>>>> Following up on the KIP discussion. Two options for authorizing >>>>>consumers >>>>> to read topic "t" as part of group "g": >>>>> 1. READ permission on resource /topic/t >>>>> 2. READ permission on resource /topic/t AND WRITE permission on >>>>>/group/g >>>>> >>>>> The advantage of (1) is that it is simpler. The disadvantage is that >>>>>any >>>>> member of any group that reads from t can commit offsets as any other >>>>> member of a different group. This doesn't effect data security (who >>>>>can >>>>> access what) but it is a bit of a management issue--a malicious >>>>>person >>>>>can >>>>> cause data loss or duplicates for another consumer by committing >>>>>offset. >>>>> >>>>> I think I favor (2) but it's worth it to think it through. >>>>> >>>>> -Jay >>>>> >>>>> On Tue, Apr 21, 2015 at 2:43 PM, Parth Brahmbhatt < >>>>> pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com>> >>>>>wrote: >>>>> >>>>>> Hey Jun, >>>>>> >>>>>> Yes and we support wild cards for all acl entities principal, hosts >>>>>>and >>>>>> operation. >>>>>> >>>>>> Thanks >>>>>> Parth >>>>>> >>>>>> On 4/21/15, 9:06 AM, "Jun Rao" >>>>>><j...@confluent.io<mailto:j...@confluent.io>> wrote: >>>>>> >>>>>> >Harsha, Parth, >>>>>> > >>>>>> >Thanks for the clarification. This makes sense. Perhaps we can >>>>>>clarify the >>>>>> >meaning of those rules in the wiki. >>>>>> > >>>>>> >Related to this, it seems that we need to support wildcard in >>>>>>cli/request >>>>>> >protocol for topics? >>>>>> > >>>>>> >Jun >>>>>> > >>>>>> >On Mon, Apr 20, 2015 at 9:07 PM, Parth Brahmbhatt < >>>>>> >pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com>> >>>>>>wrote: >>>>>> > >>>>>> >> The iptables on unix supports the DENY operator, not that it >>>>>>should >>>>>> >> matter. The deny operator can also be used to specify ³allow >>>>>>user1 >>>>>>to >>>>>> >>READ >>>>>> >> from topic1 from all hosts but host1,host2². Again we could add a >>>>>>host >>>>>> >> group semantic and extra complexity around that, not sure if its >>>>>>worth >>>>>> >>it. >>>>>> >> In addition with DENY operator you are now not forced to create a >>>>>> >>special >>>>>> >> group just to support the authorization use case. I am not >>>>>>convinced >>>>>> >>that >>>>>> >> the operator it self is really all that confusing. There are 3 >>>>>>practical >>>>>> >> use cases: >>>>>> >> - Resource with no acl what so ever -> allow access to everyone ( >>>>>>just >>>>>> >>for >>>>>> >> backward compatibility, I would much rather fail close and force >>>>>>users >>>>>> >>to >>>>>> >> explicitly grant acls that allows access to all users.) >>>>>> >> - Resource with some acl attached -> only users that have a >>>>>>matching >>>>>> >>allow >>>>>> >> acl are allowed (i.e. ³allow READ access to topic1 to user1 from >>>>>>all >>>>>> >> hosts², only user1 has READ access and no other user has access >>>>>>of >>>>>>any >>>>>> >> kind) >>>>>> >> - Resource with some allow and some deny acl attached -> users >>>>>>are >>>>>> >>allowed >>>>>> >> to perform operation only when they satisfy allow acl and do not >>>>>>have >>>>>> >> conflicting deny acl. Users that have no acl(allow or deny) will >>>>>>still >>>>>> >>not >>>>>> >> have any access. (i.e. ³allow READ access to topic1 to user1 from >>>>>>all >>>>>> >> hosts except host1 and host², only user1 has access but not from >>>>>>host1 >>>>>> >>an >>>>>> >> host2) >>>>>> >> >>>>>> >> I think we need to make a decision on deny primarily because with >>>>>> >> introduction of acl management API, Acl is now a public class >>>>>>that >>>>>>will >>>>>> >>be >>>>>> >> used by Ranger/Santry and other authroization providers. In >>>>>>Current >>>>>> >>design >>>>>> >> the acl has a permissionType enum field with possible values of >>>>>>Allow >>>>>> >>and >>>>>> >> Deny. If we chose to remove deny we can assume all acls to be of >>>>>>allow >>>>>> >> type and remove the permissionType field completely. >>>>>> >> >>>>>> >> Thanks >>>>>> >> Parth >>>>>> >> >>>>>> >> On 4/20/15, 6:12 PM, "Gwen Shapira" >>>>>><gshap...@cloudera.com<mailto:gshap...@cloudera.com>> wrote: >>>>>> >> >>>>>> >> >I think thats how its done in pretty much any system I can think >>>>>>of. >>>>>> >> > >>>>>> >> >>>>>> >> >>>>>> >>>>>> >>> >>> >>> >>> >> >> >> >