跳转至

减少容器管理内置权限点

从容器管理 v0.50.0 开始,您可以减少 Namespace 内置角色(NS Admin、NS Editor、NS Viewer)的权限。 本文以禁止 NS Viewer 查看 Pod 日志为例,说明如何减少内置角色的权限点。

前提条件

Note

  • 只需在 Global Cluster 创建权限缩减规则。Kpanda 控制器会将计算后的内置角色权限同步到所有子集群, 同步过程可能需要一段时间。
  • 权限缩减仅支持 Namespace 内置角色 role-template-ns-adminrole-template-ns-editrole-template-ns-view,不支持 Cluster 级内置角色。
  • 只能使用带有指定 Label 的 ClusterRole 缩减权限,不能使用 Role。不要直接修改内置 ClusterRole, 否则 Kpanda 控制器会覆盖您的修改。

内置角色与 Label 的对应关系

为目标角色创建权限缩减 ClusterRole 时,将对应 Label 的值设置为 "delete"

内置角色 ClusterRole Label
NS Admin role-template-ns-admin rbac.kpanda.io/role-template-ns-admin: "delete"
NS Editor role-template-ns-edit rbac.kpanda.io/role-template-ns-edit: "delete"
NS Viewer role-template-ns-view rbac.kpanda.io/role-template-ns-view: "delete"

Kpanda 会先合并内置权限和通过 mergetrue 追加的权限,再减去所有 delete 规则中声明的权限:

最终权限 =(内置权限 ∪ 追加权限)- 缩减权限

操作步骤

以下步骤从 NS Viewer 中移除读取 Pod 日志的权限,同时保留查看 Pod 状态和其他资源的权限。

  1. 在 Global Cluster 中创建以下 ClusterRole:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: delete-ns-view-pod-log-read # (1)!
      labels:
        rbac.kpanda.io/source: "others"
        rbac.kpanda.io/role-template-ns-view: "delete" # (2)!
    rules:
      - apiGroups: [""]
        resources: ["pods/log"]
        verbs: ["get", "list", "watch"]
    
    1. 名称可以自定义,但必须符合 Kubernetes 资源命名规范且不能与已有资源重名。
    2. 如果要缩减其他 Namespace 内置角色的权限,请替换为该角色对应的 Label,值保持为 "delete"
  2. 应用 YAML 文件,并等待 Kpanda 控制器完成同步:

    kubectl apply -f delete-ns-view-pod-log-read.yaml
    
  3. 查看 NS Viewer 对应的内置 ClusterRole,确认 pods/log 不再包含 getlistwatch 权限:

    kubectl get clusterrole role-template-ns-view -o yaml
    

    同步完成后,已授予 NS Viewer 的用户将无法再查看 Pod 日志。

恢复权限

删除权限缩减 ClusterRole 后,Kpanda 会自动重新计算内置角色,并恢复相应权限:

kubectl delete clusterrole delete-ns-view-pod-log-read

等待同步完成后,运行以下命令确认权限已恢复:

kubectl get clusterrole role-template-ns-view -o yaml

使用限制

  • delete 规则不支持 resourceNamesnonResourceURLs
  • 不支持从通配符 apiGroups: ["*"]resources: ["*"] 中仅删除某个具体值。如需删除通配符覆盖的全部值, 请在 delete 规则中也使用 "*"
  • 不支持 */subresource 形式的资源通配符,例如 */scale
  • 如果原权限的 verbs"*",可以删除 getlistwatchcreateupdatepatchdeletedeletecollection 等 Kubernetes 标准操作。对于自定义操作,请先确认 Kpanda 是否支持展开该操作。
  • 无效的 delete 配置不会生效,对应角色将保留内置默认权限。请检查 Kpanda 控制器日志并修正配置。

评论