【ETCD】【实操篇(十六)】基于角色的访问控制:ETCD 安全管理指南

ETCD是一个高可用的分布式键值存储系统,广泛应用于Kubernetes等大规模容器化平台的配置和服务发现。为了保障ETCD集群中的数据安全,ETCD提供了基于角色的访问控制(RBAC)功能。本文将详细介绍如何在ETCD v3中配置和管理基于角色的访问控制(RBAC),帮助用户在确保系统安全的同时,灵活管理用户权限。

目录

什么是ETCD的基于角色的访问控制?

ETCD的基于角色的访问控制(RBAC)是指通过设置不同的用户角色和权限,来管理ETCD集群中对数据的访问。通过RBAC,管理员可以为不同的用户分配不同的权限,确保只有授权的用户能够访问或修改ETCD中的数据。RBAC为ETCD集群提供了精细的权限控制,是提升ETCD安全性的关键功能。

ETCD v3的身份验证与RBAC

在ETCD v3中,身份验证功能被引入,允许为集群配置基本的用户认证和角色权限控制。ETCD v3对原有身份验证功能的API和用户界面进行了调整,使其更加符合新的数据模型,提升了安全性和灵活性。

1. 特殊用户与角色

ETCD中有两个特殊的用户和角色:

  • 用户 root:root用户拥有ETCD集群的完全访问权限,主要用于集群管理。
  • 角色 root:root角色赋予用户全局读写访问权限,并允许用户修改集群的身份验证配置。

这些特殊用户和角色的设计目的在于提供高权限的管理能力,使得管理员能够灵活管理集群中的其他用户和角色。

2. 创建和管理用户

etcdctl工具提供了完整的用户管理功能,可以用来创建、删除、修改用户密码等操作。管理员可以通过etcdctl user子命令来执行这些任务。

创建用户
bash 复制代码
$ etcdctl user add myusername

创建新用户时,系统会提示你输入新密码。如果你想通过标准输入提供密码,可以使用--interactive=false选项。

删除用户
bash 复制代码
$ etcdctl user delete myusername
管理用户角色

用户可以拥有一个或多个角色,通过角色来管理其权限。管理员可以为用户授予或撤销角色:

bash 复制代码
$ etcdctl user grant-role myusername foo
$ etcdctl user revoke-role myusername bar
修改用户密码

修改用户密码时,会提示输入新密码:

bash 复制代码
$ etcdctl user passwd myusername

3. 创建和管理角色

etcdctl同样提供了角色管理功能。角色是ETCD访问控制的核心,角色定义了一组特定的权限,可以授予单个或多个用户。

创建角色
bash 复制代码
$ etcdctl role add myrolename
授予角色权限

角色的权限可以是对单个键或一系列键的读写操作。权限可以是读权限、写权限或两者同时授予。可以通过etcdctl role命令为角色授予权限。

例如,授予角色对某个键的读权限:

bash 复制代码
$ etcdctl role grant-permission myrolename read /foo

授予角色对一组键的读写权限:

bash 复制代码
$ etcdctl role grant-permission myrolename readwrite /key1 /key5
查看角色的权限

可以通过etcdctl role get命令查看角色的权限设置:

bash 复制代码
$ etcdctl role get myrolename
撤销角色权限

撤销权限的操作与授予权限的操作类似:

bash 复制代码
$ etcdctl role revoke-permission myrolename /foo/bar
删除角色

删除角色时,所有与该角色相关联的权限会一并移除:

bash 复制代码
$ etcdctl role delete myrolename

4. 启用身份验证和RBAC

启用身份验证后,ETCD集群会要求用户在每次访问时提供身份验证信息。管理员需要确保在启用身份验证之前,至少创建一个root用户。

启用身份验证

创建root用户后,可以通过以下命令启用身份验证:

bash 复制代码
etcdctl --endpoints=${ENDPOINTS} role add root
etcdctl --endpoints=${ENDPOINTS} role get root

etcdctl --endpoints=${ENDPOINTS} user add root
etcdctl --endpoints=${ENDPOINTS} user grant-role root root
etcdctl --endpoints=${ENDPOINTS} user get root

etcdctl --endpoints=${ENDPOINTS} role add role0
etcdctl --endpoints=${ENDPOINTS} role grant-permission role0 readwrite foo
etcdctl --endpoints=${ENDPOINTS} user add user0
etcdctl --endpoints=${ENDPOINTS} user grant-role user0 role0

etcdctl --endpoints=${ENDPOINTS} auth enable
# now all client requests go through auth

etcdctl --endpoints=${ENDPOINTS} --user=user0:123 put foo bar
# permission denied, user name is empty because the request does not issue an authentication request
etcdctl --endpoints=${ENDPOINTS} get foo
# user0 can read the key foo
etcdctl --endpoints=${ENDPOINTS} --user=user0:123 get foo

# permission denied, user name is empty because the request does not issue an authentication request
etcdctl --endpoints=${ENDPOINTS} --user=user0:123 get foo1

此时,ETCD集群会要求所有用户进行身份验证。如果需要禁用身份验证,可以使用以下命令:

bash 复制代码
$ etcdctl --user root:rootpw auth disable

5. 使用TLS进行身份验证

ETCD还支持基于TLS证书的身份验证。如果启用了--client-cert-auth=true,客户端的TLS证书中的公共名称(CN)将用于身份验证。此时,客户端无需提供用户名和密码。

请注意,TLS身份验证不能与gRPC-proxy和gRPC-gateway一起使用,因为这两者会终止TLS连接,并导致客户端证书的CN无法正确传递。

6. 密码强度要求

虽然ETCD没有强制要求特定的密码长度,但为了保证系统安全,建议管理员自行实施密码强度策略。可以使用TLS公共名称进行身份验证,或者创建不使用密码的用户,以减少密码相关的安全风险。

小结

通过ETCD的身份验证和基于角色的访问控制(RBAC),管理员可以精细地管理ETCD集群的访问权限。无论是为用户分配不同的角色,还是对角色进行权限控制,RBAC都提供了强大的功能,确保了ETCD集群的数据安全。在实际生产环境中,建议启用身份验证并配置适当的角色和权限,以减少潜在的安全风险。

如果你对ETCD的权限管理有任何问题或经验,欢迎在下方留言讨论!

相关推荐
红红谈说5 小时前
论坛帖子审核链路怎么设计?内容安全与状态机的一次复盘
安全·状态机·内容审核·敏感词·异步审核
风123456789~11 小时前
【架构专栏】第18章 安全架构设计 1/3
安全·架构·安全架构
白帽攻防录11 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
天远API11 小时前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化司乘安全绑定网关
人工智能·安全·架构·自动化
꯭自꯭闭꯭11 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课12 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司12 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk13 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea14 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)14 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