一个因boto支持aws4引发的悲剧故事 by_秦牧羊

环境介绍

软件版本

rgw配置

boto对region支持的一些坑

boto用例

异常信息

boto对region_name的逻辑处理

走读boto代码,发现其实region_name字段就是将host按”.”进行切分,取前面部分进行处理得出,如果host为ceph.work,那么切分出来的”ceph”当然对应不上了,所以想要让boto支持AWS4,你的host必须有3个字段,比如”s3.ceph.work”。如果你采取掩耳盗铃方式,只是去调整boto代码如下

那么你将看到如下异常

这个400错误,说明你提交数据的姿势不对,

从抓包来看这个us-east-1就是你提交的region_name了,这里也给我们埋了一个坑,如果我们的host第一个字段是”s3”,那么region_name就是被硬编码成了”us-east-1”,如果是”s3-abc”或者是其他,则region_name变成我们自定义的字段,好在ceph默认是允许你在request header里面随便填region_name,不然就真的悲剧了。

这里正确的姿势应该是调整ceph.conf里面的rgw配置如下.

方案1

方案2

总结

RGW在hammer版本之前,如果只是使用aws2那么rgw的host字段的配置不会那么重要,但是如果你升级到jewel以上并且使用aws4,那么这些问题就会忽然爆发出来,在集群初期规划好一个host就会变得非常重要,不然等到你用新版本上线,会发现这个坑让你不得不修改所有客户端配置。

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注