面向内部和外部应用的安全多租户对象存储
常见的云原生架构是将数据存储在对象存储中,例如 MinIO,并使其可供各种内部和外部应用程序使用。数据在跨网络(尤其是不可信的外部网络)传输时,必须受到保护,防止被查看和篡改。对此的标准是使用传输层安全 (TLS) v1.2+ 进行加密。MinIO Operator 提供在租户部署过程中生成和分配 TLS 证书的功能。MinIO 支持为每个租户使用多个 TLS 证书,其中每个证书对应一个特定的域名。MinIO 使用服务器名称指示 (SNI) 为给定请求提供正确的证书。
从一开始,MinIO 就包含了加密功能,以保护静止状态和传输过程中的数据。当传输敏感数据(例如 STS 凭证、密码或对象本身)时,您可以放心,它们将以机密且安全的方式传递到 MinIO。
在这篇文章中,您将了解如何:
- 安装 MinIO Operator
- 部署 MinIO 租户
- 将外部 TLS 证书添加到租户
- 使用不同的域访问 MinIO 租户(SNI 支持)
安装 MinIO Operator
在您的 Kubernetes 集群中,通过 krew 安装MinIO Operator
或者,您也可以手动安装操作员
登录到操作员
如果您通过 krew 安装了操作员,则运行
复制 JWT(JSON Web 令牌),打开浏览器并访问https://:9090
如果您手动安装了操作员,则需要使用kubectl port-foward
命令公开操作员服务,然后手动提取身份验证令牌
将 JWT 复制到登录表单,然后按登录。
部署新的 MinIO 租户
在我们开始之前,让我们花点时间描述一下我们的整体解决方案。假设您有以下要求
要实现这一点,您需要在 Kubernetes 集群中部署一个 MinIO 租户,该租户可供内部和外部客户端访问,不仅如此,他们将使用不同的域。让我们来做吧。
在您的浏览器中,在 MinIO Operator 中,单击创建租户按钮。您将看到以下屏幕。
您可以使用名称、命名空间、容量、节点数量等详细信息配置租户。您可以探索包含其他选项以调整租户的子菜单。单击安全菜单。
在安全菜单中,您可以看到 MinIO Operator 将自动生成证书以保护节点间通信,但您的内部和外部域证书怎么办呢?
单击自定义证书,您将看到其他选项以上传您自己的证书。这些通常是 public.crt 和 private.key 文件。
您可以根据需要上传尽可能多的证书密钥对 - 并且由于 SNI 支持,MinIO 将知道为每个客户端返回的正确证书。
准备好后,单击创建。
几分钟后,您的租户将上线。返回到安全选项卡,您将看到您的自定义证书已配置。从这个屏幕,您可以添加额外的证书,并在需要时删除或轮换现有证书。

现在您需要公开您的 Kubernetes 服务。使用您喜欢的方法:NodePort、LoadBalancer 或 Ingress 控制器。作为参考,我们有一个关于使用NGINX 与 MinIO的教程。
验证 TLS 证书
租户公开给内部和外部客户端后,使用openssl
验证SNI
是否正常工作非常容易
复制编码后的证书并访问https://www.sslchecker.com/certdecoder以确认您的域是否正确。您可以使用openssl x509 -text -in 文件名
通过 openssl 解码证书。
重要注意事项
为 MinIO 租户配置多个证书(例如内部证书和外部证书)可能看起来很繁琐,但其带来的好处远远超过了付出的努力。 当证书过期时,您需要轮换两个证书而不是一个。但是,从安全角度来看,最好将您的内部和外部域证书分开,因为它们的信息是公开的,您已经看到了它们是多么容易被解码!
TLS 证书对于攻击者在计划和执行侦察时来说是一个很好的信息来源。它们包含的信息可能会泄露您内部基础设施的详细信息。在设计多租户证书策略时,需要仔细计划,才能在安全性与功能之间找到平衡。
结论
MinIO 在将数据存储到磁盘上和传输过程中对其进行加密。CPU 指令级优化使加密和解密能够以微不足道的性能开销进行。MinIO 客户利用安全的多个租户 Kubernetes 部署,为云原生应用程序(如数据湖分析和流式 AI/ML 程序)提供与 S3 兼容的对象存储。多租户提高了硬件效率,降低了成本。MinIO 单独保护每个租户,并对保存在驱动器上的数据和通过网络传输的数据进行加密。MinIO 与 S3 加密语义完全兼容,因此您可以确信您的应用程序将无缝安全地运行。MinIO 还支持其他密钥管理服务,例如 Hashicorp Vault 和 Gemalto KeySecure。
如果您有任何疑问,请发送邮件至 hello@min.io 或加入 Slack 社区。