5.6 KiB
Optionally enforce URL-safe domain and project names
In preparation for future support for hierarchical naming of projects and domains, deprecate non url-safe names as well as optionally enforce url-safe names.
Problem Description
Once upon a time, in a release far away, there were just tenants in a flat namespace. It was natural that tenant names had to be unique keystone-wide. Subsequently we have added domains (to hold tenants, now called projects), which meant that project names had only to be unique within that domain. We now support hierarchies of projects (within a domain) and potentially may support hierarchies of domains above projects. However, our name uniqueness rules have not changed, so a project name must (effectively) be unique within its hierarchy, and domain names must still be unique keystone-wide. One main reason our rules have not changed is that we support scoping to domain and project by name.
Given this new hierarchy support, our naming rules will become increasingly onerous on customers. Not only for customer with deep project hierarchies, but also will complicate any support for domain hierarchies for resellers. In the future it would be ideal if you could address a node in a hierarchy with a url-style addressing scheme, for example:
{
"auth": {
"identity": {
...
},
"scope": {
"project": {
"domain": {
"name": "acme.com"
},
"name": "development/sas/myproject"
}
}
}
}
The same addressing scheme could also be used for domains, if we require support for domain hierarchies.
However, our current project and domain names are not url-safe, so we could not guarantee to support any particular hierarchical naming scheme without risk of breaking access to strangely named projects/domains.
Proposed Change
It is proposed that we lay the groundwork to move to url-safe naming for all projects and domains. A url-safe name is defined as one that does not contain any of the reserved characters as defined in section 2.2 of rfc3986 <http://tools.ietf.org/html/rfc3986>_.
In particular, we would:
- Deprecate url-unsafe naming, so deprecation warnings would be logged for unsafe names.
- Provide a keystone-manage option to list the ID and name of any url-unsafe projects or domains, so that such names can subsequently be updated using the regular Identity API.
- Provide two configuration options (one for projects and one for domains) to enable enforcement. These would accept three values: off, new, strict. These would be off by default, which means no change in behavior.
- If set to new then a request to create a new domain or project with a name that does not match the url safe criteria will be rejected.
- If the configuration option is set to strict, in addition to the restrictions defined for new, any existing unsafely-named domains or projects will be treated as disabled for the purposes of issuing a token scoped by project/domain name. Renaming the project or domain will re-enable it.
Future keystone releases would harden the above, moving towards a situation when the configuration options are eventually deprecated and url-safe naming is permanently enabled.
New features we release, for example domain hierarchies for resellers, could insist that the appropriate url-safe configuration option was enabled before that feature was supported.
To be clear, this proposal does not enable the actual use of hierarchical naming, rather it lays the groundwork for us to do so in the future.
This proposal does not preclude the use of unicode for project and domain names (since all the reserved characters are coded the same in ascii and unicode). However, to utilize such an extended character set for auth or searching by name would require additional changes (for encoding and decoding) which is outside of the scope of this proposal. By allowing unicode within the strict naming option defined here, we allow customer using unicode to "go strict" as soon as they can (and hence avoiding a further road block to us being able to deprecate unsafe names).
Alternatives
None
Data Model Impact
None
REST API Impact
None
Security Impact
None
Notifications Impact
None
Other End User Impact
None
Performance Impact
None
Other Deployer Impact
None, by default, although would require them to potentially rename projects or domains if they want to start enforcing url-safe naming.
Developer Impact
None
Implementation
Assignee(s)
- Primary assignee:
-
henry-nash
Work Items
- Add support for new configuration options
- Add deprecation logging
- Add checking in create/update domain/project
- Add checking in auth to prevent scoping to unsafe entities
- Add support to keystone-manage for listing unsafely-named domains/projects
Dependencies
None
Testing
None, above and beyond unit testing
Documentation Impact
Changes to the Identity API to clarify naming.
References
None