In the database world (Resource, ACL) pair is typically called a
"grant". (sorry)

You "grant" permission on a resource to a user.

http://dev.mysql.com/doc/refman/5.7/en/show-grants.html

Gwen




On Fri, Jul 22, 2016 at 4:13 AM, Jim Jagielski <j...@jagunet.com> wrote:
>
>> 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