Split FME by Harness proxy implementation with support for forward and reverse proxy functionality
5.7K
This tool is meant to be used by customers who want a single connection point from their integration for Harness FME or DBDevOps modules. (Other Harness modules will be tested over time, let us know if you need any others)
It consists of a custom-built open-resty (augmented NGINX core) with a set of custom configs and LUA scripts in order to support HTTP & HTTPS proxy tunnels. When deployed as a forward proxy, SDKs configured to use it will establish opaque tunnels to harness FME servers, on which the SDKs will execute their requests as usual. The tool also allows several ways of authenticating clients to accept/deny creating such tunnels, hence rejecting connections to harness servers.
The proxy can be configured with multiple servers on different points, each with different authentication & encryption requirements.
The proxy can be configured with an x509 certificate and its private key to allow for secure connections to be used when establishing the tunnel (this is useful for some authentication mechanisms which transfer credentials over the network). It also supports requesting & verifying client certificates, rejecting connections if not provided by the client or its validation is unsuccessful.
The proxy supports 3 different authorization algorithms. Only one of them can be enabled on each server, but multiple servers with otherwise identical configuration can be leveraged on different ports.
Credentials are sent in plain text on the CONNECT request in the Proxy-Authorization header. TLS is a must if using this scheme.
A short handshake is done between the client & the proxy when doing the CONNECT request. The credentials are hashed together with a set of parameters returned by the proxy during an initial connection attempt. This method is a viable alternative in environments where setting up a PKI / TLS environment is not trivial. Keep in mind that the connection to harness itself WILL ALWAYS BE PRIVATE, since the tunneled connection is always established via a secure channel over HTTPS.
Allows the user to sign tokens with it's own private key, that the proxy can then parse and check with a JWKS provided by the user. Though being more secure than Basic Auth given it's expiration time, TLS is recommended for this scheme as well.
docker pull splitsoftware/fme-proxydocker run --rm --name some-fme-proxy -e HFP_PROXIES=main -e HFP_main_PORT=3128 splitsoftware/fme-proxy.curl -v --proxy https://harness-fproxy:3128 -XGET https://sdk.split.io.As mentioned above, the applications supports listening on multiple ports, each with different SSL & authentication requirements. These instances are called servers and are listed in the HFP_PROXIES variable in a comma-separated list (no spaces, just comma). All server-specific configurations follow the format HFP_<server_name>_<config_option>
server_mtls,server_basic_auth41024infofalseHFP_<server_name>_SSL is enabled/my_volume/pki/server.crtHFP_<server_name>_SSL is enabled/my_volume/pki/server.key/my_volume/pki/client_ca.crtbasic|digest|bearer]HFP_<server_name>_AUTH is set to basic/my_volume/passwd/basic.passwdHFP_<server_name>_AUTH is set to digest/my_volume/passwd/digest.passwdHFP_<server_name>_AUTH is set to bearer/my_volume/keys/keys.jwksmy-upstream-proxy:3128trueHFP_<server_name>_PROXY_CHAIN_SSL is enabled./my_volume/pki/ca.crt127.0.0.53sdk.split.io:443,auth.split.io:443,streaming.split.io:443,events.split.io:443,telemetry.split.io:443HFP_<server_name>_ALLOWED_TARGETS if != "*"443Content type
Image
Digest
sha256:a112630ca…
Size
97.3 MB
Last updated
9 months ago
docker pull splitsoftware/fme-proxy