On 06/04/2015 06:32 AM, Sean Dague wrote:
On 06/03/2015 08:40 PM, Tim Hinrichs wrote:
As long as there's some way to get the *declarative* policy from the
system (as a data file or as an API call) that sounds fine.  But I'm
dubious that it will be easy to keep the API call that returns the
declarative policy in sync with the actual code that implements that policy.
Um... why? Nova (or any other server project) needs to know what the
currently computed policy is to actually enforce it internally. Turning
around and spitting that back out on the wire is pretty straight forward.

Is there some secret dragon I'm missing here?

No. But it is a significant bit of coding to do; you would need to crawl every API and make sure you hit every code path that could enforce policy. However, I've contemplated doing something like that with oslo.policy already; run a workload through a server with policy non-enforcing (Permissive mode) and log the output to a file, then use that output to modify either the policy or the delegations (role assignments or trusts) used in a workflow.

The Hard coded defaults worry me, though. Nova is one piece (a big one, admittedly) of a delicate dance across multiple (not-so-micro) services that make up OpenStack. Other serivces are going to take their cue from what Nova does, and that would make the overall flow that much harder to maintain.

I think we need to break some very ingrained patterns in out policy enforcement. I would worry that enforcing policy in code would give us something that we could not work around. Instead, I think we need to ensure that the Nova team leads the rest of the OpenStack core services in setting up best practices, and that is primarily a communication issue. Getting to a common understanding of RBAC, and making it clear how roles are modified on a per-api basis will make Nova more robust.


        -Sean

Tim

On Wed, Jun 3, 2015 at 1:53 PM, Doug Hellmann <d...@doughellmann.com
<mailto:d...@doughellmann.com>> wrote:

     Excerpts from Sean Dague's message of 2015-06-03 13:34:11 -0400:
     > On 06/03/2015 12:10 PM, Tim Hinrichs wrote:
     > > I definitely buy the idea of layering policies on top of each other.
     > > But I'd worry about the long-term feasibility of putting default
     > > policies into code mainly because it ensures we'll never be able to
     > > provide any tools that help users (or other services like
     Horizon) know
     > > what the effective policy actually is.  In contrast, if the code
     is just
     > > an implementation of the API, and there is some (or perhaps several)
     > > declarative description(s) of which of those APis are permitted
     to be
     > > executed by whom, we can build tools to analyze those policies.  Two
     > > thoughts.
     > >
     > > 1) If the goal is to provide warnings to the user about
     questionable API
     > > policy choices, I'd suggest adding policy-analysis functionality
     to say
     > > oslo_policy.  The policy-analysis code would take 2 inputs: (i) the
     > > policy and (ii) a list of policy properties, and would generate a
     > > warning if any of the properties are true for the given policy.
      Then
     > > each project could provide a file that describes which policy
     properties
     > > are questionable, and anyone wanting to see the warnings run the
     > > functionality on that project's policy and the project's policy
     property
     > > file.
     > >
     > > It would definitely help me if we saw a handful of examples of the
     > > warnings we'd want to generate.
     >
     > WARN: "server create permissions have been restricted from the
     default,
     > this may impede operation and interoperability of your OpenStack
     > installation"
     >
     > > 2) If the goal is to provide sensible defaults so the system
     functions
     > > if there's no policy.json (or a dynamic policy cached from
     Keystone),
     > > why not create a default_policy.json file and use that whenever
     > > policy.json doesn't exist (or more precisely to use policy.json to
     > > override default_policy.json in some reasonable way).
     >
     > Because it's still a file, living in /etc. Files living in etc are
     > things people feel they can modify. They are also things that don't
     > always get deployed correctly with code deploys. People might not
     > realize that default_policy.json is super important to be updated
     every
     > time the code is rolled out.

     It doesn't have to live in /etc, though. It could be packaged in the
     nova code namespace as a data file, and accessed from there.

     Doug

     __________________________________________________________________________
     OpenStack Development Mailing List (not for usage questions)
     Unsubscribe:
     openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
     <http://openstack-dev-requ...@lists.openstack.org?subject:unsubscribe>
     http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to