<div dir="ltr">Hi Adrian,<div><br></div><div>Thanks for the write-up.</div><div><br></div><div>I think adding an approval workflow to Neutron is a reasonable feature request. It probably wouldn't be back-portable because it's going to require an API change and a new column in the database for approval state so you would have to patch it in manually in your cloud (assuming you don't want to wait for Pike).</div><div><br></div><div>The tricky part is going to be figuring out how to handle API backward compatibility. Requiring an extra step before a project is allowed to use a network shared to it would break existing automation that depends on the current workflow. </div><div><br></div><div><br></div><div>Please file an request for enhancement against Neutron[1] and we can continue the discussion of how to implement this on the bug report.</div><div><br></div><div><br></div><div>As for your option 2, the reason Neutron can't do something like that automatically right now is due to a lack of strong Keystone integration. Outside of the middleware that authenticates requests, Neutron doesn't even know keystone exists. We have no way to prevent changes on the keystone side that would violate the current RBAC policies (e.g. a user is using a network that they wouldn't be able to use after a keystone modification). We also have no framework in place to even see keystone alterations when they happen so it would require constant background polling.</div><div><br></div><div><br></div><div>1. <a href="https://docs.openstack.org/developer/neutron/policies/blueprints.html#neutron-request-for-feature-enhancements">https://docs.openstack.org/developer/neutron/policies/blueprints.html#neutron-request-for-feature-enhancements</a></div><div><br></div><div><br></div><div>Cheers,</div><div>Kevin Benton</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 28, 2017 at 7:43 PM, Adrian Turjak <span dir="ltr"><<a href="mailto:adriant@catalyst.net.nz" target="_blank">adriant@catalyst.net.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello Openstack-Devs,<br>
I'm just trying to find out if there is any proposed work to make the<br>
network RBAC a bit safer.<br>
For context, I'm part of a company running a public cloud and we would<br>
like to expose Network RBAC to customers who have multiple projects so<br>
that they can share networks between them. The problem is that the<br>
network RBAC policy is too limited.<br>
If you know the project id, you can share a network to that project id.<br>
This allows you to name a network 'public' or 'default' and share it to<br>
others in hopes of them connecting to it where you then potentially<br>
compromise their instances. Effectively this allows honey-pot networks.<br>
The only layer of safely you have is first needing to gleam a project id<br>
before you can do this, effectively security through obscurity, which is<br>
a terrible approach.<br>
Ideally network RBAC should work the same as image sharing in Glance.<br>
You share a network, and the other project must accept it before it<br>
becomes usable. This doesn't stop a too trusting party from accepting an<br>
unsafe network, but it means they have some warning before doing<br>
anything silly. Otherwise the onus is on them to always be vigilant for<br>
shared networks that shouldn't be there, which is not exactly something<br>
we want our customers to have to worry about.<br>
Are there plans to implement some sort of acceptance process for network<br>
RBAC in Neutron, or a willingness to? Other options are to only allow<br>
sharing to projects you have a role in, or projects in same hierarchical<br>
'tree'. If I throw up a spec/blueprint for this is there interest in<br>
following through with dev work, or would there be support if I or other<br>
members of our company decide to help implement such a change?<br>
If not, I've considered a few options I can do around this, and I'd be<br>
curious on people's thoughts:<br>
1. Expose Network RBAC as is and setup automated auditing to check for<br>
shared networks policies outside of their hierarchical tree, or between<br>
projects that don't have shared users.<br>
2. Build into our workflow service a new plugin to expose a neutron<br>
RBAC-like API which in the background uses the Neutron API with an admin<br>
account on your behalf. This service would enforce a level of custom<br>
policy that we'd want before allowing the creation of a network RBAC<br>
policy. That way networks can only be shared between projects in the<br>
same tree, or if the requesting user has roles in both projects. If<br>
anyone attempts to share beyond that scope, we will require an admin to<br>
approve the request before the network is shared, or simply deny it.<br>
Think of this as a wrapper/proxy around Network RBAC to allow<br>
stronger/flexible policy. In this scenario the Neutron policy would<br>
limit RBAC to admin only.<br>
Option 1 is easy, but reactive, which in larger deployments, or with<br>
larger customer bases isn't great since parsing that much data as a<br>
human is hard, and writing the auditing to tell us what is 'unsafe'<br>
correctly isn't easy. We may not always catch things fast enough, or<br>
we'll catch too much and have to process it.<br>
Option 2 is a bit more work, and means clients have to interact with a<br>
different API instead (which we'd document to our customers and provide<br>
a horizon panel for it), but gives us as deployers far more safety and<br>
So, what to do? Is it worth trying to make this feature safer in<br>
Neutron? Will we get the support to make it happen? Or should we just<br>
develop something around it so it works for us as we need it to? It's a<br>
very useful feature, but as it stands it's too unsafe to expose in a<br>
public cloud environment.<br>
Adrian Turjak<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>