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

news2024/11/26 15:41:14

在强大可靠的存储解决方案领域,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.coloradmin.cn/o/1833619.html

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

相关文章

vue音乐播放条

先看效果 再看代码 <template><div class"footer-player z-30 flex items-center p-2"><div v-if"isShow" class"h-12 w-60 overflow-hidden"><div :style"activeStyle" class"open-detail-control-wrap&…

《现代通信原理与技术》数字调制与解调(MSK调制)实验报告

摘 要&#xff1a; 本实验旨在研究数字调制中的最小频移键控&#xff08;MSK&#xff09;调制技术&#xff0c;并使用MATLAB软件对其进行模拟和实现。首先&#xff0c;我们介绍了MSK调制的原理和特点&#xff0c;以及其在数字通信系统中的应用。然后&#xff0c;我们使用MATLAB…

分布式光纤测温DTS使用的单模光纤与多模光纤有何区别?

分布式光纤测温DTS中使用的单模光纤和多模光纤之间存在着本质区别。单模光纤是一种在光纤通信中应用广泛的光纤类型&#xff0c;几乎所有的光纤入户和主干线通信都采用单模光纤。从通信的角度来看&#xff0c;单模光纤就好比一条单行道的高速铁路&#xff0c;而多模光纤则类似于…

微型操作系统内核源码详解系列五(2):cm3下栈的初始化

系列一&#xff1a;微型操作系统内核源码详解系列一&#xff1a;rtos内核源码概论篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列二&#xff1a;微型操作系统内核源码详解系列二&#xff1a;数据结构和对象篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列…

Flutter 实现软鼠标

文章目录 前言一、如何实现&#xff1f;1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时&#xff0c;有可能遇到drm鼠标无法使用的情况&#xff0c;但鼠标事件却可以正常接收&#xff0c;此时如果…

一季度直播6000场,同比增长60%,遥望科技透露重要信息

6月17日&#xff0c;经由深圳证券交易所许可&#xff0c;遥望科技&#xff08;股票代码&#xff1a;002291&#xff09;正式对《年报问询函》进行公开回复&#xff0c;就经营的多个维度做出解释和回应。 在回复中&#xff0c;遥望科技预测2024年毛利率为14.4%&#xff0c;相比…

MybatisPlus:高效便捷的Java持久层框架

一、MybatisPlus简介 MybatisPlus&#xff08;简称MP&#xff09;是一个流行的Java持久层框架&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生&#xff0c;旨在简化数据库操作和提高开发效率。MybatisPlus为开发者提供了一套方便的API和…

【Java开发规范】IDEA 设置 text file encoding 为 UTF-8,且文件的换行符使用 Unix 格式

1. IDEA 设置 text file encoding 为 UTF-8 file -> settings -> editor -> code style -> file encoding Transparent-native-to-asci conversion 要不要勾选&#xff1f;> 不推荐勾选&#xff08;它的作用是用来自动转换ASCII编码&#xff0c;防止文件乱码&am…

vue3的基本使用方法

【 vue3实例 】 【 0 】对象、方法和属性 对象&#xff08;Object&#xff09;&#xff1a; 对象是编程中的一个数据结构&#xff0c;它可以包含多种数据类型&#xff0c;包括数字、字符串、布尔值、数组、其他对象等。对象通常由一系列属性和方法组成。在面向对象编程&…

如何在纯内网环境下,将EasyCVR视频汇聚网关通过4G与第三方公网云平台级联?

EasyCVR视频汇聚网关是TSINGSEE青犀软硬一体的一款产品&#xff0c;可提供多协议的接入、音视频采集、处理&#xff0c;能实现海量前端设备的轻量化接入/转码/分发、视频直播、云端录像、云存储、检索回看、智能告警、平台级联等&#xff0c;兼容多种操作系统&#xff0c;轻松扩…

基于CentOS的全新Linux机器安装Jenkins并生成Allure报告

