如何在 Django 中保持 SECRET_KEY 的秘密?

How to keep a SECRET_KEY secret in Django?

Django documentation 建议将 SECRET_KEY 保存在环境变量中而不是 settings.py 文件中。

为什么这被认为更安全?环境变量是纯文本文件,提供与 settings.py 相同级别的保护。即使文件读写权限设置为 root-only,我认为这也不难破解。

我的问题是:还有哪些其他选项可以存储 SECRET_KEY?

或用于加密的主密钥。来自 django-encrypted-secrets:

django-encrypted-secrets works by using a key (stored locally in master.key file or read from the environment variable DJANGO_MASTER_KEY) and reading/writing secrets to the encrypted file secrets.yml.enc.

如果除了本地存储的纯文本文件或环境变量之外别无选择。这个怎么保护好?

它被认为更安全的原因是因为您应该将设置文件放在 git 或其他一些 VCS 中以具有一致的开发环境,但您的秘密应该在它之外。这样,即使开发人员在不需要时也没有生产机密。

它不需要任何额外的保护,只要您对代码的部署方式、谁可以访问服务器等保持谨慎就可以了。

你的问题还问了其他方法,所以...

您可以像在那里那样加密它,但这总是需要一个主密钥,该主密钥也需要以某种方式进行保护。

另一种选择是使用服务器上的文本文件。

如果您想加密机密,一个不错的选择是将它们加密存储在您的持续集成解决方案中,这会在部署时将它们注入到环境中。 Travis CI、GitHub 动作,或多或少任何 CI 解决方案都可以做到这一点。

但总的来说,将其排除在 VCS 之外并限制对机密的访问通常就足够了。