记录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的主要内容,如果未能解决你的问题,请参考以下文章

【ceph】对象存储 - bucket命名规范

Centos7下使用Ceph-deploy快速部署Ceph分布式存储-操作记录

Ceph对象存储介绍与安装

对象存储网关RADOS Gateway(RGW)

Ceph配置桶存储分片

分布式对象存储Ceph核心组件面试必看