4. etcd 访问控制策略:RBAC 角色与权限模型、用户管理、角色绑定、权限粒度

etcd 的访问控制基于 RBAC(Role-Based Access Control) 模型,通过用户、角色、权限的分离与绑定,实现细粒度的安全管控。在生产集群中,RBAC 策略的评审是保障数据安全与操作合规的核心环节。

4.1 RBAC 核心模型与组件

etcd RBAC 模型包含三个核心实体:用户(User)、角色(Role)、权限(Permission)。用户通过角色绑定获得对特定键范围的访问能力。

关键原则:etcd 默认启用 RBAC 后,所有请求(包括来自集群成员的内部请求)都需要经过认证与授权。root 用户拥有最高权限,可管理所有用户与角色。
etcd RBAC 核心模型 用户 (User) root 用户 普通用户 角色 (Role) 读写角色 只读角色 管理角色 权限 (Permission) 读 (READ) 写 (WRITE) 读写 (READWRITE) 绑定 授予 说明: 一个用户可以绑定多个角色,一个角色可以授予多个权限。权限通过键范围(Key Range)和操作类型(读/写)定义。

4.2 用户管理

用户管理是 RBAC 的基础。etcd 提供命令行工具 etcdctl 进行用户操作,所有用户操作需要 root 权限。

操作 命令示例 说明
添加用户 etcdctl user add alice 交互式输入密码,密码需满足复杂度要求
删除用户 etcdctl user remove alice 删除后该用户所有绑定关系自动解除
修改密码 etcdctl user passwd alice 需要 root 权限或用户自身旧密码
列出用户 etcdctl user list 显示所有已创建的用户名
获取用户详情 etcdctl user get alice 显示用户绑定的角色列表
安全提示:生产环境中应避免使用 root 用户进行日常操作。建议为不同团队创建独立用户,并遵循最小权限原则。密码应定期轮换,且禁止在脚本中明文存储。

4.3 角色管理与权限粒度

角色是权限的集合。etcd 的权限粒度支持到 键前缀(Key Prefix) 和 键范围(Key Range) 级别,这是实现多租户隔离的关键。

4.3.1 权限类型

权限类型 允许的操作 典型场景
READ Get、Range、Watch 监控组件只读访问配置数据
WRITE Put、Delete、Txn 服务注册组件写入服务元数据
READWRITE 所有读写操作 运维工具对特定键空间进行管理

4.3.2 键范围定义方式

权限通过 键范围(Key Range) 来限定作用域。etcd 支持两种范围定义方式:

  • 前缀匹配: 指定一个键前缀,匹配该前缀的所有键。例如 /app/prod/ 匹配所有以 /app/prod/ 开头的键。
  • 范围匹配: 指定起始键和结束键(左闭右开)。例如 [a, z) 匹配所有字典序在 a 到 z 之间的键。
# 创建只读角色,仅允许读取 /app/prod/ 前缀下的键
etcdctl role add prod-reader
etcdctl role grant-permission prod-reader read /app/prod/ --prefix=true

# 创建读写角色,允许对 /app/staging/ 前缀进行读写
etcdctl role add staging-admin
etcdctl role grant-permission staging-admin readwrite /app/staging/ --prefix=true

# 创建管理角色,允许对所有键进行读写(谨慎使用)
etcdctl role add cluster-admin
etcdctl role grant-permission cluster-admin readwrite / --prefix=true

4.4 角色绑定

角色绑定将用户与角色关联,使用户获得该角色所定义的权限。一个用户可以绑定多个角色,其最终权限为所有绑定角色权限的 并集。

操作 命令示例 说明
绑定角色 etcdctl user grant-role alice prod-reader 将 prod-reader 角色授予 alice 用户
解除绑定 etcdctl user revoke-role alice prod-reader 移除 alice 用户的 prod-reader 角色
查看绑定 etcdctl user get alice 显示 alice 绑定的所有角色
最佳实践:角色绑定应遵循“按需分配、定期审计”原则。建议每季度进行一次 RBAC 策略评审,清理不再使用的用户和角色,避免权限扩散。

4.5 权限粒度对比与策略建议

不同的权限粒度适用于不同的业务场景。下表对比了常见粒度及其适用场景:

粒度级别 定义方式 适用场景 安全等级
全局 / 前缀 集群管理员、备份工具 低(需严格控制)
租户级 /tenants/{tenant-id}/ 多租户 SaaS 平台 高
应用级 /apps/{app-name}/ 微服务配置管理 中
功能级 /apps/{app-name}/config/ 特定功能模块的读写隔离 高
权限粒度层级示意图 全局:/ (集群管理员) 租户级:/tenants/{tenant-id}/ (多租户隔离) 应用级:/apps/{app-name}/ (微服务配置) 功能级:/apps/{app-name}/config/ (细粒度隔离)

4.6 RBAC 策略评审清单

在进行 etcd 集群安全评审时,以下 RBAC 相关检查项应作为必审内容:

  1. root 用户使用情况:检查是否有非必要场景使用 root 用户,root 密码是否已轮换。
  2. 用户清单审计:确认所有用户均为在职人员或合法服务账号,无僵尸账号。
  3. 角色权限范围:检查角色是否使用了过大的键范围(如全局 /),是否可缩小到具体前缀。
  4. 角色绑定关系:确认用户绑定的角色是否与其职责匹配,是否存在过度授权。
  5. 权限变更记录:检查 RBAC 变更是否有审计日志,变更是否经过审批流程。
  6. 最小权限原则:所有角色应仅包含完成工作所需的最小权限集。
评审工具:使用 etcdctl role list 和 etcdctl user list 导出当前 RBAC 配置,结合 etcdctl role get <role-name> 和 etcdctl user get <user-name> 逐项检查权限与绑定关系。建议将结果输出为 JSON 格式进行自动化审计。