Airflow对接MinIO S3时调用HeadObject操作报403 Forbidden错误
根因定位
该HeadObject 403报错由3处配置错误导致:
- 端口误用:配置中填写的
9001是MinIO Web控制台默认端口,MinIO S3兼容API的默认监听端口为9000,向控制台端口发送S3签名请求会直接被拦截返回403。 - 连接URI格式错误:当前你将MinIO地址放在查询参数的
host字段,@后的主机位错误填写为S3,Airflow无法正确解析服务端点,会默认向官方AWS S3地址发请求,签名与MinIO侧不匹配。 - S3寻址方式不兼容:botocore SDK默认使用虚拟主机风格寻址(请求域名为
<bucket>.<s3服务域名>),但MinIO默认仅支持路径风格寻址(请求路径为/<bucket>/<对象key>),寻址方式错误会导致请求路由异常、签名校验失败。
修复方案
- 替换.env文件中的
OBJECT_STORE配置为以下内容,将其中的xxxx、xxxxx替换为你实际的MinIO Access Key和Secret Key:
OBJECT_STORE=s3://xxxx:xxxxx@minio1:9000/?endpoint_url=http%3A%2F%2Fminio1%3A9000&config_kwargs=%7B%22s3%22%3A%7B%22addressing_style%22%3A%22path%22%7D%7D
配置说明:URI中
config_kwargs为URL编码后的JSON配置,原始值为{"s3": {"addressing_style": "path"}},作用是强制SDK使用路径风格访问MinIO,避免虚拟主机域名解析失败。
- 检查docker-compose网络配置,确认Airflow服务与MinIO服务在同一自定义Docker网络下,
minio1:9000地址可从Airflow容器内部正常访问。 - 重启Airflow的webserver、scheduler、worker组件,确保新的环境变量被加载。
校验方式
服务重启后重新触发测试DAG即可正常读取对象。如果仍有异常,可登录Airflow Web控制台进入Admin > Connections页面查看aws_s3连接的自动解析结果,确认以下配置正确:
- Host值为
minio1,端口为9000 - Extra配置中包含正确的
endpoint_url和路径风格寻址参数
内容的提问来源于stack exchange,提问作者BuffaloDev
相关产品推荐
相关产品推荐

