记录ceph对象存储的一个bug
Posted 柳清风09
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录ceph对象存储的一个bug相关的知识,希望对你有一定的参考价值。
我们的对象存储是基于ceph的对象存储搭建的,测试环境是N版本的,生产环境是M版本的。业务使用的是doesObjectExist这个API,核心Java代码如下
boolean exists = s3Client.doesObjectExist(bucketName, object+"ss");
if (exists)
System.out.println("Object \\"" + bucketName + "/" + object + "\\" exists!");
else
System.out.println("Object \\"" + bucketName + "/" + object + "\\" does not exist!");
doesObjectExist本质上是通过HTTP HEAD请求,检查存储是否存在。这个API在测试环境运行ok,但生产环境却是403异常,通过抓包测试可以发现,当使用普通用户返回403,但如果是用admin则是404.如下
一开始我们以为是授权问题,因为S3标准是这样的写的
简单来说就是如果有ListBucket权限就返回404,没有就返回403。但我们反复检查策略,即便是放开所有权限都不行
"Version": "2012-10-17",
"Statement": [
"Sid": "AllowAll",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<bucket>/*",
"arn:aws:s3:::<bucket>"
]
]
并且测试环境和生产环境使用相同的策略。那么只可能是生产环境这个版本的有bug。
最终我们找到bug
就是在policy校验的地方有问题,原来的代码只有admin才能校验通过。
解决办法就是升级ceph,还好只是小版本的更新!
以上是关于记录ceph对象存储的一个bug的主要内容,如果未能解决你的问题,请参考以下文章