在Python环境中安全地存储REST API凭据以供访问
我从一个软件程序(例如:Tradingview)中获得了大量的REST API 我希望安全地存储API凭据(例如密钥、机密) 我曾想过将它们放在数据库表中,但我并不完全喜欢将明文放在表中 我已经知道如何使用操作系统环境变量:在Python环境中安全地存储REST API凭据以供访问,python,rest,Python,Rest,我从一个软件程序(例如:Tradingview)中获得了大量的REST API 我希望安全地存储API凭据(例如密钥、机密) 我曾想过将它们放在数据库表中,但我并不完全喜欢将明文放在表中 我已经知道如何使用操作系统环境变量: [... snip ...] import os import sys import logging [... snip ...] LD_API_KEY = os.getenv("BINANCE_APIKEY") LD_API_SECRE
[... 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令牌时,这变得有点复杂
我最终将这个文件移动到一个私有的、加密的()本地git repo,这样团队成员也可以在他们的环境中使用这些密钥
使用秘密管理机构
推动远程工作迫使我创建一个远程API密钥访问和管理系统。我的团队讨论了许多解决方案,但最终我们达成了一致。前面提到的自定义类指向AWS而不是本地文件,与仅本地的解决方案相比,我们在安全性和灵活性方面得到了显著提高
有许多基于云的秘密管理解决方案,但我的项目已经高度集成了AWS,因此考虑到成本和限制,这是最有意义的。这也意味着每个团队成员现在只需要拥有AWS权限,并使用其帐户AWS API密钥进行访问。谢谢您提供的信息。我使用AWS保存Gitlab服务器的夜间备份。我不知道亚马逊也提供了这个选项。我去看看。