Fortanix SDKMS

本教程演示如何设置一个使用 Fortanix SDKMS 作为持久且安全的密钥存储的 KES 服务器。

K E S C l i e n t K E S S e r v e r F o r t a n i x S D K M S

Fortanix SDKMS

  1. 创建应用程序

    注册一个可以对 Fortanix SDKMS 实例进行身份验证和通信的新应用程序。

    • 在 Fortanix SDKMS UI 中转到“应用程序”部分。

      Step 1

    • 为应用程序指定一个描述性名称,例如 KES

    • 选择 REST API 作为集成方式

    • 选择 API 密钥 作为身份验证方法

      Step 2

  2. 分配组

    分配的组用作应用程序的默认组。除非在 KES 配置文件中指定了显式组 ID,否则新创建的密钥将属于此组。

    Step 3

  3. 创建应用程序并复制应用程序的 API 密钥。

    此密钥是 KES 用于与 Fortanix SDKMS 通信的访问凭据。

    Step 4

KES 服务器设置

KES 服务器需要 TLS 私钥和证书。

KES 服务器默认安全,只能在 TLS 下运行。本教程出于简单起见使用了自签名证书。

对于生产环境设置,我们强烈建议使用受信任的证书颁发机构签发的证书。这可以是您的内部 CA 或公共 CA,例如 Let’s Encrypt
  1. 为 KES 服务器生成 TLS 私钥和证书

    以下命令生成新的 TLS 私钥 server.key 和自签名 X.509 证书 server.cert,该证书为 IP 127.0.0.1 和 DNS 名称 localhost(作为 SAN)颁发。自定义命令以匹配您的设置。

    kes tool identity new --server --key server.key --cert server.cert --ip "127.0.0.1" --dns localhost
    

    任何其他 X.509 证书生成工具也适用。例如,您可以使用 openssl

    openssl ecparam -genkey -name prime256v1 | openssl ec -out server.key
    
    openssl req -new -x509 -days 30 -key server.key -out server.cert \
        -subj "/C=/ST=/L=/O=/CN=localhost" -addext "subjectAltName = IP:127.0.0.1"
    
  2. 创建私钥和证书

    kes tool identity new --key=app.key --cert=app.cert app
    

    您可以随时计算 app 标识。

    kes tool identity of app.cert
    
  3. 创建配置文件

    创建名为 server-config.yml配置文件

    address: 0.0.0.0:7373
    
    admin:
      identity: disabled  # We disable the admin identity since we don't need it in this guide 
    
    tls:
      key : server.key
      cert: server.cert
    
    policy:
      my-app:
         allow:
         - /v1/key/create/my-app*
         - /v1/key/generate/my-app*
         - /v1/key/decrypt/my-app*    
        identities:
        - ${APP_IDENTITY}
    
     keystore:
       fortanix:
         sdkms:
           endpoint: "<your-fortanix-sdkms-endpoint>"    # Use your Fortanix instance endpoint.
           credentials:
             key: "<your-api-key>" # Insert the application's API key      
    
  4. 在新窗口/选项卡中启动 KES 服务器

    export APP_IDENTITY=$(kes tool identity of app.cert)
    
    kes server --config=server-config.yml --auth=off
    
    该命令使用 --auth=off,因为我们的 root.certapp.cert 证书是自签名的。
  5. 在另一个选项卡中,连接到服务器

    export KES_CLIENT_CERT=app.cert
    export KES_CLIENT_KEY=app.key
    kes key create -k my-app-key
    
    -k 是必需的,因为我们使用自签名证书。
  6. 从先前创建的 my-app-key 派生和解密数据密钥

    kes key derive -k my-app-key
    {
       plaintext : ...
       ciphertext: ...
    }
    
    kes key decrypt -k my-app-key <base64-ciphertext>
    

将 KES 与 MinIO 服务器一起使用

MinIO 服务器需要 KES 才能启用服务器端数据加密。

有关将新的 KES 服务器与 MinIO 服务器一起使用所需的额外步骤,请参阅MinIO 指令指南的 KES

配置参考

以下部分描述了密钥加密服务 (KES) 配置设置,以使用 Fortanix SDKMS 作为根 KMS 来存储外部密钥,例如用于 MinIO 服务器上的服务器端加密的密钥。

MinIO 服务器需要扩展权限
MinIO 服务器 RELEASE.2023-02-17T17-52-43Z开始,MinIO 需要扩展的 KES 权限才能实现功能。本节中的示例配置包含所有必需的权限。