SQL 存储后端的权限管理

本文件旨在为用户提供在使用 SQL 存储后端时设置和管理权限的指南。

简介

为了处理权限,舵机利用了 Kubernetes 的 RBAC 功能。在使用 SQL 存储后端时,Kubernetes 的角色不能用于确定用户是否可以访问给定资源。本文档说明了如何创建和管理这些权限。

初始化

舵机 CLI 第一次连接到数据库时,客户端将确保它已先前初始化。如果未初始化,它将自动完成必要的设置。此初始化需要在公共模式上具有管理员权限,或者至少能够

  • 创建表
  • 授予公共模式上的权限

在数据库上运行迁移后,所有其他角色都可以使用客户端。

授予 PostgreSQL 中的非管理员用户权限

为了管理权限,SQL 后端驱动利用了 PostgreSQL 的 RLS(行级安全) 功能。RLS 允许所有用户能够从同一张表读写,但如果未明确授权,则不能操纵相同的行。默认情况下,任何未明确授予权限的角色在运行 helm list 时总是返回空列表,并且不能检索或修改集群中的任何资源。

让我们看看如何授予给定角色对特定命名空间的访问权限

CREATE POLICY <name> ON releases_v1 FOR ALL TO <role> USING (namespace = 'default');

此命令将授予角色 role 读取和写入满足 namespace = 'default' 条件的所有资源的权限。创建此策略后,以角色 role 身份连接到数据库的用户将能够在运行 helm list 时看到驻留在 default 命名空间中的所有版本,并能够修改和删除它们。

可以使用 RLS 以细粒度方式管理权限,并且可能需要根据表中的不同列来限制访问权限

  • 类型
  • 主体
  • 名称
  • 命名空间
  • 版本
  • 状态
  • 所有者
  • 创建时间
  • 修改时间