我正在开发一个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二进制文件进行交互。
这种方法的问题:
我们可以通过检查密钥是否已经存在于钥匙串中来干预这个过程,但我想探索完全取消这一步骤。
对于如何维护dockerized应用程序的gpg钥匙串,是否有最佳做法?我有什么选择可以在不将密钥提交给源代码控制的情况下消除在S3中存储密钥的需要?