解决安全规模问题:MinIO 企业对象存储密钥管理服务器

在强大可靠的存储解决方案领域,MinIO 作为持久层脱颖而出,为组织提供安全、持久和可扩展的存储选项。MinIO 通常负责处理关键任务数据,在确保高可用性方面发挥着至关重要的作用,有时甚至在全球范围内。存储数据的性质,从财务和医疗保健记录到复杂的产品细节和尖端的 AI/ML 模型,不仅需要弹性,还需要严格的安全措施来防止未经授权的访问和披露。

MinIO 通过其细粒度身份和访问管理、对象锁定和端到端数据加密(静态和在线)等核心功能解决了这些安全问题。为了保护静态数据,MinIO 与各种密钥管理系统 (KMS) 无缝集成,包括 HashiCorp Vault、Thales CipherTrust Manager、AWS KMS 和 SecretsManager 等知名选项。这些 KMS 解决方案充当加密密钥的守护者,将它们安全地存储在远离它们保护的数据的地方。

虽然 MinIO 支持的 KMS 解决方案已经证明了它们的实力并被广泛使用,但也出现了一些挑战,尤其是在处理 PB 甚至 EB 数据的大规模存储基础设施的背景下。多年来观察到的局限性,部分通过我们的 KES 项目得到缓解,揭示了集成和维护单独的 KMS 解决方案的复杂性。

管理通用 KMS 会带来复杂性,因为这些 KMS 通常是错综复杂的分布式系统。兼顾安全性、合规性和性能需求成为一项艰巨的任务。另一方面,高性能存储基础架构的稳健性可能需要满足通用 KMS 解决方案难以满足的要求,尤其是在可用性、响应时间和整体性能方面。即使他们这样做了,它们也可能变得不可靠、过度资源消耗或成本上升。

因此,认识到大型、高可用性和高性能数据基础设施带来的独特挑战,我们致力于开发针对 MinIO 的 KMS,以满足这些特定需求。MinIO 的 KMS 功能专为我们的 Enterprise Lite 和 Enterprise Plus 客户提供。

MinIO 企业对象存储 KMS 是一种高度可用的 KMS 实现,针对大型存储基础设施进行了优化,特别是针对 MinIO 进行了优化。它的设计具有以下主要目标:

  • 可预测的行为:MinIO 的企业 KMS 旨在易于管理,使操作员能够直观地理解其状态。由于其更简单的设计,MinIO 的企业 KMS 比依赖更复杂的共识算法(如 Raft 或 Paxos)的类似解决方案更容易操作。

  • 高可用性和容错性:在大规模系统的动态环境中,网络或节点中断是不可避免的。关闭集群进行维护很少可行。MinIO 的企业 KMS 确保了不间断的可用性,即使面临此类中断,也可减轻可能破坏整个存储基础架构的级联效应。对于常见工作负载,KMS 提供尽可能高的可用性。具体而言,您可能会丢失集群中除一个节点之外的所有节点,但仍会处理任何加密、解密或数据密钥生成请求。

  • 可扩展性:虽然数据量通常只会增加,但大规模存储系统的负载可能会不时发生显著变化。MinIO 的企业 KMS 支持动态集群大小调整,可以随时添加或删除节点,无需停机。

  • 一致性和高性能:在大规模存储基础架构上,数据是不断写入和读取的。企业级 KMS 的响应能力直接影响存储系统的整体效率和速度。KMS 节点在处理来自存储系统的此类请求时不必进行协调。因此,KMS 集群的性能随节点数量的增加呈线性增长。此外,MinIO 的企业 KMS 支持请求流水线,以处理每节点和每秒数十万次加密操作。

  • 多租户:大规模存储基础架构通常由整个组织中的许多应用程序和团队使用。将团队和组隔离到自己的命名空间中是一项核心要求。MinIO 的 Enterprise KMS 支持以围圈的形式命名空间。可以为每个租户分配自己的 enclave,该 enclave 完全独立,并与 KMS 集群上的所有其他 enclave 隔离。

KMS 可以在 Enterprise Console 或命令行中配置。

现在,让我们深入探讨 KMS 的运行方式,首先检查其基本安全模型,然后深入了解集群架构和管理,最后将其无缝集成到 MinIO 中。

