[openstack-dev] Cells design issue

Mark McLoughlin markmc at redhat.com
Fri Jun 14 06:26:09 UTC 2013


On Thu, 2013-06-13 at 16:50 -0500, Kevin L. Mitchell wrote:
> At present, all the information that allows cells to communicate to each
> other—including the Rabbit username and password—is stored in the
> database, in clear text; while not really a security issue (if someone
> can read your database, you're already on quicksand, security wise),
> this is somewhat undesirable.  I would like to try to address this
> issue, but I can really only come up with two basic approaches, both of
> which will cause some migration issues, so I'm hoping to kick off a
> discussion as to which will be the more acceptable solution.
> 
> The first potential solution is to simply encrypt the password in the
> database.  (Actually, I intend to first merge all of the RPC information
> into a single database field, then encrypt that; that will make it
> easier to allow for alternate communication mechanisms in the future.)

Bear in mind that we're adding the notion of a transport URL to
oslo.messaging, partly for cells:

  https://wiki.openstack.org/wiki/Oslo/Messaging#Transport_URLs

> The problem with this approach is the key management problem: we either
> have to encrypt the data during the migration, or provide a mechanism
> whereby the data may be lazily encrypted at runtime; and we must also
> allow for rekeying later on.
> 
> The second potential solution is to drop the cells table from the
> database and place all the data regarding cells (including the
> connection information) into a configuration file.  (Not the master
> configuration file; my vision here is to add a single option that says
> to load cells data from an auxiliary JSON file, a la policies.)  The
> problem with this approach, of course, is that the data has to be
> migrated out of the database and into that JSON file in some fashion;
> this can't really be adequately handled via database migrations.  We
> also necessarily lose the ability to add and remove cells via the API.

Putting it in a config file and losing the cells management API seems
fine to me. Not entirely sure why, but it doesn't feel unlike a lot of
other stuff we have in our config files.

Is there any reason not to just put it in nova.conf as transport URLs?

(By nova.conf, I mean cfg.CONF for nova which means you could happily do
e.g. --config-file nova-cells.conf too)

> I have thought of one way to at least partially mitigate the downsides
> of the second solution: allow the cell data to come from the database OR
> the file.  We could then create a simple tool that could allow you to
> extract the data from the database and store it in a file later on,
> after the migration.  In this scenario, the "cells" table remains for
> the Havana release, then a later migration would remove it for Icehouse.
> We would still need to ensure that the pending deprecation is carefully
> documented, along with the migration strategy, so that existing users
> aren't caught by surprise…

Makes sense to me.

Cheers,
Mark.




More information about the OpenStack-dev mailing list