RBAC 与权限
Testudo 的权限分为三类:管理集群权限、Server API 权限、远端业务集群权限。生产环境应按职责拆分审计。
管理集群权限
disaster-operator 需要在管理集群中:
- 管理
testudo.softcdata.com/v1下的 CRD。 - 读写 CRD status、conditions 和 history。
- 创建 Kubernetes Event。
- 访问保存远端集群凭据的 Secret。
- 管理 leader election 所需的 ConfigMap/Lease。
- 暴露 metrics 和 webhook 服务。
disaster-server 需要在管理集群中:
- 读取和写入容灾 CRD。
- 读取 Event。
- 读取和写入用户、系统设置、License 等平台资源。
- 将控制台动作转换为 CRD 创建或更新。
当前 Chart 中 disaster-server 使用较宽的 ClusterRole。生产环境如果需要最小权限,应基于实际 API 范围收敛权限,并在回归测试中覆盖控制台、Watch、License、统计和删除检查流程。
远端业务集群权限
远端集群凭据用于访问源集群和目标集群。最小权限应覆盖:
- 读取 Kubernetes API 资源和命名空间资源。
- 读写 Velero
Backup、Restore、Schedule、BackupStorageLocation等资源。 - 读取和恢复被保护命名空间内的 workload、Service、Ingress、PVC、Secret、ConfigMap 等资源。
- 读取 StorageClass、IngressClass、CRD 等依赖资源。
不要把 cluster-admin 作为长期凭据默认方案。首次接入可用高权限完成验证,生产上线前应收敛到最小权限。
权限排障
常见现象:
| 现象 | 优先检查 |
|---|---|
| 集群注册成功但资源列表为空 | 远端 token 是否有 list/watch 权限 |
| Backup 未创建 | Velero namespace、Backup/BSL 权限 |
| Restore 失败 | 目标命名空间、PV/PVC、StorageClass 权限 |
实例无法进入 Protected | DataSync/ResourceSync、Event、operator 日志 |
| Server API 返回 403 | 用户权限、JWT、Server RBAC |
审计建议
- 定期导出
ClusterRole、ClusterRoleBinding和相关 Secret。 - 为远端集群凭据设置轮换流程。
- 对对象存储 bucket 开启访问日志或审计。
- 对控制台用户操作记录 trace ID、用户 ID 和操作对象。