Komponenter

Dette dokument dækker følgende komponent på NSP:

  • EHMI Sundhedsadresseringsservice (EAS)

Komponenten omfatter tre services:

EAS:

Servicen skal ikke kunne nås direkte. Ingress foregår istedet via. EAS-Ingress-Nginx service.

Servicen udstilles på port 8080.

Egress fra servicen foregår via. EAS-Egress-Nginx mod EHMI mTLS beskyttede services. Keycloak og EER.
Egress mod interne services på NSP foregår via. almindelig httpclient fra Javakoden. Personinformation, Sikrede, SORES.

  • Type: HAPI FHIR Plain Server (REST service)

  • Filnavn: eas.war 

  • Url: Skal kun kunne tilgås igennem EAS-Ingress-Nginx.

  • Status-url: <serverurl>/eas/status

  • Alarm-url: <serverurl>/eas/alarm
  • Image: registry.nspop.dk/components/eas 

EAS-Ingress-Nginx:

Denne service udstilles som indgangen til EAS komponenten.

Servicen udstilles på port 8080.

  • Type: Nginx (TLS Terminering)
  • Url: <serverurl>/eas/
  • Image: registry.nspop.dk/components/eas-nginx

EAS-Egress-Nginx:

Denne service skal ikke udstilles direkte, men skal istedet kunne kaldes internt fra EAS.

Servicen udstilles på port 8080.
Denne service kaldes kun af EAS for udadgående kald mod HHv. EER og Keycloak. Interne services på NSP kaldes direkte fra EAS Java-applikationen.

Konfiguration

EAS

EAS har sin egen konfiguration i "application.properties", og har desuden fire integrationer, som hver især har sin egen property-fil med konfiguration:

IntegrationProperty-fil
EEReer.properties
PersonInformationpersoninformation.properties
SikredeInformationsikrede.properties
SORESsores.properties


Bemærk, at alle tidsenheder i konfigurationsfilerne følger ISO-8601. F.eks. anvendes PT30S som værdi for HTTP Connect timeout.
Dette kan tolkes som værende "Period of Time of 30 Seconds"

Indholdet af de enkelte property-filer findes beskrevet herunder:

EAS (application.properties)

PropertyBeskrivelsePåkrævetDefault værdi
dk.sds.nsp.audit.DevelopmentAuditProvider.enabledHvorvidt audit information logges på stdout som et JSON objektNejfalse
dk.nsp.eas.audit.componentKomponentnavn til audit-loggingNejEAS
dk.nsp.eas.auth.audPåkrævet audience I JWT Token. (Note skal også konfigureres i jtph.properties for accesshandler)Jahttps://eas.ehmi.dk
dk.nsp.eas.auth.acrPåkrævet acr I JWT Token. (Note skal også konfigureres i jtph.properties for accesshandler)Jaurn:dk:healthcare:loa:3
dk.nsp.eas.auth.scopesPåkrævede scopes I JWT Token.JaEAS,system/Organization.rs

EER (eer.properties)

PropertyBeskrivelsePåkrævetDefault værdiEksempel
eer.api.urlURL til EER serviceJa

http://eas-egress-nginx:8080/ehmi-eer/fhir/

http://eas-egress-nginx:8080/ehmi-eer/fhir/

 

eer.api.connectTimeoutHTTP connect timeout  mod EER - ISO-8601 formatJa

PT30S

PT30S

eer.api.socketTimeoutHTTP Socket (Read) timeout mod EER - ISO-8601 formatJa

PT30S

PT30S

eer.api.alarm.staleHvor lang tid der skal gå inden sidste fejlede request mod EER ikke længere er aktuelt. F.eks. hvis værdien er PT5M 
så vil der 5 minutter efter det fejlede kald, ikke længere være en aktiv alarm. ISO-8601 format
Ja

PT5M

PT5M

