[openstack-dev] [keystone] Extending policy checking to include target entities

Adam Young ayoung at redhat.com
Tue Jul 23 17:31:40 UTC 2013


On 07/23/2013 12:54 PM, David Chadwick wrote:
> When writing a previous ISO standard the approach we took was as follows
>
> Lie to people who are not authorised.

Is that your verbage?  I am going to reuse that quote, and I would like 
to get the attribution correct.

>
> So applying this approach to your situation, you could reply Not Found 
> to people who are authorised to see the object if it had existed but 
> does not, and Not Found to those not authorised to see it, regardless 
> of whether it exists or not. In this case, only those who are 
> authorised to see the object will get it if it exists. Those not 
> authorised cannot tell the difference between objects that dont exist 
> and those that do exist

So, to try and apply this to a semi-real example:  There are two types 
of URLs.  Ones that are like this:

users/55FEEDBABECAFE

and ones like this:

domain/66DEADBEEF0000/users/55FEEDBABECAFE


In the first case, you are selecting against a global collection, and in 
the second, against a scoped collection.

For unscoped, you have to treat all users as equal, and thus a 404 
probably makes sense.

For a scoped collection we could return a 404 or a 403 Forbidden 
<https://en.wikipedia.org/wiki/HTTP_403> based on the users 
credentials:  all resources under domain/66DEADBEEF0000  would show up 
as 403s regardless of existantce or not if the user had no roles in the 
domain 66DEADBEEF0000.  A user that would be allowed access to resources 
in 66DEADBEEF0000  would get a 403 only for an object that existed but 
that they had no permission to read, and 404 for a resource that doesn't 
exist.




>
> regards
>
> David
>
>
> On 23/07/2013 16:40, Henry Nash wrote:
>> Hi
>>
>> As part of bp 
>> https://blueprints.launchpad.net/keystone/+spec/policy-on-api-target 
>> I have uploaded some example WIP code showing a proposed approach for 
>> just a few API calls (one easy, one more complex). I'd appreciate 
>> early feedback on this before I take it any further.
>>
>> https://review.openstack.org/#/c/38308/
>>
>> A couple of points:
>>
>> - One question is on how to handle errors when you are going to get a 
>> target object before doing you policy check.  What do you do if the 
>> object does not exist?  If you return NotFound, then someone, who was 
>> not authorized  could troll for the existence of entities by seeing 
>> whether they got NotFound or Forbidden. If however, you return 
>> Forbidden, then users who are authorized to, say, manage users in a 
>> domain would aways get Forbidden for objects that didn't exist (since 
>> we can know where the non-existant object was!).  So this would 
>> modify the expected return codes.
>>
>> - I really think we need some good documentation on how to bud 
>> keystone policy files.  I'm happy to take a first cut as such a thing 
>> - what do you think the right place is for such documentation
>>
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev at lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20130723/aaab7a86/attachment.html>


More information about the OpenStack-dev mailing list