0

我已经成功安装了一个没有 Vault 支持的代理的 MinIO KES 服务器。它也适用于 MinIO S3 服务器,所有放入 MinIO S3 的对象都将自动加密。我得到了 MinIO 静态加密。现在,我想用 NGINX 之类的 TLS 代理制作 MinIO KES HA。但我有错误。

我的 KES 配置如下所示:

cat <<EOF > kes.yml
address: 0.0.0.0:7373
root:    disabled
tls:
  key:  /home/opc/kes/privkey.pem
  cert: /home/opc/kes/fullchain.pem
  proxy:
    identities: []
    header:
      cert: X-Tls-Client-Cert
policy:
  my-app:
    paths:
    - /v1/key/create/my-app*
    - /v1/key/generate/my-app*
    - /v1/key/decrypt/my-app*
    identities:
    - \${APP_IDENTITY}
keys:
  vault:
    endpoint: https://vault-nginx-test.cloudchef-labs.com
    approle:
      id:     "6fcc2761-2be9-1f89-2dec-899f27b7faa9" # Your AppRole ID
      secret: "73e1d9ab-3b1a-cd83-10fd-d1ed49226c35" # Your AppRole Secret ID
      retry:  15s
    status:
      ping: 10s
EOF

## start a KES server:
export APP_IDENTITY=$(kes tool identity of /home/opc/app.cert);
nohup kes server --mlock --config=kes.yml --auth=off > kes.log &

这样,KES 服务器就可以在每个 KES 节点上运行。

与我的没有 NGINX 的单个 KES 的配置的区别是,tls.proxy已添加。

  proxy:
    identities: []
    header:
      cert: X-Tls-Client-Cert

而且,我使用 Let's Encrypt 为我的 NGINX 生成了证书:

sudo certbot certonly --nginx -d kes-nginx-test.cloudchef-labs.com --staple-ocsp -m mykidong@cloudchef-labs.com --agree-tos;

最后,NGINX 已经使用以下配置运行。

sudo su -;
cat <<EOF > /etc/nginx/conf.d/kes-nginx-test.cloudchef-labs.com.conf
server {
    root /var/www/html;
    server_name  kes-nginx-test.cloudchef-labs.com;
    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/kes-nginx-test.cloudchef-labs.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kes-nginx-test.cloudchef-labs.com/privkey.pem;
    if (\$scheme != "https") {
        return 301 https://;
    }

    location / {
        proxy_set_header X-Tls-Client-Cert \$ssl_client_escaped_cert;
        proxy_ssl_certificate       /opt/kes-client/app.cert;
        proxy_ssl_certificate_key   /opt/kes-client/app.key;
        proxy_ssl_protocols         TLSv1.3;
        proxy_ssl_verify            off;
        proxy_http_version 1.1; 
        proxy_pass https://kes;
   }
}
upstream kes {
    server kes-test.cloudchef-labs.com:7373;
    server kes-test1.cloudchef-labs.com:7373;
    server kes-test2.cloudchef-labs.com:7373;
}
EOF

sudo nginx -t && sudo nginx -s reload;

要通过 TLS NGINX 测试 KES,我运行了以下命令:

export KES_SERVER=https://kes-nginx-test.cloudchef-labs.com;
export KES_CLIENT_CERT=/home/opc/app.cert
export KES_CLIENT_KEY=/home/opc/app.key

kes key derive -k my-app-key;

我得到了错误:

Error: failed to derive key: HTTP Version Not Supported

没有从 KES 服务器和 NGINX 错误日志打印的错误。

当我尝试在没有 NGINX 的情况下直接测试单个 KES 服务器时,我得到了正确的响应:

export KES_SERVER=https://kes-test.cloudchef-labs.com:7373;
export KES_CLIENT_CERT=/home/opc/app.cert
export KES_CLIENT_KEY=/home/opc/app.key

kes key derive -k my-app-key;
{
  plaintext : H67Ioo2eIM15/Z27z0mt3WXEJk2RM7MbMDRX2oX5fCQ=
  ciphertext: eyJhZWFkIjoiQUVTLTI1Ni1HQ00tSE1BQy1TSEEtMjU2IiwiaXYiOiJmZFc4Y1lIeWVVNGU1M0dQeDVQNmFBPT0iLCJub25jZSI6IktuTFFBSVlhYVAySmVzcFIiLCJieXRlcyI6IjhoQTdsL2RmZ0xMbEU3aTRIRHM3NFAwanI3WDNtVlNYQ2ZwNUtJN1hoV3Rab3pQTDFhV0hBTWFhNkp1VzhhL0kifQ==
}

我暂时还没有找到关于如何配置 NGINX 来代理 MinIO KES 服务器的官方指南。任何想法?

4

0 回答 0