在Python环境中安全地存储REST API凭据以供访问



我有一个软件程序(例如:Tradingview(中的许多REST APIs

我希望安全地存储API证书(例如密钥、机密(。

我曾想过把它们放在数据库表中,但我并不完全喜欢把明文放在表中。

我已经知道使用OS Environment Variables:

[... snip ...]
import os
import sys
import logging
[... snip ...]
LD_API_KEY      = os.getenv("BINANCE_APIKEY")
LD_API_SECRET   = os.getenv("BINANCE_API_SECRET")

其中密钥存储在一个文件中,但是正如前面提到的,我有许多API密钥。

把它们放在服务器上(明文(——即使文件是隐藏的——我也不太满意

是否有其他存储API密钥的方法?

有很多关于这个主题的文章,可以在网上快速搜索"存储API密钥";将为您带来一些有趣且信息丰富的读物,所以我将在这里谈谈我的经历。

实际上,这完全取决于您的偏好、项目的要求以及您需要的安全级别。我个人已经提出了一些解决方案。以下是我的项目如何随着时间的推移而发展的。

存储在环境变量中的每个键

很简单,只需要对每个键使用os.environ。这很快就成为了管理层头疼的问题,尤其是在部署到多个环境或为新的项目贡献者设置环境时。

存储在本地文件中的所有密钥

这只是源代码管理之外的一个文件,环境变量指向该文件。我从以下结构的一个简单JSON文件开始。

[
{
"name": "Service Name",
"date": "1970-01-01",  // to track rotations
"key": "1234abcd",
"secret_key": "abcd1234"
}
]

这演变成了一个为我访问该文件并返回所需密钥的类,这样我就不必在每个访问API的脚本中重复json.load()或导入os。当我开始需要存储OAuth令牌时,这变得有点复杂。

我最终将这个文件移到了一个私有的、加密的(gitsecret(、仅本地的git repo中,这样团队成员也可以在他们的环境中使用密钥。

使用秘密管理服务

对远程工作的推动迫使我创建一个用于远程API密钥访问和管理的系统。我的团队讨论了许多解决方案,但我们最终还是选择了AWS Secrets Manager。前面提到的自定义类指向的是AWS,而不是本地文件,与仅本地的解决方案相比,我们在安全性和灵活性方面获得了显著提高。

有很多基于云的秘密管理解决方案,但我的项目已经高度集成了AWS,所以考虑到成本和限制,这是最有意义的。这也意味着每个团队成员现在只需要拥有AWS权限,并使用他们的帐户AWS API密钥进行访问。

相关内容

  • 没有找到相关文章

最新更新