如何在dockerized app中管理GPG钥匙串?

时间:2017-09-25 20:47:39

标签: ruby docker keychain gnupg

我正在开发一个dockerized Ruby on Rails应用程序,该应用程序有一个工作人员负责解密一系列文件,然后再将它们加载到我们的数据库中。

由于不保证gpg钥匙串在部署之间包含私钥,因此工作人员必须下载私钥并每次导入它。

require 'gpgme'

def setup_gpg
  private_key = Tempfile.new(PRIVATE_KEY).binmode

  s3_client.get_object(bucket: config[:bucket],
                       key: PRIVATE_KEY,
                       response_target: private_key)

  GPGME::Key.import(private_key)
end

def decrypt_file(enc_file)
  decrypted_filename = enc_file.path.sub('.gpg', '.csv')

  File.open(enc_file) do |encrypted_file|
    File.open(decrypted_filename, 'w+') do |decrypted_file|
      crypto = GPGME::Crypto.new
      crypto.decrypt(encrypted_file,
                     output: decrypted_file,
                     password: config[:passphrase])
      return decrypted_file
    end
  end    
end

我正在使用GPGME gem与ruby中的gpg二进制文件进行交互。

这种方法的问题:

  • 私钥存在于S3存储桶中
  • 每次作业运行时都必须下载并导入私钥

我们可以通过检查密钥是否已经存在于钥匙串中来干预这个过程,但我想探索完全取消这一步骤。

对于如何维护dockerized应用程序的gpg钥匙串,是否有最佳做法?我有什么选择可以在不将密钥提交给源代码控制的情况下消除在S3中存储密钥的需要?

0 个答案:

没有答案