MinIO 部署中的 KES

本教程演示了如何设置 KES 服务器,然后将 MinIO 部署 配置为 KES 客户端以进行对象加密。

M i n I O K E S S e r v e r K M S
仅供测试

本教程重点介绍简单的 KES 服务器设置。我们使用本地文件系统作为密钥库,并省略了 KMS 集成。

对于生产用途,请选择满足您需求的任何受支持的 KMS 实现。

KES 服务器设置

  1. 生成 KES 服务器私钥和证书

    为 KES 服务器生成 TLS 私钥和证书。此密钥用于服务器地址的域名验证。

    KES 服务器 默认情况下是安全的,并且只能在使用 TLS 的情况下运行。在本指南中,为简单起见,我们使用自签名证书。

    以下命令生成新的 TLS 私钥 (private.key) 和自签名 X.509 证书 (public.crt),该证书为 IP 127.0.0.1 和 DNS 名称 localhost 发行

    $ kes identity new --ip "127.0.0.1" localhost
    
      Private key:  private.key
      Certificate:  public.crt
      Identity:     2e897f99a779cf5dd147e58de0fe55a494f546f4dcae8bc9e5426d2b5cd35680
    
    现有密钥和证书
    如果您已经拥有 TLS 私钥和证书(例如,来自 WebPKI 或内部证书颁发机构),则可以使用它们。请记住调整 tls 配置部分。
  2. 生成 MinIO 凭据

    MinIO 需要凭据才能访问 KES 服务器。以下命令从提供的 TLS 私钥/公钥对生成哈希身份

    $ kes identity new --key=client.key --cert=client.crt MinIO
    
      Private key:  client.key
      Certificate:  client.crt
      Identity:     02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
    

    标识符 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267bclient.crt 中公钥的唯一指纹。使用此 API 密钥标识符来验证 MinIO 客户端到 KES 服务器。

    您可以随时从相同的证书重新计算标识符。

    $ kes identity of client.crt
    
      Identity:  02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
    
  3. 配置 KES 服务器

    此过程提供了一套基线步骤,可能需要进行大量修改以适应您的目标。有关为特定密钥管理系统提供商配置 KES 服务器的详细说明,请参阅 支持的目标 的集成页面。

    创建 KES 服务器配置文件:config.yml。确保 policy 部分中的标识符与您的 client.crt 标识符匹配。

    address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373
    
    admin:
      identity: disabled  # We disable the admin identity since we don't need it in this guide 
    
    tls:
      key: private.key    # The KES server TLS private key
      cert: public.crt    # The KES server TLS certificate
    
    policy:
      my-app: 
        allow:
        - /v1/key/create/minio-*
        - /v1/key/generate/minio-*
        - /v1/key/decrypt/minio-*
        identities:
        - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt
    
    keystore:
      fs:
        path: ./keys # Choose a directory for the secret keys
    
  4. 启动 KES 服务器

    kes server --config config.yml --auth off
    
    Linux 交换空间保护

    在 Linux 环境中,KES 可以使用 mlock 系统调用来防止操作系统将内存数据写入磁盘(交换)。这可以防止敏感数据泄露。

    使用以下命令允许 KES 使用 mlock 系统调用,而无需以 root 权限运行

    sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))
    

    启动具有内存保护的 KES 服务器实例

    kes server --config config.yml --auth off --mlock
    

MinIO 服务器设置

下面步骤 2-6 中定义的环境变量可以作为 MinIO 服务器 环境变量文件 的一部分来定义。

  1. 安装 MinIO

    您可以下载 静态二进制文件 或按照 MinIO 快速入门指南 进行操作。

    有关在其他拓扑结构(例如,使用多个驱动器或多个节点)上设置 MinIO 服务器的更详细说明,请参阅 安装文档

    选择与您的操作系统相对应的选项卡以获取特定于操作系统的快速入门指南。

  2. 设置 MINIO_KMS_KES_ENDPOINT

    此环境变量告诉 MinIO 访问哪个 KES 服务器。

    export MINIO_KMS_KES_ENDPOINT=https://127.0.0.1:7373
    
  3. 设置 MinIO 客户端凭据

    这些环境变量设置 MinIO 用于访问 KES 服务器的访问凭据。

    export MINIO_KMS_KES_CERT_FILE=client.crt
    
    export MINIO_KMS_KES_KEY_FILE=client.key
    
  4. 设置 MinIO 默认密钥

    此环境变量设置 MinIO 在其 S3 客户端未指定加密密钥时使用的默认密钥。

    export MINIO_KMS_KES_KEY_NAME=minio-default-key
    
    如果密钥不存在,MinIO 会自动创建此密钥。
  5. 信任 KES 服务器证书

    如果 KES 服务器使用受信任的证书颁发机构颁发的证书,则此步骤是可选的。

    当使用自签名证书时,MinIO 无法验证 KES 服务器证书。此环境变量手动建立信任关系。

    export MINIO_KMS_KES_CAPATH=public.crt
    

    在这种情况下,public.crt 是 KES 服务器的公钥证书。

  6. 设置 MinIO 根凭据

    export MINIO_ROOT_USER=minio
    export MINIO_ROOT_PASSWORD=minio123
    
  7. 启动 MinIO 服务器

    KES 服务器**必须**在您启动 MinIO 服务器**之前**运行。MinIO 服务器需要在启动过程中访问 KES 服务器。
    minio server /data
    

加密存储桶

使用 PutBucketEncryption S3 API 在特定存储桶上启用服务器端加密。这可以通过 MinIO 客户端 完成。

  1. 创建密钥

    有关完整参考,请参阅 mc admin kms key 文档

    mc admin kms key create <alias> minio-key-name
    

    minio-key-name 替换为您要使用的密钥名称。

  2. 配置存储桶

    使用 mc encrypt set 为您的存储桶添加服务器端加密配置。

    例如

    mc encrypt set sse-kms minio-key-name <alias>/my-bucket
    

    minio-key-name 替换为您在上一步中创建的密钥的名称。

参考