On 29/01/19 12:10, Zs. wrote:


On Tue, Jan 29, 2019 at 9:26 AM Matteo Alessandroni <matteo.alessandr...@tirasa.net <mailto:matteo.alessandr...@tirasa.net>> wrote:

    Hi Zsombor,

    On 29/01/19 00:09, Zs. wrote:
    Hi,

     The getDefaultRangerPolicies is get called only when a new
    service is created - so no need to re-register the definition,
    just re-create the service, and your service will be called.

    yes thanks, but the service is created in the
    "getDefaultRangerPolicies()" logic when I register the service
    definition.
    Anyway, I could change this logic but then is there a way to
    configure Ranger to periodically refresh the service?



The RangerService.getDefaultRangerPolicies gets called from ServiceDBStore.createDefaultPolicies, which gets called from ServiceDBStore.createService, not from ServiceDBStore.createService*Def.* The Ranger plugins periodically connect to the Admin webapp, to fetch the latest list of policies, not the other way around.

yes thanks I'm aware about that, but actually when I call:

curl -u admin:admin -X POST -H "Accept: application/json" -H "Content-Type: application/json" -d @ranger-servicedef-hdfs_custom.json http://localhost:6080/service/public/v2/api/*servicedef*

I see the logic in "getDefaultRangerPolicies()" is executed.

It's unclear what you want to achieve. From your description, I thought, that you have an external service, which generates policies, what you would like to to apply to your HDFS cluster. If it's the case, then the simplest solution would be for your setup, is to push the newly generated policies through the REST interface to Ranger Admin.

Yes I have an external service like that and your solution is a good one and it actually clear my doubts.

Anyway, just FYI, at the beginning I was trying to find a solution that would have been pluggable in the Ranger plugins (now I'm working with HDFS but I'll on other services too). So a solution that does not require building any standalone application, something like what I tried to do that is extending the HDFS Ranger plugin by extending "RangerHdfsPlugin" [1] and override the "isAccessAllowed()" method in order to add there the policies coming from the external service [2].
This way this logic would have been plugged on the Ranger HDFS plugin.

But I had problems in extending the HDFS plugin according to the code structure of the HDFS plugin. Also I could not understand what kind of Java project I need to build in order to extend an existing Ranger plugin (if anyone could advise on this it would be nice!), I just found out how to install a new service definition in Ranger (by adding my .jar plugin in e.g. "/opt/ranger-1.2.0-admin/ews/webapp/WEB-INF/classes/ranger-plugins/hdfs" and then register the service def via REST).

I actually would still prefer a solution like that, is there anything I still can do to obtain that?

Regards,
Matteo


[1] https://github.com/apache/ranger/blob/ranger-1.2/hdfs-agent/src/main/java/org/apache/ranger/authorization/hadoop/RangerHdfsAuthorizer.java#L759 [2] https://github.com/apache/ranger/blob/ranger-1.2/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java#L337-L347



Regards,
 Zsombor





    However, why don't you just push the new policies from your
    external services to Ranger admin?

    Well what is your idea to do that? You mean e.g. creating a
    standalone application that use Ranger REST API to create / update
    a service?

    Thanks.
    Regards,
    Matteo


    Regards,
    Zsombor


    On Mon, Jan 28, 2019 at 5:17 PM Matteo Alessandroni
    <matteo.alessandr...@tirasa.net
    <mailto:matteo.alessandr...@tirasa.net>> wrote:

        Hi,

        I have created a custom service definition that extends
        "RangerServiceHdfs" and overridden the
        "getDefaultRangerPolicies()" method so that every time the
        service definition is registered to Ranger Admin a list of
        "RangerPolicy" is taken from an external REST service and
        added to Ranger.

        Would it be possible to periodically refresh a service
        definition? I mean like automatically delete and re-register it?

        Thanks!
        Best regards,
        Matteo


--
        Dott. Matteo Alessandroni

        Software Engineer @ Tirasa S.r.l.

        Viale Vittoria Colonna, 97 - 65127 Pescara
        Tel +39 0859116307 / FAX +39 0859111173

        http://www.tirasa.net

        Apache Syncope PMC Member
        http://people.apache.org/phonebook.html?uid=skylark17
        <http://people.apache.org/phonebook.html?uid=skylark17>

        Tirasa S.r.l. <http://www.tirasa.net>


--
    Dott. Matteo Alessandroni

    Software Engineer @ Tirasa S.r.l.

    Viale Vittoria Colonna, 97 - 65127 Pescara
    Tel +39 0859116307 / FAX +39 0859111173

    http://www.tirasa.net

    Apache Syncope PMC Member
    http://people.apache.org/phonebook.html?uid=skylark17
    <http://people.apache.org/phonebook.html?uid=skylark17>

    Tirasa S.r.l. <http://www.tirasa.net>


--

Dott. Matteo Alessandroni

Software Engineer @ Tirasa S.r.l.

Viale Vittoria Colonna, 97 - 65127 Pescara
Tel +39 0859116307 / FAX +39 0859111173

http://www.tirasa.net

Apache Syncope PMC Member
http://people.apache.org/phonebook.html?uid=skylark17 <http://people.apache.org/phonebook.html?uid=skylark17>

Tirasa S.r.l. <http://www.tirasa.net>

Reply via email to