[chef] Suggested patch to chef to enable passing the data bag secret to a node, bypassing storage on the server


Chronological Thread 
  • From: Peter Norton < >
  • To:
  • Subject: [chef] Suggested patch to chef to enable passing the data bag secret to a node, bypassing storage on the server
  • Date: Mon, 7 Nov 2011 17:44:51 -0500

These patches are all reversed (sorry, I'm just patching gems right now, I haven't fixed anything in git).  I'm sending this way because, well, for the moment this mailing list is my revision control.

GOAL:

Using encrypted databags are nice, but if we want fully automated installation then there needs to be a way to get encrypted keys from a server which may not be trusted (e.g. hosted chef) to a client. Encrypted databags make this possible, but this only works if the client can decrypt the values that they need.

This allows the knife config file on the client to contain a new variable: "data_bag_keyfile".  If this is defined, then it will be read used in the same way as "validation_key".  Its pathname will be expanded, and when this config is referenced it will write out the contents of the data_bag_keyfile.  Example usage (in this case, in ubuntu10.04-basic.erb):

# The below relies on the config parameter "data_bag_keyfile" existing in the 
# knife config.  This allows secrets to be stored on a less trusted server.
echo -e "`date` \n\n**** \n**** Knifing in the chef data bag secret file:\n****\n"
(
cat <<'EOP'
<%= data_bag_keyfile %>
EOP
) > /tmp/encrypted_data_bag_secret
awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret 
rm /tmp/encrypted_data_bag_secret
chmod 600 /etc/chef/encrypted_data_bag_secret 

As-is, this patch will probably break when knifing a server if the path referred to isn't present. Since this is a new config this is not ideal, but it's a proof of concept and working for me at the moment.


--- /Users/pn/gems/gems/chef-0.10.4//lib/chef/knife/core/bootstrap_context.rb   2011-11-07 15:09:55.000000000 -0500
+++ /Users/pn/gems/gems/chef-0.10.4//lib/chef/knife/core/bootstrap_context.rb~  2011-09-27 18:13:42.000000000 -0400
@@ -50,10 +50,6 @@
           IO.read(@chef_config[:validation_key])
         end
 
-        def data_bag_keyfile
-          IO.read(@chef_config[:data_bag_keyfile])
-        end
-
         def config_content
           client_rb = <<-CONFIG
 log_level        :info


and:

--- /Users/pn/gems/gems/chef-0.10.4/lib/chef/config.rb  2011-11-07 16:17:46.000000000 -0500
+++ /Users/pn/gems/gems/chef-0.10.4/lib/chef/config.rb~ 2011-09-27 18:13:42.000000000 -0400
@@ -203,7 +203,6 @@
     client_key "/etc/chef/client.pem"
     validation_key "/etc/chef/validation.pem"
     validation_client_name "chef-validator"
-    data_bag_keyfile "/etc/chef/encrypted_data_bag_secret"
     web_ui_client_name "chef-webui"
     web_ui_key "/etc/chef/webui.pem"
     web_ui_admin_user_name  "admin"

and (reversed)

--- /Users/pn/gems/gems/chef-0.10.4//lib/chef/knife/configure.rb        2011-11-07 17:26:25.000000000 -0500
+++ /Users/pn/gems/gems/chef-0.10.4//lib/chef/knife/configure.rb~       2011-09-27 18:13:42.000000000 -0400
@@ -23,7 +23,6 @@
     class Configure < Knife
       attr_reader :chef_server, :new_client_name, :admin_client_name, :admin_client_key
       attr_reader :chef_repo, :new_client_key, :validation_client_name, :validation_key
-      attr_reader :data_bag_keyfile
 
       deps do
         require 'ohai'



  • [chef] Suggested patch to chef to enable passing the data bag secret to a node, bypassing storage on the server, Peter Norton, 11/07/2011

Archive powered by MHonArc 2.6.16.

§