是否可以将Chef cookbook_file源存储在加密数据包中?

时间:2016-07-06 21:59:25

标签: chef

我在Chef中使用加密数据包,秘密文件目前存在于源代码中。

private PlayerPoints playerPoints;

/**
 * Validate that we have access to PlayerPoints
 *
 * @return True if we have PlayerPoints, else false.
 */
private boolean hookPlayerPoints() {
    final Plugin plugin = this.getServer().getPluginManager().getPlugin("PlayerPoints");
    playerPoints = PlayerPoints.class.cast(plugin);
    return playerPoints != null; 
}

/**
 * Accessor for other parts of your plugin to retrieve PlayerPoints.
 *
 * @return PlayerPoints plugin instance
 */
public PlayerPoints getPlayerPoints() {
    return playerPoints;
}

在上面的代码中,秘密文件是从厨师仓库的secret = cookbook_file "/etc/chef/#{env_encrypted_data_bag_secret" do source "env_encrypted_data_bag_secret" mode 0755 owner "root" group "root" end secret.run_action(:create) 位置加载的。

但是,将秘密文件放在源代码中是一个安全问题。 所以,如果可以将Chef files/default来源存储在加密数据包或其他地方而不是厨师仓库中,请告诉我。

2 个答案:

答案 0 :(得分:1)

  • 将数据包保密(文件)存储在公司的密码存储区中(或手动将其传递给您和您的同事。
  • 在工作站的knife config中指定knife[:secret_file]以指向该机密文件。
  • 使用knife bootstrapautomatically copies the secret file到自举节点。

使用此工作流程,您不必将密钥签入VCS。

备选方案包括chef-vault,它使用Chef Server的PKI。

答案 1 :(得分:1)

斯蒂芬给出了更正确的答案,你应该接受他,但要进一步澄清"为什么":

如果你把数据包放在Chef的生态系统(cookbook,Chef Server,无论什么)里面的秘密,它就会使你已经获得的已经非常荒谬的安全性无效。加密数据包的想法是在Chef做其事之前要求进行带外密钥交换。只要该带外交换是安全且可信的,Chef就可以利用它来扩展信任链以包含加密的包项。如果你将两半(密钥和加密的blob)放在同一个地方或通过相同的方式访问,你就会使整个想法短路。