网络加密(TLS)
MinIO支持传输层安全性(TLS)1.2+加密的进出流量。
SSL已废弃
TLS是安全套接字层(SSL)加密的后继者。 自2018年6月30日起,SSL已完全被废弃,详见 已弃用公告 。
启用 TLS
对于具有有效 集群签名证书, MinIO Kubernetes Operator 可以在部署或修改 MinIO 租户时自动生成 TLS 证书,前提是 Kubernetes 集群具有有效的,请查看 k8s 布署安全文档 或者 修改相关安全设置的文档 TLS 证书生成过程如下:
该运算符将为租户生成与之关联的证书签名请求 (CSR)。 CSR 包括适合于租户服务和 Pod 的正确 DNS 主题备用名称 (SAN)。
然后,该运算符会等待 CSR CSR () 被批准。
CSR 等待审批,如果正确配置,
Kubernetes TLS API可以自动批准 CSR 否则,集群管理员必须在Kubernetes生成必要的证书之前手动批准 CSR 。
运营商将生成的TLS证书应用于租户中的每个MinIO Pod。
Kubernetes TLS API 使用 Kubernetes 集群的证书颁发机构(CA)签名算法来生成新的 TLS 证书。 请查看 支持的 TLS 密码套件 ,了解 MinIO 支持的完整 TLS 密钥套件列表和推荐的签名算法。
默认情况下,Kubernetes会在每个Pod上放置一个证书 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
.
这个CA包应当包含用来签署MinIO租户TLS证书的集群或根CA。
Kubernetes 集群中部署的其他应用程序可以信任此集群证书,使用 MinIO 服务 DNS 名称 (例如 https://minio.minio-tenant-1.svc.cluster-domain.example:443
) 连接到 MinIO 租户。
主题备用名称证书
如果你有一个定制的主题备用名称 (SAN) 证书,且该证书不是通配符证书,那么 TLS 证书 SAN 必须 适用于其父节点的主机名。 如果没有通配符,则必须精确匹配 SAN 才能连接到租户。
使用 cert-manager 进行证书管理
MinIO 操作员支持使用 cert-manager 完全替代其内置的自动证书管理 或 用户驱动的手动证书管理。 有关使用 cert-manager 部署 MinIO 操作员和租户的说明,请参阅 cert-manager 页面 。
MinIO 服务器会搜索每个节点的 TLS 密钥和证书,并使用这些凭据启用 TLS。 搜索位置取决于您的 MinIO 配置:
默认情况下,MinIO 服务器在以下目录中查找每个节点的 TLS 密钥和证书:
${HOME}/.minio/certs其中
${HOME}
是运行 MinIO Server 进程的用户的 home 目录。 如果${HOME}/.minio/certs
目录不存在,您可能需要创建它。对于由
systemd
管理的部署,这必须对应于运行 MinIO 进程的USER
。 如果该用户没有 home 目录,请使用 Custom Path 选项代替。您可以使用
minio server --certs-dir
或-S
参数为 MinIO 服务器指定一个搜索证书的路径。例如,以下命令片段指导 MinIO 进程使用
/opt/minio/certs
目录获取 TLS 证书。minio server --certs-dir /opt/minio/certs ...运行 MinIO 服务的用户 必须 具有读取和写入此目录的权限。
将默认域(例如
minio.example.net
)的 TLS 证书放在/certs
目录中,私钥命名为private.key
, 公证书命名为public.crt
。例如:
/path/to/certs private.key public.crt您可以使用 MinIO 的 certgen 工具来生成自签名的证书,以便在启用了 TLS 的情况下评估 MinIO。 例如,以下命令生成一个自签名的证书,其中包含与 MinIO 服务器主机相关的一组 IP 和 DNS 主机名(SANs):
certgen -host "localhost,minio-*.example.net"将生成的
public.crt
和private.key
文件放置到/path/to/certs
目录中,以启用 MinIO 部署的 TLS 功能。 应用程序可以使用public.crt
作为受信任的证书颁发机构,以允许连接到MinIO部署,而无需禁用证书验证。如果您正在重新配置一个之前未启用TLS的现有部署,请更新环境变量
MINIO_VOLUMES
,将其指定为https
而不是http
。 您可能还需要更新应用程序或客户端使用的URL。
Supported Secret Types
MinIO 支持在 Kubernetes 中使用三种类型的 secrets:
opaque
使用
private.key
和public.crt
文件。
tls
使用
tls.key
和tls.crt
文件.cert-manager 1.7.x 更高版本
在 Kubernetes 1.21 或更高版本上运行。
备注
为了获得最佳的 tls 或 cert-manager 秘密支持,请升级到 Operator 版本 5.0.10 或更高版本。
基于多个域的 TLS 证书
MinIO Operator 支持在 部署 或 修改 MinIO 租户时附加用户指定的 TLS 证书。
这些自定义证书支持 服务器名称指示 (SNI),其中 MinIO 服务器根据连接客户端指定的主机名来确定使用哪个证书。 例如,您可以生成由您组织偏好的证书颁发机构(CA)签名的证书,并将这些证书附加到 MinIO 租户上。 信任该证书颁发机构 CA 的应用程序可以连接到 MinIO 租户,并完全验证租户的 TLS 证书。
支持的 TLS 密码套件
MinIO 建议生成 ECDSA(例如 NIST P-256 曲线)或 EdDSA(例如 Curve25519)TLS 私钥/证书,因为与 RSA 相比,它们的计算要求较低。
MinIO 支持 Go语言。 这些列表用星形填充图标标记推荐的算法:
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
第三方证书颁发机构
MinIO Kubernetes Operator 可以在 部署 或 修改 MinIO 租户时自动附加第三方证书颁发机构。
您可以在任何时候为租户添加、更新或删除证书颁发机构(CA)。 您必须重新启动 MinIO 租户,以便对配置的证书颁发机构(CA)所做的更改生效。
Operator将指定的证书颁发机构(CA)放置在每个 MinIO 服务器 Pod 上,以便所有 Pod 都有一组一致的受信任的 CA。
如果 MinIO 服务器无法将传入客户端的 TLS 证书发行者与任何可用的证书颁发机构(CA)进行匹配,服务器将拒绝该连接,认为其无效。
自签名、内部、私有证书以及带有中级证书的公共证书颁发机构(CAs)
如果正在部署使用非全局或非公共证书颁发机构发行的证书的 MinIO 租户, 或者 使用需要使用中级证书的全局证书颁发机构,那么您必须将这些证书颁发机构提供给操作员,以确保它可以信任这些证书。
如果操作员使用的是未受信任的证书部署租户,它可能会记录与 TLS 证书验证相关的警告。
以下步骤将包含证书颁发机构 public.crt
的密钥附加到 MinIO 操作员。
您可以在单个证书中指定多个证书颁发机构,只要保持 BEGIN
和 END
分隔符不变。
创建
operator-ca-tls
密钥以下内容在 MinIO Operator 命名空间中创建一个 Kubernetes 密钥 (
minio-operator
).kubectl create secret generic operator-ca-tls \ --from-file=public.crt -n minio-operator
public.crt
文件必须对应于包含一个或多个 CA 定义的有效 TLS 证书。重启Operator
一旦创建,您必须重新启动操作员以加载新的证书颁发机构:
kubectl rollout restart deployments.apps/minio-operator -n minio-operator