如何在Heroku中配置AWS S3?遇403权限错误求解决
S3与Heroku应用关联的403错误解决
凭据加载说明
boto3会自动读取环境变量中的AWS凭据,不需要在boto3.client('s3')里手动指定。你通过heroku config:set设置的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,boto3会自动识别并使用,所以你当前的代码写法是正确的。
403 Forbidden错误的核心原因及解决
出现这个错误,主要排查以下两点:
- IAM用户权限不足:你配置的AWS账号(对应设置的ACCESS_KEY)缺少S3对象的读取权限。需要给该IAM用户添加包含
GetObject权限的策略:
若需要访问桶内所有文件,可将{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-models-bucket/model.zip" } ] }Resource改为arn:aws:s3:::my-models-bucket/*。 - S3桶权限限制:如果桶设置为私有,且未通过桶策略或ACL允许该IAM用户访问,也会触发403。检查桶的权限配置,确保目标IAM用户拥有读取该对象的权限。
环境变量验证方法
若想确认环境变量是否正确加载,可在代码中添加调试代码:
import os print("AWS_ACCESS_KEY_ID:", os.environ.get("AWS_ACCESS_KEY_ID"))
部署后执行heroku logs --tail查看日志,确认变量是否存在。若为空,需重新执行heroku config:set命令,并确保应用已重启生效。
内容的提问来源于stack exchange,提问作者Alaa M.
相关产品推荐
相关产品推荐

