[openstack-dev] [Openstack] [keystone] Re: Domain Name Spaces
David Chadwick
d.w.chadwick at kent.ac.uk
Tue Oct 30 11:54:04 UTC 2012
On 26/10/2012 17:31, heckj wrote:
> Bringing conversation for domains in Keystone to the broader mailing lists.
>
>
> On Oct 26, 2012, at 5:18 AM, Dolph Mathews <dolph.mathews at gmail.com
> <mailto:dolph.mathews at gmail.com>> wrote:
>> I think this discussion would be great for both mailing lists.
>>
>> -Dolph
>>
>>
>> On Fri, Oct 26, 2012 at 5:18 AM, Henry Nash <henry.nash at mac.com
>> <mailto:henry.nash at mac.com>> wrote:
>>
>> Hi
>>
>> <Not sure where best to have this discussion - here, as a comment
>> to the v3api doc, or elsewhere - appreciate some guidance and will
>> transfer this to the right place>
>>
>> At the Summit we started a discussion on whether things like user
>> name, tenant name etc. should be globally unique or unique within
>> a domain. I'd like to widen that discussion to try and a) agree a
>> direction, b) agree some changes to our current spec. Here's my
>> view as an opening gambit:
>>
>> - When a Keystone instance is first started, there is only one,
>> default, Domain. The Cloud Provider does not need to create any
>> new domains, all projects can exist in this default domain, as
>> will the users etc. There is one, global, name space. Clients
>> using the v2 API will work just fine.
>>
>>
>> +1
>
> Very much what we were thinking for the initial implemenation and
> rollout to make it backwards "compatible" with the V2 (non-domain) core API
>
>> - If the Cloud Provider wants to provide their customers with
>> regions they can administer themselves and be self-contained, then
>> they create a Domain for each customer. It should be possible for
>> users/roles to be scoped to a Domain so that (effectively)
>> administrative duties can be delegated to some users in that
>> Domain. So far so good - all this can be done with the v3 API.
>>
>>
>> Not clear on if you're referring to endpoint regions, or just
>> describing domain isolation?
>
> I believe you're describing the key use cases behind the domains
> mechanism to begin with - user and project partitioning to allow for
> administration of those to be clearly "owned" and managed appropriately.
>
>
>> - We still have work to do to make sure items in other OS projects
>> that reference tenants (e.g. Images) can take a Domain or Project
>> ID, but we'll get to that soon enough
>>
>>
>> Everything will continue to work with projects, but once middleware
>> starts providing a DOMAIN_ID and DOMAIN_NAME to the underlying
>> service, it'll be up to them to take advantage of it. Images per
>> domain is an excellent example use case.
>
>> - However, Cloud Providers want to start enabling enterprise
>> customers to run more and more of the workloads in OpenStack
>> clouds - over and above, the smaller sized companies that are
>> doing this today. For this to work, the encapsulation of a Domain
>> need, I think, to be able to be stricter - and this is where the
>> name space comes into play. I think we need to allow for a Domain
>> to have its own namespace (i.e. users, roles, projects etc.) as an
>> option. I see this as a first step to allowing each Domain to
>> have its own AuthZ/N service (.e.g external ldap owned and hosted
>> by the customer who will be using the Domain)
>>
>> Implementation:
>>
>> - A simplistic version would just allow a flag to specified on
>> Domain creation that said whether this a "private" or "shared"
>> Domain. Shared would use the current global name space (and
>> probably be the default for compatibility reasons).
>>
>>
>> I like the direction of this -- need to digest implications :)
>
> I like the idea conceptually - but let's be clear on the implications to
> the end users:
>
> Where we're starting is preserving a global name space for project names
> and user names. Allowing a mix of segregated and global name spaces
> imposes a burden of additional data being needed to uniquely place
> authentication and authorization.
>
> We've been keeping to 2 key pieces of info (username, password) to get
> authenticated - and then (via CLI or Horizon dashboard) you can choose
> from a list of protential projects and carry on. In most practical
> circumstances, any user working primarily from the CLI is already
> providing 3-4 pieces of information:
>
> * username
> * password
> * tenant name
> * auth_url
In fact these are all name/value pairs, so they can all be regarded as
attribute names and values (or types and values in LDAP terminology).
The attribute names/types have to be globally unique. I think you have
implicitly mandated this in Keystone by defining the names yourself, and
by not allowing other names to be used. I presume that currently it
would not be meaningful to pass a value of
* age
via the CLI. But it should be, since one might have an authz policy that
bases its decision on the age of the user.
So how about considering a more generic interface where any attribute
name and value can be passed, and the authz service will use these to
see if they fit the policy or not.
regards
David
>
> to access and use the cloud.
>
> By allowing domains to be their own namespaces, we're adding another
> element that will be absolutely required to identify the person
> authenticating:
> * domain name
>
> implying a cascade of changes to the user experience all the way down
> through horizon.
>
>
>> - A more flexible approach would be to allow the specification of
>> where the various sub-services of Keystone (e.g. AuthN/Z, Service
>> Catalogue, Resources (i.e Users, Projects)) are hosted. The
>> defaults would all point back to the default domain (i.e. are
>> global and shared), but instead could be specified as "self" (I.e.
>> the new Domain), or, in the future, some other external location,
>> e.g. for a remote ldap.
>> - As an aside, this multi-name space model could also allow the
>> Cloud Provider their own name space, separate from their customers
>> - i.e. they will have a need to create admins who can just create
>> domains and on-board customers into those domains. These users &
>> roles could exist in the default domain, while all the customers'
>> users/roles exist solely within their own domains.
>> - One potential problem I do see is with roles. Today, the role
>> name is, if I understand it correctly, a kind of shared secret
>> between, other services and Keystone - e.g. it is the actual name
>> of a given role, say "ProjectAdmin" , that must match in, say, the
>> Nova policy file and the role assignment in Keystone (please
>> correct me if I have this wrong).
>>
>>
>> You're 100% correct.
>>
>> How would that work if the role names were not unique across Domains?
>>
>>
>> Not that we would want admins to ever see Role ID's, or edit policy
>> files with role ID's, but they provide a potential solution.
>
> The different role names would need to be accounted for in the policy
> files the way they're set up today - the enforcement there is all at the
> service level. There's no current provision for evaluating policy
> differently based on domain. While that's possible, it sounds like a
> tremendous cascade of additional complication, as the policy, and roles,
> are all set up and managed by deployers.
>
> I think this might be an interesting addition in the future, but want to
> keep the initial implementation and roll-out of the policy mechanisms
> and domains consistent and simple for a first roll-out iteration.
>
>> What is the desired functionality for a Cloud Provider wanting to
>> give their enterprise customers this level of flexibility - will
>> they have dedicated Nova endpoints anyway? Sounds too rigid.
>> This might tie into another bp we are working on at IBM in terms
>> of using Availability zones to allow Cloud Providers to divide up
>> their compute resources in a more flexible way.
>> - Finally, I wanted to raise the subject of whether we should make
>> it a goal to remain compatible with the v2 API /once the cloud
>> provider starts creating additional domains/.
>>
>>
>> Joe and I briefly discussed this at the summit. As a migration to v3,
>> we'd obviously be creating the default domain and mapping all existing
>> users/projectse/etc to it. I'd be fine if the v2 implementation ONLY
>> interacted with resources in that default domain; i.e. if you want to
>> use domains, upgrade to a v3 client.
>>
>> As stated above, if just the default domain is being used, then
>> fine. And while I agree that, technically, the v2 API should
>> still work with the above if all the other domains point back to
>> the default domain for their sub-services - it feels overly
>> flexible (and maybe wrong conceptually) to support v2 semantics
>> across a multi-domain installation.
>>
>>
>> +1
>>
>>
>> Interested in everyone else's view.
>>
>> Henry
>>
>>
>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~openstack
> Post to : openstack at lists.launchpad.net
> Unsubscribe : https://launchpad.net/~openstack
> More help : https://help.launchpad.net/ListHelp
>
More information about the OpenStack-dev
mailing list