云原生安全系列 5:ETCD 安全加固

news2024/11/25 0:58:37

引言

etcd是一个强一致性的分布式键值存储,它提供了一种可靠的方式来存储需要被分布式系统或机器集群访问的数据。通过 raft 算法它能在网络分区期间优雅地处理领导者的选举,并能容忍机器故障,甚至在领导者节点上。除此之外, etcd 还是 kubernetes 最为核心的组件之一,存储着 kubernetes 所有的元信息,因此如何保障 etcd 的安全性十分重要。

​小知识

Raft 是一种共识算法,设计得很容易理解。它在容错和性能方面与 Paxos 相当。不同的是,它被分解成相对独立的子问题,并干净地解决了实际系统所需的所有主要部分。 而且 Raft 宣称的强一致性则是依靠"共识算法"来实现的。共识是容错分布式系统的一个基本问题,共识涉及多个服务器对数值的同意。一旦他们就某一数值达成了决定,该决定就是最终的。典型的共识算法在其任何大多数服务器可用时都会取得进展;例如,一个由5个服务器组成的集群,即使有2个服务器失败,也能继续运行。如果有更多的服务器失败,他们就会停止取得进展(但永远不会返回一个错误的结果)。

共识通常出现在复制状态机的背景下,这是一种构建容错系统的一般方法。每个服务器都有一个状态机和一个日志。状态机是我们想让其成为容错的组件,比如说哈希表。在客户看来,即使集群中的少数服务器发生故障,他们也是在与一个单一的、可靠的状态机进行交互。每个状态机从其日志中获取命令作为输入。在我们的哈希表例子中,日志将包括像set x to 3这样的命令。一个共识算法被用来同意服务器日志中的命令。共识算法必须确保,如果任何一个状态机将set x to 3作为第n条命令,其他状态机将永远不会应用不同的第n条命令。因此,每个状态机都会处理同一系列的命令,从而产生同一系列的结果,到达同一系列的状态。

有关Raft算法的知识可以参考下方的官方链接:

https://raft.github.io/

可视化页面可以帮助你理解 Raft 算法是怎么实现"共识"以及选举"领导者"的

http://thesecretlivesofdata.com/raft/

etcd 的安全模型

  • etcd 支持自动 TLS 以及通过客户端证书对客户端到服务器以及对等(服务器到服务器/集群)通信的身份验证。

  • 要启动并运行,首先要有一个 CA 证书和一个成员的签名密钥对。建议为集群中的每个成员创建并签署新的密钥对。

  • 为方便起见,可以使用 cfssl 工具自动生成证书,详细步骤可参考 cfssl 官方文档: cloudflare/cfssl

etcd 的基本配置

控制平面的安全

etcd 通过命令行标志或环境变量采用几个与证书相关的配置选项:

  • 客户端到服务器的通信:

--cert-file=:用于etcd 的 SSL/TLS 连接的证书。设置此选项后,advertise-client-urls 可以使用 HTTPS 模式。

--key-file=:证书的密钥。必须未加密。

--client-cert-auth:设置后,etcd 将检查所有传入的 HTTPS 请求以获取由受信任的 CA 签名的客户端证书,不提供有效客户端证书的请求将失败。如果启用身份验证,则证书会为 Common Name 字段给出的用户名提供凭据。

--trusted-ca-file=:受信任的证书颁发机构。
--auto-tls:为与客户端的 TLS 连接使用自动生成的自签名证书。

  • 对等(服务器到服务器/集群)通信: 对等选项的工作方式与客户端到服务器选项的工作方式相同:

--peer-cert-file=:用于对等点之间 SSL/TLS 连接的证书。这将用于侦听对等地址以及向其他对等点发送请求。

--peer-key-file=:证书的密钥。必须未加密。

--peer-client-cert-auth:设置后,etcd 将检查来自集群的所有传入对等请求,以获取由提供的 CA 签名的有效客户端证书。

--peer-trusted-ca-file=:受信任的证书颁发机构。
--peer-auto-tls:使用自动生成的自签名证书进行对等点之间的 TLS 连接。 如果提供了客户端到服务器或对等证书,则还必须设置密钥。所有这些配置选项也可通过环境变量、ETCD_CA_FILE等ETCD_PEER_CA_FILE获得。

配置示例

01.

客户端指定CA证书和签名密钥对通过 https 访问 etcd 服务

etcd --name infra0 --data-dir infra0 \
--cert-file=/path/to/server.crt --key-file=/path/to/server.key \
--advertise-client-urls=https://127.0.0.1:2379 --listen-client-urls=https://127.0.0.1:237

02.