oauth2.client.idOAuth client idJaeaseas
oauth2.client.secretOAuth client secret - Kan undlades ved auth via. Klientcertifikater. Afhænger af Authentication Server.Nej

oauth2.token.uriURL til Keycloak OAuth endpointJa

http://eas-egress-nginx:8080/ehmi-auth/auth/realms/ehmi/protocol/openid-connect/token

http://eas-egress-nginx:8080/ehmi-auth/auth/realms/ehmi/protocol/openid-connect/token

oauth2.scopesScopes som anmodes om fra Keycloak i den token der udstedes til EAS for kald mod EERJa
EER,system/Organization.rs

 

EER,system/Organization.rs

 

oauth2.connectTimeoutHTTP connect timeout mod Keycloak - ISO-8601 formatJaPT30SPT30S
oauth2.readTimeoutRead timeout mod Keycloak - ISO-8601 formatJaPT30SPT30S
oauth2.alarm.staleHvor lang tid der skal gå inden sidste fejlede request mod Keycloak ikke længere er aktuelt. F.eks. hvis værdien er PT5M 
så vil der 5 minutter efter det fejlede kald, ikke længere være en aktiv alarm. ISO-8601 format
JaPT5M PT5M 

PersonInformation (personinformation.properties)

PropertyBeskrivelsePåkrævetDefault værdiEksempel
personinformation.api.urlURL til PersonInformation serviceJa
http://test1.ekstern-test.nspop.dk:8080/stamdata-personinformation/v1
personinformation.api.connectTimeoutHTTP connect timeout - ISO-8601 formatJaPT30SPT30S
personinformation.api.requestTimeoutTotalt HTTP Request timeout - ISO-8601 formatJaPT30SPT30S
personinformation.api.alarm.staleHvor lang tid der skal gå inden sidste fejlede request mod Personinformation ikke længere er aktuelt. F.eks. hvis værdien er PT5M 
så vil der 5 minutter efter det fejlede kald, ikke længere være en aktiv alarm. ISO-8601 format
JaPT5MPT5M

SikredeInformation (sikrede.properties)

PropertyBeskrivelsePåkrævetDefault værdiEksempel
sikrede.api.urlURL til SikredeInformation serviceJa
http://test1.ekstern-test.nspop.dk:8080/stamdata-sikredeinformation/2025/07/17
sikrede.api.connectTimeoutHTTP connect timeout - ISO-8601 formatJaPT30SPT30S
sikrede.api.requestTimeoutTotalt HTTP Request timeout - ISO-8601 formatJaPT30SPT30S
sikrede.api.alarm.staleHvor lang tid der skal gå inden sidste fejlede request mod Sikrede ikke længere er aktuelt. F.eks. hvis værdien er PT5M 
så vil der 5 minutter efter det fejlede kald, ikke længere være en aktiv alarm. ISO-8601 format
JaPT5MPT5M

SORES (sores.properties)

PropertyBeskrivelsePåkrævetDefault værdiEksempel
sores.api.urlURL til SORES serviceJa
http://test1.ekstern-test.nspop.dk:8080/sores
sores.api.connectTimeoutHTTP connect timeout - ISO-8601 formatJaPT30SPT30S
sores.api.requestTimeoutTotalt HTTP Request timeout - ISO-8601 formatJaPT30SPT30S
sores.api.alarm.staleHvor lang tid der skal gå inden sidste fejlede request mod SORES ikke længere er aktuelt. F.eks. hvis værdien er PT5M 
så vil der 5 minutter efter det fejlede kald, ikke længere være en aktiv alarm. ISO-8601 format
JaPT5MPT5M

NSP Accesshandler

EAS anvender NSP Accesshandler til at autentificere JTP-H JWT Tokens. 
Det betyder, at jtph.properties skal konfigureres hvilket er nærmere beskrevet her NSP Access Handler - Driftvejledning#jtph.properties

Bemærk at hele certifikatkæden skal fremgå af certifikatet.

