一个python包,用于在django设置中包含加密的秘密。
django-secret-settings的Python项目详细描述
django机密设置
为您的django设置安全和方便的秘密管理!
目的和原理
django secret settings是一个python 3包,旨在增强结构的"典型"django settings包
settings/
├── __init__.py
├── development.py
├── production.py
├── ...
└── staging.py
其中,\u init\uuuu.py
用于包含特定于环境的设置模块(例如,from.development import*
)。
根据服务器特性(开发、测试、生产等)切换django设置在
这样的安排。此外,可以将相等的设置提取到导入任何
专用设置模块(如果适用)。这有助于按照既定的设计维护设置包
选择(特别是干燥原理)。
但是,为了避免任何秘密成为纯文本设置文件的一部分,一些自定义的附加部署 必须使用钩子在最晚可能的时间添加这些秘密。根据实现的解决方案,此步骤 可能相当复杂,因此部署过程容易出错。另一方面,更简单的解决方案 (例如,单独部署设置模块,甚至是整个包),往往会让开发人员很难做到 访问源存储库以获得可用设置的概述,更不用说添加新值了。
这就是django secret settings出现的地方:而不是强制将所有机密保留在版本控制之外或
单独的子模块(两者都是可能的),它允许秘密作为rsa加密的json文件存储在
存储库本身,每个环境一个"秘密存储":对于每种服务器性质,例如,暂存,目录是
放在secrets
文件夹中。此文件夹包含多个json编码的机密文件,例如,所有django的django
配置值和电子邮件
用于邮件服务器的用户名、密码和其他机密设置。在这个例子中
如上所述,目录结构类似于
settings/
├── __init__.py
├── development.py
├── production.py
├── secrets
│ ├── staging.pem
│ ├── production
│ │ ├── django
│ │ ├── email
│ │ └── public-key.pem
│ ├── ...
│ └── staging
│ ├── django
│ ├── email
│ └── public-key.pem
├── ...
└── staging.py
这样,每个环境只剩下一个秘密:解密
各种rsa加密文件,这是版本控制中唯一未保存的数量。因此,这
其余的秘密仍有待部署-但单独部署一个文件似乎是可行的。此外,
根据环境更改设置仍然很简单,因为django secret settings取决于
要加载的私钥文件(例如staging.pem
)(在本例中为staging.py
)。最后,添加新的
对于每个有权访问源代码存储库的开发人员来说,安全的秘密是可能的:只需将
一个有效的json字符串中的秘密,并使用每个
秘密商店!
要求
生产
django secret settings在涉及到产品依赖性时,打算是极简的,但却固执己见:
- python>;=3.5:当前,ci管道运行在python 3.5和3.6上,测试其他python版本 是问题20的目标。python 2.x不会 支持。
- openssl>;=3.0.0-dev:openssl是
mod_ssl
(apache http server)和ngx_http_ssl_module
(nginx)的基础,并且 如果您使用ssl,则可能会出现。由于可能存在许可问题,我们不鼓励使用旧版本。
开发
除了上面列出的需求之外,开发所需的其他依赖项在
需求文件。他们可以,
当然,安装时请使用pip
:
pip install -r requirements-dev.txt
安装
它和运行一样简单
pip install django-secret-settings
快速启动
虽然安全性是django secret settings的主要设计标准之一,但是加密的设置和使用 配置值仍然很简单:
按如下所示重写
设置/uu init.py
fromdjango_secret_settings.autoloadimport*
根据上述架构添加具有公钥和机密文件的环境文件夹。秘密档案 包含rsa加密的json数据,例如,加密的django文件看起来像:
{"SECRET_KEY":"l#!6p7)-4xhy25@pu5$y$%k&7#8a(#1^89=^m*=e69xl**&!11"}
使用相应的公钥进行加密。
调整您的专用设置以使用
秘密存储
:fromdjango_secret_settings.autoloadimportsecret_store# SECURITY WARNING: keep the secret key used in production secret!SECRET_KEY=secret_store.get('django','SECRET_KEY')# Other settings omitted for brevity...
还要调整部署以添加指定要使用的设置的私钥文件。或者,您需要添加
.gitignore
文件到您的设置包,以确保这些机密文件从未存储在版本控制中。 < > >
教程
有关django secret settings背后的思想及其用法的更详细介绍,请参见 教程
接下来的事情
最好的还在后头,我相信!你为什么不看看我们的 浏览所有打开和关闭的问题?或者如果你是 对计划成为下一个版本一部分的内容感兴趣,为什么不浏览我们的 里程碑?