4. etcd 访问控制策略:RBAC 角色与权限模型、用户管理、角色绑定、权限粒度
etcd 的访问控制基于 RBAC(Role-Based Access Control) 模型,通过用户、角色、权限的分离与绑定,实现细粒度的安全管控。在生产集群中,RBAC 策略的评审是保障数据安全与操作合规的核心环节。
4.1 RBAC 核心模型与组件
etcd RBAC 模型包含三个核心实体:用户(User)、角色(Role)、权限(Permission)。用户通过角色绑定获得对特定键范围的访问能力。
关键原则:etcd 默认启用 RBAC 后,所有请求(包括来自集群成员的内部请求)都需要经过认证与授权。root 用户拥有最高权限,可管理所有用户与角色。
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/ |
特定功能模块的读写隔离 | 高 |
4.6 RBAC 策略评审清单
在进行 etcd 集群安全评审时,以下 RBAC 相关检查项应作为必审内容:
- root 用户使用情况:检查是否有非必要场景使用 root 用户,root 密码是否已轮换。
- 用户清单审计:确认所有用户均为在职人员或合法服务账号,无僵尸账号。
- 角色权限范围:检查角色是否使用了过大的键范围(如全局
/),是否可缩小到具体前缀。 - 角色绑定关系:确认用户绑定的角色是否与其职责匹配,是否存在过度授权。
- 权限变更记录:检查 RBAC 变更是否有审计日志,变更是否经过审批流程。
- 最小权限原则:所有角色应仅包含完成工作所需的最小权限集。
评审工具:使用
etcdctl role list 和 etcdctl user list 导出当前 RBAC 配置,结合 etcdctl role get <role-name> 和 etcdctl user get <user-name> 逐项检查权限与绑定关系。建议将结果输出为 JSON 格式进行自动化审计。