用于内部和外部应用程序的安全多租户对象存储

用于内部和外部应用程序的安全多租户对象存储

一种常见的云原生架构是将数据存储在对象存储中,例如 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

kubectl krew install minio

Kubectl minio init


或者,您也可以手动安装操作员:

kubectl apply -k github.com/minio/operator/\?ref\=v4.4.13

登录运营商

如果你通过 krew 安装了 operator,那么运行:

kubectl minio proxy

复制 JWT(JSON Web 令牌),打开浏览器并转到http://localhost:9090

如果你手动安装了 Operator,那么你需要使用kubectl port-foward命令暴露 Operator 服务,然后手动提取身份验证令牌:

kubectl port-forward svc/console -n minio-operator 9090

kubectl -n minio-operator  get secret $(kubectl -n minio-operator get serviceaccount console-sa -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

将 JWT 复制到登录表单,然后按登录。


operator-login.png


部署一个新的 MinIO 租户

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


MinIO SNI support.png


为此,您需要在 Kubernetes 集群内部署一个 MinIO 租户,内部和外部客户端都可以访问该租户,不仅如此,它们还将使用不同的域。我们开始做吧。

在浏览器的 MinIO Operator 中,单击创建租户按钮。您将看到以下屏幕。


create-tenant (1).png


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


security-menu.png


在 Security 菜单中,您可以看到 MinIO Operator 会自动生成证书以保护节点间通信,但是您的内部和外部域证书呢?

单击自定义证书,您将看到用于上传您自己的证书的其他选项。这些通常是 public.crt 和 private.key 文件。

您可以根据需要上传任意数量的证书密钥对 - 由于 SNI 支持,MinIO 将知道为每个客户端返回的正确证书。


custom-certificates.png


准备就绪后,单击“创建”。

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


redacted-certs-1.png


现在您需要公开您的 Kubernetes 服务。使用您的首选方法:NodePort、LoadBalancer 或 Ingress 控制器。作为参考,我们有一个关于使用NGINX 和 MinIO 的教程

验证 TLS 证书

一旦租户暴露给内部和外部客户,就可以很容易地  SNI使用以下方法验证它是否正常工作openssl

$ openssl s_client -connect external.corporate.domain.com:9000 -showcerts
...
...
-----BEGIN CERTIFICATE-----

MIIERTCCAq2gAwIBAgIRAOYlnnAjbFXVPszN+sup5qcwDQYJKoZIhvcNAQELBQAw

dzEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMSYwJAYDVQQLDB1hbGV2

c2tAYWVyaXRoIChMZW5pbiBBbGV2c2tpKTEtMCsGA1UEAwwkbWtjZXJ0IGFsZXZz

a0BhZXJpdGggKExlbmluIEFsZXZza2kpMB4XDTIyMDMyOTAzNTA1NloXDTI0MDYy

OTAzNTA1NlowUTEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmlj

YXRlMSYwJAYDVQQLDB1hbGV2c2tAYWVyaXRoIChMZW5pbiBBbGV2c2tpKTCCASIw

DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+tUEbdvMXK5u+G6TRFVSJFKBVd

m16c9ISah7K+zXTgWDjMCVRJyI7EAcTM5S/pcEMbhKq78aEG6rky7oWmuU/d5RmZ

4kY2r02lH1QlmpIpxSoeRdg49dHBnKb/bVw6yLUODrmJmAZHIccgo8dHRN2fyaVO

KTABFDWRe5ySWIwjh1316Zh1STpRxAZZF7itA800VMcSTRgYvR2+l73FwVe71zhc

51lheYzyZc6Q9KPWraN/dzvjnakRJ+zo6LUDHoYRuxXSH4LcZUJHF8MJmQF9b29i

rCQWNkJNAFdgE9CwMh6E36Xs9L8+g/h5mrZXywbTymCv13BBCPwlpDWriqkCAwEA

AaNyMHAwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1Ud

IwQYMBaAFGcBDY05hBWXbpbB/B7ecLxUqB9EMCgGA1UdEQQhMB+CHWV4dGVybmFs

LmNvcnBvcmF0ZS5kb21haW4uY29tMA0GCSqGSIb3DQEBCwUAA4IBgQBf3CnBkPPZ

G8jSfWBcnvMx/MZ2rQe+k3HlEkspX6eUH2H0pUI7b0FzLOuV0n4eRYQ8o8MeeStq

jYG6qS9YI38+YpZ49U28+ZUJ286VOSSWvjgzug1DzTUmuHN2rXVYpIqHXlECE54g

hsLaLOBlbtQLJzeuECb3N2YRtqTDD19wvIPYjYuwL+kHsj2x2BhJXIHtporxrouo

AD1CxxTjGtIlYb5E4vKHTAjNud6ODn637m09DXMheJIpcY1WmY9Ke3FxRwZOAai5

zv2ZutMpuCpMfSYqZtWYcYEbYhs5r5yuDMVWaiI5NngVpOd7OghZ9kmi7fbwbhdC

eK2TeTyaXvb+tsghf+L9WCpRbNjLR6q3JKip0GHxPq0hB0YpZV6olaWm/DiTs7S3

ry76rhguoZsfzeGTpaIvQd0G/akBcNKWjDTAlUyevoi9HYRviGSWAaNGW8yn+NMl

PDZH6VbrDcY0dlZkVTlHt4mel3q1GhgXlGM5go5un8K8bh8afUFEwL8=

-----END CERTIFICATE-----



$ openssl s_client -connect internal.corporate.domain.com:9000 -showcerts
...
...
-----BEGIN CERTIFICATE-----

MIIERDCCAqygAwIBAgIQJhMrQ72DRT0tnW5PQupkWTANBgkqhkiG9w0BAQsFADB3

MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExJjAkBgNVBAsMHWFsZXZz

a0BhZXJpdGggKExlbmluIEFsZXZza2kpMS0wKwYDVQQDDCRta2NlcnQgYWxldnNr

QGFlcml0aCAoTGVuaW4gQWxldnNraSkwHhcNMjIwMzI5MDM1MTA2WhcNMjQwNjI5

MDM1MTA2WjBRMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNh

dGUxJjAkBgNVBAsMHWFsZXZza0BhZXJpdGggKExlbmluIEFsZXZza2kpMIIBIjAN

BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwN0GRTnYyxi3mzFDFBUaYt56tVe4

J6DBzKj99IxJualzvu81rnoHoyZVj5NCxTKTko/rfG6Bcz5dyCSQJ8tZJnhNOHwk

v40i0xs+x41AE2v5P4tAD4ouiBceDQvUbilEM6gfQANXTLb3p1HzIVKzxaqWWn5V

xumPWlnhnPBnt4HosKW5ett4w2+hG4X4w5sE23VLkIceQjCjI4Ym+tzXSjf81Uxk

j7cj4dyEdZnnesQehS0DRhiBOsQz+pl0SMzVYby1Jlk1utpwz5XkQLQ96CfRLvn/

X0RxgnmL/pbqAYrN8WuFwn02e1bluL/vkTew8X8YldGm2lDRlNGiTnX1HQIDAQAB

o3IwcDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0j

BBgwFoAUZwENjTmEFZdulsH8Ht5wvFSoH0QwKAYDVR0RBCEwH4IdaW50ZXJuYWwu

Y29ycG9yYXRlLmRvbWFpbi5jb20wDQYJKoZIhvcNAQELBQADggGBAFotl1RzbHhH

359vl2eMkYztnsx+L0BxfXeS+5nPInMQBC0/iCo2ZH3GZHTLFjR4QwtdbDYlXwm0

vbNFBWdwTkzn3EP4wsbID2Xd6LbWsU5gHv1ErUARZhI21+cUWiInn0hSU4DSWY3v

EPbdYg2eAZNUBVvnsAMDJDjGz0xS5qh7rtqBQcb3mC5Svc1+qDZPmtDtdSDc28rW

Pp0K+eV0oGHliKVhpCgk0NBRbYy4vUqt+NFP3s3FjRwKWl2Jybz4MUT0B4wO5sko

GdXabKrlogtAU6Gz5Q0puoMCi0Tm8mTjxWO8r4ATWy3Twpqeok4VaPLyxi2Rcnv6

mGNwPH0dwrIbGubMzfmu6pkaAv0uIyULzPE6NfjJN06XnmbKwbnvHpzwz7np4C0q

VGb9n6vxNoWdxI3Cyt+4qwM8s+4wCjg8eQEie3wr9mVWn2KP2cdUZ6QMaPnUmXUf

f2p1yUTjVkYonxQRygsiyw1woloPrYfXcyIfKIekXdrFWoyLIsdHJQ==

-----END CERTIFICATE-----




复制编码证书并转到https://www.sslchecker.com/certdecoder以确认您的域是正确的。您可以使用 openssl 解码证书openssl x509 -text -in filename


sslchecker-external.png
sslchecker-internal.png


重要笔记

为 MinIO 租户配置多个证书,例如内部和外部,可能看起来很麻烦,但付出的努力远远超过收益。当证书过期时,您将不得不轮换两个证书而不是一个。然而,从安全的角度来看,最好将您的内部和外部域证书分开,因为它们上的信息是公开的,而且您刚刚看到它们是多么容易解码!

在计划和执行侦察时,TLS 证书是攻击者的良好信息来源。它们包含的信息可能会泄露您的内部基础设施的详细信息。在设计多租户证书策略时,您需要仔细规划以在安全性和功能性之间找到适当的平衡。

结论

MinIO 对存储在磁盘上和传输中的数据进行加密。CPU 指令级优化使加密和解密能够以可忽略的性能开销进行。MinIO 客户利用安全的多租户 Kubernetes 部署,使 S3 兼容对象存储可用于云原生应用程序,用于数据湖分析和流式 AI/ML 等程序。多租户提高了硬件效率并降低了成本。MinIO 分别保护每个租户,并对保存在驱动器上和通过网络传输的数据进行加密。MinIO 与 S3 加密语义完全兼容,因此您知道您的应用程序将无缝且安全地运行。MinIO 包括对其他密钥管理服务的支持,例如 Hashicorp Vault 和 Gemalto KeySecure。

如果您有任何疑问,请通过 sales@minio.org.cn联系我们或加入Slack 社区


上一篇 下一篇