跳到主要内容
版本:3.19.0

SQL 存储后端的权限管理

本文档旨在指导用户在使用 SQL 存储后端时如何设置和管理权限。

介绍

Helm 利用 Kubernetes 的 RBAC 特性来处理权限。但在使用 SQL 存储后端时,无法使用 Kubernetes 的角色来判断用户是否可以访问特定资源。本文档将展示如何创建和管理这些权限。

初始化

Helm CLI 首次连接数据库时,客户端会检查数据库是否已完成初始化。如果尚未初始化,客户端会自动完成必要的设置。初始化过程需要 public 模式(schema)的管理员权限,或者至少能够:

  • 创建表
  • 在 public 模式上授予权限

数据库完成迁移后,其他角色就可以使用客户端了。

在 PostgreSQL 中向非管理员用户授权

SQL 后端驱动使用 PostgreSQL 的 RLS(行级安全)特性来管理权限。RLS 允许所有用户对同一张表进行读写操作,但在未获得明确授权的情况下,无法操作相同的行。默认情况下,未被明确授予相应权限的角色在运行 helm list 时会返回空列表,也无法检索或修改集群中的任何资源。

下面介绍如何为指定角色授予访问特定命名空间的权限:

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

此命令会将满足 namespace = 'default' 条件的所有资源的读写权限授予角色 role。创建该策略后,以角色 role 身份连接数据库的用户在运行 helm list 时就能看到 default 命名空间中的所有 release,并可以对其进行修改和删除。

RLS 支持细粒度的权限管理。你可以根据表的不同列来限制访问权限:

  • key
  • type
  • body
  • name
  • namespace
  • version
  • status
  • owner
  • createdAt
  • modifiedAt