Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何管理停靠应用程序中的GPG密钥链?_Ruby_Docker_Keychain_Gnupg - Fatal编程技术网

Ruby 如何管理停靠应用程序中的GPG密钥链?

Ruby 如何管理停靠应用程序中的GPG密钥链?,ruby,docker,keychain,gnupg,Ruby,Docker,Keychain,Gnupg,我正在开发一个停靠的RubyonRails应用程序,该应用程序有一个工作人员,负责在将一系列文件加载到数据库之前对其进行解密 由于gpg密钥链不保证在部署之间包含私钥,因此工作人员必须下载私钥并每次导入 require 'gpgme' def setup_gpg private_key = Tempfile.new(PRIVATE_KEY).binmode s3_client.get_object(bucket: config[:bucket],

我正在开发一个停靠的RubyonRails应用程序,该应用程序有一个工作人员,负责在将一系列文件加载到数据库之前对其进行解密

由于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
我正在使用与ruby中的gpg二进制文件进行交互

这种方法的问题是:

  • 私钥保存在S3存储桶中
  • 每次作业运行时都必须下载并导入私钥
我们可以通过检查钥匙是否已经在钥匙链中来让这个过程干涸一点,但我想探索一下完全消除这个步骤

对于如何维护停靠应用程序的gpg密钥链,是否有最佳实践?我有什么选择来消除在S3中存储密钥的需要,而不将密钥提交给源代码管理