<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Sep 9, 2014 at 8:25 AM, Nathan Kinder <span dir="ltr"><<a href="mailto:nkinder@redhat.com" target="_blank">nkinder@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 09/01/2014 01:43 AM, Marcos Fermin Lobo wrote:<br>
> Hi all,<br>
><br>
><br>
><br>
> I found two functionalities for keystone that could be against each other.<br>
><br>
><br>
><br>
> Multi-domain feature (This functionality is new in Juno.)<br>
><br>
> ---------------------------<br>
><br>
> Link:<br>
> <a href="http://docs.openstack.org/developer/keystone/configuration.html#domain-specific-drivers" target="_blank">http://docs.openstack.org/developer/keystone/configuration.html#domain-specific-drivers</a><br>
><br>
><br>
> Keystone supports the option to specify identity driver configurations<br>
> on a domain by domain basis, allowing, for example, a specific domain to<br>
> have its own LDAP or SQL server. So, we can use different backends for<br>
> different domains. But, as Henry Nash said “it has not been validated<br>
> with multiple SQL drivers”<br>
> <a href="https://bugs.launchpad.net/keystone/+bug/1362181/comments/2" target="_blank">https://bugs.launchpad.net/keystone/+bug/1362181/comments/2</a><br>
><br>
><br>
><br>
> Hierarchical Multitenancy<br>
><br>
> --------------------------------<br>
><br>
> Link:<br>
> <a href="https://blueprints.launchpad.net/keystone/+spec/hierarchical-multitenancy" target="_blank">https://blueprints.launchpad.net/keystone/+spec/hierarchical-multitenancy</a><br>
><br>
> This is nested projects feature but, only for SQL, not LDAP.<br>
><br>
><br>
><br>
> So, if you are using LDAP and you want “nested projects” feature, you<br>
> should to migrate from LDAP to SQL but, I you want to get multi-domain<br>
> feature too you can’t use 2 SQL backends (you need at least one LDAP<br>
> backend) because is not validated for multiple SQL drivers…<br>
><br>
><br>
><br>
> Maybe I’m losing something, please, correct me if I’m wrong.<br>
><br>
><br>
><br>
> Here my questions:<br>
><br>
><br>
><br>
> - If I want Multi-domain and Hierarchical Multitenancy<br>
> features, which are my options? What should I do (migrate or not migrate<br>
> to SQL)?<br>
><br>
> - Is LDAP going to deprecated soon?<br>
<br>
</div></div>I think you need to keep in mind that there are two separate backends<br>
that support LDAP: identity and assignment.<br>
<br>
>From everyone I have talked to on the Keystone team, SQL is preferred<br>
for the assignment backend. Storing assignment information in LDAP<br>
seems to be a non-standard use case.<br>
<br>
For the identity backend, LDAP is preferred. Many people have users and<br>
groups already in an LDAP server, and Keystone should be able to take<br>
advantage of those existing users and credentials for centralized<br>
authentication. In addition, every LDAP server I know have has better<br>
security features than the SQL identity backend offers, such as password<br>
policies and account lockout.<br>
<br>
The multiple domain support for multiple LDAP servers was really<br>
designed to allow for separate groups of users from separate identity<br>
LDAP servers to be usable in a single Keystone instance.<br>
<br>
Given that the Keystone team considers SQL as the preferred assignment<br>
backend, the hierarchical project blueprint was targeted against it.<br>
The idea is that you would use LDAP server(s) for your users and have<br>
hierarchical projects in SQL.<br>
<br>
My personal feeling is that the LDAP assignment backend should<br>
ultimately be deprecated. I don't think the LDAP assignment backend<br>
really offers any benefit of SQL, and you have to define some<br>
non-standard LDAP schema to represent projects, roles, etc., or you end<br>
up trying to shoehorn the data into standard LDAP schema that was really<br>
meant for something else.<br>
<br>
It would be interesting to create a poll like Morgan did for the<br>
Keystone token format to see how widely the LDAP assignments backend is.<br>
Even more interesting would be to know the reasons why people are using<br>
it over SQL.<br></blockquote><div><br></div><div>Please don't consider LDAP assignment backend as and outcast. It is used and we have use cases where it's the only way to go.</div><div><br></div><div>Some enterprises with strict security policies require all security-related tasks to be done through AD, and project/roles assignment is one of them. LDAP assignment backend is a right fit here.</div><div>Storing such info in AD provides additional benefit of providing not only single management point, but also an enterprise-ready cross-datacenter replication. (Galera or other MySQL replications arguably don't quite work for this)</div><div>From what I see, the only obstruction here is need for a custom LDAP schema for AD (which doesn't fly with strict enterprise constraints). That can be mitigated by using AD-native objectClass'es for projects and groups instead of 'groupOfNames' and 'organizationalRole': 'organizationalUnit' and 'group'. These object can be managed by commonly used AD tools (not LDAP editor), but require some changes in Keystone to work. We've hacked together some patches to Keystone that should make it work and will propose them in Kilo cycle.</div><div>Another missing feature is domains/hierarchical projects. It's not impossible to implement this in LDAP backend, but we need someone to step up here. With OUs it should be rather obvious how to store these in LDAP, but we'll need some algorithmic support as well.</div><div><br></div><div>We shouldn't give up on LDAP backend. It's used by a lot of private clouds and some public ones. The problem is that its users usually aren't ready to make necessary changes to make it work and so have to bend their rules to make existing backend work. Some of them already are giving back: connection pooling has been implemented when one company faced performance problems with constant connections creating and closing.</div><div><br></div><div>Let's keep our hopes up.</div></div><div><br></div>-- <br><br><div>Kind regards, Yuriy.</div>
</div></div>