Django - 是否可以直接在设置文件中从云服务加载机密/密码/动态值



我想在应用程序启动时从云动态加载 Django 设置文件中的一些值,即:

  1. 数据库密码
  2. 数据库 IP 地址

将python代码添加到设置文件以从云中检索这些值是否是一种好的做法?

我相信这些只会在应用程序启动时加载一次,即它们不会对我的应用程序的性能产生不利影响。

例如:

# ~ settings.py ~
# retrieve data from the cloud, directly in the settings file
db_password   = get_my_secrets()
db_ip_address = discover_db_ip()
# configure the database with these dynamic values
DATABASES = {
'default': {
'PASSWORD': db_password,
'HOST'    : db_ip_address,
}
}

这是一篇相关文章(由@Adiii分享(:云中的Django设置

您可以使用多个选项来加载这些配置,而无需更改代码。

  • AWS 密钥管理器
  • 点环境文件 从 s3
  • 环境变量

机密管理器

AWS Secrets Manager 可帮助您保护访问 应用程序、服务和 IT 资源。该服务使您能够 轻松轮换、管理和检索数据库凭据、API 密钥、 以及整个生命周期中的其他秘密

使用 AWS 密钥管理器,您可以在不更改代码的情况下更改/更新数据库主机或密钥。

secret_name = "db_password"
region_name = "us-west-2"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
db_password   = get_secret_value_response

机密管理器

点环境与 s3

点 ENV 是从.env file读取键值对并将它们添加到环境变量中。它非常适合使用 12 因素原则在开发和生产期间管理应用设置。

使用您的所有密钥创建点 ENV 文件并将文件放在 s3 上,然后再启动应用程序从 s3 中提取文件并启动应用程序。

import os
SECRET_KEY = os.getenv("EMAIL")
db_password = os.getenv("db_password")

Python Dot ENv

另一种选择可以只使用系统环境变量。

db_password=os.getenv('db_password', default_pass)

最新更新