一个管理秘密的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第三方库


热门话题
junit有没有办法在Java中重新初始化静态类?   在浏览器中点击应用程序时java Play框架挂起   文件Java错误中的NullPointerException   使用Java中的SNMP查找网络中计算机的登录名   java包装服务器引导程序已弃用,有什么替代方案?   当客户在等待理发时,java信号量值是否存在问题?   java如何使用JavaMail仅下载特定类型的附件   如何在java中将十进制转换为十六进制   java Slick2D粒子系统不会生成粒子   java检测更改事件来自何处   将Java集合类型参数类设置为数组   java如何从eclipse导出为可运行JAR文件?   java EntityManager对象未注入Glassfish和Spring   swing从actionPerformed和actionListener Java返回字符串   java在给定另一个等价键对象的情况下获取映射项的当前键   无论输入如何,java网络都会产生相同的输出