一个管理秘密的django应用程序。

django-encrypted-secrets的Python项目详细描述


django加密的机密

CircleCIDjango VersionsPython Versions

django-encrypted-secretsRails-style credential encryption带到Django web framework

安装

要安装django-encrypted-secrets,首先pip安装模块:

$ pip install django-encrypted-secrets

encrypted_secrets添加到django设置文件中已安装的应用:

INSTALLED_APPS = [
    ...
    'encrypted_secrets'
]

最后,您必须从manage.pywsgi.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.pywsgi.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_secrethelper方法读取机密之外,还可以将它们作为普通环境变量读取。如果文件中配置的环境变量已经存在于环境中,则将{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应该在其中查找加密的机密文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Requestcontextholder在spring 4中具有并发访问权限。IBMWebSphere上的x Web应用程序?   java如何下载、设置和使用Eclipse?   java如何组合这些mysql语句   java JDBC无法连接到openshift上的mysql数据库   如果存在允许正确处理的重载,java对于方便的方法来说是否可行?   使用hibernate序列的java Spring MVC不存在   具有路径的java Selenium ChromeDriver负载扩展问题   读一本书。java中的java文件   退出队列时,Java队列程序结果为空   Java lambda返回带有重复代码问题的列表   java使用意图从其他活动传递数据并在listview中显示   java如何在java中创建JSON输出   java Android:在不破坏或暂停活动的情况下关闭显示   支持Android电视和手机的java多apk   关于Java应用程序测试和调试的一组问题   如何在JavaSE中使用jdbcRealmShiro进行授权   在java中是否有一个无异常检查的URL解析实用程序?   当页面上有多个相同类型的元素时,java会选择一个特定的元素   递归需要帮助发现java代码中的缺陷