
GitHub Hook Proxy
A validating proxy to facilitate secure delivery of GitHub webhook payloads to multiple targets behind a firewall.
Features
- Support for multiple backend webhook targets
- GitHub payload validation based on HMAC-SHA256
- Optional secret storage in HashiCorp Vault K/V store
Configuration
By default, the daemon will look for a Viper-style configuration file with the prefix "config" (i.e. config.yaml for YAML configuration, config.toml if you prefer TOML, etc.) in /etc/github-hook-proxy followed by the current working directory.
Supported keys
The following root configuration keys are supported:
listener: (optional) listener configuration (default: {address: 127.0.0.1, port: 8080, tls: {}})
targets: (required) list of targets (default: [])
vault: (optional) vault configuration (default: {})
verbose: (optional) if set, debug mode will be enabled (default: false)
listener
address: (optional) listener bind address (default: 127.0.0.1)
port: (optional) listener bind port (default: 8080)
tls: (optional) listener TLS certificate configuration, see below (default: {})
The tls key if specified should contain two keys which, when set, will cause the proxy to listen for HTTPS rather than HTTP requests:
private-key: (required) path to PEM format TLS private key
public-key: (required) path to PEM format TLS public key
targets
Each target object takes the form "<targetName>": {}, with the following keys supported:
url: (required) full URL to which payloads for this target should be forwarded
secret: (optional) shared secret for validation of payloads associated with this target (default: load from vault); an explicitly blank secret (secret: "") will disable payload validation
events: (optional) list of events to accept for this target (default: [ping, push, pull_request])
jenkins-validation: (optional) boolean controlling whether to accept Jenkins GitHub plugin validation requests (default: false); not required for Jenkins to receive externally configured webhook payloads
vault
If any target does not specify a static secret, then Vault must be configured:
address: (optional) full URL of your Vault instance (default: https://127.0.0.1:8080); may also be specified via VAULT_ADDR.
token-file: (optional) path to Vault token file; the VAULT_TOKEN environment variable will take priority.
mount: (optional) mountpoint of the Vault K/V v2 store holding target webhook secrets (default: secret)
secret: (optional) template string for the path within the Vault K/V v2 store holding a specific target's webhook secret; must contain a single %s which will be filled in with each target's name. (default: github-webhooks/%s)
field: (optional) field within the target's K/V v2 secret holding the GitHub webhook secret (default: secret)
Example Configuration
See example-config.yaml for example configuration.