美文网首页CephCeph
ceph rgw:acl鉴权

ceph rgw:acl鉴权

作者: chnmagnus | 来源:发表于2018-08-24 15:40 被阅读0次

    rgw支持s3的acl机制,可以通过GetAcl PutAcl获取和设置Object和Bucket级别的acl,见https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html

    Bucket级别的acl信息是存储在Bucket Instance对象的attr中的;
    Object级别的acl是存储在Object Header对象的attr中的。

    Put ACL和Get ACL操作就是简单将acl信息存入上述位置或从上述位置读取返回ACL信息给用户。

    某操作的acl的鉴权,很简单,在操作之前从Bucket或Object的attr中读取acl到内存对象,然后判断该操作是否能通过acl鉴权,通过后才能继续执行请求。其读取和鉴权流程如下。

    在rgw的I/O路径一文中我有写过,rgw的请求入口是process_request函数的,然后调用rgw_process_authenticated函数进行各种鉴权、校验和请求执行操作。而acl的读取和鉴权也是在这里。

    • rgw_process_authenticated
      • RGWHandler_REST::init_permissions
        • RGWHandler::do_init_permissions
          • rgw_build_bucket_policies :在此获取bucket级别的acl,从bucket instance对象中读取attrs并解析acl到内存中的RGWAccessControlPolicy_S3对象中
            • get_bucket_instance_info:从磁盘读取attrs
            • read_bucket_policy:从attrs中解析acl到对象
      • RGWHandler_REST::read_permissions
        • RGWHandler::do_read_permissions
          • rgw_build_object_policies :在此获取object级别的acl
            • read_obj_policy :从header对象读取attrs,并从其中解析到RGWAccessControlPolicy对象
      • RGWGetObj::verify_permission :此处调用对应操作重载的verify_permission函数
        • verify_object_permission :对象相关的acl鉴权会调用这个函数来完成
          • RGWAccessControlPolicy::verify_permission:鉴权的细节在这个函数,将用户请求的动作转换成32位无符号整数的权限码perm,然后与从rados层获取的acl对象中的acl信息得到的权限码policy_perm做与操作,判断与操作之后的acl_perm与原来的perm是否相同,不相同则鉴权不通过

    相关文章

      网友评论

        本文标题:ceph rgw:acl鉴权

        本文链接:https://www.haomeiwen.com/subject/wctiiftx.html