[openstack-dev] [keystone] HMT/Reseller - The Proposed Plan
Adam Young
ayoung at redhat.com
Wed Nov 18 21:36:10 UTC 2015
On 11/18/2015 08:42 AM, Raildo Mascena wrote:
>
> ii) Our restriction of “all domain names must be unique” means that
> one reseller could “squat” on a domain name and prevent anyone else
> from having a domain of that name.
> This is absolutely true. In reality, however, reseller arrangements
> will be contractual, so if a cloud provider was really concerned about
> this, they could legislate against this in the contract with the
> reseller (e.g. "All the domains you create must be suffixed with your
> reseller name”). In addition, if we believe that federation will
> become the dominant auth model, then the physical name of the domain
> becomes less important.
This is the crux of the matter, and I think the case where we have to
address things.
If all customers are in a domain called "customers" and under there we
crete a domain called "IBM" and then the IBM admins create a domain
named "HP" they have effectively blocked HP from becoming client of our
cloud.
The fact that a domain name is global and in a flat namespace means that
we cannot enforce it using the scoped RBAC model. To put it another
way, when a user using a role scoped to a parent domain cretes a child
domain in a flat namespace, information leaks out of the scope, and
effectively breaks scoped RBAC.
HTTP solves this very elegantly, and I think we should follow suite. If
every domain name in a Keystone server can be represented with a unique,
nestable URL, we can maintain the scope without polluting the global
namespace.
if all customers go into the "customer" domain, then IBM is is
"customer/IBM" and if they create a domain underneath them called HP, we
can happily take HP's money and give them customer/HP, because the IBM
domain gets named customers/IBM/HP.
The thing keeping us from implementing this today is the fact that
domain names can be any string. If we provide a config option, say
domain_strict_url, then we can enforce that only domains with names that
don't have any of the reserved HTTP characters in them can be used as
domain names. If this value gets set, and a domain is named
"adam at THISROCKS!?!?!?" that domain would be disabled. This would allow
deployers to "opt in" to the approach, and to deal with any domains that
were improperly named prior to enabling nested domains.
This same patterns can be extended to project names, but we could not
mix and match domains and projects, unless we strictly enforce
domain-is-a-project.
More information about the OpenStack-dev
mailing list