【问题标题】:how to securely store authentication credentials in ruby client scripts?如何在 ruby​​ 客户端脚本中安全地存储身份验证凭据?
【发布时间】:2019-01-20 05:10:44
【问题描述】:

如果这与许多其他问题过于相似,我深表歉意;我搜索并查看了多个建议的解决方案,但似乎没有针对此类问题的通用解决方案 - 从回答的问题来看,不同环境中的相同问题似乎需要非常不同的解决方案。

我已经构建了几个 Ruby 客户端脚本,它们从我网络中的各种服务器收集信息并将所述信息注入 MySQL 数据库。 Ruby 脚本必须以用户身份向这些服务器进行身份验证,因此它们需要身份验证凭据才能连接。有问题的连接来自 Ruby 客户端、到接收服务器和通过(分别):

SOAP(通过 savon gem):

soap_client = Savon.client(wsdl: '[URL]')
login_response = soap_client.call(:login, message: { 'userName' => [SOAP CLIENT USERNAME], 'password' => [SOAP CLIENT PASSWORD] })

MySQL(通过 mysql2 gem):

@mysql_client = Mysql2::Client.new(:host => [DATABASE HOSTNAME], :username => [DATABASE USERNAME], :password => [DATABASE PASSWORD], :database => [DATABASE NAME])

HTTPS(通过 net/https gem):

OpenSSL::PKey::RSA.new(pem,"[KEY DECRYPTION PASSWORD]")

HTTPS 客户端不需要用户名/密码来向 HTTPS 服务器进行身份验证。它需要一个带密钥的证书,并且源代码中存储的密码是解密密钥所必需的。我可以将密钥存储为明文,从而从源代码中消除此密码,但随后安全问题变成了如何保护明文密钥文件。

我要解决的问题是我的源代码中存储了明文密码。我可以将密码存储在一个加密的文本文件中,然后在运行时解密该文件,但是我又回到了一个类似的问题——如何安全地存储解密密钥?

环境是:

  • CentOS Linux 7.6.1810
  • 红宝石 2.4.2

感谢您的阅读,如果我的问题需要进一步澄清,请告诉我!

【问题讨论】:

  • 我不会在源代码中存储密码。您是否考虑过使用环境变量?
  • 感谢您的回复。似乎共识是将凭据存储在环境变量中。我的脚本必须 24x7x365 运行,包括在运行脚本的服务器重新启动时自动重新启动。这意味着我需要某种方法在重新启动后自动设置环境变量,这意味着将它们存储在一个文件中,这使我回到需要保护设置环境变量的文件的同一位置。

标签: ruby encryption passwords centos7


【解决方案1】:

这是我们处理脚本所需的秘密信息的方式:

源代码管理:

  1. 我们从不在源代码中存储敏感信息。

发展:

  1. 任何脚本所需的所有敏感信息都来自环境变量(因此,在 Ruby 中:some_password = ENV['SOME_PASSWORD']
  2. 所有开发人员都安装了direnv,并且他们每个人在项目文件夹中都有一个.envrc 文件,用于设置他们的个人密码和其他机密。
  3. 我们通过将全局 gitignore 添加到 .envrc(全局 = 不是每个项目,而是每个环境)来确保 .envrc 永远不会致力于源代码控制。

测试/CI:

  1. 所有 CI 系统都支持输入秘密环境变量,因此这就是本用例的解决方法。

生产:

  1. 取决于您的生产基础架构,这些环境变量和机密也会在部署时输入或存储在环境提供的机密设施中。

【讨论】:

  • 对于延迟回复,我深表歉意,并感谢您的回复。似乎共识是将凭据存储在环境变量中。我的脚本必须 24x7x365 运行,包括在运行脚本的服务器重新启动时自动重新启动。这意味着我需要某种方法在重新启动后自动设置环境变量,这意味着将它们存储在一个文件中,这使我回到需要保护设置环境变量的文件的同一位置。
  • 是的。出于这个原因,我可以分享我已将envkey.com 评估为可能的解决方案。我最终决定反对,但这可能是你所需要的。
猜你喜欢
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
相关资源
最近更新 更多