用于内部和外部应用程序的安全多租户对象存储
一种常见的云原生架构是将数据存储在对象存储中,例如 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 安装了 operator,那么运行:
复制 JWT(JSON Web 令牌),打开浏览器并转到http://localhost:9090
如果你手动安装了 Operator,那么你需要使用kubectl port-foward命令暴露 Operator 服务,然后手动提取身份验证令牌:
将 JWT 复制到登录表单,然后按登录。

部署一个新的 MinIO 租户
在我们开始之前,让我们花点时间描述一下我们的整体解决方案。假设您有以下需求:

为此,您需要在 Kubernetes 集群内部署一个 MinIO 租户,内部和外部客户端都可以访问该租户,不仅如此,它们还将使用不同的域。我们开始做吧。
在浏览器的 MinIO Operator 中,单击创建租户按钮。您将看到以下屏幕。

您可以使用名称、命名空间、容量、节点数等详细信息配置您的租户。您可以浏览包含其他选项的子菜单来调整您的租户。单击安全菜单。

在 Security 菜单中,您可以看到 MinIO Operator 会自动生成证书以保护节点间通信,但是您的内部和外部域证书呢?
单击自定义证书,您将看到用于上传您自己的证书的其他选项。这些通常是 public.crt 和 private.key 文件。
您可以根据需要上传任意数量的证书密钥对 - 由于 SNI 支持,MinIO 将知道为每个客户端返回的正确证书。

准备就绪后,单击“创建”。
几分钟后,您的租户将在线。返回到“安全”选项卡,您将看到您的自定义证书已配置。在此屏幕中,您可以添加其他证书并根据需要删除或轮换现有证书。

现在您需要公开您的 Kubernetes 服务。使用您的首选方法:NodePort、LoadBalancer 或 Ingress 控制器。作为参考,我们有一个关于使用NGINX 和 MinIO 的教程。
验证 TLS 证书
一旦租户暴露给内部和外部客户,就可以很容易地 SNI使用以下方法验证它是否正常工作openssl:
复制编码证书并转到https://www.sslchecker.com/certdecoder以确认您的域是正确的。您可以使用 openssl 解码证书。openssl x509 -text -in filename


重要笔记
为 MinIO 租户配置多个证书,例如内部和外部,可能看起来很麻烦,但付出的努力远远超过收益。当证书过期时,您将不得不轮换两个证书而不是一个。然而,从安全的角度来看,最好将您的内部和外部域证书分开,因为它们上的信息是公开的,而且您刚刚看到它们是多么容易解码!
在计划和执行侦察时,TLS 证书是攻击者的良好信息来源。它们包含的信息可能会泄露您的内部基础设施的详细信息。在设计多租户证书策略时,您需要仔细规划以在安全性和功能性之间找到适当的平衡。
结论
MinIO 对存储在磁盘上和传输中的数据进行加密。CPU 指令级优化使加密和解密能够以可忽略的性能开销进行。MinIO 客户利用安全的多租户 Kubernetes 部署,使 S3 兼容对象存储可用于云原生应用程序,用于数据湖分析和流式 AI/ML 等程序。多租户提高了硬件效率并降低了成本。MinIO 分别保护每个租户,并对保存在驱动器上和通过网络传输的数据进行加密。MinIO 与 S3 加密语义完全兼容,因此您知道您的应用程序将无缝且安全地运行。MinIO 包括对其他密钥管理服务的支持,例如 Hashicorp Vault 和 Gemalto KeySecure。
如果您有任何疑问,请通过 sales@minio.org.cn联系我们或加入Slack 社区。