[openstack-dev] [Keystone] Auto user provisioning and token creation
David Chadwick
d.w.chadwick at kent.ac.uk
Wed Jun 5 06:51:00 UTC 2013
Hi Henry
this message is very helpful and I look forward to reading your BP when
it is finished. Here are a few comments that might help you
1) Often the external corporate LDAP and the external IDP will be one
and the same entity from the perspective of the token store/Get token
method, and one query to one entity will return perform both functions
and return both sets of information (as signed assertions)
simultaneously. The combined query might be "authenticate this user and
return me the set of roles/attributes this user has for my resource".
2) In general an external IDP/LDAP will not be able to provide the roles
and projects for Keystone that the token store/Get token method needs,
since organisational IDPs already store all the user attributes they
need for internal purposes, prior to OpenStack coming into existence.
The information is provided by HR and computer services staff, and
organisations typically do not want to alter this data very frequently,
or for some internal group of users who might have some temporary
arrangement with some external service (such as an OpenStack cloud
service). This problem has been known about for almost a decade, and so
different mechanisms have been developed to cater for this this. In
SAML, the Shibboleth software provides an attribute mapping function to
map from internally stored (LDAP) attributes into a fixed standard set
of attributes that are provided to the federation, often (though not
necessarily) regardless of the SP they are being sent to. These are
usually based on the EduPerson schema. This solution is not sufficient
since it is not fine grained enough. In the grid world, VOMS servers
have been developed to cater for this situation, by allowing VO
administrators to assign the necessary roles to the various members of
the VO, independently of the organisational IDPs. But this complicates
things (it requires attribute aggregation) and requires groups to run
separate VOMS servers. Thus diagram 3 as currently envisaged wont work
in practice.
3) Who is driving the token module in diagrams 2 and 3? Is it the end
user or another internal Keystone process? This is not clear.
4) I would therefore prefer diagram 3 to work as follows:
a) the get token module is called by another Keystone process that traps
the user's API request and takes care of processing it (call this module
A). It passes to the token module all the information it requires for it
to generate a token. No external call out is needed. The token module is
responsible for cryptographically producing a token from the input
information. A sister module (Validate token) takes as input a
cryptographic token and returns all the information encapsulated in it.
The token module could work by storing all this information in an
internal DB and simply returning a secret, or by packaging all the
information into its token. But this is an implementation decision.
b) Module A sends a combined authentication and attribute request to the
external IDP (or it could still be two separate messages, but going to
one combined IDP entity as you cannot assume the IDP is running an LDAP
server - it should be hidden to Keystone)
b) Module A does any other processing it needs (such as trust checking,
attribute mapping etc) then calls the get token module.
I hope this is helpful
regards
David
On 03/06/2013 09:50, Henry Nash wrote:
> Hi David,
>
> So this question is relates exactly to the point I am at trying to
> re-write the auth-roleassignment-domain blue print. Not yet complete,
> but here, as food for thought, are three new diagrams I am adding that
> try and show how we re-cast the current identity components ready for
> the mix of internal and external "providers" that we want to enable:
>
> First, the case for an all-internal solution:
>
>
> Second, what happens if we have external authentication only:
>
> ...and finally, potentially, for both auth and role assignment being
> external:
>
> The question I am trying to thinking through (and which relates to your
> question as well), is how much "internal support" remains for users/role
> assignments etc. as these functions are provided externally? Do we need
> to still support "openstack only users/roles"? For example service
> users...a corporate LDAP/IDP might not contain these. Also, might a
> cloud provider want a way of preventing a given user authenticating
> (what ever the external authority says). Would you do this by a black
> list, or just allow the creation of an internal (to keystone) user
> entity that was disabled...and have internal user entities "override"
> the external permissions?
>
> Hope to have this nailed and included in the BP this week.
>
> Henry
> On 1 Jun 2013, at 10:31, David Chadwick wrote:
>
>> In various discussions that we have had about auto user provisioning
>> and token creation, it seems that there are at least three possible
>> design options as follows. The purpose of this email is to generate
>> discussion about the various options and agree on which one is the
>> best one to pursue for the Havana release.
>>
>> In the following discussion it is assumed that a user does not
>> initially have an entry in the Keystone database, and that the
>> authentication process has returned a session validity time for the user
>>
>> Option 1.
>> Create a temporary user entry (i.e. a normal entry with an additional
>> validity time field) with a validity time equal to the session
>> validity time), then use the existing token generation code to create
>> a token, with the proviso that the token validity time is not greater
>> than the entry validity time
>>
>> Option 2.
>> Create a permanent user entry, then use the existing token generation
>> code to create a token, with the proviso that the token validity time
>> is not greater than the session validity time
>>
>> Option 3.
>> Dont create a user entry. From the user information obtained from the
>> authentication and identification process, call the proposed new token
>> generation plugin to create a token with a validity time equal to the
>> session validity time. In this case, federated users will never have
>> entries in Keystone's database.
>>
>>
>> Pros
>> Option 1. A background process can easily decide when to delete
>> temporary entries, based on the dates of their validity fields.
>> Option 2. Does not need to change the existing user entries.
>> Option 3. Does not need to create or delete user entries.
>>
>> Cons
>> Option 1. Validity time needs to be updated each time the user logs in
>> Option 2. User database grows to infinity. No easy way of knowing
>> which entries have expired and which have not. May need to add meta
>> data to Keystone entries such as date of creation, date of last access
>> etc. so that a background process can delete old entries
>> Option 3. Needs the token creation to be completely separate from user
>> entries and not to depend upon their existence. This is something
>> Guang is currently working on
>>
>> Let the discussion begin!
>>
>> regards
>>
>> David
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev at lists.openstack.org
>> <mailto: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
>
More information about the OpenStack-dev
mailing list