PEP-Konfiguration
Übersicht
Der PEP ist über einen nginx mit folgenden ZETA-spezifischen Plugins umgesetzt:
- libngx_pep.so
- libngx_asl.so (Ist im Prototyp noch nicht enthalten.)
libngx_pep.so
Beispielkonfiguration:
worker_processes auto;
load_module modules/libngx_pep.so;
error_log /dev/stdout debug;
pid /run/nginx.pid;
events {
worker_connections 16384;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /dev/stdout main;
sendfile on;
aio threads;
aio_write on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
pep_issuer https://my.zeta.service.de/auth/realms/zeta-guard;
# optional http client config, defaults:
# pep_http_client_idle_timeout 30; # s
# pep_http_client_max_idle_per_host 64;
# pep_http_client_tcp_keepalive 30; # s
# pep_http_client_connect_timeout 2; # s
# pep_http_client_timeout 10; # s
# pep_http_client_accept_invalid_certs off;
server {
listen 80;
server_name pep-proxy-svc;
location / {
proxy_pass https://testfachdienst;
# potentially useful for some test installations
# proxy_ssl_verify off;
}
location /pep_secured/ {
proxy_pass https://testfachdienst/;
pep on;
# pep_require_aud_any "account|other"; # optional, multiple values with |, any one match suffices
# pep_require_scope "openid profile email"; # optional, exact string match
# pep_leeway 60; # s
# potentially useful for some test installations
# proxy_ssl_verify off;
# …you can use any standard nginx directive here as well…
}
}
}
Die obige Beispielkonfiguration ist eine minimale Konfiguration, die den Testfachdienst (https://testfachdienst/) unter den beiden Pfaden /
und /pep_secured/
bereitstellt.
Wichtig ist, dass am Anfang das PEP-Plugin geladen wird via load_module modules/libngx_pep.so;
.
Der Zugriff über /
erfolgt dabei wie über einen industrieüblichen Reverse Proxy ohne nennenswerte Besonderheiten.
Der Zugriff über /pep_secured/
ist hierbei über die Direktive pep on;
so gestaltet, dass PEP-spezifisches Verhalten eingeschaltet wird. Damit dies funktioniert, ist insbesondere die Direktive pep_issuer https://my.zeta.service.de/auth/realms/zeta-guard;
wichtig, die die Verbindung zum PDP herstellt.
Konfigurationsparameter
pep_issuer
- Typ: string
- Beschreibung: Konfiguriert den zu verifizierenden Issuer in den ZETA-Guard-Access-Tokens. Dieser ist global für den PEP zu konfigurieren und steuert indirekt auch den Abruf der Token-Signaturschlüssel vom PDP.
- Pflichtfeld: Ja
- Context:
http
- Standardwert: (muss je nach Umgebung gesetzt werden)
pep_http_client_idle_timeout
,pep_http_client_max_idle_per_host
,pep_http_client_tcp_keepalive
,pep_http_client_connect_timeout
,pep_http_client_timeout
- Typ: integer
- Beschreibung: Konfigurationen für den pep-spezifischen HTTP client. Dieser wird nicht für nginx-native Verbindungen, wie zu upstream Servern verwendet, sondern nur für interne Verbindungen bspw. zum PDP zwecks Abruf der OpenID-Konfiguration und JWKS.
- Pflichtfeld: Nein
- Context:
http
- Standardwert: siehe Konfigurationsbeispiele oben
pep_http_client_accept_invalid_certs
-
Typ: on
off
- Beschreibung: Mit
on
kann der interne http client so konfiguriert werden, dass auch ungültige TLS-Zertifikate akzeptiert werden, bspw. für eine Testinstallation des PDP. - Pflichtfeld: Nein
- Context:
http
- Standardwert:
off
-
pep
-
Typ: on
off
- Beschreibung: Konfiguriert, ob der nginx auf diesem Endpunkt sich wie ein PEP verhält.
- Pflichtfeld: Nein
- Context:
server
- Standardwert:
off
-
pep_require_aud_any
-
Typ: -separierte Liste von Audiences. Beispiel: audience1|audience2
- Beschreibung: Prüft ZETA-Guard-Access-Tokens auf das Vorhandensein von
aud
-Claims. Wenn mehr als eine Audience konfiguriert ist, ist die Anforderung “oder” -verknüpft, d.h. das Ergebnis ist “HTTP 401 Unauthorized”, wenn keine der gelisteten Audiences in den Access-Token-Claims enthalten ist. Wenn keine erforderlichen Audiences konfiguriert sind, wird die Prüfung übersprungen. - Pflichtfeld: Nein
- Context:
server
- Standardwert:
""
-
pep_require_scope
- Typ: string
- Beschreibung: Konfiguriert den zu verifizierenden Scope in den ZETA-Guard-Access-Tokens. Wenn konfiguriert, wird auf den exakten String geprüft. Es kann nicht auf ein beliebiges aus einer Menge alternativer Scopes geprüft werden.
- Pflichtfeld: Nein
- Context:
server
- Standardwert:
""
pep_leeway
- Typ: integer
- Beschreibung: Erlaubte Toleranz bei der zeitlichen Überprüfung von
exp
Claims in Sekunden. Hierüber soll eine Abweichung der Uhren zwischen Cluster und Client kompensiert werden. - Pflichtfeld: Nein
- Context:
server
- Standardwert:
60
libngx_asl.so
(Im Prototyp noch nicht enthalten.)