如何正确配置S3存储桶解决Transloadit /s3/store的403错误?
遇到以下错误:
error S3_STORE_ACCESS_DENIED http_code 403 step export previousStep :original worker novate.transloadit.com message S3 did not accept the key / secret pair you provided.
该错误提示存在误导:输入无效API密钥时会触发不同错误,且已手动验证密钥对有效,问题不在凭据本身。
根据Transloadit文档说明:
警告:/s3/store机器人的
acl参数默认值为"public"。AWS S3的"Block new public ACLs and uploading public objects (Recommended)"存储桶设置会阻止这类操作,即使凭据配置正确,任务仍会返回权限错误。
已尝试取消“阻止所有公共访问”以及“阻止通过新访问控制列表授予对存储桶和对象的公共访问”选项,但问题依旧。
以下是正确的S3存储桶配置步骤,配合Transloadit实现文件导出:
彻底关闭存储桶公共访问限制
进入S3控制台目标存储桶的「权限」→「阻止公共访问(存储桶设置)」,确保以下四项全部取消勾选:- 阻止所有公共访问
- 阻止通过新访问控制列表授予对存储桶和对象的公共访问
- 阻止通过任何访问控制列表授予对存储桶的公共访问
- 阻止通过新存储桶策略和访问点策略授予公共访问
配置存储桶ACL支持公共对象设置
在「权限」→「访问控制列表」中,为「Everyone (public access)」授予「读取对象」权限(对应public-readACL),确保Transloadit能正常设置对象的公开可读权限。确保IAM用户权限达标
用于Transloadit的IAM用户需具备以下核心S3权限:s3:PutObject:上传对象到存储桶s3:PutObjectAcl:设置对象的访问控制列表
示例IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::你的存储桶名称/*" } ] }可选:修改Transloadit机器人的
acl参数
如果不想开放S3公共访问,可以在Transloadit的导出步骤中显式将acl设为private或authenticated-read,避免触发公共ACL限制。示例配置:{ "steps": { "export": { "robot": "/s3/store", "use": ":original", "aws_access_key_id": "你的Access Key", "aws_secret_access_key": "你的Secret Key", "bucket": "你的存储桶名称", "acl": "private" } } }验证存储桶区域匹配
确认Transloadit配置中指定的S3区域(如region: "us-east-1")与存储桶实际创建的区域完全一致,区域不匹配也可能引发403权限错误。
内容的提问来源于stack exchange,提问作者Martin Spa

