使用 KES 进行服务端对象加密
此过程假设您可以访问已安装并激活 MinIO Operator 的 Kubernetes 集群。 有关运行 KES 的说明,请参阅KES docs.
在此过程中,您将:
创建或修改支持以下功能的 MinIO 部署:SSE使用KES推迟到部署分布式 MinIO有关生产就绪 MinIO 部署的指导教程。
使用 MinIO Operator Console 创建或管理 MinIO 租户。
访问加密该租户的设置并进行配置SSE使用一个支持的密钥管理系统.
创建一个新的EK用于SSE.
配置自动存储桶默认值SSE-KMS.
此程序提供了部署 MinIO 的指导,该 MinIO 配置为使用 KES 并启用服务器端加密有关运行 KES 的说明,请参阅KES docs.
在此过程中,您将:
创建一个新的EK用于SSE.
创建或修改支持以下功能的 MinIO 部署:SSE使用KES推迟到部署分布式 MinIO有关生产就绪 MinIO 部署的指导教程。
配置自动存储桶默认值SSE-KMS
重要
启用SSE在 MinIO 部署中自动使用默认加密密钥对该部署的后端数据进行加密。
MinIO需要访问 KES 和外部 KMS 以解密后端并正常启动。
KMS必须维护并提供对...的访问权限MINIO_KMS_KES_KEY_NAME您之后无法禁用 KES 或"撤销"该操作SSE稍后进行配置。
前提条件
访问 MinIO 集群
确保 KES 能够访问受支持的 KMS 目标
此过程假设存在支持的 KMS 安装可从 Kubernetes 集群访问。
对于在与 MinIO 租户相同的 Kubernetes 集群内部署的情况,您可以使用 Kubernetes 服务名称来允许 MinIO 租户建立与目标 KMS 服务的连接。
对于部署在 Kubernetes 集群外部的服务,必须确保集群支持 Kubernetes 服务、Pod 与外部网络之间的通信路由。 这可能需要配置或部署额外的 Kubernetes 网络组件,和/或启用对公共互联网的访问。
请参考所选 KMS 解决方案的文档,以获取部署和配置的指导。
此过程假设已存在连接到受支持系统的KES安装KMS安装可访问,都可以从本地主机访问。 请参考您的安装说明支持的 KMS 目标部署 KES 并将其连接到 KMS 解决方案。
KES 操作需要未密封的目标
一些受支持的KMStargets 允许您密封或解封保险库实例。 如果配置的KES返回错误KMS服务已密封。
如果您重启或以其他方式密封您的保险库实例,KES将无法对保险库执行任何加密操作。 您必须解封保险库以确保正常操作。
请参阅您所选产品的文档KMS有关是否需要解封的更多信息,请参阅解决方案。
参考配置说明中的KES documentation对于您选择的支持KMS:
过程
此过程提供了使用您选择的服务器端加密进行配置和启用的说明。支持的 KMS 解决方案在生产环境中。 具体来说,此过程假设以下条件:
一个现有的生产级KMS目标
一个或多个连接到 KMS 目标的 KES 服务器
一个或多个用于新部署或现有 MinIO 部署的主机
审阅租户 CRD
Review theTenant CRD
TenantSpec.kes对象,该TenantSpec.configurationobject, and theKES配置参考.在继续操作之前,您必须准备好与所选外部密钥管理服务相关的所有必要配置。
创建或修改您的租户 YAML 以设置以下值:
KesConfig根据需要:您必须修改您的 Tenant YAML 或
Kustomize模板以反映必要的 KES 配置。 以下示例取自MinIO Operator Kustomize 示例kes: image: "" # minio/kes:2024-06-17T15-47-05Z env: [ ] replicas: 2 kesSecret: name: kes-configuration imagePullPolicy: "IfNotPresent"
The
kes-configurationsecret 必须引用一个包含以下内容的 Kubernetes Opaque Secret:stringData具有完整 KES 配置的对象server-config.yaml.keystorefield 必须包含与您首选密钥管理系统相关的完整配置。参考Kustomize 示例如需更多指导。
创建或修改您的租户 YAML 以设置以下值:
TenantSpec.configuration根据需要。TODO
生成新的加密密钥
创建密钥前先解封 Vault
如果您的提供商有要求,在创建新的加密密钥之前必须解封后备存储库实例。 有关更多信息,请参阅您所选 KMS 解决方案的文档。
MinIO 要求EK对于给定的存储桶或对象,根 KMS 上存在之前执行SSE使用该密钥的操作。 您可以使用
mc admin kms key create针对 MinIO Tenant 的命令。在使用前,必须确保您的本地主机能够访问 MinIO 租户 Pod 和服务
mc管理租户。 对于 Kubernetes 集群内部的主机,您可以使用服务 DNS 名称对于 Kubernetes 集群外部的主机,请指定通过 Ingress、负载均衡器或类似 Kubernetes 网络控制组件暴露的服务主机名。在单独的终端或 Shell 中运行此命令:
# Replace '-n minio' with the namespace of the MinIO deployment # If you deployed the Tenant without TLS you may need to change the port range # You can validate the ports in use by running # kubectl get svc/minio -n minio kubectl port forward svc/minio 443:443 -n minio
在新的终端或 Shell 窗口中执行以下命令:
连接本地
mc客户端到租户。创建加密密钥。
看快速入门有关安装说明
mc在您的本地主机上。# Replace USERNAME and PASSWORD with a user on the tenant with administrative permissions # such as the root user mc alias add k8s https://localhost:443 ROOTUSER ROOTPASSWORD # Replace my-new-key with the name of the key you want to use for SSE-KMS mc admin kms key create k8s encrypted-bucket-key
为存储桶启用 SSE-KMS 加密
您可以使用 MinIO 租户控制台或 MinIO
mcCLI 启用存储桶默认 SSE-KMS 并配置生成密钥的方法:连接到MinIO 租户控制台服务并登录。 对于 Kubernetes 集群内部的客户端,您可以指定服务 DNS 名称对于 Kubernetes 集群外部的客户端,请指定通过 Ingress、Load Balancer 或类似 Kubernetes 网络控制组件暴露的服务的主机名。
登录后,创建一个新的存储桶,并按您的偏好命名。 选择齿轮图标打开管理视图的图标。
选择铅笔旁边的图标加密字段用于打开配置存储桶默认 SSE 方案的模态框。
选择SSE-KMS然后输入在上一步中创建的密钥名称。
保存更改后,尝试向存储桶上传一个文件。 在对象浏览器中查看该文件时,请注意侧边栏的元数据包含了SSE加密方案以及用于加密该对象的密钥信息。 这表明该对象已成功处于加密状态。
使用MinIO API Service创建一个新的别名对于 MinIO 部署。 您可以使用
mc encrypt set启用存储桶 SSE-KMS 加密的命令:mc alias set k8s https://minio.minio-tenant-1.svc.cluster-domain.example:443 ROOTUSER ROOTPASSWORD mc mb k8s/encryptedbucket mc encrypt set SSE-KMS encrypted-bucket-key k8s/encryptedbucket
对于 Kubernetes 集群外部的客户端,请指定通过 Ingress、Load Balancer 或类似 Kubernetes 网络控制组件暴露的服务主机名。
使用以下方式将文件写入存储桶:
mc cp或任何具有 S3 兼容 SDK 的PutObjectfunction. 然后你可以运行mc stat在文件上确认相关的加密元数据。
为 MinIO 生成 KES API 密钥
使用kes identity new为 MinIO Server 生成新 API 密钥的命令:
kes identity new
输出内容包括用于 MinIO 的 API 密钥和用于KES 策略配置.
配置 MinIO 环境文件
创建或修改目标部署中所有主机的 MinIO Server 环境文件,使其包含以下环境变量:
Add the following lines to the MinIO Environment file on each MinIO host. See the tutorials for安装与管理, 安装与管理或安装与管理有关基础 MinIO 环境文件的更详细说明。
# Add these environment variables to the existing environment file MINIO_KMS_KES_ENDPOINT=https://HOSTNAME:7373 MINIO_KMS_KES_API_KEY="kes:v1:ACTpAsNoaGf2Ow9o5gU8OmcaG6Af/VcZ1Mt7ysuKoBjv" # Allows validation of the KES Server Certificate (Self-Signed or Third-Party CA) # Change this path to the location of the KES CA Path MINIO_KMS_KES_CAPATH=|kescertpath|/kes-server.cert # Sets the default KMS key for the backend and SSE-KMS/SSE-S3 Operations) MINIO_KMS_KES_KEY_NAME=minio-backend-default-key
替换
HOSTNAME使用 KES 服务器的 IP 地址或主机名。 如果 MinIO 服务器主机无法解析或访问指定的HOSTNAME部署可能会返回错误或无法启动。如果使用单个 KES 服务器主机,请指定该主机的 IP 或主机名
如果使用多个 KES 服务器主机,请指定每个主机的 IP 或主机名的逗号分隔列表
MinIO 使用
MINIO_KMS_KES_KEY_NAME以下加密操作的密钥:MinIO 默认期望此文件位于
/etc/default/minio如果您修改了部署以使用不同位置的环境文件,请修改该位置的文件。启动 MinIO
KES 操作需要解封的保险库
根据您选择的KMS解决方案,可能需要解封密钥实例以允许正常的加密操作,包括密钥创建或检索。 KES需要解封的密钥目标才能执行其操作。
参考您所选KMS解决方案的文档有关操作是否需要密封和解封实例的信息。
您必须启动 KES之前启动 MinIO。 MinIO 部署在启动过程中需要访问 KES。
您可以使用
mc admin service restart重启 MinIO 的命令:mc admin service restart ALIAS
生成新的加密密钥
MinIO 要求EK存在于 KMS 上之前执行SSE使用该密钥的操作。
kes key createormc admin kms key create添加一个新的EK用于SSE.以下命令使用
mc admin kms key create用于添加存储在 KMS 服务器上的新外部密钥(EK)的命令,该密钥用于加密 MinIO 后端。mc admin kms key create ALIAS KEYNAME
为存储桶启用 SSE-KMS 加密
使用 MinIO
mcCLI 启用存储桶默认 SSE-KMS 并配置生成密钥的方法:以下命令:
创建一个新的别名对于MinIO部署
创建一个用于存储加密数据的新存储桶
对该存储桶启用 SSE-KMS 加密
mc alias set local http://127.0.0.1:9000 ROOTUSER ROOTPASSWORD mc mb local/encryptedbucket mc encrypt set SSE-KMS encrypted-bucket-key ALIAS/encryptedbucket
使用以下方式将文件写入存储桶:
mc cp或任何具有 S3 兼容 SDK 的PutObjectfunction. 然后你可以运行mc stat在文件上确认相关的加密元数据。