Hi Rajini,

Thank you for the KIP. Overall, it looks good to me. I have few
questions/suggestions:

1. It is hard to grasp what `Action#count` is for. I guess I understand
where you want to go with it but it took me a while to figure it out.
Perhaps, we could come up with a better name than `count`?

2. I had a hard time trying to understand the `AuthorizationMode` concept,
especially wrt. the OPTIONAL one. My understanding is that an ACL is either
defined or not. Could you elaborate a bit more on that?

Thanks,
David

On Fri, Aug 9, 2019 at 10:26 PM Don Bosco Durai <bo...@apache.org> wrote:

> Hi Rajini
>
> 3.2 - This makes sense. Thanks for clarifying.
>
> Rest looks fine. Once the implementations are done, it will be more clear
> on the different values RequestType and Mode.
>
> Thanks
>
> Bosco
>
>
> On 8/9/19, 5:08 AM, "Rajini Sivaram" <rajinisiva...@gmail.com> wrote:
>
>     Hi Don,
>
>     Thanks for the suggestions. A few responses below:
>
>     3.1 Can rename and improve docs if we keep this. Let's finish the
>     discussion on Colin's suggestions regarding this first.
>     3.2 No, I was thinking of some requests that have an old way of
> authorizing
>     and a new way where we have retained the old way for backward
>     compatibility. One example is Cluster:Create permission to create
> topics.
>     We have replaced this with fine-grained topic create access using
> Topic:Create
>     for topic patterns. But we still check if user has Cluster:Create
> first. If
>     Denied, the deny is ignored and we check Topic:Create. We dont want to
> log
>     DENY for Cluster:Create at INFO level for this, since this is not a
>     mandatory ACL for creating topics. We will get appropriate logs from
> the
>     subsequent Topic:Create in this case.
>     3.3 They are not quite the same. FILTER implies that user actually
>     requested access to and performed some operation on the filtered
> resources.
>     LIST_AUTHORZED did not result in any actual access. User simply wanted
> to
>     know what they are allowed to access.
>     3.4 Request types are Produce, JoinGroup, OffsetCommit etc. So that is
>     different from authorization mode, operation etc.
>
>
>     On Thu, Aug 8, 2019 at 11:36 PM Don Bosco Durai <bo...@apache.org>
> wrote:
>
>     > Hi Rajini
>     >
>     > Thanks for clarifying. This is very helpful...
>     >
>     > #1 - On the Ranger side, we should be able to handle multiple
> requests at
>     > the same time. I was just not sure how much processing overhead will
> be
>     > there on the Broker side to split and then consolidate the results.
> If it
>     > is negligible,  then this is the better way. It will make it future
> proof.
>     > #2 -  I agree, having a single "start" call makes it cleaner. The
>     > Authorization implementation will only have to do the initialization
> only
>     > once.
>     > #3.1 - Thanks for the clarification. I think it makes sense to have
> this.
>     > The term "Mode" might not be explicit enough. Essentially it seems
> you want
>     > the Authorizer to know the Intent/Purpose of the authorize call and
> let the
>     > Authorizer decide what to log as Audit event. Changing the
> class/field name
>     > or giving more documentation will do.
>     > #3.2 - Regarding the option "OPTIONAL". Are you thinking from
> chaining
>     > multiple Authorizer? If so,  I am not sure whether the Broker would
> have
>     > enough information to make that decision. I feel the Authorizer will
> be the
>     > one who would have that knowledge. E.g. in Ranger we have explicit
> deny,
>     > which means no matter what, the request should be denied for the
> user/group
>     > or condition. So if you are thinking of chaining Authorizers, then
>     > responses should have the third state, e.g. "DENIED_FINAL", in which
> case
>     > if there is an Authorization chain, it will be stop and the request
> will be
>     > denied and if it is just denied, then you might fall back to next
>     > authorizer. If we don't have chaining of Authorizing in mind, then we
>     > should reconsider OPTIONAL for now. Or clarify under which scenario
>     > OPTIONAL will be called.
>     > #3.3 Regarding, FILTER v/s LIST_AUTHORIZED, isn't LIST_AUTHORIZED a
>     > special case for "FILTER"?
>     > #3.4 KafkaRequestContext. requestType() v/s Action.
> authorizationMode. I
>     > am not sure about the overlap or ambiguity.
>     > #4 - Cool. This is good, it will be less stress on the Authorizer.
> Ranger
>     > already supports the "count" concept and also has batching
> capability to
>     > aggregate similar requests to reduce the number of audit logs to
> write. We
>     > should be able to pass this through.
>     > #5 - Assuming if the object instance is going out of scope, we
> should be
>     > fine. Not a super important ask. Ranger is already catching KILL
> signal for
>     > clean up.
>     >
>     > Thanks again. These are good enhancements. Appreciate your efforts
> here.
>     >
>     > Bosco
>     >
>     >
>     >
>     > On 8/8/19, 2:03 AM, "Rajini Sivaram" <rajinisiva...@gmail.com>
> wrote:
>     >
>     >     Hi Don,
>     >
>     >     Thanks for reviewing the KIP.
>     >
>     >     1. I had this originally as a single Action, but thought it may
> be
>     > useful
>     >     to support batched authorize calls as well and keep it
> consistent with
>     >     other methods. Single requests can contain multiple topics. For
>     > example a
>     >     produce request can contain records for several partitions of
> different
>     >     topics. Broker could potentially authorize these together. For
>     >     SimpleAclAuthorizer, batched authorize methods don't provide any
>     >     optimisation since lookup is based on resources followed by the
>     > matching
>     >     logic. But some authorizers may manage ACLs by user principal
> rather
>     > than
>     >     resource and may be able to optimize batched requests. I am ok
> with
>     > using
>     >     single Action if this is likely to cause issues.
>     >     2. If you have two listeners, one for inter-broker traffic and
> another
>     > for
>     >     external clients, start method is invoked twice, once for each
>     > listener. On
>     >     second thought, that may be confusing and a single start()
> invocation
>     > that
>     >     provides all listener information and returns multiple futures
> would be
>     >     better. Will update the KIP.
>     >     3. A typical example is a consumer subscribing to a regex
> pattern. We
>     >     request all topic metadata from the broker in order to decide
> whether
>     > the
>     >     pattern matches, expecting to receive a list of authorised
> topics. The
>     > user
>     >     is not asking to subscribe to an unauthorized topic. If there
> are 10000
>     >     topics in the cluster and the user has access to 100 of them, at
> the
>     > moment
>     >     we log 9900 DENIED log entries at INFO level in
> SimpleAclAuthorizer.
>     > The
>     >     proposal is to authorize this request with
> AuthorizationMode.FILTER, so
>     >     that authorizers can log resources that are filtered out at
> lower level
>     >     like DEBUG since this is not an attempt to access unauthorized
>     > resources.
>     >     Brokers already handle these differently since no authorization
> error
>     > is
>     >     returned to the client in these cases. Providing authorization
> mode to
>     >     authorizers enables authorizer implementations to generate
> better audit
>     >     logs.
>     >     4. Each request may contain multiple instances of the same
> authorizable
>     >     resource. For example a produce request may contain records for
> 10
>     >     partitions of the same topic. At the moment, we invoke authorize
>     > method 10
>     >     times. The proposal is to invoke it once with count=10. The
> count is
>     >     provided to authorizer just for audit logging purposes.
>     >     5. Authorizer implements Closeable, so you could use close() to
> flush
>     >     audits?
>     >
>     >     On Thu, Aug 8, 2019 at 7:01 AM Don Bosco Durai <bo...@apache.org
> >
>     > wrote:
>     >
>     >     > Rajini
>     >     >
>     >     > Thanks for putting this together. It is looking good. I have
> few
>     >     > questions...
>     >     >
>     >     > 1. List<AuthorizationResult> authorize(..., List<Action>
> actions).
>     > Do you
>     >     > see a scenario where the broker will call authorize for
> multiple
>     > topics at
>     >     > the same time? I can understand that during creating/deleting
> ACLS,
>     >     > multiple permissions for multiple resources might be done. For
>     > authorize
>     >     > call, would this be a case? And does the Authorize
> implementation
>     > will be
>     >     > able to do performance optimization because of this? Or should
> we
>     > just keep
>     >     > it simple? I don't see it as an issue from Apache Ranger side,
> but
>     > just
>     >     > checking to see whether we need to be aware of something.
>     >     > 2. Should I assume that the SecurityProtocol passed during
> start and
>     > the
>     >     > one return by KafkaRequestContext.securityProtocol() will be
> the
>     > same?
>     >     > CompletableFuture<Void> start(String listenerName,
> SecurityProtocol
>     >     > securityProtocol);
>     >     > KafkaRequestContext.securityProtocol()
>     >     > 3. What is the purpose of AuthorizationMode? How does the
> broker
>     > decide
>     >     > what mode to use when the authorize() method is called?
>     >     > 4. Can we clarify "count" in Action a bit more? How is it used?
>     >     > 5. Do you feel having "stop" along with "start" be helpful?
> E.g. In
>     > Ranger
>     >     > we try to optimize the Audit writing by caching the logs for a
> fixed
>     >     > interval. But when the Broker terminates, we do a forced flush.
>     > Having an
>     >     > explicit "stop" might give us a formal way to flush our audits.
>     >     >
>     >     > Thanks
>     >     >
>     >     > Bosco
>     >     >
>     >     > On 8/7/19, 3:59 PM, "Rajini Sivaram" <rajinisiva...@gmail.com
> >
>     > wrote:
>     >     >
>     >     >     Hi Ron/Harsha/Satish,
>     >     >
>     >     >     Thanks for reviewing the KIP!
>     >     >
>     >     >     We should perhaps have a wider discussion outside this KIP
> for
>     >     > refactoring
>     >     >     clients so that others who are not following this KIP also
>     > notice the
>     >     >     discussion. Satish, would you like to start a discussion
> thread
>     > on dev?
>     >     >
>     >     >     Regards,
>     >     >
>     >     >     Rajini
>     >     >
>     >     >
>     >     >     On Wed, Aug 7, 2019 at 6:21 PM Satish Duggana <
>     >     > satish.dugg...@gmail.com>
>     >     >     wrote:
>     >     >
>     >     >     > I felt the same need when we want to add a pluggable API
> for
>     > core
>     >     >     > server functionality. This does not need to be part of
> this
>     > KIP, it
>     >     >     > can be a separate KIP. I can contribute those refactoring
>     > changes if
>     >     >     > others are OK with that.
>     >     >     >
>     >     >     > It is better to have a structure like below.
>     >     >     >
>     >     >     > kafka-common:
>     >     >     > common classes which can be used in any of the other
> modules
>     > in Kafka
>     >     >     > like client, Kafka-server-common and server etc.
>     >     >     >
>     >     >     > kafka-client-common:
>     >     >     > common classes which can be used in the client module.
> This
>     > can be
>     >     >     > part of client module itself.
>     >     >     >
>     >     >     > kafka-server-common:
>     >     >     > classes required only for kafka-server.
>     >     >     >
>     >     >     > Thanks.
>     >     >     > Satish.
>     >     >     >
>     >     >     > On Wed, Aug 7, 2019 at 9:28 PM Harsha Chintalapani <
>     > ka...@harsha.io>
>     >     >     > wrote:
>     >     >     > >
>     >     >     > > Thanks for the KIP Rajini.
>     >     >     > > Quick thought, it would be good to have a common module
>     > outside of
>     >     >     > clients
>     >     >     > > that only applies to server side interfaces & changes.
> It
>     > looks
>     >     > like we
>     >     >     > are
>     >     >     > > increasingly in favor of using Java interface for
> pluggable
>     >     > modules  on
>     >     >     > the
>     >     >     > > broker side.
>     >     >     > >
>     >     >     > > Thanks,
>     >     >     > > Harsha
>     >     >     > >
>     >     >     > >
>     >     >     > > On Tue, Aug 06, 2019 at 2:31 PM, Rajini Sivaram <
>     >     > rajinisiva...@gmail.com
>     >     >     > >
>     >     >     > > wrote:
>     >     >     > >
>     >     >     > > > Hi all,
>     >     >     > > >
>     >     >     > > > I have created a KIP to replace the Scala Authorizer
> API
>     > with a
>     >     > new
>     >     >     > Java
>     >     >     > > > API:
>     >     >     > > >
>     >     >     > > > -
>     >     >     > > > https://cwiki.apache.org/confluence/display/KAFKA/
>     >     >     > > > KIP-504+-+Add+new+Java+Authorizer+Interface
>     >     >     > > >
>     >     >     > > > This is replacement for KIP-50 which was accepted
> but never
>     >     > merged.
>     >     >     > Apart
>     >     >     > > > from moving to a Java API consistent with other
> pluggable
>     >     > interfaces
>     >     >     > in the
>     >     >     > > > broker, KIP-504 also attempts to address known
> limitations
>     > in the
>     >     >     > > > authorizer. If you have come across other
> limitations that
>     > you
>     >     > would
>     >     >     > like
>     >     >     > > > to see addressed in the new API, please raise these
> on the
>     >     > discussion
>     >     >     > > > thread so that we can consider those too. All
> suggestions
>     > and
>     >     > feedback
>     >     >     > are
>     >     >     > > > welcome.
>     >     >     > > >
>     >     >     > > > Thank you,
>     >     >     > > >
>     >     >     > > > Rajini
>     >     >     > > >
>     >     >     >
>     >     >
>     >     >
>     >     >
>     >     >
>     >
>     >
>     >
>     >
>
>
>
>

Reply via email to