I'm proposing more-or-less the "if
SHIRO_ENABLED do shiro_auth else do old_stuff" approach so that the
SHIRO_ENABLED branch can throw UnsupportedOperationException for a period
of time.

On Wed, Feb 11, 2015 at 4:14 PM, Maxim Khutornenko <ma...@apache.org> wrote:

> Right, I was asking about an example of the interim incremental
> approach you are proposing. Are you envisioning something like "if
> SHIRO_ENABLED do shiro_auth else do old_stuff" approach? The example
> you gave shows the end result not what we will see in 0.8.0 (unless
> you are suggesting moving "old_stuff" behind the new shiro facade).
>
> On Wed, Feb 11, 2015 at 4:08 PM, Kevin Sweeney <kevi...@apache.org> wrote:
> > I think that would be too big a patch to land all at once. I'd like to
> add
> > in Shiro permission checks and annotations incrementally behind this flag
> > as there are conceptually different changes that will benefit from small
> > reviews. If I take the approach of ripping out the current framework
> first
> > we could be left in an "old way's broken, new way's not finished yet"
> state.
> >
> > On Wed, Feb 11, 2015 at 4:03 PM, Maxim Khutornenko <ma...@apache.org>
> wrote:
> >
> >> Any example? The original code fragment suggest our current security
> >> model does not map cleanly into shiro. I am +1 on the first pass to
> >> reduce the "if-else" ugliness if possible.
> >>
> >> On Wed, Feb 11, 2015 at 3:57 PM, Kevin Sweeney <kevi...@apache.org>
> wrote:
> >> > I'm thinking that flag will control which Guice bindings are applied,
> so
> >> > there would be 2 parallel implementations for a bit. This would
> >> necessitate
> >> > factoring out capabilityValidator calls to a decorator class (or risk
> >> > having #ifdef-like logic everywhere in SchedulerThriftInterface).
> >> >
> >> > On Wed, Feb 11, 2015 at 3:49 PM, Joshua Cohen <
> jco...@twopensource.com>
> >> > wrote:
> >> >
> >> >> How do you envision things looking in the intermediate phase where we
> >> have
> >> >> support for both security modes?
> >> >>
> >> >> I imagine it's easy enough on the Shiro side of if we go with the AOP
> >> >> annotations for authorization (the interceptor can just check if
> >> >> security_mode == SHIRO before doing anything), but that means we'd
> still
> >> >> have the legacy sessionValidator code in every RPC impl that would
> need
> >> to
> >> >> be wrapped in the inverse check (security_mode ==
> CAPABILITY_VALIDATOR).
> >> >>
> >> >> Would it make sense to do a first pass to refactor the existing auth
> >> >> checking logic to a reusable method, or are we ok living with the
> >> temporary
> >> >> ugliness involved in adding that mode checking wrapper to all the
> >> existing
> >> >> auth code?
> >> >>
> >> >> On Wed, Feb 11, 2015 at 3:23 PM, Kevin Sweeney <kevi...@apache.org>
> >> wrote:
> >> >>
> >> >> > On Wed, Feb 11, 2015 at 3:19 PM, Zameer Manji <zma...@apache.org>
> >> wrote:
> >> >> >
> >> >> > > +1 to this proposal.
> >> >> > >
> >> >> > > Will we have dual implementations of API methods as we deprecate
> the
> >> >> > > SessionKey based API methods?
> >> >> > >
> >> >> > Yes for backwards-compatibility I think we'll need a flag to
> indicate
> >> >> which
> >> >> > system to use. It will probably be an all-or-nothing setting (think
> >> >> > -security_mode=SHIRO|CAPABILITY_VALIDATOR).
> >> >> >
> >> >> > >
> >> >> > > On Wed, Feb 11, 2015 at 3:13 PM, Kevin Sweeney <
> kevi...@apache.org>
> >> >> > wrote:
> >> >> > >
> >> >> > > > I've been thinking about revamping the authentication and
> >> >> authorization
> >> >> > > in
> >> >> > > > the scheduler recently. I've investigated Apache Shiro
> >> >> > > > <http://shiro.apache.org/> and I think it would fit into the
> >> >> scheduler
> >> >> > > > nicely as a replacement for our custom CapabilityValidator
> >> >> > > > <
> >> >> > > >
> >> >> > >
> >> >> >
> >> >>
> >>
> http://people.apache.org/~kevints/aurora/dist/0.5.0-incubating/javadoc/org/apache/aurora/auth/CapabilityValidator.html
> >> >> > > > >
> >> >> > > > framework (for which there currently exists no implementation).
> >> >> > > >
> >> >> > > > I'd like feedback on this proposal.
> >> >> > > > Status Quo
> >> >> > > >
> >> >> > > > Security is currently implemented by a hand-rolled
> >> SessionValidator
> >> >> > > > <
> >> >> > > >
> >> >> > >
> >> >> >
> >> >>
> >>
> http://people.apache.org/~kevints/aurora/dist/0.5.0-incubating/javadoc/org/apache/aurora/auth/SessionValidator.html
> >> >> > > > >
> >> >> > > > framework. No public implementations exist.
> >> >> > > > Proposal
> >> >> > > >
> >> >> > > > Change the scheduler to use the Apache Shiro framework for
> >> >> > authentication
> >> >> > > > and authorization. Move authentication from application to
> >> transport
> >> >> > > layer
> >> >> > > > and move authorization to the Shiro Permissions model.
> >> >> > > > Advantages
> >> >> > > >
> >> >> > > > A few things that will become possible once this work is
> complete:
> >> >> > > >
> >> >> > > > 1. Ability to configure secure Aurora client-to-scheduler with
> a
> >> >> simple
> >> >> > > > flat configuration file (shiro.ini
> >> >> > > > <http://shiro.apache.org/configuration.html>).
> >> >> > > >
> >> >> > > > 2. Ability to integrate Aurora with my enterprise SSO
> >> (Kerberos+LDAP
> >> >> > for
> >> >> > > > example) by implementing a custom Shiro Realm
> >> >> > > > <http://shiro.apache.org/realm.html>.
> >> >> > > >
> >> >> > > > 3. Ability to allow a CI server to continuously deploy to every
> >> >> role's
> >> >> > > > "staging" environment without being able to touch its "prod"
> one
> >> by
> >> >> > using
> >> >> > > > Shiro's WildcardPermission
> >> >> > > > <
> >> >> > > >
> >> >> > >
> >> >> >
> >> >>
> >>
> https://shiro.apache.org/static/1.2.3/apidocs/org/apache/shiro/authz/permission/WildcardPermission.html
> >> >> > > > >
> >> >> > > > .
> >> >> > > >
> >> >> > > > 4. Ability to authenticate to the scheduler API using Kerberos
> >> (via
> >> >> > > SPNEGO
> >> >> > > > <http://spnego.sourceforge.net/>) or HTTP Basic auth.
> >> >> > > >
> >> >> > > > 5. Ability to perform authenticated write operations on a job
> via
> >> the
> >> >> > web
> >> >> > > > UI
> >> >> > > > <
> >> >> >
> >> http://www.chromium.org/developers/design-documents/http-authentication
> >> >> > > >.
> >> >> > > > Suggested Reading
> >> >> > > >
> >> >> > > > Shiro has excellent documentation and is a fellow Apache
> >> Foundation
> >> >> > > > project. I suggest you check out at least the 10-minute
> tutorial
> >> >> > > > <http://shiro.apache.org/10-minute-tutorial.html> and the
> Guice
> >> >> > > > integration
> >> >> > > > documentation <http://shiro.apache.org/guice.html>.
> >> >> > > > Scheduler-side changes
> >> >> > > >
> >> >> > > > The best way to show the proposed changes is by example. In
> >> addition
> >> >> to
> >> >> > > > Guice wiring changes to place the Shiro authentication filter
> into
> >> >> the
> >> >> > > > request chain, code that previously looked like
> >> >> > > >
> >> >> > > >  @Override
> >> >> > > >
> >> >> > > >  public Response createJob(
> >> >> > > >
> >> >> > > >      JobConfiguration mutableJob,
> >> >> > > >
> >> >> > > >      @Nullable final Lock mutableLock,
> >> >> > > >
> >> >> > > >      SessionKey session) {
> >> >> > > >
> >> >> > > >    requireNonNull(session);
> >> >> > > >
> >> >> > > >    try {
> >> >> > > >
> >> >> > > >      sessionValidator.checkAuthenticated(
> >> >> > > >
> >> >> > > >          session,
> >> >> > > >
> >> >> > > >          ImmutableSet.of(mutableJob.getKey().getRole()));
> >> >> > > >
> >> >> > > >    } catch (AuthFailedException e) {
> >> >> > > >
> >> >> > > >      return errorResponse(AUTH_FAILED, e);
> >> >> > > >
> >> >> > > >    }
> >> >> > > >
> >> >> > > >    // Request is authenticated and authorized, continue.
> >> >> > > >
> >> >> > > >  }
> >> >> > > >
> >> >> > > > becomes
> >> >> > > >
> >> >> > > >  @Override
> >> >> > > >
> >> >> > > >  public Response createJob(
> >> >> > > >
> >> >> > > >      JobConfiguration mutableJob,
> >> >> > > >
> >> >> > > >      @Nullable final Lock mutableLock) {
> >> >> > > >
> >> >> > > >    // subject is injected in the constructor by Guice each
> >> request.
> >> >> > > >
> >> >> > > >    // checkPermission will throw an unchecked
> >> >> > > >
> >> >> > > >    // AuthorizationException that bubbles up as a 401.
> >> >> > > >
> >> >> > > >    // This line could also be inserted by inspection of the
> method
> >> >> > > >
> >> >> > > >    // call in a security AOP layer.
> >> >> > > >
> >> >> > > >    subject.checkPermission(
> >> >> > > >
> >> >> > > >      // A Shiro WildcardPermission job:create:mesos:prod:labrat
> >> >> > > >
> >> >> > > >      new JobScopedPermission("job:create",
> mutableJob.getKey()));
> >> >> > > >
> >> >> > > >    // Request is authenticated and authorized, continue.
> >> >> > > >
> >> >> > > >  }
> >> >> > > >
> >> >> > > > Some admin methods are protected by annotations like
> >> >> > > >
> >> >> > > > @Requires(Capability.PROVISIONER)
> >> >> > > >
> >> >> > > > public Response startMaintenance(Set<String> hosts, SessionKey
> >> >> session)
> >> >> > > { …
> >> >> > > > }
> >> >> > > >
> >> >> > > > They'd become
> >> >> > > >
> >> >> > > > @RequiresPermission("maintenance:create")
> >> >> > > >
> >> >> > > > public Response startMaintenance(Set<String> hosts) { … }
> >> >> > > > Client-side changes
> >> >> > > >
> >> >> > > > No changes are necessary to use HTTP Basic Auth - requests will
> >> >> > > > automatically use a .netrc file today.
> >> >> > > >
> >> >> > > > An optional dependency on kerberos and requests-kerberos can be
> >> added
> >> >> > to
> >> >> > > > support SPNEGO authentication.
> >> >> > > > Timeline
> >> >> > > >
> >> >> > > > I would like to land support for HTTP Basic Auth and SPNEGO in
> >> 0.8.0
> >> >> > and
> >> >> > > > deprecate the SessionKey-based API for authentication in favor
> of
> >> >> fully
> >> >> > > > transport-based authentication.
> >> >> > > >
> >> >> > > > In 0.9.0 I propose removing SessionKey from the API entirely
> along
> >> >> with
> >> >> > > > SessionValidator from the scheduler.
> >> >> > > >
> >> >> > >
> >> >> > >
> >> >> > >
> >> >> > > --
> >> >> > > Zameer Manji
> >> >> > >
> >> >> >
> >> >>
> >>
>

Reply via email to