分配 PostgreSQL RBAC 角色

从 v4.3.0 开始,PostgreSQL Operator 提供五个聚合的面向用户角色,用于职责分离:admineditviewbackuprestore。本指南展示如何通过 RoleBinding 将每个角色授予用户或组。

概览

角色功能典型对象
adminpostgresqlspostgresbackupspostgresrestores 具有完整 CRUD 权限DBA、平台管理员
edit创建和更新 postgresqls(不包括删除)应用开发人员
view对所有 PostgreSQL 相关资源具有只读访问权限审计员、支持人员
backup仅创建和管理 postgresbackups备份 operator
restore仅创建和管理 postgresrestores恢复 operator
NOTE

admin 聚合了 editviewbackuprestoreeditview 也会聚合到 namespace-developer 范围,因此已经拥有 namespace-developer 的用户会自动继承它们。

操作步骤

以下每个示例都在单个命名空间中授予该角色。请将 $NAMESPACE$USER$GROUP 替换为你的值。

授予 admin

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: postgres-admin
  namespace: $NAMESPACE
subjects:
  - kind: User
    name: $USER
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cpaas:middleware-postgres:business-ns:admin
  apiGroup: rbac.authorization.k8s.io

授予 edit

允许开发人员创建和更新 postgresql 实例,而不能删除它们。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: postgres-edit
  namespace: $NAMESPACE
subjects:
  - kind: Group
    name: $GROUP
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cpaas:middleware-postgres:business-ns:edit
  apiGroup: rbac.authorization.k8s.io

授予 view

为审计员或支持工程师提供只读访问权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: postgres-view
  namespace: $NAMESPACE
subjects:
  - kind: User
    name: $USER
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cpaas:middleware-postgres:business-ns:view
  apiGroup: rbac.authorization.k8s.io

授予 backup

允许用户创建 postgresbackups,而不影响集群配置。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: postgres-backup
  namespace: $NAMESPACE
subjects:
  - kind: User
    name: $USER
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cpaas:middleware-postgres:business-ns:backup
  apiGroup: rbac.authorization.k8s.io

授予 restore

仅授予创建和管理 postgresrestores 的能力。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: postgres-restore
  namespace: $NAMESPACE
subjects:
  - kind: User
    name: $USER
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cpaas:middleware-postgres:business-ns:restore
  apiGroup: rbac.authorization.k8s.io

验证

使用 kubectl auth can-i 确认绑定已生效:

# As a user with the edit role
kubectl auth can-i create postgresqls.acid.zalan.do -n $NAMESPACE --as=$USER
# → yes
kubectl auth can-i delete postgresqls.acid.zalan.do -n $NAMESPACE --as=$USER
# → no

相关内容