目录 一、安装Docker 二、安装Docker Compose 三、准备测试用例 四、配置docker-compose.yml 五、启动Jenkins 六、配置Jenkins和Allure插件 七、创建含pytest的Jenkins任务 一、安装Docker 在CentOS上&#xff0c;首先更新包管理工具并安装所需的包。 sudo yum update…

Python将字符串用特定字符分割并前面加序号

Python将字符串用特定字符分割并前面加序号 Python将字符串用特定字符分割并前面加序号&#xff0c;今天项目中就遇到&#xff0c;看着不难&#xff0c;得花点时间搞出来急用啊&#xff0c;在网上找了一圈&#xff0c;没发现有完整流程的文章。所以就搞出来并写了这个文章。仅…

02 - matlab m_map地学绘图工具基础函数 - m_proj

02 - matlab m_map地学绘图工具基础函数 - m_proj 0. 引言1. 查看所有投影方式3. 各投影方式绘图示例3.1 极射赤面投影法&#xff08;Stereographic &#xff09;3.2 Orthographic 正射投影示例3.3 Azimuthal Equal-area 方位等面积投影3.4 Azimuthal Equidistant 等距方位投影…

[C++][数据结构][哈希表]详细讲解

目录 1.哈希概念2.哈希冲突3.哈希函数4.哈希冲突解决5.闭散列1.何时扩容&#xff1f;如何扩容&#xff1f;2.线性探测3.二次探测 6.开散列(哈希桶)1.概念2.开散列增容3.开散列思考只能存储key为整形的元素&#xff0c;其他类型怎么解决&#xff1f;除留余数法&#xff0c;最好模…

新手如何入门Web3?

一、什么是Web3&#xff1f; Web3是指下一代互联网&#xff0c;它基于区块链技术&#xff0c;致力于将各种在线活动变得更加安全、透明和去中心化。Web3是一个广义的概念&#xff0c;涵盖了包括数字货币、去中心化应用、智能合约等在内的多个方面。它的主要特点包括去中心化、…

C++初学者指南第一步---5.介绍std::vector

C初学者指南第一步—5.介绍std::vector 目录 C初学者指南第一步---5.介绍std::vector1.初始化/访问2.添加元素3.Resizing调整大小4.在尾部删除元素5. 复制一直是深拷贝&#xff01; 注意std代表C标准库的命名空间&#xff0c;vector&#xff08;向量&#xff09;是标准库中的一…

Golang | Leetcode Golang题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; func findPeakElement(nums []int) int {n : len(nums)// 辅助函数&#xff0c;输入下标 i&#xff0c;返回 nums[i] 的值// 方便处理 nums[-1] 以及 nums[n] 的边界情况get : func(i int) int {if i -1 || i n {return math.MinInt64}re…

关于在word中使用Axmath的报错的解决

介绍 Axmath是数学公式编辑器软件。官网如下。 AxMath/AxGlyph/AxCells (amyxun.com) 支持正版。 在word中使用Axmath 点击word中的“文件”→“选项”。 选择“加载项” 选择“word加载项” 在Axmath默认的安装目录如下&#xff1a; C:\Program Files (x86)\AxMathhao&am…

GPTZero:引领AI内容检测

随着人工智能技术的飞速发展,AI生成内容(AIGC)正在迅速改变我们获取和消费信息的方式。然而,AIGC的激增也带来了一系列挑战,尤其是在内容真实性和版权方面。正是在这样的背景下,一家由00后团队创立的公司——GPTZero,以其独特的AI检测工具,迅速崛起为行业的领军者。 一…

AWS Lambda + Flask 应用示例

前言 AWS Lambda 本身是一个以事件驱动的 Serverless 服务, 最简单的应用就是在入口函数中对接收到的事件/请求进行处理并返回响应. 对于像 Flask 这样的 Web 框架, 并不能直接在 Lambda 上提供服务, 不过我们可以借助 AWS Lambda Web Adapter 实现一个基于 Flask 框架的 Web …