如何使用 virtualenv 和 Django 隐藏我的 secret_key?

How to I hide my secret_key using virtualenv and Django?

我正在使用 Django, python, virtualenv, virtualenvwrapperVagrant.

到目前为止,我只是将 secret_key 留在了 settings.py 文件中。 这适用于本地文件的文件。但是我已经将我的文件放在 Git 中。我知道这对于生产来说是不可接受的(Apache)。

隐藏我的 secret_key 的正确方法是什么?

我应该使用virtualenv来隐藏它吗?

常见的做法是,如果您想配置区域,但又不想在 repo 中存储敏感信息,则通过环境变量传递它。当您需要它时,只需调用 os.environ('SECRET')(即使在您的 settings.py 中)。最好有一些回退值。

Virtualenv 不会帮助你隐藏任何东西,它只是防止你系统范围内的 Python 安装被 one-project-required-packages 乱扔垃圾。

您可以创建一个名为 secret_settings.py 的文件并将您的 SECRET_KEY 放入该文件中。然后将此文件添加到 .gitignore。 然后在您的设置中,您可以删除密钥变量并从那里导入它。这应该确保 SECRET_KEY 变量不受版本控制。

创建一个名为 secret_settings 的文件,然后将您的 SECRET_KEY 和其他秘密设置放入其中。

SECRET_KEY = .. # add your setting here

然后在您的 settings.py 文件中,导入这些设置。

from secret_settings import *

最后,将 secret_settings.py 添加到您的 .gitignore 文件。

注:

如果您已经向您的存储库提交了一些敏感数据,请更改它!

根据Github website in the removing sensitive data article

If you committed a password, change it! If you committed a key, generate a new one.

检查此 link 以了解如何从存储库的历史记录中清除文件。

隐藏秘密的方法有很多种。

  1. 使用另一个非版本控制的文件。

    创建一个新文件 secrets.py 或者你有什么,然后把你的秘密放在里面。把它放在你的设置文件旁边,把所有的秘密都放在那里;然后在您的设置文件中将 from secrets import * 放在顶部。然后像Rahul说的那样,添加一个.gitignore文件,在这个文件中添加secrets.py,这样就不会被commit了。

    这种方法的缺点是该文件根本没有源代码控制;如果你失去了它,你就是 SOL。

  2. 使用环境变量。

    使用 Apache SetEnv or PassEnv directives 将环境变量传递给您的进程,然后在您的设置文件中使用 os.environ() 检索它们。这样做的好处是,在开发中,您可以设置新变量(就像 VAR1=whatever VAR2=whatever ... ./manage.py runserver ... 一样简单)或从您用于启动开发项目的任何机制中设置它们。

    缺点大致相同;如果您丢失了 Apache 配置,那您就完蛋了。

  3. 结合方法 1 使用第二个存储库。

    就我个人而言,我喜欢拥有一个专用的 secrets 存储库的想法,您可以将所有秘密放入其中,并妥善保管该存储库。然后,作为部署过程的一部分,您可以使用 git archive 或其他类似命令为您要部署到的位置提取正确的密钥,并且您可以轻松备份您的秘密并使其处于版本控制之下。您还可以将 secrets 存储库中的适当文件添加到站点存储库的 .gitingore 文件中,这样它们就不会被意外提交。

    这样做的缺点是您有另一个额外的存储库和另一个部署步骤。我个人认为这是值得的,但这真的取决于你。

一般来说,您希望它越安全,访问这些秘密就越不方便。不过,这确实是一般规则。

我使用的解决方案是创建一个文件 sec.py 并将其放在我的 settings.py 文件旁边。然后在 settings.py 的第 1 行调用 from .sec import *。请务必在文件名前加上句点。请务必在您的 .gitignore 文件中列出 sec.py。