You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:30:03