安全模型

KMS 在(硬件)安全模块 (HSM) 上建立其基础信任,该模块在密封和解封 KMS 根加密密钥方面发挥着关键作用。HSM 的职责扩展到通过允许解封其加密的磁盘状态并促进 KMS 集群内节点之间的通信来保护 KMS 的完整性。

但是,HSM 是一个概念,不一定是实际的硬件设备。例如,可以使用云 HSM(如 AWS CloudHSM)或软件 HSM 来代替物理设备。KMS 实施自己的软件 HSM,优先考虑用户友好的实施和操作简单性。

在每个 MinIO KMS 服务器上设置单个环境变量就足以开始使用。例如:

export MINIO_KMS_HSM_KEY=hsm:aes256:vZ0DeGvwlb/KHwIfi8+c7/8ZHjweHKVL0WNrRc3+FxQ=

在单个 KMS 服务器上,所有数据都驻留在内存中或加密在磁盘上。但是,在运行分布式 KMS 集群时,节点必须交换消息。为了确保节点间通信的安全,KMS 使用双向 TLS,使用直接派生自 HSM 的密钥。因此,只有有权访问相同 HSM 的节点(例如共享相同的软件 HSM 密钥)才能通过节点间 API 建立通信。通过这种方式,HSM 具有双重目的,不仅作为整个系统的信任守护者,而且作为在节点间通信中建立信任的基石。

集群管理

KMS 集群是一种分布式系统,它使用单领导者同步复制将状态更改传播到所有集群节点,并根据投票选出领导者。它在概念上与 Raft 共识协议非常相似,但并不完全相同。它仍然严格一致,并为所有事件提供线性化。

但是,通过查看几个示例,可能更容易理解 KMS 的工作原理。运行 KMS 集群不需要加密或分布式系统方面的专业知识。

因此,让我们多动手一点,感受一下 KMS 集群的行为方式。在最简单的情况下,KMS 集群由单个节点组成。启动新的 KMS 服务器时,它会自动创建新的单节点集群。例如:

export MINIO_KMS_HSM_KEY=hsm:aes256:vZ0DeGvwlb/KHwIfi8+c7/8ZHjweHKVL0WNrRc3+FxQ

=

minkms server --addr :7373 /tmp/kms0

我们可以使用自动生成的 API 密钥以集群管理员身份向集群进行身份验证,并列出其所有节点。

export MINIO_KMS_API_KEY=k1:ThyYZWXUjlSOL-l5hldSgO49oQPWZezVZFU4aiejVoU

minkms ls

现在,我们已经启动并运行了第一个 KMS 集群,让我们为将来要使用的主密钥创建一个新的 enclave。如前所述,enclave 实现命名空间。一个 enclave 中的所有密钥都与驻留在其他 enclave 中的所有其他密钥完全隔离。

minkms add-enclave enclave-1

在 enclave 中,我们可以创建第一个主密钥并检查其状态

minkms add-key --enclave enclave-1 key-1

minkms stat-key --enclave enclave-1 key-1

到目前为止,我们只使用单个 KMS 服务器运行。现在,让我们将单节点集群从一个节点扩展到三个节点。因此,为了简单起见,我们将在同一台计算机上启动另外两个 KMS 服务器。

首先,第二台服务器:

export MINIO_KMS_HSM_KEY=hsm:aes256:vZ0DeGvwlb/KHwIfi8+c7/8ZHjweHKVL0WNrRc3+FxQ=minkms server --addr :7374 /tmp/kms1

然后是第 3 个:

export MINIO_KMS_HSM_KEY=hsm:aes256:vZ0DeGvwlb/KHwIfi8+c7/8ZHjweHKVL0WNrRc3+FxQ=minkms server --addr :7375 /tmp/kms2

现在,我们可以返回到初始的 KMS 单节点集群,并通过向其添加其他两个服务器来扩展它。因此,我们使用服务器的 IP 地址和端口号(或 DNS 名称和端口)。这里是 192.168.188.79,但这在您的机器上可能有所不同。使用服务器在启动时在控制台上打印的 IP 和端口。

minkms add 192.168.188.79:7374

