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

如何在django-storages中配置AWS短期凭证以提升安全性?

Django-Storages 结合 AWS 短期安全凭证的实现方案

很多开发者已经成功用 django-storages 实现了短期凭证模式,下面是具体的实现思路和建议:

关于 AWS_SESSION_TOKEN 的使用

这个配置就是用来传入短期凭证会话令牌的,需要和 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 配合使用。当你通过 IAM 角色获取到包含这三个值的短期凭证后,直接在 Django 配置中设置即可:

AWS_ACCESS_KEY_ID = "临时访问密钥ID"
AWS_SECRET_ACCESS_KEY = "临时秘密访问密钥"
AWS_SESSION_TOKEN = "会话令牌"
AWS_STORAGE_BUCKET_NAME = "你的存储桶名称"
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"

自动刷新过期凭证的方案

短期凭证会过期,手动更新配置不现实,推荐两种可行方式:

  • 利用 AWS SDK 自动刷新:如果你的应用部署在 EC2/EKS/ECS 等 AWS 服务上,直接给实例或任务附加目标 IAM 角色即可。boto3(django-storages 底层依赖)会自动从元数据服务获取并刷新短期凭证,无需手动配置任何密钥,只需要设置存储桶名称和后端即可。
  • 自定义存储后端实现刷新逻辑:如果必须通过 IAM 用户承担角色,可以继承 S3Boto3Storage,重写凭证获取逻辑,调用 STS 的 assume_role 接口获取凭证,并根据过期时间实现自动刷新。示例代码片段:
from storages.backends.s3boto3 import S3Boto3Storage
import boto3
from botocore.exceptions import ClientError

class AutoRefreshingS3Storage(S3Boto3Storage):
    def _get_session(self):
        sts_client = boto3.client('sts')
        try:
            response = sts_client.assume_role(
                RoleArn="你的IAM角色ARN",
                RoleSessionName="django-s3-session"
            )
            # 更新凭证信息
            self.access_key = response['Credentials']['AccessKeyId']
            self.secret_key = response['Credentials']['SecretAccessKey']
            self.session_token = response['Credentials']['SessionToken']
            # 可根据 response['Credentials']['Expiration'] 实现定时刷新逻辑
        except ClientError as e:
            raise RuntimeError(f"获取短期凭证失败: {e}")
        return super()._get_session()

之后在配置中指定自定义存储后端:DEFAULT_FILE_STORAGE = "你的应用模块.AutoRefreshingS3Storage"

关于 AWS_S3_SESSION_PROFILE 的说明

这个配置是用来指定本地 AWS 配置文件(~/.aws/credentials)中的会话配置文件,适合本地开发测试场景。如果你通过 aws sts assume-role 生成了会话配置并保存在本地凭证文件中,设置该参数可以让 django-storages 直接使用对应短期凭证,但不适合生产环境的自动刷新需求。

额外建议

  • 生产环境优先使用 AWS 服务内置的 IAM 角色(如 EC2 实例角色),无需管理任何密钥,安全性最高,且凭证刷新完全自动化。
  • 若必须使用 IAM 用户承担角色,要严格遵循最小权限原则,仅给该用户授予 sts:AssumeRole 到目标 S3 访问角色的权限,无其他额外权限。
  • 测试阶段可以先用 AWS CLI 手动执行 aws sts assume-role 获取凭证,填入 Django 配置验证 S3 访问是否正常,再推进自动刷新逻辑的开发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:31