On Fri, Oct 25, 2013 at 12:03 PM, Dilli Arumugam <[email protected]>wrote:
> Thanks Larry for the review and comments. > > The proposed knox.ini is meant to be edited by Knox system administrator > until we get to have a admin console. This is not meant to be edited by end > user. > Well, by end user here, I meant the same person that had to edit topology.xml. Topology.xml is much simpler than this file and most of what is in shiro.ini here should never need to be seen - even by the administrators. Giving the ability to mess with the order of the chain and the like is only asking for trouble and user problems. I think that we should limit the amount of time we have to support Shiro config file problems by keeping folks out as much as we can. > > To integrate additional back end hadoop service, following pieces of > information have to come from pointers from knox.ini to external > configuration files. > > 1. end point of the new hadoop servie back end > 2. rewriting rules for the new service > These can be specified in one file or split between 2 files with one of > them being topology file or its equivalent. > I have not shown all those details in the current shiro.ini. > But, you would get the idea. > But if you don't show all of that then it isn't showing the whole picture. What are you currently doing in your POC for the services? > > Dilli > > > On Fri, Oct 25, 2013 at 8:50 AM, larry mccay <[email protected]> wrote: > > > Hi Dilli - > > > > Good work here! > > > > Question: > > 1. Is this complicated ini hand edited by the enduser in order to deploy > a > > given topology or have you changed the shiro contributor to write this > out > > from a much more understandable config within the topology? > > > > 2. Where are the services configured for a given topology? > > 3. Did you rename all the existing filters to start with knox? > > > > A couple observations: > > > > 1. removing the use of gateway.xml means that we *require* Shiro for our > > servlet filter chaining > > 2. While comparing this to the current format of gateway.xml I can agree > > that this is easier to understand - however, I don't actually find ini > > format simpler to comprehend and administer than XML or JSON. In fact, > > comparing this to topology.xml which is all you really need to do for > > admin, I think the topology file is very easy to understand and > administer. > > 3. moving the rewrite rules out to not require coding is good but should > > probably not require that they be in this format and file > > 4. Someone that wants to leverage their own or another third party > solution > > is stuck squeezing it into Shiro > > 5. This would violate a principle of mine of "Is-a" vs "Has-a" - Knox is > > not a Shiro provider it can however *have* a Shiro provider > > 6. End users should never have to see rewrite rules and maybe a lot of > what > > is in that ini. Principal mapping, authz policy, etc will eventually come > > from Zookeeper which should remove their need to be in this file for > those > > things. Maybe we can even get the LDAP config separately from there as > well > > - though I still think it is best provided in a topology file with a much > > smaller config requirements and get pushed into shiro.ini. Then the user > > may never need to see - or at least open - this file. > > > > I continue to believe that we are best served by enabling a deployment > that > > looks like this and encouraging the use of it as the preferred solution. > > However, we should continue to support the use of arbitrary providers > > through the use of gateway.xml. In most cases, gateway.xml can be > leveraged > > to only include the Shiro provider. In addition, all knowledge of Shiro > > specifics should remain inside of that provider. If it leaks out then we > > are violating the separation of Is-a vs Has-a again. > > > > This also allows us the flexibility to add something before or after that > > provider for things that we find are not easily or appropriately done > > inside the security provider. > > > > "I think we can rename shiro.ini as knox.ini to make it explicit this is > > more about knox configuration than shiro library configuration." > > > > While I can understand the thinking of renaming the shiro.ini file to > > knox.ini, also violates the Is-a vs Has-a principle for me. We are not a > > shiro security provider extension. We are a REST API Gateway for Hadoop > > that has security providers - one of which is Shiro. > > > > "We are using shiro config file mechanism as simple, lightweight > depenency > > injection." > > > > Where is there dependency injection here? If you are referring to the > > configuration of the filter chain that is not really injection though it > is > > an admittedly simpler mechanism than the current state of the > contributors > > and our deployment machinery - which could be refactored and improved. > > > > "This does not really tie us to using only Shiro authentication mechanism > > or > > authorization mechanisms. > > > > We have the choice of writing all our authentication or authorization in > > our own servlet filters or leverage filters from Shiro library, Realms > from > > Shiro library or write your own Shiro filters or Shiro realms." > > > > The only change that this proposal makes to our flexibility is the > > inability to take Shiro out of the picture. > > We could have leveraged Shiro to do all these things with the current > > design as well. > > BUT, we have control over our own interception channel in our chains > today. > > This proposal takes a specific *security provider's* proprietary filter > > chain and uses it as the only interceptor channel for the entire server. > > Just because they also had a need for one - for their security work - > > doesn't mean that we shouldn't have our own. The tail should not wag the > > dog. Shiro is not an application or server framework it is a security > > provider. > > > > "In most of the cases, when we want to integrate with a new Hadoop back > end > > service, all that we have to do is specify the path to a file having > > rewrite rules for the service. Rest of the things in knox.ini(=shiro.ini) > > would remain same." > > > > This isn't really very clear to me. Do we still have services in a > > topology.xml file? > > I don't see where you specify the url for the backend services - so I > > assume there is still a topology file. > > How do we know where to dispatch the requests to? > > > > I do agree that this is a very good step forward in defining a preferred > > security provider model for Knox and that we should continue down this > > road. We just need to do so carefully. If, over time, we have found no > > reason to use the existing solution that we can consider removing it > > entirely. > > > > Thanks for all this work and insight, Dilli! > > > > --larry > > > > > > On Fri, Oct 25, 2013 at 10:27 AM, Dilli Arumugam > > <[email protected]>wrote: > > > > > Have been trying out a few ideas with Knox and managed to get Knox > > running > > > with > > > > > > 1. WEB-INF/gateway.xml is completely removed > > > 2. WEB-INF/web.xml declares only shiro filter and a defautl servlet > > > 2. all filters are defined and injected using WEB-INF/shiro.ini > > > > > > To me that looks much simpler to comprehend and administer. > > > Agreed, this could be subjective. > > > Hence, seeking comments from community. > > > > > > Pasting web.xml and shiro.ini inline. > > > > > > web.xml > > > -------------- > > > > > > <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > > > <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi=" > > > http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" > > > http://java.sun.com/xml/ns/javaee > > > http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> > > > > > > <listener> > > > > > > > > > > > > <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> > > > </listener> > > > > > > <listener> > > > > > > > > > > > > <listener-class>org.apache.hadoop.gateway.services.GatewayServicesContextListener</listener-class> > > > </listener> > > > > > > <listener> > > > > > > > > > > > > <listener-class>org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletContextListener</listener-class> > > > </listener> > > > > > > <context-param> > > > <param-name>rewriteDescriptorLocation</param-name> > > > <param-value>/WEB-INF/rewrite.xml</param-value> > > > </context-param> > > > > > > <filter> > > > <filter-name>ShiroFilter</filter-name> > > > > > <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> > > > </filter> > > > > > > <filter-mapping> > > > <filter-name>ShiroFilter</filter-name> > > > <url-pattern>/*</url-pattern> > > > </filter-mapping> > > > > > > <session-config> > > > <session-timeout>30</session-timeout> > > > </session-config> > > > > > > <servlet> > > > <servlet-name>errorservlet</servlet-name> > > > > > > > > > > > > <servlet-class>org.apache.hadoop.gateway.filter.KnoxErrorServlet</servlet-class> > > > </servlet> > > > > > > <servlet-mapping> > > > <servlet-name>errorservlet</servlet-name> > > > <url-pattern>/*</url-pattern> > > > </servlet-mapping> > > > > > > </web-app> > > > > > > > > > shiro.ini > > > ------------- > > > > > > [main] > > > > > > # define ldapRealm > > > ldapRealm=org.apache.shiro.realm.ldap.JndiLdapRealm > > > ldapRealm.contextFactory.authenticationMechanism=simple > > > ldapRealm.contextFactory.url=ldap://localhost:33389 > > > ldapRealm.userDnTemplate=uid={0},ou=people,dc=hadoop,dc=apache,dc=org > > > > > > > > > # define filter: knoxResponseCookieFilter > > > knoxResponseCookieFilter = > > > org.apache.hadoop.gateway.filter.ResponseCookieFilter > > > knoxResponseCookieFilter.enabled = true > > > knoxResponseCookieFilter.filterHeaders = rememberMe, hadoop.auth.cookie > > > > > > # define filter: knoxPrincipalMapper > > > knoxPrincipalMapper = > > org.apache.hadoop.gateway.filter.KnoxPrincipalMapper > > > knoxPrincipalMapper.enabled = true > > > knoxPrincipalMapper.userToUserMap = bob:guest, jon:bob > > > knoxPrincipalMapper.userToGroupMap = *:users, bob:admin > > > > > > # define filter: knoxIPTracker > > > knoxIPTracker =org.apache.hadoop.gateway.filter.KnoxIPTracker > > > knoxIPTracker.enabled = true > > > > > > # define filter: knoxAclAuthzFilter > > > knoxAclAuthzFilter = > org.apache.hadoop.gateway.filter.KnoxAclAuthzFilter > > > knoxAclAuthzFilter.enabled = true > > > knoxAclAuthzFilter.globalGroupAclMode = OR > > > knoxAclAuthzFilter.serviceGroupAclModeMap = /webhdfs/:OR, > /templeton/:OR > > > knoxAclAuthzFilter.serviceAclMap = /webhdfs/:user1 user2; users admin; > > > 127.*.*.*, /templeton/:user11 user12; users admin > > > > > > # define filter: javaSubjectMapper > > > javaSubjectMapper = > > > org.apache.hadoop.gateway.filter.PostAuthenticationFilter > > > > > > # define filter: knoxIdentityAsserter > > > knoxIdentityAsserter = > > > org.apache.hadoop.gateway.filter.KnoxIdentityAsserter > > > knoxIdentityAsserter.enabled = true > > > > > > # define filter: knoxUrlRewriter > > > knoxUrlRewriter = > > > org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteServletFilter > > > > > > knoxUrlRewriter.requestUrlMap = > > > /webhdfs/v1/:WEBHDFS/webhdfs/inbound/namenode/root, > > > /webhdfs/v1/[^~]+:WEBHDFS/webhdfs/inbound/namenode/file, > > > /webhdfs/v1/~:WEBHDFS/webhdfs/inbound/namenode/home, > > > /webhdfs/v1/~/.*:WEBHDFS/webhdfs/inbound/namenode/home/file, > > > /webhdfs/data/v1/.+:WEBHDFS/webhdfs/inbound/datanode > > > > > > knoxUrlRewriter.requestBodyMap = /oozie/:OOZIE/oozie/configuration, > > > /oozie/v1/.*:OOZIE/oozie/configuration, > > > /oozie/v2/.*:OOZIE/oozie/configuration > > > > > > knoxUrlRewriter.responseHeadersMap = > > > /webhdfs/v1/[^~]*:WEBHDFS/webhdfs/outbound/namenode/headers, > > > /webhdfs/v1/~/:WEBHDFS/webhdfs/outbound/namenode/headers, > > > /hbase/:WEBHBASE/webhbase/headers/outbound, > > > /hbase/[~/]*:WEBHBASE/webhbase/headers/outbound, > > > /hbase/status/cluster:WEBHBASE/webhbase/status/outbound, > > > /hbase/[^/]*/regions:WEBHBASE/webhbase/regions/outbound > > > > > > # define filter: knoxHttpDispatcher > > > knoxHttpDispatcher = > > org.apache.hadoop.gateway.dispatch.HttpClientDispatch > > > knoxHttpDispatcher.replayBufferSizeMap = webhdfs:4, templeton:8, > oozie:4 > > > > > > [urls] > > > # you could choose to have a different chain of filter for different > url > > > patterns > > > # so far Knox did not need it > > > /** = knoxResponseCookieFilter, authcBasic, knoxPrincipalMapper, > > > knoxIPTracker, knoxAclAuthzFilter, javaSubjectMapper, > > knoxIdentityAsserter, > > > knoxUrlRewriter, knoxHttpDispatcher > > > > > > # end of shiro.ini > > > > > > I think we can rename shiro.ini as knox.ini to make it explicit this is > > > more about knox configuration than shiro library configuration. > > > > > > > > > We are using shiro config file mechanism as simple, lightweight > depenency > > > injection. > > > > > > This does not really tie us to using only Shiro authentication > mechanism > > or > > > authorization mechanisms. > > > > > > We have the choice of writing all our authentication or authorization > in > > > our own servlet filters or leverage filters from Shiro library, Realms > > from > > > Shiro library or write your own Shiro filters or Shiro realms. > > > > > > In most of the cases, when we want to integrate with a new Hadoop back > > end > > > service, all that we have to do is specify the path to a file having > > > rewrite rules for the service. Rest of the things in > knox.ini(=shiro.ini) > > > would remain same. > > > > > > Please review and comment. > > > > > > > > > Thanks > > > Dilli > > > > > > -- > > > CONFIDENTIALITY NOTICE > > > NOTICE: This message is intended for the use of the individual or > entity > > to > > > which it is addressed and may contain information that is confidential, > > > privileged and exempt from disclosure under applicable law. If the > reader > > > of this message is not the intended recipient, you are hereby notified > > that > > > any printing, copying, dissemination, distribution, disclosure or > > > forwarding of this communication is strictly prohibited. If you have > > > received this communication in error, please contact the sender > > immediately > > > and delete it from your system. Thank You. > > > > > > > -- > CONFIDENTIALITY NOTICE > NOTICE: This message is intended for the use of the individual or entity to > which it is addressed and may contain information that is confidential, > privileged and exempt from disclosure under applicable law. If the reader > of this message is not the intended recipient, you are hereby notified that > any printing, copying, dissemination, distribution, disclosure or > forwarding of this communication is strictly prohibited. If you have > received this communication in error, please contact the sender immediately > and delete it from your system. Thank You. >
