如何安全地存储 API 密钥

2025-05-27

如何安全地存储 API 密钥

过去,我见过很多人使用git代码库来存储与其项目相关的敏感信息。最近,我还看到一些人甚至宣布将 API 密钥存储在他们的私有 GitHub 代码库中。我写这篇文章是因为我相信大家应该了解将 API 密钥与代码一起存储的风险。

本文并非旨在为您在存储 API 密钥时可能遇到的问题提供永久解决方案。相反,本文只是我对这个问题的分析以及一些修复建议。那么,首先,在代码库中靠近代码的位置存储敏感信息究竟有什么问题呢git

为什么不应该将 API 密钥存储在 Git 存储库中

git无论如何,都应避免将 API 密钥或任何其他敏感信息存储在代码库中。即使代码库是私有的,您也不应将其视为存储敏感信息的安全场所。让我们先来看看为什么将 API 密钥存储在公共 git代码库中是个坏主意。

从本质上讲,任何人都可以访问公共git仓库。换句话说,任何有互联网连接的人都可以访问公共git仓库的内容。不仅如此,他们还可以浏览仓库中的所有代码,甚至可能运行它。如果您将 API 密钥存储在公共仓库中,则相当于公开发布,任何人都可以看到它。

最近在 GitHub 上搜索client_secret时发现,有超过 3 万个提交可能泄露 API 密钥和机密信息。在某些情况下,只需复制粘贴代码即可立即访问 API。这个问题变得如此严重,以至于一些公司投入资源来确保没有任何 API 密钥和机密信息泄露。去年,Slack 开始搜索已泄露的 API 令牌并主动使其失效。此举可以防止恶意访问 Slack 帐户,但可能无法找到所有泄露的令牌。

公共仓库中存在这种情况。那么私有git仓库呢?为什么会成为问题?私有仓库,尤其是托管在 GitHub、GitLab 和 Bitbucket 等服务上的仓库,面临着不同类型的风险。每当您将第三方应用程序与前面提到的服务集成时,您就可能向这些第三方开放您的私有仓库。这些应用程序将能够访问您的私有仓库并读取其中包含的信息。虽然这本身不会造成任何风险,但想象一下,如果其中一个应用程序容易受到攻击者的攻击。通过未经授权访问其中一个第三方应用程序,攻击者可能会获得您的敏感数据,包括 API 密钥和机密信息。git

那么,API 密钥应该存储在哪里?

幸运的是,有很多替代方案可以安全地存储 API 密钥和机密信息。其中一些允许您使用git存储库并简单地加密敏感数据。其他工具则更为复杂,可以在部署工作流中自动解密敏感信息。让我们来看看一些可用的解决方案。

git-remote-gcrypt

第一个解决方案允许您加密整个git存储库。git-remote-gcrypt它通过向远程助手添加功能来实现这一点git,从而提供新的加密传输层。用户只需设置一个新的加密远程并将代码推送到其中即可。如果您正在寻找一个更细粒度的解决方案来加密单个文件,请继续阅读。

git-secret

git-secret是一款在本地计算机上运行的工具,它会在将特定文件推送到存储库之前对其进行加密。其背后git-secret是一个 Shell 脚本,用于gpg加密和解密可能包含敏感信息的文件。

git-crypt

另一个解决方案是。它的运行方式git-crypt与 非常相似,但也有一些有趣的区别。首先要注意的是,它是一个二进制可执行文件,而不是 Shell 脚本。二进制可执行文件意味着要使用它,您必须先编译它,或者您需要为您的机器找到一个二进制发行版。如果您使用的是 Mac,那么您很幸运,因为 HomeBrew 提供了一个可立即安装的软件包——您唯一需要做的就是在终端上运行它。git-secretgit-cryptgit-secretgit-cryptbrew install git-crypt

黑匣子

BlackBox是由Stack Overflow开发的一款工具,Stack Overflow 是 Stack Overflow 本身、Server Fault 和 Super User 等热门问答社区的幕后推手。BlackBox 是一款非常强大的工具,它不仅能与git其他版本控制系统(例如 Mercurial 和 Subversion)兼容,还能与其他版本控制系统兼容。它不仅支持整个文件加密,还支持短字符串加密。在与Puppet配合使用时,它能够使用 Puppet 的hiera(一个用于配置数据的键值查找工具)来实现这一点。由于能够加密和解密单个字符串,BlackBox 成为保护 API 密钥和机密信息的绝佳解决方案。

Heroku 配置和配置变量

如果您使用Heroku,则不应在git存储库中存储任何敏感信息,例如 API 密钥和机密信息。Heroku 本身提供了一个解决方案,允许您设置配置变量。然后,您的应用程序可以在运行时通过访问相应的环境变量来访问这些配置变量的内容。即使这些值未加密,此解决方案也能让您避免使用git存储库来存储 API 密钥。Dokku是一个与 Heroku 类似的开源解决方案,它提供了相同的功能

Docker 秘密

在所有可能的解决方案中,Docker Secrets是最佳选择。该解决方案由 Docker 于 2017 年 2 月推出,自推出以来便广受欢迎。Docker Secrets 允许您定义加密变量,并在运行时提供给特定服务。Secrets 在传输和静态时均会加密。这种方法使 Docker Secrets 成为以安全加密的方式存储和使用 API 密钥和 Secrets 的完美解决方案。

概括

现在您应该已经意识到将 API 密钥和机密信息等敏感信息存储在公共和私有git代码库中的风险。了解代码库可能暴露的潜在方式是评估和降低信息泄露相关风险的关键。本文还提出了一些不同的解决方案,可让您加密 API 密钥和机密信息,从而安全地使用代码库。我相信还有更多解决方案可以帮助您实现同样的效果。

文章来源:https://dev.to/bpedro/how-to-securely-store-api-keys-ab6
PREV
Timsort——你从未听说过的最快的排序算法
NEXT
SOLID:软件设计原则。成为更好的开发人员