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

Django应用中存储AWS凭证的最佳实践及安全方案咨询

Django + AWS 凭证存储最佳实践

核心底线

永远不要将硬编码的AWS凭证提交到版本控制系统(如Git),这是所有方案的前提。

推荐方案

1. 环境变量(通用首选)

boto3会自动读取系统环境变量中的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,Django也可以通过os.environ.get()获取这些值。

  • 本地开发:使用.env文件配合python-dotenv包,将.env加入.gitignore避免提交。示例:
    # settings.py
    import os
    from dotenv import load_dotenv
    
    load_dotenv()  # 加载本地.env文件
    AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
    
  • 生产环境:直接在服务器、容器或部署平台的环境变量配置中设置凭证,无需修改代码。

2. IAM角色(AWS部署场景最优)

如果你的Django应用部署在AWS服务(EC2、ECS、EKS、Elastic Beanstalk等)上,完全不需要手动存储凭证:

  • 给实例/服务分配具有S3访问权限的IAM角色,boto3会自动从AWS实例元数据服务(IMDS)获取临时凭证,且凭证会自动轮换。
  • 代码无需任何凭证配置,直接初始化客户端即可:boto3.client('s3')
  • 安全性最高,彻底避免了凭证泄露风险。

3. AWS本地凭证文件(本地开发便捷选项)

本地开发时,可使用默认路径~/.aws/credentials的文件存储凭证,boto3会自动读取:

  • 文件格式示例:
    [default]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_KEY
    
  • 如需多环境切换,可配置多个profile,代码中指定即可:boto3.client('s3', profile_name='dev')

4. AWS Secrets Manager(敏感场景集中管理)

虽然你认为它更适合其他密钥,但Secrets Manager也可用于存储AWS凭证,适合需要集中管理、自动轮换凭证的场景:

  • 给应用分配访问Secrets Manager的IAM角色,避免硬编码凭证;
  • 应用启动时从Secrets Manager拉取凭证,再初始化S3客户端。

关于settings.py的安全性说明

  • 硬编码凭证到settings.py绝对不安全:一旦文件被提交到版本库或服务器被入侵,凭证直接泄露;
  • 通过环境变量读取到settings.py是安全的:此时settings.py中仅包含读取逻辑,没有实际凭证内容,只要环境变量配置安全,就不存在风险。

内容的提问来源于stack exchange,提问作者Jaimee-lee Lincoln

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:32:43