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

Vercel部署Django Rest集成AWS S3遇InvalidToken错误求助

解决Vercel部署Django时AWS S3 InvalidToken错误及集成指南

1. 排查Vercel环境变量配置

  • 确认Vercel项目的环境变量与本地.env完全一致,包括AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY,若使用临时凭证还需添加AWS_SESSION_TOKEN。注意变量值不能有多余空格、大小写必须匹配,避免复制粘贴时引入隐形字符。
  • 可在Django的settings.py中临时添加日志输出(部署后及时删除),验证环境变量是否正确加载:
    import logging
    logger = logging.getLogger(__name__)
    logger.debug(f"AWS_ACCESS_KEY_ID loaded: {os.environ.get('AWS_ACCESS_KEY_ID') is not None}")
    
    查看Vercel部署日志,确认变量已正常读取。

2. 修正Django S3核心配置

确保settings.py中的S3配置符合AWS规范,尤其是签名版本和区域设置:

import os
from pathlib import Path

# S3存储配置
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = "your-bucket-name"
AWS_S3_REGION_NAME = "your-region"  # 例如 us-east-1、eu-west-1
AWS_S3_SIGNATURE_VERSION = "s3v4"  # 部分区域强制要求v4签名,否则会触发Token错误
AWS_QUERYSTRING_AUTH = False  # 若无需生成带签名的文件URL,可关闭此选项
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"

# 静态文件可选配置(若使用S3托管静态文件)
STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
STATIC_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/static/"

3. 验证AWS凭证与权限

  • 使用AWS CLI测试凭证有效性,在本地运行:
    aws s3 ls s3://your-bucket-name --profile your-aws-profile
    
    若能正常列出Bucket内容,说明凭证本身有效;若报错,先修复本地凭证问题再同步到Vercel。
  • 检查IAM用户/角色的权限策略,确保包含S3操作的必要权限:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::your-bucket-name",
            "arn:aws:s3:::your-bucket-name/*"
          ]
        }
      ]
    }
    
    若使用IAM角色而非永久密钥,需确保角色的信任策略允许Vercel的服务主体访问。

4. 调整Vercel部署配置

  • 确认vercel.json的Serverless函数配置正确,适配Django的WSGI入口:
    {
      "builds": [
        {
          "src": "your_project_name/wsgi.py",
          "use": "@vercel/python",
          "config": { "maxLambdaSize": "15mb", "runtime": "python3.11" }
        }
      ],
      "routes": [
        {
          "src": "/(.*)",
          "dest": "your_project_name/wsgi.py"
        }
      ]
    }
    
  • 确保build命令包含静态文件收集步骤(若使用S3托管静态文件),在Vercel项目的Build & Development Settings中设置Build Command为:
    python manage.py collectstatic --noinput && python manage.py migrate
    

5. 临时凭证特殊处理

若使用AWS STS临时凭证,需注意:

  • AWS_SESSION_TOKEN必须同步到Vercel环境变量,且凭证未过期。
  • 避免本地使用永久密钥、部署使用临时密钥的不一致场景,统一凭证类型后测试。

内容的提问来源于stack exchange,提问作者Saifullakh Mamaraimov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:58:34