minkms add 192.168.188.79:7375

当我们再次查询 KMS 集群的状态时,它会告诉我们它由三个节点组成 - 初始服务器和我们刚刚添加的两个节点。

minkms ls

现在我们已经将多个节点加入到一个集群中,所有节点是否都具有相同的状态?例如,节点 1 是否也能够为我们提供有关我们之前创建的 enclave enclave-1 中的密钥key-1的状态信息?我们可以通过直接询问节点来找出答案。此步骤同样取决于本地网络中使用的 IP 地址。进行相应调整。

MINIO_KMS_SERVER=192.168.188.79:7374 minkms stat-key --enclave enclave-1 key-1

当节点加入集群时,它们会接收整个 KMS 状态,并且只有在它们同步后才会被视为集群的一部分。因此,集群中的所有节点都是彼此的副本,并保存相同的数据。后台没有部分状态,也没有静默同步。这就是为什么 KMS 集群非常可预测的原因之一。它们不能不同步。

例如,我们可以关闭三台 KMS 服务器中的两台。从技术上讲,我们可以删除任何两个节点,但我们停止节点一和节点二。因此,我们不必调整MINIO_KMS_SERVER来确保与剩余的一个节点进行通信。完成后,我们可以再次列出群集节点。

minkms ls

正如预期的那样,三分之二的节点不可用。但是,我们仍然可以在剩余节点上查询 key-1 的状态。

minkms stat-key --enclave enclave-1 key-1

对于服务器以预期的输出进行响应,您可能不会感到惊讶。然而,其他 KMS 实现,例如使用 Raft 作为底层共识算法的实现,将无法响应,至少在不容忍过时和放弃强一致性的情况下无法响应。如果两个节点处于关闭状态,则三节点 Raft 集群通常被视为不可用,无法处理任何请求。主要区别在于,KMS 可以保持对所有读取请求的可用性,而不会削弱其一致性保证。幸运的是,大规模存储系统使用的大多数 KMS 操作不需要在 KMS 集群上更改状态,因此可以将其视为“只读”。因此,KMS 容错模型符合大规模存储系统对高可用性和可靠 KMS 的期望。这并非巧合。

但是,KMS 不能也不会规避 CAP 定理。尝试更改剩余节点的状态(例如通过创建第二个密钥)将失败。服务器无法接受写入操作,因为它可能会不同步。因此,我们必须先带回剩下的两个节点,然后才能创建新的主密钥。

然而,重要的是要认识到 KMS 在 CAP 定理的范围内运行,并且不能绕过其固有原则。任何更改剩余节点状态的尝试(例如创建第二个密钥)都将失败。服务器本质上被限制接受写入操作,以防止潜在的分歧和状态不一致。实际上,这意味着在创建新的主密钥之前,必须重新启动剩余的两个节点才能在集群内建立写入仲裁。

总结

我们的 Enterprise 和 Enterprise Lite 客户可以使用这项新功能,同时缩小攻击面,同时解决与数十亿个加密密钥相关的性能挑战。MinIO 企业对象存储 KMS 可以提供可预测的行为,即使在每秒每个节点数十万次加密操作的规模下,也能提供高可用性和容错能力。此外,KMS 还支持多租户,使每个租户都能分配自己的 enclave,该 enclave 完全独立,与 KMS 集群上的所有其他 enclave 隔离。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codepen Three.js环境依赖配置

Codepen Three.js环境依赖配置 前言 如果想在CodePen环境写Three.js依赖的项目,环境搭建可以参考该Codepen项目: Chill the lion 详细 打开设置可以看到以下配置 更多项目参考 1. Chill the Lion Chill the Lion 是一个基于 ThreeJS 制作的 WebGL 示例。它由…

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…

大腾智能,基于云原生的国产工业协同平台

大腾智能是一家基于云原生的国产工业软件与数字化协同平台&#xff0c;专注于推动企业数字化转型与升级&#xff0c;为企业提供一系列专业、高效的云原生数字化软件及方案&#xff0c;推动产品设计、生产及营销展示的革新&#xff0c;实现可持续发展。 大腾智能旗下产品 3D模型…