通过 https 客户端证书验证客户端到etcd服务器的身份 使用客户端证书来防止对 etcd 的未授权访问,客户端将向服务器提供证书,服务器将检查证书是否由提供的 CA 签名并决定是否为请求提供服务。

etcd --name infra0 --data-dir infra0 \
--client-cert-auth --trusted-ca-file=/path/to/ca.crt --cert-file=/path/to/server.crt --key-file=/path/to/server.key \
--advertise-client-urls https://127.0.0.1:2379 --listen-client-urls https://127.0.0.1:2379

03.

配置 etcd 集群成员直接通信的证书 假设我们有我们ca.crt和两个成员,他们有自己的密钥对(member1.crt& member1.key,member2.crt& member2.key)由这个 CA 签名,我们启动 etcd 如下:

DISCOVERY_URL=... # from https://discovery.etcd.io/new
# 成员1
$ etcd --name infra1 --data-dir infra1 \
  --peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member1.crt --peer-key-file=/path/to/member1.key \
  --initial-advertise-peer-urls=https://10.0.1.10:2380 --listen-peer-urls=https://10.0.1.10:2380 \
  --discovery ${DISCOVERY_URL}
# 成员2
$ etcd --name infra2 --data-dir infra2 \
  --peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member2.crt --peer-key-file=/path/to/member2.key \
  --initial-advertise-peer-urls=https://10.0.1.11:2380 --listen-peer-urls=https://10.0.1.11:2380 \
  --discovery ${DISCOVERY_URL}

04.

使用自动签名进行安全传输 对于需要通信加密而非身份验证的情况,etcd 支持使用自动生成的自签名证书加密其消息。这简化了部署,因为不需要在 etcd 之外管理证书和密钥。 配置 etcd 以将自签名证书用于带有标志的客户端和对等--auto-tls连接--peer-auto-tls:

DISCOVERY_URL=...

# from https://discovery.etcd.io/new

# member1

$ etcd --name infra1 --data-dir infra1 \
--auto-tls --peer-auto-tls \
--initial-advertise-peer-urls=https://172.16.10.10:2380
--listen-peer-urls=https://172.16.10.10:2380 \
--discovery ${DISCOVERY_URL}

# member2

$ etcd --name infra2 --data-dir infra2 \
--auto-tls --peer-auto-tls \ 
--initial-advertise-peer-urls=https://172.16.10.11:2380 --listen-peer-urls=https://172.16.10.11:2380 \ --discovery ${DISCOVERY_URL}

05.

关于更多 etcd 安全配置,可以参考 etcd 官方文档:

https://etcd.io/docs/v3.2/op-guide/security/#example-1-client-to-server-transport-security-with-https

关于HummerRisk

HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生的安全和治理问题,核心能力包括混合云的安全治理和K8S容器云安全检测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

存储过程的基础知识

本文来简单说下存储过程的基础知识 文章目录概述什么是存储过程存储过程的优缺点概述 mysql官网提供的储存过程:https://www.mysqlzh.com/doc/225/499.html 什么是存储过程 简单的说,存储过程是一条或者多条SQL语句的集合,可视为批文件&…

Windows下更改yarn的安装位置,减小C盘占用

