在对象存储的世界中,强大的加密只是为了获得一席之地。 MinIO 通过最高级别的加密以及广泛的优化提供更多功能,这些优化几乎消除了通常与存储加密操作相关的开销。
MinIO 在存储在磁盘上和通过网络传输时对数据进行加密。 MinIO 最先进的加密方案支持使用现代行业标准加密算法(例如 AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC)进行粒度对象级加密。 MinIO 与 S3 加密语义完全兼容,还通过包括对非 AWS 密钥管理服务(例如 Hashicorp Vault、Gemalto KeySecure 和 Google Secrets Manager)的支持来扩展 S3。
当数据在对象存储和应用程序之间传输时,它可能会在任意数量的未知和/或不受信任的网络之间反弹。 在数据通过网络传输时对其进行加密(也称为“线上”)成功地减轻了中间人攻击并确保数据无论采用何种路由都保持安全。
MinIO 支持集群中所有组件之间的传输层安全性 (TLS) v1.2+。 这种方法确保在集群间或集群内加密流量中没有薄弱环节。 TLS 是一个无处不在的加密框架:它将 s
放入 https
中,并且与银行、e- 商业网站和其他依赖数据存储加密的企业级系统。
MinIO 的 TLS 实现在 CPU 指令级别进行了优化,性能开销可以忽略不计。 它只需要为集群中的每个 MinIO 服务器指定一个 TLS 私钥和公共证书。 对于 Kubernetes 环境,MinIO Kubernetes Operator 集成/自动 TLS 证书生成和分配作为租户部署过程的一部分。 MinIO 支持多个 TLS 证书,每个证书对应一个特定的域名。 MinIO 使用服务器名称指示 (SNI) 来确定为任何给定请求提供哪个证书。
存储在磁盘上的数据完全依赖于磁盘的安全性,并通过扩展主机系统来保证数据的安全。 MinIO 服务器端对象加密会在数据存储到磁盘之前自动加密数据(静态加密)。 这种方法保证没有数据未加密地写入磁盘。 此基线安全层可确保静态数据的机密性、完整性和真实性。 MinIO 支持客户端驱动和自动存储桶默认对象加密,以实现数据加密的最大灵活性。
MinIO 服务器端加密与 Amazon AWS-S3 语义 (SSE-S3) 兼容。 MinIO 扩展了对 AWS KMS 的基准支持,以包括常见的企业 KMS 系统,例如 Hashicorp Vault 和 Thales Ciphertrust(以前称为 Gemalto KeySecure)。 MinIO 还支持客户端驱动的加密 (SSE-C),其中应用程序可以指定用于加密对象的数据密钥。 对于 SSE-S3 和 SSE-C,MinIO 服务器执行所有加密操作,包括密钥轮换和对象的重新加密。
通过自动服务器端加密,MinIO 使用唯一密钥加密每个对象,并使用即时加密密钥和从外部 KMS 或客户端派生的密钥应用多层附加加密 -提供的密钥。 这种安全而复杂的方法发生在 MinIO 中,无需处理多个独立的内核和用户空间加密实用程序。
MinIO 使用身份验证加密方案 (AEAD) 在对象存储写入或读取时加密/解密对象。 MinIO AEAD 加密支持 AES-256-GCM 和 ChaCha20-Poly1305 等行业标准加密协议来保护对象数据。 MinIO 的 CPU 级优化(例如 SIMD 加速)可确保加密/解密操作的性能开销可以忽略不计。 组织可以随时运行自动存储桶级加密,而不是被迫做出次优的安全选择。
MinIO 提供了一个内置的密钥加密选项。 MinIO 的密钥加密服务 (KES) 是一种用于高性能应用程序的无状态分布式密钥管理系统。 它旨在在 Kubernetes 内部运行并将加密密钥分发给应用程序。 KES 是 MinIO 服务器端对象加密 (SSE-S3) 的必需组件。
KES 支持 MinIO 集群上的加密操作,是确保可扩展和高性能加密操作的关键机制。 KES 作为 MinIO 集群和外部 KMS 之间的中介,根据需要生成加密密钥并执行加密操作,不受 KMS 的限制。 因此,仍然有一个中央 KMS 保护主密钥并充当基础架构中的信任根。 KES 无需为每组应用程序启动 KMS,从而简化了部署和管理。 相反,应用程序可以从 KES 服务器请求数据加密密钥 (DEK),或要求 KES 服务器解密加密的 DEK。
由于 KES 服务器是完全无状态的,因此可以自动缩放,例如通过 Kubernetes 水平自动缩放器。 同时,中央 KMS 的负载不会显着增加,因为 KES 独立处理绝大多数应用程序请求。
对于 Kubernetes 环境,MinIO Kubernetes Operator 支持为每个租户部署和配置 KES,将 SSE-S3 作为每个租户部署的一部分。