美的集团员工自爆工资+年终奖收入明细,网友说:这待遇,老婆根本不让跳槽!...

发现需求&#xff1a;研究与实践是关键 在任何领域&#xff0c;只要深入研究&#xff0c;就会发现无数的需求。如果没有发现需求&#xff0c;那只能说明对行业的了解还不够透彻。学校通过考试发现学生的问题&#xff0c;职场上也一样&#xff0c;通过不断实践发现问题。理论知识…

XSS+CSRF组合拳

目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 &#xff08;案例中将使用cms靶场来进行演示&#xff09; 在实战中CSRF利用条件十分苛刻&#xff0c;因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

Adobe Premiere 视频编辑软件下载安装,pr 全系列资源分享!

Adobe Premiere以其强大的功能、灵活的操作和卓越的性能&#xff0c;成为视频编辑领域的佼佼者。 在剪辑方面&#xff0c;Adobe Premiere提供了强大而灵活的工具集。用户可以在直观的时间线上对视频进行精细的裁剪、剪辑和合并操作。无论是快速剪辑短片&#xff0c;还是精心打造…

我真是反感那些叉劈。

再转一下&#xff0c;想看的自己提取吧。

MyBatis 动态 SQL怎么使用?

引言&#xff1a;在现代的软件开发中&#xff0c;数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域&#xff0c;MyBatis 作为一款优秀的持久层框架&#xff0c;以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

前端也需要知道的一些常用linux命令

前端也需要知道的一些常用linux命令 1.问题背景2.连接工具&#xff08;SecureCRT_Portable&#xff09;a.下载工具b.连接服务器c.登录到root账户 3.基本命令a.cd命令和cd ..b.ll命令和ls命令c:cp命令d.rm命令e:rz命令f.unzip命令g.mv命令h.pwd命令&#xff08;这里没有用到&…

【CPP】交换排序:冒泡排序、快速排序

目录 1.冒泡排序简介代码分析 2.快速排序2.1霍尔版本简介代码分析 2.2挖坑版本2.3前后指针版本2.4非递归的快排思路代码 什么是交换排序&#xff1f; 基本思想&#xff1a;所谓 交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0…

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据…

竞赛选题 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

【STM32】STM32通过I2C实现温湿度采集与显示

目录 一、I2C总线通信协议 1.I2C通信特征 2.I2C总线协议 3.软件I2C和硬件I2C 二、stm32通过I2C实现温湿度&#xff08;AHT20&#xff09;采集 1.stm32cube配置 RCC配置&#xff1a; SYS配置&#xff1a; I2C1配置&#xff1a; USART1配置&#xff1a; GPIO配置&#…

day50 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列

1143. 最长公共子序列 提示 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删…

Excel 解析十六进制并查找

A1 格由多个人名及其考勤情况组成&#xff0c;比如&#xff0c;c 是十六进制的 1100&#xff0c;表示第 1、2 天到场&#xff0c;第 3、4 天缺席。目前只有 4 天的考勤。 AB1alice,c,bob,7,clara,a,mike,9/input: name and presence22/input: the day to be queried 要求根据…

【Linux】基础 I / O

目录 一、C文件操作函数&#xff1a; 二、输入 / 输出 / 错误流&#xff1a; 三、系统文件 I/O open函数&#xff1a; write&#xff1a; read&#xff1a; close&#xff1a; 具体应用&#xff1a; 四、文件描述符(fd): 1、概念&#xff1a; 2、文件管理&#xff1…

计算机网络 —— 网络字节序

网络字节序 1、网络字节序 (Network Byte Order)和本机转换 1、大端、小端字节序 “大端” 和” 小端” 表示多字节值的哪一端存储在该值的起始地址处&#xff1b;小端存储在起始地址处&#xff0c;即是小端字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节…

Pytorch深度解析:Transformer嵌入层源码逐行解读

前言 本部分博客需要先阅读博客&#xff1a; 《Transformer实现以及Pytorch源码解读&#xff08;一&#xff09;-数据输入篇》 作为知识储备。 Embedding使用方式 如下面的代码中所示&#xff0c;embedding一般是先实例化nn.Embedding(vocab_size, embedding_dim)。实例化的…

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景&#xff1a;解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻…