我已经成功安装了一个没有 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 服务器的官方指南。任何想法?