MinIO 密钥加密服务
本网站提供有关 MinIO 的密钥加密服务 (KES) 项目的信息。
文档包括
- 架构和配置指南
- 最佳实践
- 一般文档
为什么选择 KES
KES 是一种无状态且分布式的密钥管理系统,适用于高性能应用程序。KES 充当在 Kubernetes 上作为容器运行的现代应用程序与集中式密钥管理服务 (KMS) 之间的桥梁。默认情况下,我们设计 KES 使其简单、可扩展且安全。与其他服务相比,KES 提供了简化的配置选项,无需深入了解安全密钥管理或密码学原理。
如果您是 KES 的新手,您可能希望从以下页面开始
KES 访问控制
KES 使用双向 TLS 身份验证 (mTLS) 来执行对向 KES 服务器发出请求的客户端进行身份验证和授权。
身份验证
客户端和服务器都向其对等方展示其 x.509 证书和相应的私钥。如果客户端证书有效且经过身份验证,服务器才会接受连接
-
“有效”证书是指格式正确且当前有效(即未过期)。
使用 mTLS 进行身份验证还需要以下 扩展密钥用法 扩展名,用于客户端和服务器。
- 客户端身份验证 (
extendedKeyUsage = clientAuth
) - 服务器身份验证 (
extendedKeyUsage = serverAuth
)
- 客户端身份验证 (
-
“经过身份验证”的证书由受信任的证书颁发机构 (CA) 颁发。客户端和服务器都必须在其本地系统信任存储中包含对等方证书 CA。
您可以在测试或早期开发期间使用 kes server --auth
选项启动 KES 服务器,以执行使用不受信任或自签名证书的 mTLS。
MinIO 强烈建议在生产环境中仅允许使用受信任的证书。
授权
KES 使用基于策略的访问控制 (PBAC) 来确定给定客户端有权执行的操作。每个策略包含一个或多个身份,每个身份对应于 x.509 证书的 SHA-256 哈希值。服务器仅在以下情况为真时才允许客户端执行请求的操作
- KES 服务器上的策略包含客户端身份。
- 策略明确允许请求的操作。
如果 KES 服务器上不存在此类策略或策略没有明确允许请求的操作,则 KES 服务器会拒绝客户端的请求。
KES 策略
KES 使用基于策略的访问控制 (PBAC),其中策略描述了已验证客户端可以执行的操作。
以下 YAML
文档提供了一个 :kesconf:policy
部分的示例,该部分来自 KES 服务器配置文档。策略 minio-sse
包含支持 MinIO 服务器端加密的适当 :API 端点
policy:
minio-sse:
paths:
- /v1/key/create/*
- /v1/key/generate/*
- /v1/key/decrypt/*
- /v1/key/delete/*
identities:
- <SHA-256 HASH>
-
policy.policyname.paths
数组中的每个元素代表策略授予访问权限的API 端点
。 -
policy.policyname.identities
数组中的每个元素代表客户端提供的 x.509 证书的 SHA-256 哈希值。使用
kes identity of
命令计算客户端 x.509 证书的身份哈希值。
策略和身份之间存在一对多关系,其中一个策略可以包含多个身份。但是,给定的身份一次最多只能与一个策略关联。
KES 服务器提供了两种配置策略的方法
-
KES 配置文件 的
policy
部分列出了 KES 服务器的持久策略。 -
kes policy
命令支持为 KES 服务器创建短暂策略。kes identity
命令支持短暂修改与 KES 服务器上策略关联的身份。使用
kes policy
或kes identity
创建或修改的策略在重新启动 KES 服务器后会消失。
每个 KES 服务器都有自己的配置文件,它从中推导出所有持久策略。在分布式 KES 部署中,每个服务器都有自己的独立且不同的策略-身份集,该集基于其配置文件。这可能允许一个身份根据客户端连接的 KES 服务器的不同而关联到不同的策略。
在允许 KES 服务器包含不同的策略时要谨慎,因为这可能会导致服务器之间客户端加密行为不一致。MinIO 强烈建议在分布式 KES 部署中同步对配置文件的更改。
指南
教程
支持的 KMS 目标
- AWS Secrets Manager
- Azure KeyVault
- Entrust KeyControl
- Fortanix SDKMS
- Google Cloud Secret Manager
- Hashicorp Vault
- 本地文件系统
- Thales CipherTrust Manager(以前称为 Gemalto KeySecure)