一个管理秘密的django应用程序。
django-encrypted-secrets的Python项目详细描述
django加密的机密
django-encrypted-secrets
将Rails-style credential encryption带到Django web framework。
安装
要安装django-encrypted-secrets
,首先pip安装模块:
$ pip install django-encrypted-secrets
将encrypted_secrets
添加到django设置文件中已安装的应用:
INSTALLED_APPS = [
...
'encrypted_secrets'
]
最后,您必须从manage.py
和wsgi.py
文件中调用load_secrets()
:
#!/usr/bin/env python
import os
import sys
from encrypted_secrets import load_secrets
if __name__ == "__main__":
load_secrets()
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yourapp.settings")
# ...
用法
django-encrypted-secrets
通过使用密钥(本地存储在master.key
文件中或从环境变量DJANGO_MASTER_KEY
读取)和对加密文件secrets.yml.enc
读/写机密来工作。
./manage.py init_secrets
您可以通过运行以下命令编辑机密:
./manage.py edit_secrets
在编辑器中保存文件时,其内容将被加密并用于覆盖secrets.yml.enc
文件。
最后,要读取代码库中的秘密,请使用get_secret
实用程序:
from encrypted_secrets import get_secret
# ...
secret_api_key = get_secret("secret_api_key")
您应该始终保留master.key
文件.gitignored
。
环境模式(实验)
django-encrypted-secrets
实验上支持将以dotenv格式编写的加密文件中的密钥-值对直接加载到环境中。要使用这种类型的变量加载,必须将env_mode=True
传递给load_secrets
调用manage.py
和wsgi.py
:
#!/usr/bin/env python
import os
import sys
from encrypted_secrets import load_secrets
if __name__ == "__main__":
load_secrets(env_mode=True) # <- important
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yourapp.settings")
# ...
初始化django-encrypted-secrets
时,还必须将--mode=env
标志传递给init_secrets
管理命令:
$ ./manage.py init_secrets --mode=env
模板加密的dotenv类型文件将写入secrets.env.enc
。使用env模式时,机密将自动添加到环境中。这意味着,除了能够使用get_secret
helper方法读取机密之外,还可以将它们作为普通环境变量读取。如果文件中配置的环境变量已经存在于环境中,则将{EM1} $不django-encrypted-secrets
的变量。
直接从环境中读取环境变量并使用get_secret
:
import os
from encrypted_secrets import get_secret
# option 1 - read directly from the environment:
secret_api_key = os.environ.get('SECRET_API_KEY')
# option 2 - use get_secret:
secret_api_key = get_secret('SECRET_API_KEY')
生产注意事项
django-encrypted-secrets
在执行管理命令的当前工作目录中查找加密的机密文件(使用os.getcwd()
)。这是隐式的项目根目录。根据您的生产服务器配置,os.getcwd()
可能无法实际返回项目根目录。因此,对于生产环境,我们建议您显式设置一个指向项目根目录的DJANGO_SECRETS_ROOT
环境变量,以提示django-encrypted-secrets
应该在其中查找加密的机密文件。