KES on a MinIO Deployment

本教程展示如何设置 KES 服务器并配置MinIO 部署作为对象加密的KES客户端。

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

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

对于生产环境使用,请选择任何符合您要求的受支持 KMS 实现方案。

KES Server Setup

  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
    

    身份02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b是公钥的唯一指纹client.crt使用此 API 密钥身份验证 MinIO 客户端到 KES 服务器的连接。

    您可以随时从同一证书重新计算身份:

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

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

    创建 KES 服务器配置文件:config.yml确保身份在policysection 与您的匹配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 Swap Protection

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

    使用以下命令允许 KES 使用mlock未以运行权限进行的系统调用rootprivileges:

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

    启动一个具有内存保护功能的 KES 服务器实例:

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

MinIO Server Setup

下面步骤2-6中定义的环境变量可以作为MinIO Server的一部分进行定义环境变量文件.

  1. 安装 MinIO

    您可以选择下载一个静态二进制或遵循MinIO 快速入门指南.

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

    选择您操作系统的标签页,查看针对特定操作系统的快速入门指南。

  2. SetMINIO_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 root 凭据:

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

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

加密存储桶

在特定存储桶上启用服务器端加密,使用PutBucketEncryptionS3 API. 这可以通过MinIO Client.

  1. 创建密钥

    如需完整参考,请参阅mc admin kms keydocumentation.

    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使用您在上一步中创建的密钥名称。

参考文献