> On Jul 21, 2016, at 10:57 PM, Ismael Juma <ism...@juma.me.uk> wrote:
> 
> Hi Grant,
> 
> Thanks for the KIP.  A few questions and comments:
> 
> 1. My main concern is that we are skipping the discussion on the desired
> model for controlling ACL access and updates. I understand the desire to
> reduce the scope, but this seems to be a fundamental aspect of the design
> that we need to get right. Without a plan for that, it is difficult to
> evaluate if that part of the current proposal is fine.

++1.

> 2. Are the Java objects in "org.apache.kafka.common.security.auth" going to
> be public API? If so, we should explain why they should be public and
> describe them in the KIP. If not, we should mention that.
> 3. It would be nice to have a name for a (Resource, ACL) pair. The current
> protocol uses `requests`/`responses` for the list of such pairs, but it
> would be nice to have something more descriptive, if possible. Any ideas?

The problem w/ being more descriptive is that its possible that
it restricts potential use cases if people think that somehow
their use case wouldn't fit. 

> 4. There is no CreateAcls or DeleteAcls (unlike CreateTopics and
> DeleteTopics, for example). It would be good to explain the reasoning for
> this choice (Jason also asked this question).
> 5. What is the plan for when we add standard exceptions to the Authorizer
> interface? Will we bump the protocol version?
> 
> Thanks,
> Ismael
> 
> On Thu, Jul 14, 2016 at 5:09 PM, Grant Henke <ghe...@cloudera.com> wrote:
> 
>> The KIP-4 Delete Topic Schema vote has passed and the patch
>> <https://github.com/apache/kafka/pull/1616> is available for review. Now I
>> would like to start the discussion for the Acls request/response and server
>> side implementations. This includes the ListAclsRequest/Response and the
>> AlterAclsRequest/Response.
>> 
>> Details for this implementation can be read here:
>> *
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-ACLAdminSchema(KAFKA-3266)
>> <
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-ACLAdminSchema(KAFKA-3266)
>>> *
>> 
>> I have included the exact content below for clarity:
>> 
>>> ACL Admin Schema (KAFKA-3266
>>> <https://issues.apache.org/jira/browse/KAFKA-3266>)
>>> 
>>> *Note*: Some of this work/code overlaps with "KIP-50 - Move Authorizer to
>>> o.a.k.common package
>>> <
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-50+-+Move+Authorizer+to+o.a.k.common+package
>>> ".
>>> KIP-4 does not change the Authorizer interface at all, but does provide
>>> java objects in "org.apache.kafka.common.security.auth" to be used in the
>>> protocol request/response classes. It also provides translations between
>>> the Java and Scala versions for server side compatibility with
>>> the Authorizer interface.
>>> 
>>> List ACLs Request
>>> 
>>> 
>>> 
>>> ListAcls Request (Version: 0) => principal resource
>>>  principal => NULLABLE_STRING
>>>  resource => resource_type resource_name
>>>    resource_type => INT8
>>>    resource_name => STRING
>>> 
>>> Request semantics:
>>> 
>>>   1. Can be sent to any broker
>>>   2. If a non-null principal is provided the returned ACLs will be
>>>   filtered by that principle, otherwise ACLs for all principals will be
>>>   listed.
>>>   3. If a resource with a resource_type != -1 is provided ACLs will be
>>>   filtered by that resource, otherwise ACLs for all resources will be
>> listed.
>>>   4. Any principle can list their own ACLs where the permission type is
>>>   "Allow", Otherwise the principle must be authorized to the "All"
>> Operation
>>>   on the "Cluster" resource to list ACLs.
>>>   - Unauthorized requests will receive a ClusterAuthorizationException
>>>      - This avoids adding a new operation that an existing authorizer
>>>      implementation may not be aware of.
>>>      - This can be reviewed and further refined/restricted as a follow
>>>      up ACLs review after this KIP. See Follow Up Changes
>>>      <
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-follow-up-changes
>>> 
>>>      .
>>>   5. Requesting a resource or principle that does not have any ACLs will
>>>   not result in an error, instead empty response list is returned
>>> 
>>> List ACLs Response
>>> 
>>> 
>>> 
>>> ListAcls Response (Version: 0) => [responses] error_code
>>>  responses => resource [acls]
>>>    resource => resource_type resource_name
>>>      resource_type => INT8
>>>      resource_name => STRING
>>>    acls => acl_principle acl_permission_type acl_host acl_operation
>>>      acl_principle => STRING
>>>      acl_permission_type => INT8
>>>      acl_host => STRING
>>>      acl_operation => INT8
>>>  error_code => INT16
>>> 
>>> Alter ACLs Request
>>> 
>>> 
>>> 
>>> AlterAcls Request (Version: 0) => [requests]
>>>  requests => resource [actions]
>>>    resource => resource_type resource_name
>>>      resource_type => INT8
>>>      resource_name => STRING
>>>    actions => action acl
>>>      action => INT8
>>>      acl => acl_principle acl_permission_type acl_host acl_operation
>>>        acl_principle => STRING
>>>        acl_permission_type => INT8
>>>        acl_host => STRING
>>>        acl_operation => INT8
>>> 
>>> Request semantics:
>>> 
>>>   1. Must be sent to the controller broker
>>>   2. If there are multiple instructions for the same resource in one
>>>   request an InvalidRequestException will be logged on the broker and a
>>>   single error code for that resource will be returned to the client
>>>      - This is because the list of requests is modeled server side as a
>>>      map with resource as the key
>>>   3. ACLs with a delete action will be processed first and the add
>>>   action second.
>>>   1. This is to prevent confusion about sort order and final state when
>>>      a batch message is sent.
>>>      2. If an add request was processed first, it could be deleted right
>>>      after.
>>>      3. Grouping ACLs by their action allows batching requests to the
>>>      authorizer via the Authorizer.addAcls and Authorizer.removeAcls
>> calls.
>>>   4. The request is not transactional. One failure wont stop others from
>>>   running.
>>>      1. If an error occurs on one action, the others could still be run.
>>>      2. Errors are reported independently.
>>>      5. The principle must be authorized to the "All" Operation on the
>>>   "Cluster" resource to alter ACLs.
>>>      - Unauthorized requests will receive a
>> ClusterAuthorizationException
>>>      - This avoids adding a new operation that an existing authorizer
>>>      implementation may not be aware of.
>>>      - This can be reviewed and further refined/restricted as a follow
>>>      up ACLs review after this KIP. See Follow Up Changes
>>>      <
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-follow-up-changes
>>> 
>>>      .
>>> 
>>> QA:
>>> 
>>>   - Why doesn't this request have a timeout and implement any blocking
>>>   like the CreateTopicsRequest?
>>>      - The Authorizer implementation is synchronous and exposes no
>>>      details about propagating the ACLs to other nodes.
>>>      - The best we can do in the existing implementation is
>>>      call Authorizer.addAcls and Authorizer.removeAcls and hope the
>> underlying
>>>      implementation handles the rest.
>>>   - What happens if there is an error in the Authorizer?
>>>      - Currently the best we can do is log the error broker side and
>>>      return a generic exception because there are no "standard"
>> exceptions
>>>      defined in the Authorizer interface to provide a more clear code
>>>      - KIP-50
>>>      <
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-50+-+Move+Authorizer+to+o.a.k.common+package#KIP-50-MoveAuthorizertoo.a.k.commonpackage-AddexceptionsrelatedtoAuthorizer.>
>> is
>>>      tracking adding the standard exceptions
>>>      - The Authorizer interface also provides no feedback about
>>>      individual ACLs when added or deleted in a group
>>>      - Authorizer.addAcls is a void function, the best we can do is
>>>         return an error for all ACLs and let the user check the current
>> state by
>>>         listing the ACLs
>>>         - Autohrizer.removeAcls is a boolean function,  the best we can
>>>         do is return an error for all ACLs and let the user check the
>> current state
>>>         by listing the ACLs
>>>         - Behavior here could vary drastically between implementations
>>>         - I suggest this be addressed in KIP-50 as well, though it has
>>>         some compatibility concerns.
>>>      - Why require the request to go to the controller?
>>>      - The controller is responsible for the cluster metadata and its
>>>      propagation
>>>      - This ensures one instance of the Authorizer sees all the changes
>>>      and reduces concurrency issues, especially because the Authorizer
>> interface
>>>      exposes no details about propagating the ACLs to other nodes.
>>>      - See Request Forwarding
>>>      <
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-request
>>> 
>>>       below
>>> 
>>> Alter ACLs Response
>>> 
>>> 
>>> 
>>> AlterAcls Response (Version: 0) => [responses]
>>>  responses => resource [results]
>>>    resource => resource_type resource_name
>>>      resource_type => INT8
>>>      resource_name => STRING
>>>    results => action acl error_code
>>>      action => INT8
>>>      acl => acl_principle acl_permission_type acl_host acl_operation
>>>        acl_principle => STRING
>>>        acl_permission_type => INT8
>>>        acl_host => STRING
>>>        acl_operation => INT8
>>>      error_code => INT16
>>> 
>>> 
>>> 
>> 
>> Thank you,
>> Grant
>> --
>> Grant Henke
>> Software Engineer | Cloudera
>> gr...@cloudera.com | twitter.com/gchenke | linkedin.com/in/granthenke
>> 

Reply via email to