[openstack-dev] [Heat]Heat template parameters encryption
Clint Byrum
clint at fewbar.com
Thu Jun 12 07:51:59 UTC 2014
I tend to agree with you Keith, securing Heat is Heat's problem.
Securing Nova is nova's problem. And I too would expect that those with
admin access to Heat, would not have admin access to Nova. That is why
we split these things up with API's.
I still prefer that users encrypt secrets on the client side, and store
said secrets in Barbican, passing only a temporary handle into templates
for consumption.
But until we have that, just encrypting hidden parameters would be simple
to do and I wouldn't even mind it being on by default in devstack because
only a small percentage of parameters are "hidden". My initial
reluctance to the plan was in encrypting everything, as that makes
verifying things a lot harder. But just encrypting the passwords.. I
think that's a decent plan.
A couple of ideas:
* Provide a utility to change the key (must update the entire database).
* Allow multiple decryption keys (to enable tool above to work
slowly).
Excerpts from Keith Bray's message of 2014-06-11 22:29:13 -0700:
>
> On 6/11/14 2:43 AM, "Steven Hardy" <shardy at redhat.com> wrote:
>
> >>IMO, when a template author marks a parameter as hidden/secret, it seems
> >>incorrect to store that information in plain text.
> >
> >Well I'd still question why we're doing this, as my previous questions
> >have
> >not been answered:
> >- AFAIK nova user-data is not encrypted, so surely you're just shifting
> >the
> > attack vector from one DB to another in nearly all cases?
>
> Having one system (e.g. Nova) not as secure as it could be isn't a reason
> to not secure another system as best we can. For every attack vector you
> close, you have another one to chase. I'm concerned that the merit of the
> feature is being debated, so let me see if I can address that:
>
> We want to use Heat to launch customer facing stacks. In a UI, we would
> prompt customers for Template inputs, including for example: Desired
> Wordpress Admin Password, Desired MySQL password, etc. The UI then makes
> an API call to Heat to orchestrate instantiation of the stack. With Heat
> as it is today, these customer specified credentials (as template
> parameters) would be stored in Heat's database in plain text. As a Heat
> Service Administrator, I do not need nor do I want the customer's
> Wordpress application password to be accessible to me. The application
> belongs to the customer, not to the infrastructure provider. Sure, I
> could blow the customer's entire instance away as the service provider.
> But, if I get fired or leave the company, I could no longer can blow away
> their instance... If I leave the company, however, I could have taken a
> copy of the Heat DB with me, or had looked that info up in the Heat DB
> before my exit, and I could then externally attack the customer's
> Wordpress instance. It makes no sense for us to store user specified
> creds unencrypted unless we are administering the customer's Wordpress
> instance for them, which we are not. We are administering the
> infrastructure only. I realize the encryption key could also be stolen,
> but in a "production" system the encryption key access gets locked down to
> a VERY small set of folks and not all the people that administer Heat
> (that's part of good security practices and makes auditing of a leaked
> encryption key much easier).
>
> >- Is there any known way for heat to "leak sensitive user data", other
> >than
> > a cloud operator with admin access to the DB stealing it? Surely cloud
> > operators can trivially access all your resources anyway, including
> > instances and the nova DB/API so they have this data anyway.
>
> Encrypting the data in the DB also helps in case if a leak of arbitrary DB
> data does surface in Heat. We are not aware of any issues with Heat today
> that could leak that data... But, we never know what vulnerabilities will
> be introduced or discovered in the future.
>
>
> At Rackspace, individual cloud operators can not trivially access all
> customer cloud resources. When operating a large cloud at scale, service
> administrator's operations and capabilities are limited to the systems
> they work on. While I could impersonate a user via Heat and do lot's of
> bad things across many of their resources, each of the other systems
> (Nova, Databases, Auth, etc.) audit the who is doing what on behave of
> what customer, so I can't do something malicious to a customer's Nova
> instance without the Auth System Administrators ensuring that HR knows I
> would be the person to blame. Similarly, a Nova system administrator
> can't delete a customer's Heat stack without our Heat administrators
> knowing who is to blame. We have checks and balances across our systems
> and purposefully segment our possible attack vectors.
>
> Leaving sensitive customer data unencrypted at rest provides many more
> options for that data to get in the wrong hands or be taken outside the
> company. It is quick and easy to do a MySQL dump if the DB linux system
> is compromised, which has nothing to do with Heat having a vulnerability.
>
> Our ask is to provide an optional way for the service operator to allow
> template authors to choose what data is sensitive, and if the data is
> marked sensitive, it gets encrypted by the Heat system as opposed to
> storing in plain txt.
>
> I hope this helps. Vijendar, feel free to take some of this write-up and
> include it in a gerit review of the feature blueprint.
>
> Thanks,
> -Keith
>
More information about the OpenStack-dev
mailing list