Bringing conversation for domains in Keystone to the broader mailing lists.


On Oct 26, 2012, at 5:18 AM, Dolph Mathews <dolph.math...@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.n...@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

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@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to