2 # Copyright (C) The Arvados Authors. All rights reserved.
4 # SPDX-License-Identifier: AGPL-3.0
6 {%- import_yaml "ssl_key_encrypted.sls" as ssl_key_encrypted_pillar %}
7 {%- set domain = "__DOMAIN__" %}
8 {%- set balancer_backends = "__CONTROLLER_NODES__".split(",") %}
9 {%- set disabled_controller = "__DISABLED_CONTROLLER__" %}
18 'geo $external_client':
21 '__CLUSTER_INT_CIDR__': 0
22 upstream controller_upstream:
23 {%- for backend in balancer_backends %}
24 {%- if disabled_controller == "" or not backend.startswith(disabled_controller) %}
25 'server {{ backend }}:80': ''
27 'server {{ backend }}:80 down': ''
33 # Based on https://ssl-config.mozilla.org/#server=nginx&version=1.14.2&config=intermediate&openssl=1.1.1d&guideline=5.4
34 ssl_hardening_default.conf:
35 - ssl_session_timeout: 1d
36 - ssl_session_cache: 'shared:arvadosSSL:10m'
37 - ssl_session_tickets: 'off'
39 # intermediate configuration
40 - ssl_protocols: TLSv1.2 TLSv1.3
41 - ssl_ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
42 - ssl_prefer_server_ciphers: 'off'
44 # HSTS (ngx_http_headers_module is required) (63072000 seconds)
45 - add_header: 'Strict-Transport-Security "max-age=63072000" always'
49 - ssl_stapling_verify: 'on'
51 # verify chain of trust of OCSP response using Root CA and Intermediate certs
52 # - ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates
54 # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
55 # - ssl_dhparam: /path/to/dhparam
57 # replace with the IP address of your resolver
58 # - resolver: 127.0.0.1
63 # Remove default webserver
67 arvados_balancer_default.conf:
72 - server_name: {{ domain }}
75 - location /.well-known:
78 - return: '301 https://$host$request_uri'
80 arvados_balancer_ssl.conf:
87 - server_name: {{ domain }}
89 - __CONTROLLER_EXT_SSL_PORT__ http2 ssl
90 - index: index.html index.htm
92 - proxy_pass: 'http://controller_upstream'
93 - proxy_read_timeout: 300
94 - proxy_connect_timeout: 90
95 - proxy_redirect: 'off'
96 - proxy_set_header: X-Forwarded-Proto https
97 - proxy_set_header: 'Host $http_host'
98 - proxy_set_header: 'X-Real-IP $remote_addr'
99 - proxy_set_header: 'X-Forwarded-For $proxy_add_x_forwarded_for'
100 - proxy_set_header: 'X-External-Client $external_client'
101 - proxy_set_header: 'Upgrade $http_upgrade'
102 - proxy_set_header: 'Connection "upgrade"'
103 - proxy_max_temp_file_size: 0
104 - proxy_request_buffering: 'off'
105 - proxy_buffering: 'off'
106 - proxy_http_version: '1.1'
107 - include: snippets/ssl_hardening_default.conf
108 - ssl_certificate: __CERT_PEM__
109 - ssl_certificate_key: __CERT_KEY__
110 {%- if ssl_key_encrypted_pillar.ssl_key_encrypted.enabled %}
111 - ssl_password_file: {{ '/run/arvados/' | path_join(ssl_key_encrypted_pillar.ssl_key_encrypted.privkey_password_filename) }}
113 - access_log: /var/log/nginx/{{ domain }}.access.log combined
114 - error_log: /var/log/nginx/{{ domain }}.error.log
115 - client_max_body_size: 128m