Directus集成AWS S3存储适配器遇写入权限错误求助
排查Directus + AWS S3写入权限问题的思路
我之前也碰到过类似的S3存储权限问题,结合你的配置和场景,给你几个具体的排查方向:
1. 确认IAM用户的权限是否完整
虽然AWS CLI能正常操作,但要注意Directus上传文件时,除了基础的s3:PutObject,还需要对应你配置里的ACL: public-read权限——也就是s3:PutObjectAcl。另外,可能还需要s3:ListBucket来验证桶的存在。
你可以检查下IAM用户的策略是否包含这些权限,示例策略片段如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-bucket-name/*", "arn:aws:s3:::your-bucket-name" ] } ] }
2. 检查S3桶的Block Public Access设置
如果你的桶开启了Block all public access或者Block public access to buckets and objects granted through any access control lists (ACLs),那你配置里的ACL: public-read就会被拒绝。可以暂时关闭这个设置,或者移除Directus配置中的ACL选项,测试是否能正常上传。
3. 验证Directus配置中的路径与端点
- 确认
root字段的/originals前缀是否符合S3的路径规则(S3没有真正的文件夹,前缀不需要提前创建,但要确保没有特殊字符)。 - 如果使用的是AWS中国区、GovCloud或者第三方S3兼容存储,需要在
options中添加正确的endpoint配置,比如:'options' => [ 'ACL' => 'public-read', 'CacheControl' => 'max-age=604800', 'endpoint' => 'https://s3.cn-north-1.amazonaws.com.cn' ], - 检查
root_url中的##S3_URL##是否正确,比如应该是https://your-bucket-name.s3.your-region.amazonaws.com这种格式。
4. 查看Directus的详细日志
开启Directus的调试模式(在配置中设置'debug' => true),查看应用日志或者服务器的错误日志,通常会有更具体的错误信息——比如是签名过期、端点不匹配,还是确实被IAM策略拒绝。
5. 测试简化版配置
暂时去掉所有非必要的配置项,比如先移除options里的ACL和CacheControl,只用基础的S3配置上传文件,确认是否能成功。如果可以,再逐步加回配置项排查是哪一项导致的问题。
内容的提问来源于stack exchange,提问作者erimeri
相关产品推荐
相关产品推荐