EAS-Ingress-Nginx

Servicen lytter på port 8080 og forwarder requests til http://eas:8080
Ud fra hostname lyttes der på følgende path: /eas/fhir 

Alle andre paths vil resultere i en 404. 

TLS Terminering

Nedenstående tabel viser hvorhenne i containeren certifikater skal mountes ind, samt hvilken funktion certifikaterne har.
Bemærk: ved ændring af certifikater skal servicen genstartes.

FilBeskrivelsePåkrævet
/etc/ssl/server.crt
TLS servercertifikat for EASJa
/etc/ssl/server.key
Privatnøgle for servercertifikat for EASJa
/etc/ssl/ehmi-ca.pem
Rodcertifikatbundle for udstedende certifikatmyndighed(er)Ja

Hostname (eas-host.conf)

Nedenstående tabel beskriver indholdet af eas-host.conf. Konfigurationsfilen indeholder server_name til brug for nginx. Det er påkrævet for, at nginx håndterer request korrekt.

PropertyBeskrivelsePåkrævetDefault værdiEksempel
server_name
Hostnavn for EAS servicen. Bemærk ingen protokol.Ja
eas.local localhost
test1.ekstern-test.nspop.dk

Ingress konfiguration (ingress-nginx.conf)

Denne fil indeholder Nginx konfigurationen for TLS-termineringen.

Der er som udgangspunkt ikke noget der skal konfigureres heri, den skal blot mountes ind under stien: 

/etc/nginx/nginx.conf

Hvilket også fremgår af docker-compose setuppet.

EAS-Egress-Nginx

Servicen lytter på port 8080

mTLS

Nedenstående tabel viser hvorhenne i containeren certifikater skal mountes ind, samt hvilken funktion certifikaterne har.

Bemærk: ved ændring af certifikater skal servicen genstartes.

FilBeskrivelsePåkrævet
/etc/ssl/ehmi-auth/client.crt
Klientcertifikat til kommunikation mod EHMI Keycloak - Bemærk SKAL indeholde hele certifikatkædenJa
/etc/ssl/ehmi-auth/client.key
Privatnøgle for klientcertifikat til kommunikation mod EHMI KeycloakJa
/etc/ssl/ehmi-eer/client.crt
Klientcertifikat til kommunikation mod EHMI EER service - Bemærk SKAL indeholde hele certifikatkædenJa
/etc/ssl/ehmi-eer/client.key
Privatnøgle for klientcertifikat til kommunikation mod EHMI EER serviceJa
/etc/ssl/certs/ca-certificates.crt
Rodcertifikatbundle for udstedende certifikatmyndighed(er). Hvis ikke angivet, anvendes standard OS CA Bundle.Nej

Endpoints (ehmi-endpoints.conf)

Nedenstående tabel beskriver de variabler der bliver sat for Nginx i filen ehmi-endpoints.conf.
De er nødvendige for at nginx kan forward request fra EAS mod den rigtige service.

PropertyBeskrivelsePåkrævetDefault værdiEksempel
$ehmi_auth_host
Hostnavn for EHMI Keycloak. Bemærk ingen protokol.Ja
keycloak-test.nspop.dk
keycloak-test.nspop.dk
$ehmi_eer_host
Hostnavn for EHMI EER Service.
Bemærk ingen protokol.
Ja
dk-ehmi-eer-service.t1.hosting.kitkube.dk
dk-ehmi-eer-service.t1.hosting.kitkube.dk

Auth Resolver (ehmi-auth-resolver.conf)

Nedenstående tabel beskriver indholdet af ehmi-auth-resolver.conf. Konfigurationsfilen indeholder resolver til brug for Nginx.

Årsagen hertil er, at automatisk tildelt DNS ikke nødvendigvis kan resolve services internt på NSP eller på SDN.

NB: dokumentation for resolver findes her: https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

