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

server/2024/12/29 7:23:54/

在这里插入图片描述

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

目录

    • 什么是ETCD的基于角色的访问控制?
    • ETCD v3的身份验证与RBAC
      • 1. 特殊用户与角色
      • 2. 创建和管理用户
        • 创建用户
        • 删除用户
        • 管理用户角色
        • 修改用户密码
      • 3. 创建和管理角色
        • 创建角色
        • 授予角色权限
        • 查看角色的权限
        • 撤销角色权限
        • 删除角色
      • 4. 启用身份验证和RBAC
        • 启用身份验证
      • 5. 使用TLS进行身份验证
      • 6. 密码强度要求
    • 小结

什么是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子命令来执行这些任务。

创建用户
$ etcdctl user add myusername

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

删除用户
$ etcdctl user delete myusername
管理用户角色

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

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

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

$ etcdctl user passwd myusername

3. 创建和管理角色

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

创建角色
$ etcdctl role add myrolename
授予角色权限

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

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

$ etcdctl role grant-permission myrolename read /foo

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

$ etcdctl role grant-permission myrolename readwrite /key1 /key5
查看角色的权限

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

$ etcdctl role get myrolename
撤销角色权限

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

$ etcdctl role revoke-permission myrolename /foo/bar
删除角色

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

$ etcdctl role delete myrolename

4. 启用身份验证和RBAC

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

启用身份验证

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

etcdctl --endpoints=${ENDPOINTS} role add root
etcdctl --endpoints=${ENDPOINTS} role get rootetcdctl --endpoints=${ENDPOINTS} user add root
etcdctl --endpoints=${ENDPOINTS} user grant-role root root
etcdctl --endpoints=${ENDPOINTS} user get rootetcdctl --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 role0etcdctl --endpoints=${ENDPOINTS} auth enable
# now all client requests go through authetcdctl --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集群会要求所有用户进行身份验证。如果需要禁用身份验证,可以使用以下命令:

$ etcdctl --user root:rootpw auth disable

5. 使用TLS进行身份验证

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

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

6. 密码强度要求

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

小结

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

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


http://www.ppmy.cn/server/154136.html

相关文章

RK356x bsp 7 - PCF8563 RTC调试记录

文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件:飞凌ok3568-c开发板 软件:原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…

ChatGPT之父:奥尔特曼

奥尔特曼 阿尔特曼一般指萨姆奥尔特曼,他是OpenAI的联合创始人兼首席执行官,被称为“ChatGPT之父”.以下是其具体介绍: 个人经历 1985年4月22日出生于美国芝加哥,8岁学会编程,9岁拥有电脑,对信息技术和互联网产生兴趣.高中就读于约翰巴勒斯中学,后进入斯坦福大学主修计…

STM32 + 移远EC800 4G通信模块数传

一、4G模块简述 EC800M-CN 是移远通信(Quectel)推出的一款高性能、超小尺寸的 LTE Cat 1 无线通信模块,专为 M2M(机器对机器)和 IoT(物联网)应用设计。它具有以下主要特点: 通信速率…

nodejs创建ws服务器,前端浏览器用websocket接收信息和发送信息给服务端

首页是用nodejs建立服务器端 //wsserver.js const WebSocketrequire(ws); const wssnew WebSocket.Server({port:8080}); wss.on(connection,function connection(ws){ws.on(error,console.error);//接收客户端发送过来的信息ws.on(message,function message(data){console.lo…

python安装

python安装 1.下载2.安装3.验证安装成功 1.下载 (1)下载网址:https://www.python.org/downloads/windows/ 进入后稍等一会,比较慢 (2)选择版本 2.安装 (1)双击或者以管理员身份运…

Mask R-CNN

目录 摘要 Abstract Mask R-CNN 网络架构 Backbone RPN Proposal Layer ROIAlign bbox检测 Mask分割 损失计算 实验复现 总结 摘要 Mask R-CNN是在Faster R-CNN的基础上进行改进的目标检测和实例分割网络。Faster R-CNN主要用于目标检测,输出对象的边…

王佩丰24节Excel学习笔记——第十九讲:Indirect函数

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 如果indirect引用出错,首先检查一下引用位置的双引号有没有出错,再检查引用值的位置是否出错,如果是双引号出错,可以使用英文状态下输入…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人…