Hmm, I thought the semantics is that if you only have rule "deny user2", it means that everyone except user2 has access?
Thanks, Jun On Mon, Apr 20, 2015 at 3:25 PM, Parth Brahmbhatt < pbrahmbh...@hortonworks.com> wrote: > user3 does not have access and removing the deny rule does not grant him > or user2 access. user2 even without the deny rule will not have access. > > Thanks > Parth > > On 4/20/15, 12:03 PM, "Jun Rao" <j...@confluent.io> wrote: > > >Just a followup question. Suppose there are two rules. Rule1 allows user1 > >and rule2 denies user2. Does user3 have access? If not, does removing > >rule1 > >enable user3 access? > > > >Thanks, > > > >Jun > > > >On Mon, Apr 20, 2015 at 1:34 PM, Parth Brahmbhatt < > >pbrahmbh...@hortonworks.com> wrote: > > > >> > >> Hi Joel, > >> > >> Thanks for the review and I plan to update the KIP today with all the > >> updated info. My comments in line below. > >> > >> Thanks > >> Parth > >> > >> > >> On 4/20/15, 10:07 AM, "Joel Koshy" <jjkosh...@gmail.com<mailto: > >> jjkosh...@gmail.com>> wrote: > >> > >> Hi Parth, > >> > >> Nice work on this KIP. I did another read through and had a few more > >> comments (with edits after I went through the thread). Many of these > >> comments were brought up by others as well, so it appears that the KIP > >> would benefit from an update at this point to incorporate comments > >> from the thread and last hangout. > >> > >> - The operation enum is mostly self-explanatory, but it would help > >> (for the sake of clarity and completeness if nothing else) to > >> document exactly what each of the enums are. E.g., I think this came > >> up in our hangout - SEND_CONTROL_MESSAGE is unclear and I don't > >> remember what was said about it. <Edit>: After going through the > >> thread it seems the conclusion was to categorize operations. E.g., > >> WRITE could apply to multiple requests. Again, this is unclear, so > >> if it would be great if you could update the KIP to clarify what you > >> intend. > >> > >> Will add to document. SEND_CONTROL_MESSAGE Probably a very bad name but > >> these are intra borker API calls like controller notifying other > >>brokers to > >> update metadata or heartbeats. Any better naming suggestions? > >> > >> - When you update the KIP to categorize the requests it would also > >> help to have a column for what the resource is for each. > >> > >> Will add to the KIP. > >> > >> - FWIW I prefer a 1-1 mapping between requests and operations. I think > >> categorizing requests into these can be confusing because: > >> - The resource being protected for different requests will be > >> different. We are mostly thinking about topics (read/write) but > >> there are requests for which topic is not the right resource. > >> E.g., for topic creation, the resource as you suggested would be > >> something global/common such as “cluster”. For > >> OffsetCommit/FetchRequest, the resource may be the consumer group, > >> or maybe a tuple of <consumer group, topic>. So this can be > >> confusing - i.e., different resources and request types in the > >> same category. It may be simpler and clearer to just have a 1-1 > >> mapping between the operation enum and requests. > >> > >> I only see 2 resource categories right now cluster and topic. I don’t > >> really care one way or another so we can probably make a quick decision > >>in > >> tomorrow’s meeting to either to 1-1 mapping or have categorization? > >> > >> - Some requests that are intuitively READ have WRITE side-effects. > >> E.g., (currently) TopicMetadataRequest with auto-create, although > >> that will eventually go away. ConsumerMetadataRequest still > >> auto-creates the offsets topic. Likewise, ADMIN-type requests may > >> be interpreted as having side-effects (depending on who you ask). > >> > >> Yes and what I am doing right now is checking authorization for all > >> possible actions i.e. for auto-create it checks if the config has it > >> enabled and if yes, check for read + create authorization. Its not very > >> meaningful right now as there is no CREATE authorization but I think > >>this > >> is implementation detail, we need to ensure we call authorize with all > >> possible operations from KafkaAPI. > >> - <quote>When an ACL is missing - fail open</quote>. What does missing > >> mean? i.e., no explicit ACL for a principal? I'm confused by this > >> especially in relation to the precedence of DENY over ALLOW. So per > >> the description: > >> - If no ACLs exist for topic A then ALLOW all operations on it by > >> anyone. > >> - If I now add an ACL for a certain principal P to ALLOW (say) WRITE > >> to the topic then either: > >> - This has the effect of DENYing WRITE to all other principals > >> - Or, this ACL serves no purpose > >> - If the effect is to DENY WRITE to all other principals, what about > >> READ. Do all principals (including P) have READ permissions to > >> topic A? > >> - In other words, it seems for a specific ACL to be meaningful then > >> fail close is necessary for an absent ACL. > >> - <edit>After through the thread: it appears that the DENY override > >> only applies to the given principal. i.e., in the above case it > >> appears that the other principals will in fact be granted access. > >> Then this makes the ACL that was added pointless right? > >> > >> The rule I was going with is > >> - If there is no ACL I.e. This might be a topic that was created in non > >> secure mode or was created before we supported ACLs. We assume you do > >>not > >> want authorization and let all requests go through. > >> - once you add any ACL, we assume you want authorization on the topic > >>and > >> all the general authorization rules now start to apply, I.e we fail > >>close > >> if we don’t find an ACL that allows access or if we find an ACL that > >>denies > >> access. It does not matter if you added a READACL or WRITEACL or > >>ALLOWACL > >> or DENY ACL. If you add any ACL, now every user gets checked against > >>that > >> and if it does not satisfy the ACL, request fails. I.e. If you add an > >>ACL > >> “Allow write to topic-1 form user1 from all hosts” , user-1 has write > >> access from all hosts and no other user has any access(except for > >> superusers who have all the access). > >> - Deny ACLS are suppose to be used to restrict access authorized by some > >> allow ACL, they are not suppose to be required. Implicitly anyone who > >>does > >> not have an allow acl, gets denied. The Deny ACLs are only added to give > >> more control to administrators who wants more granular control with > >>lesser > >> config. The scenario described in mailing list was “Allow user X access > >> from all hosts but Host1,Host2”. in absence of DENY operator you will > >>have > >> to exhaustively list all possible hosts in your ACL which is what we are > >> trying to avoid. > >> > >> - On ZK ACLs: I think ZK will be closed to everyone except Kafka > >> brokers. This is a dependency on KIP-4 though. i.e., eventually all > >> clients should talk to brokers only via RPC. > >> > >> Yes. > >> > >> - Topic owner: list vs single entry - both have issues off the bat > >> (although list is more intuitive at least to me), but perhaps you > >> could write up some example workflows to clarify the current > >> proposal. I was thinking that anyone in the owner list should be > >> considered a super-user of the topic and can grant/revoke > >> permissions. They should also be allowed to add other principals as > >> owners. Even with this it is unclear who should be allowed to remove > >> owners. > >> > >> As you pointed out in the last KIP meeting owners/creators have use out > >> side of security context (plain simple auditing). I don’t think the > >> authorizer work depends on this, it was my bad to even mention it in > >>first > >> place. I think we can have this discussion outside of > >>authorizer/security > >> context and once we have a way to get topic owners the default > >>Authorizer > >> can start using it. It makes sense to treat all owners as super users > >>and I > >> think it is safe to assume superusers can also modify ownership but I > >>think > >> this should not be treated as blocking work for authorization. > >> > >> - What is the effect of deleting a topic - should all associated ACLs > >> be deleted as well? > >> They should be and with acls being stored as part of TopicConfig this > >>was > >> taken care of automatically. With the new ACL management API the users > >>will > >> have to call remove ACLs explicitly to perform the cleanup. If everyone > >> thinks this should be automated , with the new APIs we will need a > >>hook(or > >> poll) to be notified when a topic is deleted to perform cleanup. > >> - TopicConfigCache to store topic-ACLs. As mentioned above, not all > >> requests will be tied to topics. We may want to have an entirely > >> separate ZK directory for ACLs. We have a similar issue with quotas. > >> This ties in with dynamic config management. We can certainly > >> leverage the dynamic config management part of topic configs but I > >> think we need to have a story for non-topic resources. > >> > >> In the first proposal I was going with a topic-Acl and cluster-Acl where > >> cluster-Acls were json acl local files on all brokers. With the new ACL > >> management APIs we are planning to have /kafka-acl node under which all > >> acls will be stored in /kakfa-acls/resource-name -> {acl json data}. > >> Cluster acls will just have resource name kafka-cluster. > >> > >> Thanks, > >> > >> Joel > >> > >> On Thu, Apr 16, 2015 at 12:15:37AM +0000, Parth Brahmbhatt wrote: > >> Kafka currently stores logConfig overrides specified during topic > >>creation > >> in zookeeper, its just an instance of java.util.Properties converted to > >> json. I am proposing in addition to that we store acls and owner as well > >> as part of same Properties map. > >> There is some infrastructure around reading this config, converting it > >> back to Properties map and most importantly propagating any changes > >> efficiently which we will be able to leverage. As this infrastructure is > >> common to the cluster the reading (not interpreting) of config happens > >> outside of any authorization code. > >> If the TopicConfigCache just kept the json representation and left it to > >> authorizer to parse it, the authorizer will have to either parse the > >>json > >> for each request(not acceptable) or it will have to keep one more layer > >>of > >> parsed ACL instance cache. Assuming authorizer will keep an additional > >> caching layer we will now have to implement some way to invalidate the > >> cache which means the TopicConfigCache will have to be an observable > >>which > >> the Authorizer observes and invalidates its cache entries when > >> topicConfigCache gets updated. Seemed like unnecessary complexity with > >>not > >> lot to gain so I went with TopicConfigCache interpreting the json and > >> caching a higher level modeled object. > >> In summary, the interpretation is done for both optimization and > >> simplicity. If you think it is important to allow custom ACL format > >> support we can add one more pluggable config(acl.parser) and > >> interface(AclParser) or it could just be another method in Authorizer. > >> One thing to note the current ACL json is versioned so it is easy to > >>make > >> changes to it however it won’t be possible to support custom ACL formats > >> with the current design. > >> Thanks > >> Parth > >> On 4/15/15, 4:29 PM, "Michael Herstine" <mherst...@linkedin.com.INVALID > >> <mailto:mherst...@linkedin.com.INVALID>> > >> wrote: > >> >Hi Parth, > >> > > >> >I’m a little confused: why would Kafka need to interpret the JSON? > >>IIRC > >> >KIP-11 even says that the TopicConfigData will just store the JSON. I’m > >> >not really making a design recommendation here, just trying to > >>understand > >> >what you’re proposing. > >> > > >> >On 4/15/15, 11:20 AM, "Parth Brahmbhatt" <pbrahmbh...@hortonworks.com > >> <mailto:pbrahmbh...@hortonworks.com>> > >> >wrote: > >> > > >> >>Hi Michael, > >> >> > >> >>There is code in kafka codebase that reads and interprets the topic > >> >>config JSON which has acls, owner and logconfig properties. There are > >>3 > >> >>use cases that we are supporting with current proposal: > >> >> > >> >> * You use out of box simpleAcl authorizer which is tied to the acl > >> >>stored in topic config and the format is locked down. > >> >> * You have a custom authorizer and a custom ACL store. > >>Ranger/Argus > >> >>falls under this as they have their own acl store and ui that users > >>use > >> >>to configure acls on the cluster and cluster resources like topic. > >>It is > >> >>upto the custom authorizer to leverage the kafka acl configs or > >> >>completely ignore them as they have set a user expectation that only > >>acls > >> >>configured via their ui/system will be effective. > >> >> * You have a custom authorizer but no custom Acl store. You are > >> >>completely tied to Acl structure that we have provided in out of box > >> >>implementation. > >> >> > >> >>Thanks > >> >>Parth > >> >> > >> >>On 4/15/15, 10:31 AM, "Michael Herstine" > >> >><mherst...@linkedin.com.INVALID<mailto:mherst...@linkedin.com.INVALID > >> ><mailto:mherst...@linkedin.com.INVALID>> > >> >>wrote: > >> >> > >> >>Hi Parth, > >> >> > >> >>One question that occurred to me at the end of today’s hangout: how > >>tied > >> >>are we to a particular ACL representation under your proposal? I know > >> >>that > >> >>TopicConfigCache will just contain JSON— if a particular site decides > >> >>they > >> >>want to represent their ACLs differently, and swap out the authorizer > >> >>implementation, will that work? I guess what I’m asking is whether > >> >>there’s any code in the Kafka codebase that will interpret that JSON, > >>or > >> >>does that logic live exclusively in the authorizer? > >> >> > >> >>On 4/14/15, 10:56 PM, "Don Bosco Durai" > >> >><bo...@apache.org<mailto:bo...@apache.org><mailto:bo...@apache.org>> > >> wrote: > >> >> > >> >>I also feel, having just IP would be more appropriate. Host lookup > >>will > >> >>unnecessary slow things down and would be insecure as you pointed out. > >> >> > >> >>With IP, it will be also able to setup policies (in future if needed) > >> >>with > >> >>ranges or netmasks and it would be more scalable. > >> >> > >> >>Bosco > >> >> > >> >> > >> >>On 4/14/15, 1:40 PM, "Michael Herstine" > >> >><mherst...@linkedin.com.INVALID<mailto:mherst...@linkedin.com.INVALID > >> ><mailto:mherst...@linkedin.com.INVALID>> > >> >>wrote: > >> >> > >> >>Hi Parth, > >> >> > >> >>Sorry to chime in so late, but I’ve got a minor question on the KIP. > >> >> > >> >>Several methods take a parameter named “host” of type String. Is that > >> >>intended to be a hostname, or an IP address? If the former, I’m > >>curious > >> >>as > >> >>to how that’s found (in my experience, when accepting an incoming > >>socket > >> >>connection, you only know the IP address, and there isn’t a way to map > >> >>that to a hostname without a round trip to a DNS server, which is > >> >>insecure > >> >>anyway). > >> >> > >> >> > >> >>On 3/25/15, 1:07 PM, "Parth Brahmbhatt" > >> > >>>><pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com > ><mailto > >>>>: > >> pbrahmbh...@hortonworks.com>> > >> >>wrote: > >> >> > >> >>Hi all, > >> >> > >> >>I have modified the KIP to reflect the recent change request from the > >> >>reviewers. I have been working on the code and I have the server side > >> >>code > >> >>for authorization ready. I am now modifying the command line > >>utilities. > >> >>I > >> >>would really appreciate if some of the committers can spend sometime > >>to > >> >>review the KIP so we can make progress on this. > >> >> > >> >>Thanks > >> >>Parth > >> >> > >> >>On 3/18/15, 2:20 PM, "Michael Herstine" > >> >><mherst...@linkedin.com.INVALID<mailto:mherst...@linkedin.com.INVALID > >> ><mailto:mherst...@linkedin.com.INVALID>> > >> >>wrote: > >> >> > >> >>Hi Parth, > >> >> > >> >>Thanks! A few questions: > >> >> > >> >>1. Do you want to permit rules in your ACLs that DENY access as well > >>as > >> >>ALLOW? This can be handy setting up rules that have exceptions. E.g. > >> >>“Allow principal P to READ resource R from all hosts” with “Deny > >> >>principal > >> >>P READ access to resource R from host H1” in combination would allow P > >> >>to > >> >>READ R from all hosts *except* H1. > >> >> > >> >>2. When a topic is newly created, will there be an ACL created for it? > >> >>If > >> >>not, would that not deny subsequent access to it? > >> >> > >> >>(nit) Maybe use Principal instead of String to represent principals? > >> >> > >> >> > >> >>On 3/9/15, 11:48 AM, "Don Bosco Durai" > >> >><bo...@apache.org<mailto:bo...@apache.org><mailto:bo...@apache.org>> > >> wrote: > >> >> > >> >>Parth > >> >> > >> >>Overall it is looking good. Couple of questionsŠ > >> >> > >> >>- Can you give an example how the policies will look like in the > >> >>default > >> >>implementation? > >> >>- In the operations, can we support ³CONNECT² also? This can be used > >> >>during Session connection > >> >>- Regarding access control for ³Topic Creation², since we can¹t do it > >> >>on > >> >>the server side, can we de-scope it for? And plan it as a future > >> >>feature > >> >>request? > >> >> > >> >>Thanks > >> >> > >> >>Bosco > >> >> > >> >> > >> >>On 3/6/15, 8:10 AM, "Harsha" <ka...@harsha.io<mailto:ka...@harsha.io > >> ><mailto:ka...@harsha.io>> > >> >>wrote: > >> >> > >> >>Hi Parth, > >> >> Thanks for putting this together. Overall it looks good > >> >>to > >> >> me. Although AdminUtils is a concern KIP-4 can probably > >> >>fix > >> >> that part. > >> >>Thanks, > >> >>Harsha > >> >> > >> >>On Thu, Mar 5, 2015, at 10:39 AM, Parth Brahmbhatt wrote: > >> >>Forgot to add links to wiki and jira. > >> >>Link to wiki: > >> >>https://cwiki.apache.org/confluence/display/KAFKA/KIP-11+-+Authoriza > >> >>t > >> >>i > >> >>o > >> >>n > >> >>+ > >> >>Interface > >> >>Link to Jira: https://issues.apache.org/jira/browse/KAFKA-1688 > >> >>Thanks > >> >>Parth > >> >>From: Parth Brahmbhatt > >> > >>>><pbrahmbh...@hortonworks.com<mailto:pbrahmbh...@hortonworks.com > ><mailto > >>>>: > >> pbrahmbh...@hortonworks.com><mailto:p > >> >>b > >> >>rahmbh...@hortonworks.com<mailto:rahmbh...@hortonworks.com>>> > >> >>Date: Thursday, March 5, 2015 at 10:33 AM > >> >>To: > >> >>"dev@kafka.apache.org<mailto:dev@kafka.apache.org><mailto: > >> dev@kafka.apache.org><mailto:dev@kafka.apach > >> >>e > >> >>.org>" > >> >><dev@kafka.apache.org<mailto:dev@kafka.apache.org><mailto: > >> dev@kafka.apache.org><mailto:dev@kafka.apach > >> >>e > >> >>.org>> > >> >>Subject: [DISCUSS] KIP-11- Authorization design for kafka security > >> >>Hi, > >> >>KIP-11 is open for discussion , I have updated the wiki with the > >> >>design > >> >>and open questions. > >> >>Thanks > >> >>Parth > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> > > >> > >> > >> > >