Windows下更改yarn的安装位置,减小C盘占用 绷不住了,yarn的C盘占用太高了,我这C盘感觉以后会受不了,太大了~~(捂脸~~ nnd,撸他,更改yarn的位置开始! 先看看yarn目前的位置 检查当前…

「自控原理」2.4 信号流图与梅逊公式、闭环传递函数

本节引入了信号流图以及梅逊增益公式,可以据此快速对系统进行化简 本节引入了闭环传递函数的概念,并介绍了常用的闭环传递函数 文章目录信号流图的基本概念信号流图与方框图的关系从结构图绘制信号流图从信号流图绘制结构图梅逊(Mason)增益公式Mason公式…

Workfine5.0扩展功能——如何识别身份证信息?

哈喽,我是办公助手小W,又到了跟大家分享办公小技巧的时候啦! 最近Workfine5.0最新版本上线后,大家最感兴趣的就是它的扩展功能了,今天要跟大家分享的就是如何实现身份证信息的提取。 首先咱们先要知道如何下载安装扩…

(第五章)OpenGL超级宝典学习:缓冲

缓冲 前言 本篇在讲什么 关于OpenGL数据缓冲的相关内容 本篇适合什么 适合初学OpenGL的小白 想了解OpenGL缓冲对象的同学 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文…

使用OpenCV透视变换技术实现坐标变换实践

1. 概述 1.1. 需求 在局部空间(无GPS定位)视频监控过程中,把视频识别到物体位置,投射到空间平面坐标系中,获取物体在局部空间的平面坐标。 1.2. 解决方案 使用图像透视变换技术。 1.3. 透视变换概念 透视变换是指…

链路追踪组件Skywalking使用

前言Skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器,其用于追踪多微服务模块调用之间日志的追踪,协助程序员进行排除问题Skywalking架构Skywalking架构图大概如下SkyWalking OAP: SkyWalkin…

如何格式化U盘?以及优盘格式化的恢复方法

我们经常使用U盘来进行存储和传输数据,使用时间久了,可能需要我们进行优盘格式化。需要注意!优盘格式化之前,记得对里面的数据进行备份,防止数据清空造成不必要的损失。 如何进行U盘格式化?格式化优盘后&a…

“深度学习”学习日记。误差反向传播法--加法层、乘法层、激活函数层的实现

2023.1.16 1、加法层、乘法层: 前两篇文章都在讲述理论,今天实现代码操作:关于加法节点,乘法节点的内容在这篇文章。 https://blog.csdn.net/m0_72675651/article/details/128695488 在以后的学习中,将把构建神经网…

AHOcoder声码器

AHOcoder声码器 目前最常见的声码器有WORLD,STRAIGHT,Griffin_Lim等,AHocoder算是少见的,但也可以学习一下。 代码下载网址:AHOcoder 简介 AHOcoder 语音声码器由 Daniel Erro 在巴斯克大学的 AHOLAB 信…

若依配置教程(一)运行若依系统

一、下载源代码 若依的源代码是开源的,所以我们在若依的官方网站即可进行下载,若依的官网是:http://doc.ruoyi.vip/ruoyi-vue/,进入官网后,会显示代码下载的地址:https://gitee.com/y_project/RuoYi-Vue&a…

【进阶】Bean作用域和生命周期

努力经营当下,直至未来明朗! 文章目录一、通过⼀个案例来看 Bean 作⽤域的问题1. 被修改的Bean案例2. 原因分析二、作用域Scope定义1. Bean的六种作用域(重点)1)singleton2)prototype3)request4…

JVM——类加载与字节码技术(2)

三、编译期处理 所谓的 语法糖 ,其实就是指 java 编译器把* .java 源码编译为* .class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利 【注意】以下代码的分析&am…

Python爬虫之基于 selenium 实现文献信息获取

目录初识 selenium网页分析代码实现踩过的坑最近有小伙伴后台跟我说,临近毕业,写毕业论文需要上知网查找大量的文献,但是一篇一篇看文献信息以及文献摘要又有点麻烦,能不能让我写一个爬虫去批量获取文献相关信息 我一听好家伙&am…

【算法】二叉树遍历

目录1.概述2.代码实现2.1.二叉树定义2.2.前序遍历2.3.中序遍历2.4.后序遍历2.5.层序遍历3.应用本文参考: LABULADONG 的算法网站 1.概述 (1)所谓遍历 (Traversal) 是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问…

《从零开始编写一个直播服务器》 C++ 实现一个最简单的HTTP-FLV流媒体服务器

流媒体服务系列文章 文章目录流媒体服务系列文章前言一、http flv?二、使用步骤服务器代码总结前言 HTTP FLV通过http传输,时延可控制在2秒以内,浏览器可基于bilibili开源的flv.js(采用h5 mse技术)开发,比起rtsp、rtmp等免插件播…

Spring BeanPostProcessor

BeanPostProcessor,是bean的增强器,在bean初始化前后调用,常用的方法有postProcessBeforeInitialization和postProcessAfterInitialization,在Spring启动并初始化bean前后通过它们做一些扩展操作。 1、BeanPostProcessor 接口说明…

【信管9.1】​项目沟通及过程

项目沟通及过程沟通这个东西,可以说是整个项目成功失败最关键的因素。9成以上失败的项目在最后总结的时候,沟通不畅或者信息对接问题都会占据前三甲。其实只要是做项目,那么必须有团队,有团队有人,那么沟通就是不可避免…

03 技术太卷我学APEX-关于blob数据类型的使用

03 技术太卷我学APEX-关于blob数据类型的使用 0 Oracle 的blob类型 BLOB BLOB全称为二进制大型对象(Binary Large Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节。 通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件…

外贸软件成本核算丨采购出入库有磅差怎么办

在液化天然气油料等行业,在与供应商之间的进出口贸易过程中,总是少不了会出现磅差的情况,因此就需要有磅差的约定。那什么是磅差呢?磅差指的是,供应方在发货时提供的磅单与购买方实际验收过磅数量之间的差额。一般磅差…