使用AWS Elastic Beanstalk部署时是否需单独创建S3存储静态文件?
合理性判断
- 将静态文件和EB生成的源代码、版本包放在同一个S3存储桶是完全合理的,没有强制要求拆分。二者拆分与否的核心判断依据是你的业务管理需求:
- 优先选同桶的场景:无特殊隔离要求,希望减少资源管理成本、避免多桶计费冗余
- 优先选单独开桶的场景:需要为静态文件单独配置CDN、访问日志、生命周期规则,或有合规要求禁止源代码存储桶关联任何公开权限配置
同存储桶仅公开static文件夹的配置方案
该方案通过桶策略优先级高于对象ACL的特性实现,配置完成后无需每次部署后手动修改对象权限,部署时自动覆盖的对象私有权限不会影响静态文件的公开访问:
- 首先调整存储桶的公开访问配置:进入S3控制台对应存储桶的「权限」 tab,关闭「阻止所有公开访问」下的4项配置,保存更改
- 配置存储桶策略,将以下JSON填入「存储桶策略」编辑框,替换
<你的桶名>为实际存储桶名称后保存:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<你的桶名>/static/*" } ] }
- 优化Django静态文件上传配置(如果你使用
django-storages管理S3静态文件),在settings.py中增加以下配置,避免上传时额外设置无效ACL:
AWS_DEFAULT_ACL = None AWS_STATIC_URL = f"https://<你的桶名>.s3.<区域>.amazonaws.com/static/" STATIC_URL = AWS_STATIC_URL
单独开桶的可选配置参考
如果你选择单独创建静态文件存储桶,直接为新桶配置允许所有匿名读的桶策略即可,同时修改上述settings.py中的桶名配置为新存储桶名称即可,配置逻辑更简单,无资源误公开风险。
内容的提问来源于stack exchange,提问作者matiszz
相关产品推荐
相关产品推荐

