Google Cloud Ubuntu虚拟机中Django项目安全配置环境变量方法
Google Cloud Ubuntu虚拟机配置Django环境变量指南
一、Ubuntu虚拟机中创建环境变量的方法
1. 临时环境变量(仅当前会话有效)
直接在终端执行:
export EMAIL_HOST_USER="your-email@example.com" export EMAIL_HOST_PASSWORD="your-password"
重启终端或退出会话后失效,适合临时测试场景。
2. 用户级永久环境变量(仅当前用户生效)
编辑用户目录下的~/.bashrc或~/.profile文件,添加以下内容:
export EMAIL_HOST_USER="your-email@example.com" export EMAIL_HOST_PASSWORD="your-password"
保存后执行source ~/.bashrc(或source ~/.profile)使配置立即生效,下次登录系统会自动加载。
3. 系统级永久环境变量(所有用户生效)
编辑/etc/environment文件(需sudo权限),添加:
EMAIL_HOST_USER="your-email@example.com" EMAIL_HOST_PASSWORD="your-password"
注意这里不需要写export,保存后重启系统或重新登录即可生效。也可以在/etc/profile.d/目录下新建自定义脚本(比如django-env.sh),内容和用户级配置一致(带export),再给脚本加执行权限chmod +x /etc/profile.d/django-env.sh,系统启动时会自动加载该脚本。
4. 针对Django服务进程单独配置
如果用systemd管理Django服务(如gunicorn),编辑对应的service文件(比如/etc/systemd/system/django.service),在[Service]段添加:
Environment="EMAIL_HOST_USER=your-email@example.com" Environment="EMAIL_HOST_PASSWORD=your-password"
执行sudo systemctl daemon-reload和sudo systemctl restart django使配置生效,这种方式只有Django进程能读取到这些变量,安全性更高。
二、敏感数据不暴露的实现方式
1. 使用.env文件配合python-dotenv
- 安装依赖:
pip install python-dotenv - 在Django项目根目录创建
.env文件,内容:
EMAIL_HOST_USER=your-email@example.com EMAIL_HOST_PASSWORD=your-password
- 修改
.gitignore文件,添加.env,避免提交到版本控制 - 给
.env设置严格权限:chmod 600 .env,确保只有当前用户能读写 - 在Django的
settings.py开头添加:
from dotenv import load_dotenv import os load_dotenv() # 加载.env文件中的变量
这样Django就能通过os.getenv()或你当前用的env()方法读取变量,敏感数据不会出现在代码或系统环境变量中。
2. 使用Google Cloud Secret Manager
把敏感数据存入GCP的Secret Manager,Django通过客户端库读取,本地完全不存储明文:
- 在GCP控制台创建Secret(如
EMAIL_HOST_PASSWORD),存入对应敏感内容 - 给虚拟机的服务账号添加
roles/secretmanager.secretAccessor权限(仅针对所需的Secret,遵循最小权限原则) - 安装GCP依赖:
pip install google-cloud-secret-manager - 在
settings.py中添加读取逻辑:
from google.cloud import secretmanager def get_secret(secret_name): client = secretmanager.SecretManagerServiceClient() project_id = "your-gcp-project-id" name = f"projects/{project_id}/secrets/{secret_name}/versions/latest" response = client.access_secret_version(name=name) return response.payload.data.decode("UTF-8") EMAIL_HOST_USER = get_secret("EMAIL_HOST_USER") EMAIL_HOST_PASSWORD = get_secret("EMAIL_HOST_PASSWORD")
这种方式彻底避免本地存储敏感数据,安全性最高。
三、Google Cloud虚拟机环境变量安全管理最佳实践
- 优先用Secret Manager存储敏感数据:不要在虚拟机本地保存任何密码、密钥,所有敏感信息都存入Secret Manager,通过IAM严格控制访问权限
- 遵循最小权限原则:给虚拟机的服务账号只分配必要的权限,比如仅允许访问所需的Secret,绝不授予全局管理员权限
- 禁止用实例元数据存敏感内容:实例元数据默认公开可访问(除非配置访问控制),仅适合存储非敏感的配置信息
- 定期轮换敏感数据:定期更新邮箱密码、API密钥等,在Secret Manager中创建新版本即可,无需修改虚拟机配置
- 开启审计日志:在GCP控制台启用Secret Manager的审计日志,监控敏感数据的访问记录,及时发现异常操作
- 绝对禁止硬编码敏感数据:不要把密码、密钥写进代码、配置文件或提交到版本控制
- 限制虚拟机网络访问:配置防火墙规则,只允许必要的IP访问虚拟机,减少攻击面
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

