使用加密数据库时将密钥作为Chef属性传递

时间:2016-05-18 16:53:34

标签: ruby-on-rails ruby chef chef-recipe chef-solo

我已经创建了一个存在于厨师服务器上的数据库项目 现在,我正在尝试在Chef recipe中检索该数据库项的值 为此,我正在创建Chef Databag并尝试将秘密作为属性传递:

secret = Chef::EncryptedDataBagItem.load_secret("#{node['secret']}")
masterkey = Chef::EncryptedDataBagItem.load("databag_secrets", "databag_masterkey", secret)

我在属性部分中声明了node ['secret'],如下所示:

default['secret']="lTW4d+2Wfjlf1gZ42x3qsJh4/GcwqTc5+kS62qKeAHrhzTiL/Bxp+hq3itwudNfUFggCOEaMTsR+Q/qgjx6unKNvKWMKIdCeNM8I4jCUeT2VDaU6C1VxIMrVqfpUmInLuHOaUpVdlnlejkeLBL2KzH5vA8Xx5t2eACBRvrHacTwORMgVr/pnSKBcSzC/wXGoc7bGk7kTd6SaswRfZHnOowxfs2xkGJOFbzyTLZNAqkrJJurBq/ycYGRK2J3ycNyTwISfVgG9YAvP6prHKPsWTp3JgOWNIeZ9ZMSKUy8Lh0vopluXJhSd1WC6ltNcHxSb"

我收到以下错误:

ERROR: FFI_Yajl::ParseError: lexical error: invalid character inside string.
          S62qKeAHrhzTiL/Bxp+hq3itwudNfU
                                        FggCOEaMTsR+Q/qgjx6
                     (right here) ------^

如果允许秘密作为Chef中的属性传递,请告诉我。如果是的话,我该怎么做? 如果没有,以安全的方式传递秘密的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

根据the documentation#load_secret应该传递给包含秘密的文件的路径。如果您不想将秘密放入文件中(这是首选方式),您可以将密码传递给每个#load来电(shown here):

Chef::EncryptedDataBagItem.load(data_bag, name, secret = nil)