I've probably been a DBA for too long, but I imagined something like:
kafka-topic --topic t1 --grant user --action action
kafka-topic --topic t1 --revoke user --action action
(i.e. the commandline equivalent of "grant select on table1 to
gwenshap" and "revoke select on table2 from gwenshap")

When you need gazillion of them, you generate a script with gazillion
of those and execute.

Maybe it just looks reasonable to me because I'm used to it, though :)

Or maybe including the json parsing code in TopicCommand is not so bad?



On Fri, Apr 17, 2015 at 10:30 AM, Parth Brahmbhatt
<pbrahmbh...@hortonworks.com> wrote:
> * Yes, Acl pretty much captures everything. Originally I had resource as
> part of Acls, we can go back to that.
> * The describe can call getAcl and I plan to do so. addAcl is tricky
> because the user will have to specify the acls through command lines,
> which will probably be a location to some file. Basically the CLI won¹t
> know how to parse user input and convert it to a principal/acl that the
> plugin understands. We could add an API in authorizer that can take a file
> as input if we want ‹acl as an option during create.
> * Yes also getAcls(Principal principal).
>
> Thanks
> Parth
>
>
> On 4/17/15, 10:05 AM, "Gwen Shapira" <gshap...@cloudera.com> wrote:
>
>>On Fri, Apr 17, 2015 at 9:31 AM, Parth Brahmbhatt
>><pbrahmbh...@hortonworks.com> wrote:
>>> I was following the storm model but I think this is a reasonable
>>>change. I recommend changing the API names to addAcls, removeAcls and
>>>getAcls.
>>
>>And they probably just need to get List<Acl> instead of everything I
>>specified? Looks like Acl encapsulates everything we need.
>>
>>> Couple of points to ensure we are on same page:
>>> * With this approach the kafka command line will not provide a way to
>>>add/edit acls during topic creation, neither it will provide a way to
>>>modify the acls. It will be up to the authorizer to either define a
>>>command line utility or to allow other means to add acls(CLI/UI/REST).
>>>For the default implementation we can provide CLI.
>>
>>You looked into this deeper than I did - is there a reason
>>TopicCommand can't invoke addACL and getACL?
>>
>>> * We probably want to add List<Acl> getAcls(Resource resource) so users
>>>can list all acls on a topic.
>>
>>Also getAcls(Principal princ)?
>>
>>>
>>> I haven¹t looked at how consumer offsets are currently stored so I will
>>>have to take a look but I think that is implementation detail.
>>>
>>> Gwen,Jun and other interested parties, do you have time to jump on a
>>>quick hangout so we can go over some of the lower level details?
>>>
>>> Thanks
>>> Parth
>>> From: Tong Li <liton...@us.ibm.com<mailto:liton...@us.ibm.com>>
>>> Reply-To: "dev@kafka.apache.org<mailto:dev@kafka.apache.org>"
>>><dev@kafka.apache.org<mailto:dev@kafka.apache.org>>
>>> Date: Friday, April 17, 2015 at 7:34 AM
>>> To: "dev@kafka.apache.org<mailto:dev@kafka.apache.org>"
>>><dev@kafka.apache.org<mailto:dev@kafka.apache.org>>
>>> Subject: Re: [DISCUSSION] KIP-11: ACL Management
>>>
>>>
>>> Gwen,
>>>          There is one product called ElasticSearch which has been quite
>>>successful. They recently added security, what they actually did is
>>>quite nice. They really separated Authentication and Authorization which
>>>many people get really confused about and often mix them up. I looked
>>>through what they did and quite impressed by it, I think there are many
>>>things we can borrow from. Here is a link to it.
>>>http://www.elastic.co/guide/en/shield/current/architecture.html. The
>>>product name is called "shield" which is implemented as an ElasticSearch
>>>plugin. The promise here is that you can have a running ElasticSearch,
>>>then you install this plugin, configure it, then your ElasticSearch
>>>service is secured. The goal should be really the same for Kafka, you
>>>have a Kafka service running, you install a new plugin (in this case
>>>security plugin), configure it, then your Kafka service is secured. I
>>>think that the key here is that we should introduce a true pluggable
>>>framework in Kafka which allows security, quota, encryption,
>>>compression, serialization/deserialization all being developed as
>>>plugins which can be all easily added and configured onto a running
>>>Kafka service, then the functions/features provided by the plugins will
>>>start working. Once we have this framework in, how a security plugin
>>>works internally becomes the really the concern of that plugin, for
>>>example, how a new user gets registered, permission granted, revoked,
>>>all these will be the concern of that plugin, rest of the Kafka
>>>components should not really be concerned about them. This way we are
>>>really following the design principal (Separation of concerns).  With
>>>all that, what I am proposing is a true pluggable framework introduction
>>>into Kafka which I have also talked about in a previous email. For
>>>security we can implement a simple file based security plugin, other
>>>plugins such as LDAP, AD for authentication can come later, plugin for
>>>authorization such as RBAC can also come later if people care so much
>>>about using them.
>>>
>>> Thanks.
>>>
>>> Tong Li
>>> OpenStack & Kafka Community Development
>>> Building 501/B205
>>> liton...@us.ibm.com<mailto:liton...@us.ibm.com>
>>>
>>> [Inactive hide details for Gwen Shapira ---04/16/2015 12:44:54 PM---Hi
>>>Kafka Authorization Fans, I'm starting a new thread on a]Gwen Shapira
>>>---04/16/2015 12:44:54 PM---Hi Kafka Authorization Fans, I'm starting a
>>>new thread on a specific sub-topic of KIP-11, since
>>>
>>> From: Gwen Shapira <gshap...@cloudera.com<mailto:gshap...@cloudera.com>>
>>> To: "dev@kafka.apache.org<mailto:dev@kafka.apache.org>"
>>><dev@kafka.apache.org<mailto:dev@kafka.apache.org>>
>>> Date: 04/16/2015 12:44 PM
>>> Subject: [DISCUSSION] KIP-11: ACL Management
>>>
>>> ________________________________
>>>
>>>
>>>
>>> Hi Kafka Authorization Fans,
>>>
>>> I'm starting a new thread on a specific sub-topic of KIP-11, since
>>> this is a bit long :)
>>>
>>> Currently KIP-11, as I understand it, proposes:
>>> * Authorizers are pluggable, with Kafka providing DefaultAuthorizer.
>>> * Kafka tools allow adding / managing ACLs.
>>> * Those ACLs are stored in ZK and cached in a new TopicCache
>>> * Authorizers can either use the ACLs defined and stored in Kafka, or
>>> define and use their own.
>>>
>>> I am concerned of two possible issues with this design:
>>> 1. Separation of concerns - only authorizers should worry about ACLs,
>>> and therefore the less code for ACLs that exist in Kafka core, the
>>> better.
>>> 2. User confusion - It sounded like we can define ACLs in Kafka itself
>>> but authorizers can also define their own, so "kafka-topics
>>> --describe" may show an ACL different than the one in use. This can be
>>> super confusing for admins.
>>>
>>> My alternative suggestion:
>>> * Authorizer API will include:
>>> grantPrivilege(List<Principals>, List<Privilege>)
>>> revokePrivilege(List<Principals>, List<Privilege>),
>>> getPrivilegesByPrincipal(Principal, Resource)
>>> ....
>>> (The exact API can be discussed in detail, but you get the idea)
>>> * Kafka tools will simply invoke these APIs when topics are added /
>>> modified / described.
>>> * Each authorizer (including the default one) will be responsible for
>>> storing, caching and using those ACLs.
>>>
>>> This way, we keep almost all ACL code with the Authorizer, where it
>>> belongs and users get a nice unified interface that reflects what is
>>> actually getting used in the system.
>>> This is pretty much how Sqoop and Hive implement their authorization
>>>APIs.
>>>
>>> What do you think?
>>>
>>> Gwen
>>>
>

Reply via email to