PropertyBeskrivelsePåkrævetDefault værdiEksempel
resolver
DNS Server for at kunne resolve 
ehmi_auth_host
Ja
127.0.0.11 valid=30s;
127.0.0.11 valid=30s;

EER Resolver (ehmi-eer-resolver.conf)

Nedenstående tabel beskriver indholdet af ehmi-eer-resolver.conf. Konfigurationsfilen indeholder resolver til brug for Nginx.

Årsagen hertil er, at automatisk tildelt DNS ikke nødvendigvis kan resolve services internt på NSP eller på SDN.

NB: dokumentation for resolver findes her: https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

PropertyBeskrivelsePåkrævetDefault værdiEksempel
resolver
DNS Server for at kunne resolve 
ehmi_eer_host
Ja
127.0.0.11 valid=30s;
127.0.0.11 valid=30s;

Egress konfiguration (egress-nginx.conf)

Denne fil indeholder Nginx konfigurationen for at etablere udadgående mTLS forbindelser mod hhv.

Der er som udgangspunkt ikke noget der skal konfigureres heri, den skal blot mountes ind under stien: 

/etc/nginx/nginx.conf

Hvilket også fremgår af docker-compose setuppet.

Overvågning

EAS udstiller både status og alarm snitflader, som findes beskrevet under "Komponenter".

Fortolkning af overvågningssiderne

Overvågningssiderne returnerer enten:

  • HTTP 200, hvis servicen i øjeblikket kører fint.
  • HTTP 500, hvis der er opstået en fejl der kræver indgriben.

Status-snitflade

Statussnitfladen returnerer et JSON objekt som indeholder følgende værdier:

RodNiveau 1Niveau 2Beskrivelse
status


version


builtDate


integrationseer | sores | keycloak | sikrede | personinformationlastSuccessTidsstempel for sidste succesfulde http kald mod integrationen. Fremgår kun hvis der er udført minimum ét succesfuldt kald.


lastSuccessCodeStatuskode for sidste successfulde http kald mod integrationen. Fremgår kun hvis der er udført minimum ét succesfuldt kald.


lastErrorTidsstempel for sidste fejlede http kald mod integrationen. Fremgår kun hvis der er udført minimum ét fejlet kald.


lastErrorCodeStatuskode for sidste fejlede http kald mod integrationen. Fremgår kun hvis der er udført minimum ét fejlet kald.


alarmOm der er en aktiv alarm. Se nærmere under Alarm-snitfladen for hvornår noget er en alarm. 

Bemærk, at såfremt nogle integrationer markeres som alarm, returnerer snitfladen stadig HTTP 200. EAS er stateless, så transiente fejl mod integrationerne skal ikke påvirke muligheden for at kunne kalde servicen.

Alarm-snitflade

Alarmsnitfladen returnerer én tekstlinje pr. aktive alarm. som indikerer mod hvilken integration der er opstået en fejl.

Logikken for hvornår der er en alarm er:

  • Hvis seneste HTTP Kald mod en integration er en fejl, men ikke ældre end en konfigurérbar periode, vil integrationen blive markeret som fejl. 

Det er muligt at konfigurere perioden for hvor gammel en fejl må være, før den ikke længere fremgår som fejl, pr. integration.
Som standard er perioden for alle integrationer 5 minutter. 

Auditlogning

Hvert servicekald medfører en ny indgang i auditloggen, som kan være udfyldt med følgende information, afhængig af konteksten:

KomponentKontekstNøgleInformation
EASGetReceivingOrganizationByPatientId

patient-id

message-type

ID på borgeren

Beskedtype

EASGetReceivingOrganizationByGPId

general-practitioner-id

message-type

Ydernummer

Beskedtype

EASGetReceivingOrganizationBySORId

sor-id

message-type

SOR-kode

Beskedtype

EASGetListOfGpByPostalCodepostal-codePostnummer


Baggrundsjobs

EAS er tilstandsløs, og har ingen baggrundsjobs.

  • No labels