[openstack-dev] [Keystone] Trusts (Preauth) and LDAP

Dolph Mathews dolph.mathews at gmail.com
Fri Nov 30 17:11:41 UTC 2012


On Fri, Nov 30, 2012 at 8:53 AM, Adam Young <ayoung at redhat.com> wrote:

> On 11/28/2012 11:05 AM, David Chadwick wrote:
>
>> Hi Adam
>>
>> I have seen your spec and commented on it. This is yet another case of
>> delegation is it not?
>>
> OK,  we've had a long discussion on this, and I think I can clarify.
>
> 1.  We've used "delegation" to mean many things.  I was using it to mean
> delegation from one Keystone server to another, in a(n) hierarchy. Maybe I
> am showing the effects of my time in the Army, but to me delegation is
> something that goes down from superiod to subordinate.
>

Federation?


>
> 2.  There are two related Legal terms I considered: Proxy and Trusts.  I
> ruled out the term "Proxy" due to its compete overuse.
>
> 3.  Regardless of whether we call it delegation or trust, we are
> discussing the same thing.
>

The concept is "delegating authorization to trusted entities," no? Modeling
it in the API as a "trust" between "users" sounds fine to me.


> From David Chadwich"
>
> "Keystone is the Delegation Service that handles all the delegations for
> users. It is trusted to ensure that
>
> i) a delegator cannot delegate an attribute he has not already been
> assigned
> ii) a delegator cannot delegate once the delegation depth has been consumed
> iv) a delegator cannot delegate outside the validity period of his own
> delegation.
>
> In other words, a delegator can only delegate less than (or equal to) what
> he already has, and not more than it. "
>
> I think that is a great prelude to the design discussion.
>
> Right now, a user delegates in a short term fashion using tokens. Once a
> token has been granted to a user, he hands that off to another (service)
> user in order to prove his identity and authorization to perform some set
> of actions.  In addition, since tokens are not scoped to a specific
> endpoint, they are currently passed on from one endpoint to another.  This
> is not a secure approach.  If any endpoint along the way is compromised,
> all the tokens in that endpoint are usable against any other service that
> accepts tokens.
>
> So  we limit the scope of tokens to only that single endpoint, and we
> remove the attack.  As a result, we also remove the ability of the remote
> service user  to request additional operations from additional remote
> services on behalf of the original user.  This is a problem that the trusts
> are designed to serve.
>
> A trust is a promise to allow delegation at some point in the future.  The
> actual delegation is performed in the token.  The trust is used to get the
> token.
>
> Now,  as far as implementation goes, I would like to propose two phases.
>
> 1.  Trusts get implemented today "hard wired" with the attributes that are
> currently exposed in a token:  (trustor) user, tenant, roles, endpoints.
> 2.  Tokens that get generated from the trusts will look just like normal
> tokens.  They will have an additional field "trustee".  This will allow the
> current consumers of tokens to continue to use a trust token just like they
> do now.
>
> Phase 2.
> 1.  Modify the token architecture to allow arbitrary sets of attributes.
> 2.  Modify the trust architecture to specify arbitrary sets of attributes
> to be used in a token.
>
>
>
> Regarding my original question, I am going to move the trust driver into
> the token back end.  It has become apparent that this is where it belongs,
> as it has the exact same dependencies and usage patterns as the tokens, and
> it is the Keystone "application specific" data.
>
>
>
>
>
>
>
>
>> regards
>>
>> David
>>
>> On 28/11/2012 15:45, Adam Young wrote:
>>
>>> I have a very rudimentary Trust  (what I used to call Preauth
>>> https://blueprints.launchpad.**net/keystone/+spec/trusts<https://blueprints.launchpad.net/keystone/+spec/trusts>)
>>> implementation
>>> working with the SQL backend for Identity.
>>>
>>> With LDAP, I am not sure where I would store the trust information. The
>>> data for the trust itself is simply the uuid user_ids for the trustor
>>> and  trustee and tenant Id.  There is also a table for the roles, and a
>>> second table for the endpoints associated with the trust.While we could
>>> shoehorn this into the user object, I am not sure that there is an
>>> intuitive way to implement it in LDAP.
>>>
>>> I see three choices.
>>>
>>> 1.  Leave the Trusts in the identity schema.  This has the nice effect
>>> of keeping the user-ids as foreign keys.  It has the drawback of forcing
>>> an LDAP backend solution.
>>> 2.  Move the Trusts into the Token backend.  This will get avoid the
>>> issue of LDAP support.  It does mean that tokens, which is a schema that
>>> is high volume, read intensive, and populated by short lifespan
>>> entities, gets mixed with trusts, which is low volume, and long lived.
>>> 3. Move it into its own backend.  This seems a little heavy weight.
>>>
>>>
>>> Thoughts?
>>>
>>> ______________________________**_________________
>>> OpenStack-dev mailing list
>>> OpenStack-dev at lists.openstack.**org <OpenStack-dev at lists.openstack.org>
>>> http://lists.openstack.org/**cgi-bin/mailman/listinfo/**openstack-dev<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
>>>
>>
>
> ______________________________**_________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.**org <OpenStack-dev at lists.openstack.org>
> http://lists.openstack.org/**cgi-bin/mailman/listinfo/**openstack-dev<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/20121130/3b64508c/attachment.html>


More information about the OpenStack-dev mailing list