On Jun 4, 2014, at 7:30 PM, Clint Byrum <cl...@fewbar.com>
 wrote:

> Excerpts from Randall Burt's message of 2014-06-04 17:17:07 -0700:
>> On Jun 4, 2014, at 7:05 PM, Clint Byrum <cl...@fewbar.com>
>> wrote:
>> 
>>> Excerpts from Zane Bitter's message of 2014-06-04 16:19:05 -0700:
>>>> On 04/06/14 15:58, Vijendar Komalla wrote:
>>>>> Hi Devs,
>>>>> I have submitted an WIP review (https://review.openstack.org/#/c/97900/)
>>>>> for Heat parameters encryption blueprint
>>>>> https://blueprints.launchpad.net/heat/+spec/encrypt-hidden-parameters
>>>>> This quick and dirty implementation encrypts all the parameters on on
>>>>> Stack 'store' and decrypts on on Stack 'load'.
>>>>> Following are couple of improvements I am thinking about;
>>>>> 1. Instead of encrypting individual parameters, on Stack 'store' encrypt
>>>>> all the parameters together as a dictionary  [something like
>>>>> crypt.encrypt(json.dumps(param_dictionary))]
>>>> 
>>>> Yeah, definitely don't encrypt them individually.
>>>> 
>>>>> 2. Just encrypt parameters that were marked as 'hidden', instead of
>>>>> encrypting all parameters
>>>>> 
>>>>> I would like to hear your feedback/suggestions.
>>>> 
>>>> Just as a heads-up, we will soon need to store the properties of 
>>>> resources too, at which point parameters become the least of our 
>>>> problems. (In fact, in theory we wouldn't even need to store 
>>>> parameters... and probably by the time convergence is completely 
>>>> implemented, we won't.) Which is to say that there's almost certainly no 
>>>> point in discriminating between hidden and non-hidden parameters.
>>>> 
>>>> I'll refrain from commenting on whether the extra security this affords 
>>>> is worth the giant pain it causes in debugging, except to say that IMO 
>>>> there should be a config option to disable the feature (and if it's 
>>>> enabled by default, it should probably be disabled by default in e.g. 
>>>> devstack).
>>> 
>>> Storing secrets seems like a job for Barbican. That handles the giant
>>> pain problem because in devstack you can just tell Barbican to have an
>>> open read policy.
>>> 
>>> I'd rather see good hooks for Barbican than blanket encryption. I've
>>> worked with a few things like this and they are despised and worked
>>> around universally because of the reason Zane has expressed concern about:
>>> debugging gets ridiculous.
>>> 
>>> How about this:
>>> 
>>> parameters:
>>> secrets:
>>>   type: sensitive
>>> resources:
>>> sensitive_deployment:
>>>   type: OS::Heat::StructuredDeployment
>>>   properties:
>>>     config: weverConfig
>>>     server: myserver
>>>     input_values:
>>>       secret_handle: { get_param: secrets }
>>> 
>>> The sensitive type would, on the client side, store the value in Barbican,
>>> never in Heat. Instead it would just pass in a handle which the user
>>> can then build policy around. Obviously this implies the user would set
>>> up Barbican's in-instance tools to access the secrets value. But the
>>> idea is, let Heat worry about being high performing and introspectable,
>>> and then let Barbican worry about sensitive things.
>> 
>> While certainly ideal, it doesn't solve the current problem since we can't 
>> yet guarantee Barbican will even be available in a given release of 
>> OpenStack. In the meantime, Heat continues to store sensitive user 
>> information unencrypted in its database. Once Barbican is integrated, I'd be 
>> all for changing this implementation, but until then, we do need an interim 
>> solution. Sure, debugging is a pain and as developers we can certainly 
>> grumble, but leaking sensitive user information because we were too fussed 
>> to protect data at rest seems worse IMO. Additionally, the solution as 
>> described sounds like we're imposing a pretty awkward process on a user to 
>> save ourselves from having to decrypt some data in the cases where we can't 
>> access the stack information directly from the API or via debugging running 
>> Heat code (where the data isn't encrypted anymore).
>> 
> 
> I have made that exact, reasoned argument before, and then later seen
> giant swathes of code with things like
> 
> if CONF.dont_encrypt:
>  ...
> 
> The next thing that happens is one by one the production deployments
> eventually end up with dont_encrypt because they can't debug anything
> and they've all had a multi-hour downtime event while they dealt with
> the encrypted database on several levels.
> 
> I'm not coddling developers. I'm coddling operators.
> 
> It's a different story if you only encrypt the sensitive "leaf" data,
> like passwords, credit card numbers, or personally identifying data. The
> operator can still have some clue what is going on if they can see the
> non-sensitive data.
> 
> The design I suggested above isn't really that awkward and will
> be infinitely easier to understand for an operator than encrypting
> everything.

So, you're simply advocating a more granular approach in which we only encrypt 
the values for inputs marked as hidden in the interim?
_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to