Files
kuboard-press/learning/k8s-advanced/sec/rbac/auth-namespace.md

152 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: LearningLayout
description: Kuboard v3 两阶段授权。本文描述了如何使用 Kuboard v3 管理RBAC授权规则并授权用户访问名称空间列表。
meta:
- name: keywords
content: Kuboard v3两阶段授权
---
# 授权用户访问名称空间
本文描述了如何授予用户/用户组访问 Kubernetes 的一个名称空间。
## 前提条件
* 已安装 Kuboard v3版本不低于 `v3.1.1.0`
## 两阶段授权
Kuboard v3 中,采用两阶段授权的方式控制用户/用户组在 Kuboard / Kubernetes 中的权限。
第一阶段授权,控制当前用户:
* 可以操作哪个集群
* 以什么样的身份操作该集群
第二阶段授权,控制用户:
* 在集群内具备什么样的权限
本文描述了如何在 Kuboard 界面中为用户组 `mygroup` 授权,允许该用户组中的用户以 `admin` 角色访问集群 `k8s-21` 中的 `default` 名称空间。使用该用户组下 `test` 用户登录 Kuboard 后,首页界面如下所示:
> 假设用户 `test` 以及用户组 `mygroup` 已经实现创建好
* `test` 用户所查询到的集群列表结果为空;
* 点击右上角的用户名,可以显示当前登录用户的基本信息以及其所属的用户组;
![image-20210418113050843](./auth-namespace.assets/image-20210418113050843.png)
## 第一阶段授权
* 使用管理员账号登录 Kuboard 首页,并导航到 `用户与权限` -> `角色` -> `sso-user`,如下图所示:
`sso-user` 为安装 Kuboard 时默认创建的第一阶段授权的角色,该角色具备 `KubernetesCluster.act-as-impersonate-user``GET` 权限,允许与此角色关联的用户/用户组以 `使用 ServiceAccount kuboard-admin 扮演` 的身份操作 Kubernetes 集群。
![sso-user](./auth-namespace.assets/image-20210418111904236.png)
* 切换到 `关联用户/用户组(集群级别)` 标签页,并点击 `创建角色绑定(集群级别)`
![关联用户/用户组(集群级别)](./auth-namespace.assets/image-20210418142933452.png)
填写表单,如下图所示:
| 字段名 | 填写内容 | 备注 |
| --------------- | -------- | ------------------ |
| 主体类型 | 用户组 | |
| 用户组 | mygroup | |
| Kubernetes 集群 | k8s-21 | 选择已经激活的集群 |
![角色绑定](./auth-namespace.assets/image-20210418143059381.png)
* 此时,用 `test` 账号登录 Kuboard 首页,此时用户已经可以在 Kubernetes 集群列表中查看到被授权的 `k8s-21` 这个集群,如下图所示:
![Kuboard首页](./auth-namespace.assets/image-20210418150049969.png)
点击该集群,弹出对话框中:
* 可以激活 `使用 ServiceAccount kuboard-admin 扮演 test` 这个选项
* 名称空间列表中的所有名称空间都为不可访问的状态
![使用 ServiceAccount 扮演](./auth-namespace.assets/image-20210418150343201.png)
## 第二阶段授权
* 以管理员用户登录到 Kuboard 首页,点击集群列表中的集群 `k8s-21`,进入集群页面,并切换到 `访问控制` -> `第一阶段授权` 页面,如下图所示:
在此页面中,可以查看到该集群已经授权给 `mygroup` 用户组(操作步骤参考前文)。
![image-20210418151523402](./auth-namespace.assets/image-20210418151523402.png)
* 切换到 `访问控制` -> `第二阶段授权` -> `用户组`,如下图所示:
![image-20210418153958738](./auth-namespace.assets/image-20210418153958738.png)
点击图中 `为新 Group 授权` 按钮,并填入 `mygroup` 作为被授权的用户组名称,然后点击确定按钮,如下图所示:
![image-20210418154347704](./auth-namespace.assets/image-20210418154347704.png)
*`Group` 详情页面,切换到 `default` 名称空间,并点击 RoleBinding 后面的 `添加` 按钮,如下图所示:
![创建 RoleBinding](./auth-namespace.assets/image-20210418155107291.png)
在弹出对话框中,`关联的 ClusterRole/Role` 字段选择 `ClusterRole``admin`,并点击保存按钮,如下图所示:
![创建 RoleBinding](./auth-namespace.assets/image-20210418155352901.png)
点击保存后,可以看到该用户组在 `default` 名称空间中的权限,如下图所示:
![image-20210418155524552](./auth-namespace.assets/image-20210418155524552.png)
## 进入名称空间
完成前述 第一阶段授权、第二阶段 两个步骤后,以 `test` 用户登录 Kuboard 界面,并点击首页的 `k8s-21` 集群,在弹出框中可以看到 `default` 名称空间已经变成了已授权的状态,点击 `default` 可以进入该名称空间,如下图所示:
![image-20210418160920808](./auth-namespace.assets/image-20210418160920808.png)
## selfsubjectaccessreviews
Kuboard 客户端需要调用 Kubernetes 的 `/apis/authorization.k8s.io/v1/selfsubjectrulesreviews` 接口用于确定界面上哪些菜单显示,哪些菜单不显示。极少部分情况下,您的集群可能没有授予 `system:authenticated` 用户组该权限,例如阿里云托管的 K8S 集群。
在这种情况下Kuboard v3.1.1.8及以上版本)将在界面上做出如下提示:
![缺少权限](./auth-namespace.assets/selfsubjectaccessreviews-00.png)
解决此问题的办法是,将 `system:basic-user``system:discover``system:public-info-viewer` 这三个 ClusterRole 绑定到您的用户或者用户组,步骤如下:
* 点击右上角的用户名,确认当前用户所属的用户组,如下图所示:
图中,用户属于 `administrators` 用户组。如果您的界面上显示,当前用户属于多个用户组,您只需要挑选其中一个用户组与 `system:basic-user``system:discover``system:public-info-viewer` 这三个 ClusterRole 绑定。
![确认当前用户所属的用户组](./auth-namespace.assets/ssrr_01.png)
* 使用 Serviceaccount kuboard-admin 的身份切换到菜单 ***访问控控制*** --> ***用户组***,如下图所示:
![Group授权列表](./auth-namespace.assets/ssrr_02.png)
* 在上图中,点击 ***为新 Group 授权*** 并填写 Group Name `administrators`,然后点击确定,将跳转到如下界面:
![Group授权页面](./auth-namespace.assets/ssrr_03.png)
* 点击上图中 ***ClusterRoleBinding*** 后面的 ***添加*** 按钮,如下图所示:
在关联的 ClusterRole 里选择名称为 `system:basic-user` 的 ClusterRole并点击 ***保存*** 按钮,此步骤将创建一个 ClusterRoleBinding将用户组 `administrators` 与 ClusterRole `system:basic-user` 关联到一起。
![创建ClusterRoleBinding](./auth-namespace.assets/ssrr_04.png)
* 重复上述步骤,再创建两个 ClusterRoleBinding并将 `administrators``system:discover` 以及 `system:public-info-viewer` 关联起来。
完成上述步骤后,您在使用被授权用户访问 Kuboard 界面就可以正常了。