Fortanix SDKMS

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

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 实例进行身份验证和通信。

    • 前往 AppsFortanix SDKMS UI 中的 section。

      Step 1

    • 给应用程序起一个描述性的名称,例如KES

    • 选择REST API随着集成

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

      Step 2

  2. 分配组

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

    Step 3

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

    此密钥是 KES 与 Fortanix SDKMS 通信时使用的访问凭证。

    Step 4

KES Server 设置

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 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 identity new --key=app.key --cert=app.cert app
    

    你可以计算app身份随时验证。

    kes 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 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 Server 需要 KES 来启用服务器端数据加密。

查看MinIO KES 操作指南有关将新的 KES 服务器与 MinIO 服务器配合使用所需的额外步骤。

配置参考

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

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