99)
1010from pydantic import ByteSize
1111from servicelib .common_headers import X_SIMCORE_USER_AGENT
12+ from settings_library import webserver
13+ from settings_library .utils_session import DEFAULT_SESSION_COOKIE_NAME
1214
1315from ....core .dynamic_services_settings import DynamicServicesSettings
1416from ....core .dynamic_services_settings .proxy import DynamicSidecarProxySettings
@@ -43,6 +45,9 @@ def get_dynamic_proxy_spec(
4345 dynamic_services_scheduler_settings : DynamicServicesSchedulerSettings = (
4446 dynamic_services_settings .DYNAMIC_SCHEDULER
4547 )
48+ webserver_settings : webserver .WebServerSettings = (
49+ dynamic_services_settings .WEBSERVER_SETTINGS
50+ )
4651
4752 mounts = [
4853 # docker socket needed to use the docker api
@@ -77,9 +82,11 @@ def get_dynamic_proxy_spec(
7782 "io.simcore.zone" : f"{ dynamic_services_scheduler_settings .TRAEFIK_SIMCORE_ZONE } " ,
7883 "traefik.docker.network" : swarm_network_name ,
7984 "traefik.enable" : "true" ,
85+ # security
86+ f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.accesscontrolallowcredentials" : "true" ,
8087 f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.customresponseheaders.Content-Security-Policy" : f"frame-ancestors { scheduler_data .request_dns } { scheduler_data .node_uuid } .services.{ scheduler_data .request_dns } " ,
8188 f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.accesscontrolallowmethods" : "GET,OPTIONS,PUT,POST,DELETE,PATCH,HEAD" ,
82- f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.accesscontrolallowheaders" : f"{ X_SIMCORE_USER_AGENT } " ,
89+ f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.accesscontrolallowheaders" : f"{ X_SIMCORE_USER_AGENT } ,Set-Cookie " ,
8390 f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.accessControlAllowOriginList" : "," .join (
8491 [
8592 f"{ scheduler_data .request_scheme } ://{ scheduler_data .request_dns } " ,
@@ -88,11 +95,22 @@ def get_dynamic_proxy_spec(
8895 ),
8996 f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.accesscontrolmaxage" : "100" ,
9097 f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -security-headers.headers.addvaryheader" : "true" ,
98+ # auth
99+ f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -auth.forwardauth.address" : f"{ webserver_settings .api_base_url } /auth:check" ,
100+ f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -auth.forwardauth.trustForwardHeader" : "true" ,
101+ f"traefik.http.middlewares.{ scheduler_data .proxy_service_name } -auth.forwardauth.authResponseHeaders" : f"Set-Cookie,{ DEFAULT_SESSION_COOKIE_NAME } " ,
102+ # routing
91103 f"traefik.http.services.{ scheduler_data .proxy_service_name } .loadbalancer.server.port" : "80" ,
92104 f"traefik.http.routers.{ scheduler_data .proxy_service_name } .entrypoints" : "http" ,
93105 f"traefik.http.routers.{ scheduler_data .proxy_service_name } .priority" : "10" ,
94106 f"traefik.http.routers.{ scheduler_data .proxy_service_name } .rule" : rf"HostRegexp(`{ scheduler_data .node_uuid } \.services\.(?P<host>.+)`)" ,
95- f"traefik.http.routers.{ scheduler_data .proxy_service_name } .middlewares" : f"{ dynamic_services_scheduler_settings .SWARM_STACK_NAME } _gzip@swarm, { scheduler_data .proxy_service_name } -security-headers" ,
107+ f"traefik.http.routers.{ scheduler_data .proxy_service_name } .middlewares" : "," .join (
108+ [
109+ f"{ dynamic_services_scheduler_settings .SWARM_STACK_NAME } _gzip@swarm" ,
110+ f"{ scheduler_data .proxy_service_name } -security-headers" ,
111+ f"{ scheduler_data .proxy_service_name } -auth" ,
112+ ]
113+ ),
96114 "dynamic_type" : "dynamic-sidecar" , # tagged as dynamic service
97115 }
98116 | StandardSimcoreDockerLabels (
0 commit comments