• 开发
  • 权限资源访问的问题

目前想改动权限访问范围,比如用户绑定的是platform-regular角色,但是我这边新加了个借口,/apis/device.kubesphere.io/v1alpha2/device/list,我该如何修改相关role呢,目前代码跳的比较多,不太明白,也看了权限校验的相关代码

    lgy

    API 的定义是需要符合规范的,鉴权的大致流程为: 对请求意图进行解析 -> 根据资源所在的层级,对请求进行分层鉴权, 如果熟悉 K8s 原生的RBAC这些都很好理解。

    如果你定义的资源API 为 /apis/device.kubesphere.io/v1alpha2/devices, 那么解析的request info 对应为list devices in
    api group device.kubesphere.io

    只需要kubectl edit globalrole platform-regular 在rules 中加上,便可以授权该资源的访问权限

    - apiGroups:
      - device.kubesphere.io
      resources:
      - 'devices'
      verbs:
      - get
      - watch
      - list
    • lgy 回复了此帖

      hongming 能不能做个通用的呢,比如,如果我自定义角色,也带有访问该接口的权限,我现在的做法是修改authenticated.GlobalRole新增条rules,其次是不太明白的是以role-template-view为前缀和以role-template-manage为前缀的GlobalRole的作用和区别

      如果说我要新添加权限的话是不是需要新创建对应的view和manage的RBAC文件呢,前端也会添加响应的页面

        lgy 首先,你是可以自定义角色的。你所问的问题分两个部分:

        1. 对于后端API鉴权,就像@hongming 提到的两篇文档一样,只要你创建符合 K8S规范API定义的 role 和rolebinding 就有对应的资源的访问权限。
        2. 前端鉴权,前端与后端的鉴权需求不一样。 后端鉴权以GVK 为单位,可以对每个Verb 单独授权。这样的设计是前端不能接受的,前端完成一个动作通常需要很多API的配合,而且前端主要以菜单按钮的动作为单位进行授权。但这通常需要一些列的API调用才能完成。因此在Kubesphere中以 Role为基础添加了以下 Annotation和labels 作为前端交互的控制协议:
          metadata:
            annotations:
              iam.kubesphere.io/dependencies: '["role-template-view-groups","role-template-view-roles"]'
              iam.kubesphere.io/module: Access Control
              iam.kubesphere.io/role-template-rules: '{"groups": "manage"}'
              kubesphere.io/alias-name: Workspace Groups Management
            labels:
              iam.kubesphere.io/role-template: "true"
            name: role-template-manage-groups
        3. iam.kubesphere.io/role-template: “true” 定义了前端为完成一个操作做需要的全部后端 API 权限的集合。前端授权以role-template为基本单位。role-template, 并不会直接与用户绑定,这个角色的权限最终会汇集在用户自定义role,或者预定义role中。
          -
        4. iam.kubesphere.io/role-template-rules: ‘{“groups”: “manage”}’ 定义了前端对应菜单的key与动作类型。 前端抽象出了 view, create,edit,delete,manage等基本操作,manage表示其包含了view, create,edit,delete等所有的权限。
          -
        5. iam.kubesphere.io/dependencies: ‘[]’ 依赖的其他role template,参考一下前端 权限管理。
        • lgy 回复了此帖

          RolandMa1986 还有个问题想请教,我现在整合kubeedge的crd,看着文档是通过kubebuilder生成api和client,但是我看网上比较浅,这边有相关资料吗,我现在是跟着kubesphere编写相关文件,但是查询列表时为空,也不报错

            lgy 可以看看makefile 里面有使用code-generator生成 api client的命令

            • lgy 回复了此帖

              yuswift 看了,一些看不懂,如果我直接把kubeedge提供的client、lister、informer直接拿过来整合到kubesphere理论上是否可行呢,因为我现在正这么做着,但是结果不太理想

                hack/generate_client.sh主要是这个脚本 ks里面大部分使用的是code-generator去生成这些client的 可以看看这个文档 如果kubeedge已经有了 你可以 直接引用他们的 不用整合过来 https://www.jianshu.com/p/b2ceb9aff597

                lgy 可以分享一下你的场景和主要功能吗? 先有场景讨论再讨论实现中遇到的问题可能会更容易些。

                • lgy 回复了此帖

                  RolandMa1986 目前已经整合完,就是需要把边缘设备管理集成进来,后面还会做成华为云IEF那种

                    如果我创建拥有platform-admin角色的用户,请问下在哪里创建的用户名+cluster-admin的clusterrolebindings文件呢
                    代码在创建用户的时候没看到这层逻辑,只有globalrolebindings创建流程

                      6 天 后

                      RolandMa1986 请教个问题,我主要是看ks-apiserver和改这个,关于上一个问题,没太明白在创建相关权限时,controller那层是如何触发创建相关资源的,比如新建工作空间,相应的会自动创建工作空间的权限模板资源类的,这个是如何监控或者触发

                        5 天 后

                        RolandMa1986 了解下,kubesphere是否考虑过多集群下针对每个集群可以指定单独的管理员的角色

                          hongming 又来请教问题了,kubesphere支持三方平台登录吗,比如我这边有程序想使用kubesphere的账号登录,我看代码支持oauth2.0,但是不清楚怎么调用,其次是是否支持同一账号多设备共存。

                            lgy

                            3.0 还没有实现完整的 OAuth2 ,暂时只支持了 Implicit Grant/Resource Owner Password Credentials Grant这两个没有交互的流程,3.1 会和前端整合一下实现完整的 OIDC Protocol (通过Authorization Code Grant).

                            5 个月 后

                            lgy 你好,我现在也想使用kubeedge的设备管理功能,请问目前Kubesphere集成的kubeedge是不具备这部分功能吗?我部署官方kubeedge-counter-demo示例代码,一直不成功

                            • lgy 回复了此帖